Browse Source

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 4 years ago
parent
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;