Ver Fonte

v0.3.1
* fixed (issue #1): LCD - outside temp - wrong alignment on 1.1 digit values
* added: configurable labels for inside and outside temperature ("I" and "O" in EN or "A" in DE)
* fixed (issue #2): when (new) configuration values are not yet saved, initial values from source code are overwritten with blanks (only for most important values, not for MQTT topics, servers, users etc)

FloKra há 4 anos atrás
pai
commit
6beccad9e2

+ 5 - 0
CHANGELOG.md

@@ -1,4 +1,9 @@
 # WiFiThermostat - Changelog
+## 0.3.1
+* fixed (issue #1): LCD - outside temp - wrong alignment on 1.1 digit values
+* added: configurable labels for inside and outside temperature ("I" and "O" in EN or "A" in DE)
+* fixed (issue #2): when (new) configuration values are not yet saved, initial values from source code are overwritten with blanks (only for most important values, not for MQTT topics, servers, users etc)
+
 ## 0.3.0
 * split "mode" to "mode" and "preset", changes in nearly all source files
 * add In+Out Temperature display (without humidity) without toggling on LCD line 1

BIN
src/WiFiThermostat/WiFiThermostat.ino.d1_mini.bin → bin/WiFiThermostat.ino.d1_mini.20191016_v0.3.1.bin


BIN
src/Releases/WiFiThermostat_0.3.1.7z


+ 14 - 16
src/WiFiThermostat/Display.ino

@@ -175,7 +175,7 @@ void updateDisplay() {
     if (togglingTempHumAIDisplay) {
 
       if ( ((now - outTempHumLastUpdate) < 300000) && outTempHumLastUpdate != 0 && whichTempToDisplay == 1 && ((now - lastDisplayToggle) > (displayInterval * 1000)) ) {
-        // outside temp has been updated < 5 min ago, last displayed temp was "I" and display interval is overdue
+        // outside temp has been updated < 5 min ago, last displayed temp was INSIDE and display interval is overdue
         whichTempToDisplay = 2; // 1= I, 2= A
         lastDisplayToggle = now;
       }
@@ -191,7 +191,7 @@ void updateDisplay() {
           showTemp = true;
           dtostrf(outTemp, 5, 1, ch_temp);
           sprintf(ch_hum, "%2i", outHum);
-          strcpy(tempLabel, "A");
+          strcpy(tempLabel, otemplab);
         }
       }
       else {
@@ -199,7 +199,7 @@ void updateDisplay() {
           showTemp = true;
           dtostrf(currTemp, 5, 1, ch_temp);
           sprintf(ch_hum, "%2i", currHum);
-          strcpy(tempLabel, "I");
+          strcpy(tempLabel, itemplab);
         }
       }
 
@@ -242,27 +242,24 @@ void updateDisplay() {
 
     else { // non toggling temperature I + A display without humidity in line 1
       lcd.setCursor(0, 0);
-      lcd.print("I ");
+      lcd.print(itemplab);
 
       if ( lastTempUpdate != 0 && (now - lastTempUpdate) < 120000 ) {
-        dtostrf(currTemp, 2, 1, ch_temp);
+        dtostrf(currTemp, 5, 1, ch_temp);
         lcd.print(ch_temp);
       }
       else {
-        lcd.print("--.-");
+        lcd.print(" --.-");
       }
       lcd.write((uint8_t)3); // °C symbol
       lcd.print(" ");
 
       if ( outTempHumLastUpdate != 0 && (now - outTempHumLastUpdate) < 120000 ) {
-        lcd.print(" A");
-        if (outTemp <= -10.0) {
-          dtostrf(outTemp, 4, 1, ch_temp);
-        }
-        else {
-          lcd.print(" ");
-          dtostrf(outTemp, 3, 1, ch_temp);
-        }
+
+        lcd.print(" ");
+        lcd.print(otemplab);
+        
+        dtostrf(outTemp, 5, 1, ch_temp);
         lcd.print(ch_temp);
         lcd.write((uint8_t)3); // °C symbol
       }
@@ -274,7 +271,7 @@ void updateDisplay() {
     updateCurrSetTemp();
 
     char ch_currSetTemp[6];
-    dtostrf(currSetTemp, 2, 1, ch_currSetTemp);
+    dtostrf(currSetTemp, 5, 1, ch_currSetTemp);
 
     // LCD line 2
     // display target temperature to line 2, 8 chars length incl space at the end
@@ -308,10 +305,11 @@ void updateDisplay() {
     }
     else {
       lcd.write((uint8_t)2); // arrow right symbol
-      lcd.print(" ");
+      //lcd.print(" ");
       lcd.print(ch_currSetTemp);
       //lcd.write(0xDF); // degree symbol
       lcd.write((uint8_t)3); // °C symbol
+      
       lcd.print(" ");
 
       lcd.setCursor(8, 1);

+ 22 - 6
src/WiFiThermostat/WiFiThermostat.ino

@@ -7,7 +7,7 @@
 #define SPIFFS_USE_MAGIC
 
 #define FIRMWARE_NAME "WiFiThermostat"
-#define VERSION "0.3.0"
+#define VERSION "0.3.1"
 
 
 
@@ -56,6 +56,9 @@
 #define DEFAULT_DISPLAY_TIMEOUT 30       // display timeout after keypress (illumination)
 #define DEFAULT_PIR_ENABLES_DISPLAY false
 
+#define INSIDE_TEMP_LABEL "I"
+#define OUTSIDE_TEMP_LABEL "O"
+
 #define MODE_NAME_0 "off"
 #define MODE_NAME_1 "heat"
 
@@ -191,6 +194,8 @@ char psetname0[15];
 char psetname1[15];
 char psetname2[15];
 char offMessage[15];
+char itemplab[2];
+char otemplab[2];
 
 //set values
 float setTemp = DEFAULT_SETTEMP;
@@ -361,11 +366,13 @@ void setup() {
   strlcpy(outHum_topic_in, OUTHUM_TOPIC_IN, 51);
   strlcpy(mqtt_topic_pir, MQTT_TOPIC_PIR, 51);
 
-  strlcpy(modename0, MODE_NAME_0, 14);
-  strlcpy(modename1, MODE_NAME_1, 14);
-  strlcpy(psetname0, PRESET_NAME_0, 14);
-  strlcpy(psetname1, PRESET_NAME_1, 14);
-  strlcpy(psetname2, PRESET_NAME_2, 14);
+  strlcpy(modename0, MODE_NAME_0, 15);
+  strlcpy(modename1, MODE_NAME_1, 15);
+  strlcpy(psetname0, PRESET_NAME_0, 15);
+  strlcpy(psetname1, PRESET_NAME_1, 15);
+  strlcpy(psetname2, PRESET_NAME_2, 15);
+  strlcpy(itemplab, INSIDE_TEMP_LABEL, 2);
+  strlcpy(otemplab, OUTSIDE_TEMP_LABEL, 2);
 
   Serial.println("default config values loaded..");
 
@@ -427,6 +434,15 @@ void setup() {
     Serial.println("file 'preset' loaded");
   }
 
+  //if configuration returns empty strings - use the default from source
+  if (modename0[0] == '\0') strlcpy(modename0, MODE_NAME_0, 15);
+  if (modename1[0] == '\0') strlcpy(modename1, MODE_NAME_1, 15);
+  if (psetname0[0] == '\0') strlcpy(psetname0, PRESET_NAME_0, 15);
+  if (psetname1[0] == '\0') strlcpy(psetname1, PRESET_NAME_1, 15);
+  if (psetname2[0] == '\0') strlcpy(psetname2, PRESET_NAME_2, 15);
+  if (itemplab[0] == '\0') strlcpy(itemplab, INSIDE_TEMP_LABEL, 2);
+  if (otemplab[0] == '\0') strlcpy(otemplab, OUTSIDE_TEMP_LABEL, 2);
+  
   setTempSaved = setTemp;
   heatingModeSaved = heatingMode;
   presetSaved = preset;

+ 34 - 12
src/WiFiThermostat/config.ino

@@ -200,22 +200,28 @@ boolean setConfig(char* param, char* value) {
     }
   }
   else if ( strcmp(param, "offMsg") == 0 ) {
-    strlcpy(offMessage, value, 14);
+    strlcpy(offMessage, value, 15);
   }
   else if ( strcmp(param, "modename0") == 0 ) {
-    strlcpy(modename0, value, 14);
+    strlcpy(modename0, value, 15);
   }
   else if ( strcmp(param, "modename1") == 0 ) {
-    strlcpy(modename1, value, 14);
+    strlcpy(modename1, value, 15);
   }
   else if ( strcmp(param, "psetname0") == 0 ) {
-    strlcpy(psetname0, value, 14);
+    strlcpy(psetname0, value, 15);
   }
   else if ( strcmp(param, "psetname1") == 0 ) {
-    strlcpy(psetname1, value, 14);
+    strlcpy(psetname1, value, 15);
   }
   else if ( strcmp(param, "psetname2") == 0 ) {
-    strlcpy(psetname2, value, 14);
+    strlcpy(psetname2, value, 15);
+  }
+  else if ( strcmp(param, "itemplab") == 0 ) {
+    strlcpy(itemplab, value, 2);
+  }
+  else if ( strcmp(param, "otemplab") == 0 ) {
+    strlcpy(otemplab, value, 2);
   }
   else if ( strcmp(param, "PIRenDisp") == 0 ) {
     int valueInt = atoi(value);
@@ -465,6 +471,14 @@ void getConfig(char* param) {
     sprintf(buf, "psetname2: '%s'", psetname2);
     sendStatus(buf);
   }
+  else if ( strcmp(param, "itemplab") == 0 ) {
+    sprintf(buf, "itemplab: '%s'", itemplab);
+    sendStatus(buf);
+  }
+  else if ( strcmp(param, "otemplab") == 0 ) {
+    sprintf(buf, "otemplab: '%s'", otemplab);
+    sendStatus(buf);
+  }
   else if ( strcmp(param, "PIRenDisp") == 0 ) {
     char buf2[11];
     if (PIR_enablesDisplay) strcpy(buf2, "1");
@@ -578,6 +592,10 @@ void printConfig2() {
   Serial.println(psetname1);
   Serial.print("psetname2: ");
   Serial.println(psetname2);
+  Serial.print("itemplab: ");
+  Serial.println(itemplab);
+  Serial.print("otemplab: ");
+  Serial.println(otemplab);
   Serial.print("offMsg: ");
   Serial.println(offMessage);
   Serial.print("PIRenDisp: ");
@@ -734,12 +752,14 @@ boolean loadConfig2() {
       displayInterval = atoi(json["dispInt"] | "");
       displayInterval_saved = displayInterval;
       displayTimeout = atoi(json["dispTout"] | "");
-      strlcpy(modename0, json["modename0"] | "", 14);
-      strlcpy(modename1, json["modename1"] | "", 14);
-      strlcpy(psetname0, json["psetname0"] | "", 14);
-      strlcpy(psetname1, json["psetname1"] | "", 14);
-      strlcpy(psetname2, json["psetname2"] | "", 14);
-      strlcpy(offMessage, json["offMsg"] | "", 14);
+      strlcpy(modename0, json["modename0"] | "", 15);
+      strlcpy(modename1, json["modename1"] | "", 15);
+      strlcpy(psetname0, json["psetname0"] | "", 15);
+      strlcpy(psetname1, json["psetname1"] | "", 15);
+      strlcpy(psetname2, json["psetname2"] | "", 15);
+      strlcpy(itemplab, json["itemplab"] | "", 2);
+      strlcpy(otemplab, json["otemplab"] | "", 2);
+      strlcpy(offMessage, json["offMsg"] | "", 15);
 
       if (atoi(json["PIRenDisp"] | "") == 1) PIR_enablesDisplay = true;
       else PIR_enablesDisplay = false;
@@ -887,6 +907,8 @@ boolean saveConfig2() { // safeConfig2
   json["psetname0"] = psetname0;
   json["psetname1"] = psetname1;
   json["psetname2"] = psetname2;
+  json["itemplab"] = itemplab;
+  json["otemplab"] = otemplab;
   json["offMsg"] = offMessage;
 
   if (PIR_enablesDisplay) json["PIRenDisp"] = 1;

+ 8 - 0
src/WiFiThermostat/httpServer.ino

@@ -294,6 +294,10 @@ Display Timeout: <input type='number' name='dispTout' id='dispTout'/><br>
 used in MQTT status/commands and HTTP interface<br>
 max. 13 chars!<br>
 Off-Message: <input type='text' name='offMsg' id='offMsg'/><br>
+<h5>Temp Labels</h5>
+Inside: <input type='text' name='itemplab' id='itemplab'/><br>
+Outside: <input type='text' name='otemplab' id='otemplab'/><br>
+* 1 char
 <h5>Mode</h5>
 Off: <input type='text' name='modename0' id='modename0'/><br>
 On: <input type='text' name='modename1' id='modename1'/><br>
@@ -388,6 +392,8 @@ toggling I/A-Temp and Hum display*: <input type='checkbox' name='togTHdisp' id='
           g('psetname0').value = data.psetname0;
           g('psetname1').value = data.psetname1;          
           g('psetname2').value = data.psetname2;
+          g('itemplab').value = data.itemplab;
+          g('otemplab').value = data.otemplab;
           
           xhttp = null;
           reqFin = false;
@@ -730,6 +736,8 @@ void httpServerInit() {
       json["psetname0"] = psetname0;
       json["psetname1"] = psetname1;
       json["psetname2"] = psetname2;
+      json["itemplab"] = itemplab;
+      json["otemplab"] = otemplab;
       json["PIRenDisp"] = PIR_enablesDisplay;
       json["togTHdisp"] = togglingTempHumAIDisplay;