123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329 |
- float setTemp_lastPublished;
- float currSetTemp_lastPublished;
- int heatingMode_lastPublished;
- int preset_lastPublished;
- bool turnHeatingOn_lastPublished;
- void publishCurrentThermostatValues(bool force = false)
- {
- // most values are only published if changed
- // call publishCurrentThermostatValues(true); to force publishing an update
- char tmp_topic_out[50];
- char ch_valuebuf[7];
-
- updateCurrentHeatingModeName();
- updateCurrentPresetName();
- char logBuf[101];
- sprintf_P(logBuf, "%s: %s=%u, %s=%u, %s=%2.1f, %s=%2.1f", PGMStr_thermostat, PGMStr_heatingMode, heatingMode, PGMStr_preset, preset, PGMStr_setTemp, setTemp, PGMStr_currentSetTemp, currSetTemp);
- sendLog(logBuf, LOGLEVEL_INFO);
- if (force || !confBas.saveToMqttRetained || setTemp != setTemp_lastPublished)
- {
- sprintf(tmp_topic_out, "%s/%s", confMqtt.mqtt_topic_out, "setTemp");
- sprintf(ch_valuebuf, "%2.1f", setTemp);
- mqttclient.publish(tmp_topic_out, ch_valuebuf, confMqtt.mqtt_outRetain);
- if (confBas.saveToMqttRetained && setTemp != setTemp_lastPublished)
- {
- // MQTT retained save setTemp
- mqttclient.publish(mqtt_topic_in_setTemp, ch_valuebuf, true);
- char buf1[30];
- sprintf_P(buf1, "%s %s %2.1f", PGMStr_mqttRetainedSave, PGMStr_setTemp, setTemp);
- sendLog(buf1);
- }
- setTemp_lastPublished = setTemp;
- yield();
- }
- if (force || currSetTemp != currSetTemp_lastPublished || !confMqtt.mqtt_outRetain)
- {
- sprintf(tmp_topic_out, "%s/%s", confMqtt.mqtt_topic_out, "currSetTemp");
- sprintf(ch_valuebuf, "%2.1f", currSetTemp);
- mqttclient.publish(tmp_topic_out, ch_valuebuf, confMqtt.mqtt_outRetain);
- currSetTemp_lastPublished = currSetTemp;
- yield();
- }
- if (force || !confBas.saveToMqttRetained || heatingMode != heatingMode_lastPublished)
- {
- sprintf(tmp_topic_out, "%s/%s", confMqtt.mqtt_topic_out, "mode");
- char ch_heatingMode[3];
- sprintf(ch_heatingMode, "%d", heatingMode);
- mqttclient.publish(tmp_topic_out, ch_heatingMode, confMqtt.mqtt_outRetain);
- sprintf(tmp_topic_out, "%s/%s", confMqtt.mqtt_topic_out, "modeName");
- mqttclient.publish(tmp_topic_out, currentModeName, confMqtt.mqtt_outRetain);
- if (confBas.saveToMqttRetained && heatingMode != heatingMode_lastPublished)
- {
- // MQTT retained save setMode
- mqttclient.publish(mqtt_topic_in_setMode, ch_heatingMode, true);
- char buf1[30];
- sprintf_P(buf1, "%s %s %u", PGMStr_mqttRetainedSave, PGMStr_heatingMode, heatingMode);
- sendLog(buf1);
-
- }
- heatingMode_lastPublished = heatingMode;
- yield();
- }
- if (force || !confBas.saveToMqttRetained || preset != preset_lastPublished)
- {
- sprintf(tmp_topic_out, "%s/%s", confMqtt.mqtt_topic_out, "preset");
- char ch_preset[3];
- sprintf(ch_preset, "%d", preset);
- mqttclient.publish(tmp_topic_out, ch_preset, confMqtt.mqtt_outRetain);
- sprintf(tmp_topic_out, "%s/%s", confMqtt.mqtt_topic_out, "presetName");
- mqttclient.publish(tmp_topic_out, currentPresetName, confMqtt.mqtt_outRetain);
- sprintf(tmp_topic_out, "%s/%s", confMqtt.mqtt_topic_out, "presetHA");
- if (preset == 0)
- mqttclient.publish(tmp_topic_out, "none", confMqtt.mqtt_outRetain);
- else
- mqttclient.publish(tmp_topic_out, currentPresetName, confMqtt.mqtt_outRetain);
- if (confBas.saveToMqttRetained && preset != preset_lastPublished)
- {
- // MQTT retained save setPreset
- mqttclient.publish(mqtt_topic_in_setPreset, ch_preset, true);
- char buf1[30];
- sprintf_P(buf1, "%s %s %u", PGMStr_mqttRetainedSave, PGMStr_preset, preset);
- sendLog(buf1);
- }
- preset_lastPublished = preset;
- yield();
- }
- yield();
- // turnHeatingOn
- char ch_turnHeatingOn[5];
- unsigned int currOnOffTime;
- if (turnHeatingOn)
- {
- strcpy(ch_turnHeatingOn, "on");
- currOnOffTime = heatingOnTime;
- }
- else
- {
- strcpy(ch_turnHeatingOn, "off");
- currOnOffTime = heatingOffTime;
- }
- if (force || turnHeatingOn != turnHeatingOn_lastPublished)
- {
- sprintf(tmp_topic_out, "%s/%s", confMqtt.mqtt_topic_out, "heating");
- mqttclient.publish(tmp_topic_out, ch_turnHeatingOn, confMqtt.mqtt_outRetain);
- turnHeatingOn_lastPublished = turnHeatingOn;
- }
- //sendLog(F("heating ON"));
- //char logBuf[40];
- sprintf_P(logBuf, "%s: %s=%s (%s)", PGMStr_thermostat, PGMStr_heating, ch_turnHeatingOn, getTimeStringFromSeconds(currOnOffTime));
- sendLog(logBuf, LOGLEVEL_INFO);
- // END turnHeatingOn
- yield();
- //char buf[101];
- //sprintf(buf, "%lu", heatingOnTime);
- sprintf(tmp_topic_out, "%s/%s", confMqtt.mqtt_topic_out, "heatingOnTime");
- mqttclient.publish(tmp_topic_out, getTimeStringFromSeconds(heatingOnTime));
- yield();
- //sprintf(buf, "%lu", heatingOffTime);
- sprintf(tmp_topic_out, "%s/%s", confMqtt.mqtt_topic_out, "heatingOffTime");
- mqttclient.publish(tmp_topic_out, getTimeStringFromSeconds(heatingOffTime));
- yield();
- }
- float currTemp_lastPublished;
- int currHum_lastPublished;
- void publishCurrentSensorValues(bool force = false)
- {
- if (lastTempUpdate != 0 && (millis() - lastTempUpdate) < 120000)
- { // ensure values are not too old
- char tmp_topic_out[50];
- char temp_chararr[6];
- char hum_chararr[4];
- dtostrf(currTemp, 1, 1, temp_chararr);
- sprintf(hum_chararr, "%2i", currHum);
- // if (serialdebug)
- // {
- // Serial.print(F("sensors: {"));
- // Serial.print("'temp':");
- // Serial.print(temp_chararr);
- // }
- if (force || currTemp != currTemp_lastPublished)
- {
- sprintf(tmp_topic_out, "%s/%s", confMqtt.mqtt_topic_out, "temp");
- mqttclient.publish(tmp_topic_out, temp_chararr, confMqtt.mqtt_outRetain_sensors);
- currTemp_lastPublished = currTemp;
- yield();
- }
- // if (serialdebug)
- // {
- // Serial.print(F(",'hum':"));
- // Serial.print(currHum);
- // }
- if (force || currHum != currHum_lastPublished)
- {
- sprintf(tmp_topic_out, "%s/%s", confMqtt.mqtt_topic_out, "hum");
- mqttclient.publish(tmp_topic_out, hum_chararr, confMqtt.mqtt_outRetain_sensors);
- yield();
- }
- dtostrf(currTemp_raw, 1, 1, temp_chararr);
- sprintf(hum_chararr, "%2i", currHum_raw);
- // if (serialdebug)
- // {
- // Serial.print(F(",'temp_raw':"));
- // Serial.print(temp_chararr);
- // }
- sprintf(tmp_topic_out, "%s/%s", confMqtt.mqtt_topic_out, "temp_raw");
- mqttclient.publish(tmp_topic_out, temp_chararr);
- yield();
- // if (serialdebug)
- // {
- // Serial.print(F(",'hum_raw':"));
- // Serial.print(currHum_raw);
- // }
- sprintf(tmp_topic_out, "%s/%s", confMqtt.mqtt_topic_out, "hum_raw");
- mqttclient.publish(tmp_topic_out, hum_chararr);
- yield();
- // if (serialdebug)
- // Serial.println("}");
- char logBuf[101];
- sprintf_P(logBuf, "SENS: temp=%2.1f, hum=%u, tempRaw=%2.1f, humRaw=%u", currTemp, currHum, currTemp_raw, currHum_raw);
- sendLog(logBuf, LOGLEVEL_INFO);
- }
- }
- void publishCurrentPIRValue()
- {
- char tmp_topic_out[50];
- sprintf(tmp_topic_out, "%s/%s", confMqtt.mqtt_topic_out, "PIR");
- // PIR internal topic
- if (PIRSensorOn)
- {
- mqttclient.publish(tmp_topic_out, confAdd.mqtt_payload_pir_on);
- sendLog("SENS: PIR=ON", LOGLEVEL_INFO);
- }
- else
- {
- mqttclient.publish(tmp_topic_out, confAdd.mqtt_payload_pir_off);
- sendLog("SENS: PIR=OFF", LOGLEVEL_INFO);
- }
- // PIR additional topic
- if (strlen(confAdd.mqtt_topic_pir) >= 4)
- {
- if (PIRSensorOn)
- {
- mqttclient.publish(confAdd.mqtt_topic_pir, confAdd.mqtt_payload_pir_on);
- }
- else
- {
- mqttclient.publish(confAdd.mqtt_topic_pir, confAdd.mqtt_payload_pir_off);
- }
- }
- }
- void publishDeleteRetainedSavedStates()
- {
- // after "save states to MQTT retained" is switched off
- // old retained messages are deleted by publishing an empty retained message to the topics
- // to be called from config when confBas.saveToMqttRetained was changed to false
- if (!confBas.saveToMqttRetained)
- {
- mqttclient.publish(mqtt_topic_in_setTemp, "", true);
- mqttclient.publish(mqtt_topic_in_setMode, "", true);
- mqttclient.publish(mqtt_topic_in_setPreset, "", true);
- sendLog("MQTT: deleted retained saved states", LOGLEVEL_INFO);
- publishCurrentThermostatValues(true); // force publish current values again
- }
- }
- void publishDeleteRetainedOutMessages()
- {
- // after "MQTT-out retained" is switched off
- // old retained messages are deleted by publishing an empty retained message to the topics
- // to be called from config when confMqtt.mqtt_outRetain was changed to false
- if (!confMqtt.mqtt_outRetain)
- {
- char tmp_topic_out[50];
- sprintf(tmp_topic_out, "%s/%s", confMqtt.mqtt_topic_out, "setTemp");
- mqttclient.publish(tmp_topic_out, "", true);
- sprintf(tmp_topic_out, "%s/%s", confMqtt.mqtt_topic_out, "currSetTemp");
- mqttclient.publish(tmp_topic_out, "", true);
- sprintf(tmp_topic_out, "%s/%s", confMqtt.mqtt_topic_out, "mode");
- mqttclient.publish(tmp_topic_out, "", true);
- sprintf(tmp_topic_out, "%s/%s", confMqtt.mqtt_topic_out, "modeName");
- mqttclient.publish(tmp_topic_out, "", true);
- sprintf(tmp_topic_out, "%s/%s", confMqtt.mqtt_topic_out, "preset");
- mqttclient.publish(tmp_topic_out, "", true);
- sprintf(tmp_topic_out, "%s/%s", confMqtt.mqtt_topic_out, "presetName");
- mqttclient.publish(tmp_topic_out, "", true);
- sprintf(tmp_topic_out, "%s/%s", confMqtt.mqtt_topic_out, "presetHA");
- mqttclient.publish(tmp_topic_out, "", true);
- sprintf(tmp_topic_out, "%s/%s", confMqtt.mqtt_topic_out, "heating");
- mqttclient.publish(tmp_topic_out, "", true);
- sprintf(tmp_topic_out, "%s/%s", confMqtt.mqtt_topic_out, "heatingOnTime");
- mqttclient.publish(tmp_topic_out, "", true);
- sprintf(tmp_topic_out, "%s/%s", confMqtt.mqtt_topic_out, "heatingOffTime");
- mqttclient.publish(tmp_topic_out, "", true);
- sendLog("MQTT: deleted retained messages (states)", LOGLEVEL_INFO);
- publishCurrentThermostatValues(true); // force publish current values again
- }
- }
- void publishDeleteRetainedOutMessages_sensors()
- {
- // after "MQTT-out retained" is switched off
- // old retained messages are deleted by publishing an empty retained message to the topics
- // to be called from config when confMqtt.mqtt_outRetain was changed to false
- if (!confMqtt.mqtt_outRetain)
- {
- char tmp_topic_out[50];
- sprintf(tmp_topic_out, "%s/%s", confMqtt.mqtt_topic_out, "temp");
- mqttclient.publish(tmp_topic_out, "", true);
- sprintf(tmp_topic_out, "%s/%s", confMqtt.mqtt_topic_out, "hum");
- mqttclient.publish(tmp_topic_out, "", true);
- sendLog("MQTT: deleted retained messages (sensors)", LOGLEVEL_INFO);
- publishCurrentSensorValues(true); // force publish current values again
- }
- }
|