123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181 |
- #ifdef FIRMWARE_VARIANT_THERMOSTAT
- float thermostat_setTemp_lastPublished;
- float thermostat_currSetTemp_lastPublished;
- int thermostat_heatingMode_lastPublished;
- int thermostat_preset_lastPublished;
- bool thermostat_turnHeatingOn_lastPublished;
- void thermostat_publishCurrentValues(bool force) {
- //void thermostat_publishCurrentValues(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];
-
- thermostat_updateCurrentHeatingModeName();
- thermostat_updateCurrentPresetName();
- char logBuf[101];
- sprintf_P(logBuf, "%s: %s=%u, %s=%u, %s=%2.1f, %s=%2.1f", PGMStr_thermostat, PGMStr_heatingMode, thermostat_heatingMode, PGMStr_preset, thermostat_preset, PGMStr_setTemp, thermostat_setTemp, PGMStr_currentSetTemp, thermostat_currSetTemp);
- sendLog(logBuf, LOGLEVEL_INFO);
- if (force || !confTherm.saveToMqttRetained || thermostat_setTemp != thermostat_setTemp_lastPublished)
- {
- sprintf(_tmp_topic_out, "%s/%s", confMqtt.mqtt_topic_out, "setTemp");
- sprintf(_ch_valuebuf, "%2.1f", thermostat_setTemp);
- mqttclient.publish(_tmp_topic_out, _ch_valuebuf, confMqtt.mqtt_outRetain);
- if (confTherm.saveToMqttRetained && thermostat_setTemp != thermostat_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, thermostat_setTemp);
- sendLog(buf1);
- }
- thermostat_setTemp_lastPublished = thermostat_setTemp;
- yield();
- }
- if (force || thermostat_currSetTemp != thermostat_currSetTemp_lastPublished || !confMqtt.mqtt_outRetain)
- {
- sprintf(_tmp_topic_out, "%s/%s", confMqtt.mqtt_topic_out, "currSetTemp");
- sprintf(_ch_valuebuf, "%2.1f", thermostat_currSetTemp);
- mqttclient.publish(_tmp_topic_out, _ch_valuebuf, confMqtt.mqtt_outRetain);
- thermostat_currSetTemp_lastPublished = thermostat_currSetTemp;
- yield();
- }
- if (force || !confTherm.saveToMqttRetained || thermostat_heatingMode != thermostat_heatingMode_lastPublished)
- {
- sprintf(_tmp_topic_out, "%s/%s", confMqtt.mqtt_topic_out, "mode");
- char _ch_heatingMode[3];
- sprintf(_ch_heatingMode, "%d", thermostat_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, thermostat_currentModeName, confMqtt.mqtt_outRetain);
- sprintf(_tmp_topic_out, "%s/%s", confMqtt.mqtt_topic_out, "modeHA");
- if(thermostat_heatingMode == 0) mqttclient.publish(_tmp_topic_out, "off", confMqtt.mqtt_outRetain);
- else if(thermostat_heatingMode == 1) mqttclient.publish(_tmp_topic_out, "heat", confMqtt.mqtt_outRetain);
- if (confTherm.saveToMqttRetained && thermostat_heatingMode != thermostat_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, thermostat_heatingMode);
- sendLog(buf1);
- }
- thermostat_heatingMode_lastPublished = thermostat_heatingMode;
- yield();
- }
- if (force || !confTherm.saveToMqttRetained || thermostat_preset != thermostat_preset_lastPublished)
- {
- sprintf(_tmp_topic_out, "%s/%s", confMqtt.mqtt_topic_out, "preset");
- char _ch_preset[3];
- sprintf(_ch_preset, "%d", thermostat_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, thermostat_currentPresetName, confMqtt.mqtt_outRetain);
- sprintf(_tmp_topic_out, "%s/%s", confMqtt.mqtt_topic_out, "presetHA");
- if (thermostat_preset == 0)
- mqttclient.publish(_tmp_topic_out, "norm", confMqtt.mqtt_outRetain);
- else if (thermostat_preset == 1)
- mqttclient.publish(_tmp_topic_out, "red1", confMqtt.mqtt_outRetain);
- else if (thermostat_preset == 2)
- mqttclient.publish(_tmp_topic_out, "red2", confMqtt.mqtt_outRetain);
- if (confTherm.saveToMqttRetained && thermostat_preset != thermostat_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, thermostat_preset);
- sendLog(buf1);
- }
- thermostat_preset_lastPublished = thermostat_preset;
- yield();
- }
- yield();
- // turnHeatingOn
- char _ch_turnHeatingOn[5];
- unsigned int _currOnOffTime;
- if (thermostat_turnHeatingOn)
- {
- strcpy(_ch_turnHeatingOn, "on");
- _currOnOffTime = thermostat_heatingOnTime;
- }
- else
- {
- strcpy(_ch_turnHeatingOn, "off");
- _currOnOffTime = thermostat_heatingOffTime;
- }
- if (force || thermostat_turnHeatingOn != thermostat_turnHeatingOn_lastPublished)
- {
- sprintf(_tmp_topic_out, "%s/%s", confMqtt.mqtt_topic_out, "heating");
- mqttclient.publish(_tmp_topic_out, _ch_turnHeatingOn, confMqtt.mqtt_outRetain);
- thermostat_turnHeatingOn_lastPublished = thermostat_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[21];
- sprintf(_buf, "%lu", thermostat_heatingOnTime);
- sprintf(_tmp_topic_out, "%s/%s", confMqtt.mqtt_topic_out, "heatingOnTime");
- mqttclient.publish(_tmp_topic_out, _buf);
- sprintf(_tmp_topic_out, "%s/%s", confMqtt.mqtt_topic_out, "heatingOnTime_Hms");
- mqttclient.publish(_tmp_topic_out, getTimeStringFromSeconds(thermostat_heatingOnTime));
- yield();
- sprintf(_buf, "%lu", thermostat_heatingOffTime);
- sprintf(_tmp_topic_out, "%s/%s", confMqtt.mqtt_topic_out, "heatingOffTime");
- mqttclient.publish(_tmp_topic_out, _buf);
- sprintf(_tmp_topic_out, "%s/%s", confMqtt.mqtt_topic_out, "heatingOffTime_Hms");
- mqttclient.publish(_tmp_topic_out, getTimeStringFromSeconds(thermostat_heatingOffTime));
- thermostat_publish_heatingLockTime();
- thermostat_publish_heatingPauseTime();
- yield();
- }
- void thermostat_publish_heatingLockTime() {
- char _tmp_topic_out[50];
- char _buf[21];
- sprintf(_buf, "%i", thermostat_heatingLockTime);
- sprintf(_tmp_topic_out, "%s/%s", confMqtt.mqtt_topic_out, "heatingLockTime");
- mqttclient.publish(_tmp_topic_out, _buf);
- }
- void thermostat_publish_heatingPauseTime() {
- char _tmp_topic_out[50];
- char _buf[21];
- sprintf(_buf, "%i", thermostat_heatingPause);
- sprintf(_tmp_topic_out, "%s/%s", confMqtt.mqtt_topic_out, "heatingPause");
- mqttclient.publish(_tmp_topic_out, _buf);
- }
- #endif
|