#ifdef FIRMWARE_VARIANT_THERMOSTAT void display_update() { if (display_showFullscreenMsg) { if(display_nextMsgToShow > 0) { display_showNextMessageAfterTimeout(); } else { display_showFullscreenMsg = false; display_overrideInterval = 0; display_updateImmediately = true; } } else { bool _showTemp = false; char _ch_temp[6]; unsigned long _now = millis(); if (confTherm.togglingTempHumAIDisplay) { char _ch_hum[4]; char _tempLabel[2]; if (((_now - outTempHumLastUpdate) < sensors_maxMeasurementAge_outside) && outTempHumLastUpdate != 0 && display_whichTempToDisplay == 1 && ((_now - display_lastDisplayToggle) > (confDisplay.displayInterval * 1000))) { // outside temp has been updated < 5 min ago, last displayed temp was INSIDE and display interval is overdue display_whichTempToDisplay = 2; // 1= I, 2= O display_lastDisplayToggle = _now; } else if (display_whichTempToDisplay != 1 && ((_now - display_lastDisplayToggle) > (confDisplay.displayInterval * 1000))) { display_whichTempToDisplay = 1; // 1= I, 2= O display_lastDisplayToggle = _now; } display_lastDisplayUpdate = _now; if (display_whichTempToDisplay == 2) { // 2 = outside temp/hum received via MQTT if (outTempHumLastUpdate != 0 && (_now - outTempHumLastUpdate) < sensors_maxMeasurementAge_outside) { _showTemp = true; dtostrf(outTemp, 5, 1, _ch_temp); sprintf(_ch_hum, "%2i", outHum); strcpy(_tempLabel, confTherm.oTempLabel); } } else { if (sensor_DHT_lastUpdate != 0 && (_now - sensor_DHT_lastUpdate) < sensors_maxMeasurementAge) { _showTemp = true; dtostrf(sensor_DHT_currTemp, 5, 1, _ch_temp); sprintf(_ch_hum, "%2i", sensor_DHT_currHum); strcpy(_tempLabel, confTherm.iTempLabel); } } // 12345667890123456 // =20.0° 35% >22.5° // A -10.2° 95% N // A 22.2° 95% N // A 5.2° 95% N // LCD line 1 // print temperature incl = and ° symbol + humidity to lcd, line 1, first 11 chars lcd.setCursor(0, 0); if (_showTemp) { // lcd.write(0x3D); // = Zeichen lcd.print(_tempLabel); lcd.print(_ch_temp); // lcd.write(0xDF); // degree symbol lcd.write((uint8_t)3); // °C symbol lcd.print(" "); if (sensor_DHT_currHum == 0) lcd.print("--"); else if (sensor_DHT_currHum < 10) { lcd.print(" "); lcd.print(_ch_hum); } else { lcd.print(_ch_hum); } lcd.print("%"); lcd.print(" "); } else { lcd.print(" "); } } else { // non toggling temperature I + A display without humidity in line 1 lcd.setCursor(0, 0); lcd.print(confTherm.iTempLabel); if (sensor_DHT_lastUpdate != 0 && (_now - sensor_DHT_lastUpdate) < sensors_maxMeasurementAge) { dtostrf(sensor_DHT_currTemp, 5, 1, _ch_temp); lcd.print(_ch_temp); } else { lcd.print(" --.-"); } lcd.write((uint8_t)3); // °C symbol lcd.print(" "); if (outTempHumLastUpdate != 0 && (_now - outTempHumLastUpdate) < sensors_maxMeasurementAge_outside) { lcd.print(" "); lcd.print(confTherm.oTempLabel); dtostrf(outTemp, 5, 1, _ch_temp); lcd.print(_ch_temp); lcd.write((uint8_t)3); // °C symbol } else { lcd.print(" "); } } thermostat_updateCurrSetTemp(); char _ch_currSetTemp[6]; dtostrf(thermostat_currSetTemp, 5, 1, _ch_currSetTemp); // LCD line 2 // display target temperature to line 2, 8 chars length incl space at the end lcd.setCursor(0, 1); if (system_doRestart) { lcd.print("Restarting... "); } else if (system_pendingRestart) { lcd.print("Restart? "); } else if (thermostat_heatingMode == 0) { // when the heating mode is OFF, do not display target temp - instead show "Heating off" info in line 2 // 1234567890123456 lcd.print(" "); lcd.setCursor(0, 1); lcd.print(confTherm.offMessage); // for(int i=strlen(offMessage); i < 14; i++) { // lcd.print(" "); //} display_addConnectionIcon(); } //else if (heatingPause > 0) //{ // when heating pause mode is active, do not display target temp - instead show "PAUSE" info in line 2 // // 1234567890123456 // lcd.print(" "); // lcd.setCursor(0, 1); // //lcd.print(confThermAdv.pauseMessage); // lcd.print("PAUSE 0:"); // // unsigned int _pauseMin = heatingPause / 60; // if(_pauseMin < 10) lcd.print("0"); // lcd.print(_pauseMin); // // display_addConnectionIcon(); //} // Status Message in Display Row 2 else if (display_showRow2OverlayMsg) { display_showRow2OverlayMsg = false; //displayInterval = confDisplay.displayInterval; display_updateImmediately = true; if (thermostat_pendingPresetToggle) { thermostat_preset = thermostat_pendingPreset; thermostat_updateCurrentPresetName(); thermostat_pendingPresetToggle = false; } } 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); lcd.print(" "); // display status info to line 2 from char 9 -> 8 chars length lcd.setCursor(9, 1); if (thermostat_preset == 0) { // day/normal mode lcd.write((uint8_t)1); // sun symbol if mode is day/normal } else if (thermostat_preset == 1) { // night/reduction mode lcd.write((uint8_t)0); // moon symbol if mode is night/reduction } else if (thermostat_preset == 2) { // night/reduction mode lcd.write((uint8_t)6); // reduction 2 (2 arrows down) symbol if mode is reduction 2 } if (thermostat_heatingPause > 0) { lcd.createChar(7, display_customCharPause); lcd.setCursor(12, 1); lcd.write((uint8_t)7); // pause symbol if heating is paused } else if (thermostat_heatingLockTime > 0) { lcd.createChar(7, display_customCharLock); lcd.setCursor(12, 1); lcd.write((uint8_t)7); // lock symbol if heating should run BUT lockout time is active } else if (thermostat_turnHeatingOn) { lcd.createChar(7, display_customCharFlame); lcd.setCursor(12, 1); lcd.write((uint8_t)7); // flame symbol if heating is active } else { lcd.setCursor(12, 1); lcd.print(" "); } display_addConnectionIcon(); } } } #endif // FIRMWARE_VARIANT_THERMOSTAT