Skip to content

Commit

Permalink
Support MQTT Temperature
Browse files Browse the repository at this point in the history
(cherry picked from commit 12daa6b9c012ca749ae73f96f334d0dc069483f9)
  • Loading branch information
mathieucarbou committed Jul 15, 2024
1 parent ed9ab0f commit 06253d6
Show file tree
Hide file tree
Showing 17 changed files with 140 additions and 86 deletions.
108 changes: 55 additions & 53 deletions include/YaSolRDefines.h
Original file line number Diff line number Diff line change
Expand Up @@ -102,59 +102,61 @@

// configuration keys

#define KEY_DISPLAY_ROTATION "disp_angle"
#define KEY_DISPLAY_SPEED "disp_speed"
#define KEY_DISPLAY_TYPE "disp_type"
#define KEY_GRID_FREQUENCY "grid_freq"
#define KEY_GRID_POWER_MQTT_TOPIC "grid_pow_mqtt"
#define KEY_GRID_VOLTAGE_MQTT_TOPIC "grid_volt_mqtt"
#define KEY_HA_DISCOVERY_TOPIC "ha_disco_topic"
#define KEY_MQTT_PASSWORD "mqtt_pwd"
#define KEY_MQTT_PORT "mqtt_port"
#define KEY_MQTT_PUBLISH_INTERVAL "mqtt_pub_itvl"
#define KEY_MQTT_SECURED "mqtt_secure"
#define KEY_MQTT_SERVER "mqtt_server"
#define KEY_MQTT_TOPIC "mqtt_topic"
#define KEY_MQTT_USERNAME "mqtt_user"
#define KEY_NTP_SERVER "ntp_server"
#define KEY_NTP_TIMEZONE "ntp_timezone"
#define KEY_OUTPUT1_DAYS "o1_days"
#define KEY_OUTPUT1_DIMMER_MAX_DUTY "o1_dim_max_d"
#define KEY_OUTPUT1_DIMMER_MAX_TEMP "o1_dim_max_t"
#define KEY_OUTPUT1_RELAY_TYPE "o1_relay_type"
#define KEY_OUTPUT1_RESERVED_EXCESS "o1_excess_ratio"
#define KEY_OUTPUT1_RESISTANCE "o1_resistance"
#define KEY_OUTPUT1_TEMPERATURE_START "o1_temp_start"
#define KEY_OUTPUT1_TEMPERATURE_STOP "o1_temp_stop"
#define KEY_OUTPUT1_TIME_START "o1_time_start"
#define KEY_OUTPUT1_TIME_STOP "o1_time_stop"
#define KEY_OUTPUT2_DAYS "o2_days"
#define KEY_OUTPUT2_DIMMER_MAX_DUTY "o2_dim_max_d"
#define KEY_OUTPUT2_DIMMER_MAX_TEMP "o2_dim_max_t"
#define KEY_OUTPUT2_RELAY_TYPE "o2_relay_type"
#define KEY_OUTPUT2_RESERVED_EXCESS "o2_excess_ratio"
#define KEY_OUTPUT2_RESISTANCE "o2_resistance"
#define KEY_OUTPUT2_TEMPERATURE_START "o2_temp_start"
#define KEY_OUTPUT2_TEMPERATURE_STOP "o2_temp_stop"
#define KEY_OUTPUT2_TIME_START "o2_time_start"
#define KEY_OUTPUT2_TIME_STOP "o2_time_stop"
#define KEY_OUTPUT2_TIME_STOP "o2_time_stop"
#define KEY_PID_P_MODE "pid_pmode"
#define KEY_PID_D_MODE "pid_dmode"
#define KEY_PID_IC_MODE "pid_icmode"
#define KEY_PID_SETPOINT "pid_setpoint"
#define KEY_PID_KD "pid_kd"
#define KEY_PID_KI "pid_ki"
#define KEY_PID_KP "pid_kp"
#define KEY_PID_OUT_MAX "pid_out_max"
#define KEY_PID_OUT_MIN "pid_out_min"
#define KEY_RELAY1_LOAD "relay1_load"
#define KEY_RELAY1_TYPE "relay1_type"
#define KEY_RELAY2_LOAD "relay2_load"
#define KEY_RELAY2_TYPE "relay2_type"
#define KEY_UDP_PORT "udp_port"
#define KEY_WIFI_PASSWORD "wifi_pwd"
#define KEY_WIFI_SSID "wifi_ssid"
#define KEY_DISPLAY_ROTATION "disp_angle"
#define KEY_DISPLAY_SPEED "disp_speed"
#define KEY_DISPLAY_TYPE "disp_type"
#define KEY_GRID_FREQUENCY "grid_freq"
#define KEY_GRID_POWER_MQTT_TOPIC "grid_pow_mqtt"
#define KEY_GRID_VOLTAGE_MQTT_TOPIC "grid_volt_mqtt"
#define KEY_HA_DISCOVERY_TOPIC "ha_disco_topic"
#define KEY_MQTT_PASSWORD "mqtt_pwd"
#define KEY_MQTT_PORT "mqtt_port"
#define KEY_MQTT_PUBLISH_INTERVAL "mqtt_pub_itvl"
#define KEY_MQTT_SECURED "mqtt_secure"
#define KEY_MQTT_SERVER "mqtt_server"
#define KEY_MQTT_TOPIC "mqtt_topic"
#define KEY_MQTT_USERNAME "mqtt_user"
#define KEY_NTP_SERVER "ntp_server"
#define KEY_NTP_TIMEZONE "ntp_timezone"
#define KEY_OUTPUT1_DAYS "o1_days"
#define KEY_OUTPUT1_DIMMER_MAX_DUTY "o1_dim_max_d"
#define KEY_OUTPUT1_DIMMER_MAX_TEMP "o1_dim_max_t"
#define KEY_OUTPUT1_RELAY_TYPE "o1_relay_type"
#define KEY_OUTPUT1_RESERVED_EXCESS "o1_excess_ratio"
#define KEY_OUTPUT1_RESISTANCE "o1_resistance"
#define KEY_OUTPUT1_TEMPERATURE_MQTT_TOPIC "o1_temp_mqtt"
#define KEY_OUTPUT1_TEMPERATURE_START "o1_temp_start"
#define KEY_OUTPUT1_TEMPERATURE_STOP "o1_temp_stop"
#define KEY_OUTPUT1_TIME_START "o1_time_start"
#define KEY_OUTPUT1_TIME_STOP "o1_time_stop"
#define KEY_OUTPUT2_DAYS "o2_days"
#define KEY_OUTPUT2_DIMMER_MAX_DUTY "o2_dim_max_d"
#define KEY_OUTPUT2_DIMMER_MAX_TEMP "o2_dim_max_t"
#define KEY_OUTPUT2_RELAY_TYPE "o2_relay_type"
#define KEY_OUTPUT2_RESERVED_EXCESS "o2_excess_ratio"
#define KEY_OUTPUT2_RESISTANCE "o2_resistance"
#define KEY_OUTPUT2_TEMPERATURE_MQTT_TOPIC "o2_temp_mqtt"
#define KEY_OUTPUT2_TEMPERATURE_START "o2_temp_start"
#define KEY_OUTPUT2_TEMPERATURE_STOP "o2_temp_stop"
#define KEY_OUTPUT2_TIME_START "o2_time_start"
#define KEY_OUTPUT2_TIME_STOP "o2_time_stop"
#define KEY_OUTPUT2_TIME_STOP "o2_time_stop"
#define KEY_PID_P_MODE "pid_pmode"
#define KEY_PID_D_MODE "pid_dmode"
#define KEY_PID_IC_MODE "pid_icmode"
#define KEY_PID_SETPOINT "pid_setpoint"
#define KEY_PID_KD "pid_kd"
#define KEY_PID_KI "pid_ki"
#define KEY_PID_KP "pid_kp"
#define KEY_PID_OUT_MAX "pid_out_max"
#define KEY_PID_OUT_MIN "pid_out_min"
#define KEY_RELAY1_LOAD "relay1_load"
#define KEY_RELAY1_TYPE "relay1_type"
#define KEY_RELAY2_LOAD "relay2_load"
#define KEY_RELAY2_TYPE "relay2_type"
#define KEY_UDP_PORT "udp_port"
#define KEY_WIFI_PASSWORD "wifi_pwd"
#define KEY_WIFI_SSID "wifi_ssid"

// pinout configuration keys

Expand Down
3 changes: 3 additions & 0 deletions include/YaSolRWebsite.h
Original file line number Diff line number Diff line change
Expand Up @@ -196,6 +196,8 @@ namespace YaSolR {
Card _haDiscoveryTopic = Card(&dashboard, TEXT_INPUT_CARD, YASOLR_LBL_105);
Card _mqttGridVoltage = Card(&dashboard, TEXT_INPUT_CARD, YASOLR_LBL_106);
Card _mqttGridPower = Card(&dashboard, TEXT_INPUT_CARD, YASOLR_LBL_107);
Card _mqttTempO1 = Card(&dashboard, TEXT_INPUT_CARD, YASOLR_LBL_181);
Card _mqttTempO2 = Card(&dashboard, TEXT_INPUT_CARD, YASOLR_LBL_182);

Tab _pinConfigTab = Tab(&dashboard, "\u21C6 " YASOLR_LBL_108);
Card _pinDisplayClock = Card(&dashboard, TEXT_INPUT_CARD, YASOLR_LBL_111);
Expand Down Expand Up @@ -297,6 +299,7 @@ namespace YaSolR {
void _pinout(Card& card, int32_t pin, std::map<int32_t, Card*>& pinout);
void _status(Card& card, const char* key, bool enabled, bool state = true, const char* err = "");
void _temperature(Card& card, Mycila::DS18& sensor);
void _temperature(Card& card, Mycila::RouterOutput& output);
};

extern WebsiteClass Website;
Expand Down
4 changes: 2 additions & 2 deletions include/i18n/en.h
Original file line number Diff line number Diff line change
Expand Up @@ -184,8 +184,8 @@
#define YASOLR_LBL_178 "Debug Information"
#define YASOLR_LBL_179 "ZCD Disabled"
#define YASOLR_LBL_180 "Not paired"
#define YASOLR_LBL_181
#define YASOLR_LBL_182
#define YASOLR_LBL_181 "Output 1 Temperature MQTT Topic"
#define YASOLR_LBL_182 "Output 2 Temperature MQTT Topic"
#define YASOLR_LBL_183
#define YASOLR_LBL_184
#define YASOLR_LBL_185
Expand Down
4 changes: 2 additions & 2 deletions include/i18n/fr.h
Original file line number Diff line number Diff line change
Expand Up @@ -184,8 +184,8 @@
#define YASOLR_LBL_178 "Informations de debug"
#define YASOLR_LBL_179 "ZCD Désactivé"
#define YASOLR_LBL_180 "Non associé"
#define YASOLR_LBL_181
#define YASOLR_LBL_182
#define YASOLR_LBL_181 "Topic MQTT pour la température sortie 1"
#define YASOLR_LBL_182 "Topic MQTT pour la température sortie 2"
#define YASOLR_LBL_183
#define YASOLR_LBL_184
#define YASOLR_LBL_185
Expand Down
2 changes: 1 addition & 1 deletion lib/MycilaRouter/MycilaGrid.h
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ namespace Mycila {
// expiration for remote data
void setExpiration(uint32_t seconds) { _expiration = seconds * 1000; }

void applyExpiration() {
void invalidate() {
const uint32_t now = millis();

if (_meterTime > 0 && now - _meterTime >= _expiration) {
Expand Down
6 changes: 3 additions & 3 deletions lib/MycilaRouter/MycilaRouterOutput.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -147,10 +147,10 @@ void Mycila::RouterOutput::applyAutoBypass() {

// temperature checks

const float temp = _temperatureSensor->getValidTemperature();
const float temp = getValidTemperature();

if (_temperatureSensor->isEnabled()) {
if (!_temperatureSensor->isValid()) {
if (isTemperatureEnabled()) {
if (!isTemperatureValid()) {
if (_autoBypassEnabled) {
LOGW(TAG, "Invalid temperature sensor value: stopping Auto Bypass '%s'...", _name);
_autoBypassEnabled = false;
Expand Down
22 changes: 15 additions & 7 deletions lib/MycilaRouter/MycilaRouterOutput.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
*/
#pragma once

#include <MycilaDS18.h>
#include <MycilaDimmer.h>
#include <MycilaPZEM004Tv3.h>
#include <MycilaRelay.h>
Expand Down Expand Up @@ -60,11 +59,9 @@ namespace Mycila {
RouterOutput(const char* name,
Dimmer& dimmer,
Relay& relay,
DS18& temperatureSensor,
PZEM& pzem) : _name(name),
_dimmer(&dimmer),
_relay(&relay),
_temperatureSensor(&temperatureSensor),
_pzem(&pzem) {}
// output

Expand All @@ -86,12 +83,12 @@ namespace Mycila {

#ifdef MYCILA_JSON_SUPPORT
void toJson(const JsonObject& root, float gridVoltage) const {
root["bypass"] = isBypassOn() ? "on" : "off";
root["enabled"] = isDimmerEnabled();
root["state"] = getStateName();
root["bypass"] = isBypassOn() ? "on" : "off";
root["temperature"] = getValidTemperature();

_dimmer->toJson(root["dimmer"].to<JsonObject>());
_temperatureSensor->toJson(root["ds18"].to<JsonObject>());

RouterOutputMetrics outputMeasurements;
getMeasurements(outputMeasurements);
Expand Down Expand Up @@ -122,7 +119,7 @@ namespace Mycila {

bool isDimmerEnabled() const { return _dimmer->isEnabled(); }
bool isAutoDimmerEnabled() const { return _dimmer->isEnabled() && config.autoDimmer && config.calibratedResistance > 0; }
bool isDimmerTemperatureLimitReached() const { return config.dimmerTempLimit > 0 && _temperatureSensor->isEnabled() && _temperatureSensor->getValidTemperature() >= config.dimmerTempLimit; }
bool isDimmerTemperatureLimitReached() const { return config.dimmerTempLimit > 0 && isTemperatureValid() && getValidTemperature() >= config.dimmerTempLimit; }
uint16_t getDimmerDuty() const { return _dimmer->getDuty(); }
float getDimmerDutyCycle() const { return _dimmer->getDutyCycle(); }
// Power Duty Cycle [0, MYCILA_DIMMER_MAX_DUTY]
Expand Down Expand Up @@ -198,18 +195,29 @@ namespace Mycila {
}
}

// temperature

float getValidTemperature() const { return isTemperatureValid() ? _temperature : 0; }
bool isTemperatureEnabled() const { return _temperatureTime > 0; }
bool isTemperatureValid() const { return isTemperatureEnabled() && millis() - _temperatureTime < 60000; }
void updateTemperature(float temperature) {
_temperature = temperature;
_temperatureTime = millis();
}

public:
Config config;

private:
const char* _name;
Dimmer* _dimmer;
Relay* _relay;
Mycila::DS18* _temperatureSensor;
PZEM* _pzem;
bool _autoBypassEnabled = false;
bool _bypassEnabled = false;
RouterOutputStateCallback _callback = nullptr;
float _temperature = 0;
uint32_t _temperatureTime = 0;

private:
void _setBypass(bool state, bool log = true);
Expand Down
22 changes: 19 additions & 3 deletions src/Website.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -200,6 +200,8 @@ void YaSolR::WebsiteClass::initLayout() {
_mqttServerCert.setTab(&_mqttConfigTab);
_mqttTopic.setTab(&_mqttConfigTab);
_mqttUser.setTab(&_mqttConfigTab);
_mqttTempO1.setTab(&_mqttConfigTab);
_mqttTempO2.setTab(&_mqttConfigTab);

_boolConfig(_haDiscovery, KEY_ENABLE_HA_DISCOVERY);
_boolConfig(_mqttSecured, KEY_MQTT_SECURED);
Expand All @@ -209,6 +211,8 @@ void YaSolR::WebsiteClass::initLayout() {
_textConfig(_haDiscoveryTopic, KEY_HA_DISCOVERY_TOPIC);
_textConfig(_mqttGridPower, KEY_GRID_POWER_MQTT_TOPIC);
_textConfig(_mqttGridVoltage, KEY_GRID_VOLTAGE_MQTT_TOPIC);
_textConfig(_mqttTempO1, KEY_OUTPUT1_TEMPERATURE_MQTT_TOPIC);
_textConfig(_mqttTempO2, KEY_OUTPUT2_TEMPERATURE_MQTT_TOPIC);
_textConfig(_mqttServer, KEY_MQTT_SERVER);
_textConfig(_mqttTopic, KEY_MQTT_TOPIC);
_textConfig(_mqttUser, KEY_MQTT_USERNAME);
Expand Down Expand Up @@ -502,6 +506,8 @@ void YaSolR::WebsiteClass::initCards() {
_haDiscoveryTopic.update(config.get(KEY_HA_DISCOVERY_TOPIC));
_mqttGridPower.update(config.get(KEY_GRID_POWER_MQTT_TOPIC));
_mqttGridVoltage.update(config.get(KEY_GRID_VOLTAGE_MQTT_TOPIC));
_mqttTempO1.update(config.get(KEY_OUTPUT1_TEMPERATURE_MQTT_TOPIC));
_mqttTempO2.update(config.get(KEY_OUTPUT2_TEMPERATURE_MQTT_TOPIC));
_mqttPort.update(config.get(KEY_MQTT_PORT));
_mqttPublishInterval.update(config.get(KEY_MQTT_PUBLISH_INTERVAL));
_mqttPwd.update(config.get(KEY_MQTT_PASSWORD).isEmpty() ? "" : HIDDEN_PWD);
Expand Down Expand Up @@ -696,7 +702,7 @@ void YaSolR::WebsiteClass::updateCards() {
_output1State.update(YASOLR_LBL_109, DASH_STATUS_DANGER);
break;
}
_temperature(_output1DS18State, ds18O1);
_temperature(_output1DS18State, output1);
_output1DimmerSlider.update(dimmerO1.getDuty());
_output1DimmerSliderRO.update(dimmerO1.getDuty());
_output1Bypass.update(output1.isBypassOn());
Expand Down Expand Up @@ -727,7 +733,7 @@ void YaSolR::WebsiteClass::updateCards() {
_output2State.update(YASOLR_LBL_109, DASH_STATUS_DANGER);
break;
}
_temperature(_output2DS18State, ds18O2);
_temperature(_output2DS18State, output2);
_output2DimmerSlider.update(dimmerO2.getDuty());
_output2DimmerSliderRO.update(dimmerO2.getDuty());
_output2Bypass.update(output2.isBypassOn());
Expand Down Expand Up @@ -955,13 +961,23 @@ void YaSolR::WebsiteClass::_outputDimmerSlider(Card& card, Mycila::RouterOutput&
void YaSolR::WebsiteClass::_temperature(Card& card, Mycila::DS18& sensor) {
if (!sensor.isEnabled()) {
card.update(YASOLR_LBL_115, "");
} else if (sensor.getLastTime() == 0) {
} else if (!sensor.isValid()) {
card.update(YASOLR_LBL_123, "");
} else {
card.update(sensor.getValidTemperature(), "°C");
}
}

void YaSolR::WebsiteClass::_temperature(Card& card, Mycila::RouterOutput& output) {
if (!output.isTemperatureEnabled()) {
card.update(YASOLR_LBL_115, "");
} else if (!output.isTemperatureValid()) {
card.update(YASOLR_LBL_123, "");
} else {
card.update(output.getValidTemperature(), "°C");
}
}

void YaSolR::WebsiteClass::_status(Card& card, const char* key, bool enabled, bool active, const char* err) {
const bool configEnabled = config.getBool(key);
if (!configEnabled)
Expand Down
6 changes: 4 additions & 2 deletions src/init/Boot.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -72,20 +72,22 @@ Mycila::Task bootTask("Boot", [](void* params) {
config.configure(KEY_NTP_TIMEZONE, "Europe/Paris");
config.configure(KEY_OUTPUT1_DAYS, YASOLR_WEEK_DAYS);
config.configure(KEY_OUTPUT1_DIMMER_MAX_DUTY, String(YASOLR_DIMMER_MAX_LEVEL));
config.configure(KEY_OUTPUT1_DIMMER_MAX_TEMP, String(YASOLR_OUTPUT_AUTO_STOP_TEMPERATURE));
config.configure(KEY_OUTPUT1_DIMMER_MAX_TEMP, "0");
config.configure(KEY_OUTPUT1_RELAY_TYPE, YASOLR_RELAY_TYPE_NO);
config.configure(KEY_OUTPUT1_RESERVED_EXCESS, "100");
config.configure(KEY_OUTPUT1_RESISTANCE, "0");
config.configure(KEY_OUTPUT1_TEMPERATURE_MQTT_TOPIC);
config.configure(KEY_OUTPUT1_TEMPERATURE_START, String(YASOLR_OUTPUT_AUTO_START_TEMPERATURE));
config.configure(KEY_OUTPUT1_TEMPERATURE_STOP, String(YASOLR_OUTPUT_AUTO_STOP_TEMPERATURE));
config.configure(KEY_OUTPUT1_TIME_START, "22:00");
config.configure(KEY_OUTPUT1_TIME_STOP, "06:00");
config.configure(KEY_OUTPUT2_DAYS, YASOLR_WEEK_DAYS);
config.configure(KEY_OUTPUT2_DIMMER_MAX_DUTY, String(YASOLR_DIMMER_MAX_LEVEL));
config.configure(KEY_OUTPUT2_DIMMER_MAX_TEMP, String(YASOLR_OUTPUT_AUTO_STOP_TEMPERATURE));
config.configure(KEY_OUTPUT2_DIMMER_MAX_TEMP, "0");
config.configure(KEY_OUTPUT2_RELAY_TYPE, YASOLR_RELAY_TYPE_NO);
config.configure(KEY_OUTPUT2_RESERVED_EXCESS, "100");
config.configure(KEY_OUTPUT2_RESISTANCE, "0");
config.configure(KEY_OUTPUT2_TEMPERATURE_MQTT_TOPIC);
config.configure(KEY_OUTPUT2_TEMPERATURE_START, String(YASOLR_OUTPUT_AUTO_START_TEMPERATURE));
config.configure(KEY_OUTPUT2_TEMPERATURE_STOP, String(YASOLR_OUTPUT_AUTO_STOP_TEMPERATURE));
config.configure(KEY_OUTPUT2_TIME_START, "22:00");
Expand Down
3 changes: 0 additions & 3 deletions src/init/Config.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -97,9 +97,6 @@ Mycila::Task initConfigTask("Init Config", [](void* params) {
lights.begin(config.get(KEY_PIN_LIGHTS_GREEN).toInt(), config.get(KEY_PIN_LIGHTS_YELLOW).toInt(), config.get(KEY_PIN_LIGHTS_RED).toInt());

// DS18
ds18Sys.setExpirationDelay(60);
ds18O1.setExpirationDelay(60);
ds18O2.setExpirationDelay(60);
if (config.getBool(KEY_ENABLE_DS18_SYSTEM))
ds18Sys.begin(config.get(KEY_PIN_ROUTER_DS18).toInt());
if (config.getBool(KEY_ENABLE_OUTPUT1_DS18))
Expand Down
2 changes: 2 additions & 0 deletions src/init/Events.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -307,10 +307,12 @@ Mycila::Task initEventsTask("Init Events", [](void* params) {
});
ds18O1.listen([](float temperature) {
logger.info(TAG, "Output 1 Temperature changed to %.02f °C", temperature);
output1.updateTemperature(temperature);
mqttPublishTask.requestEarlyRun();
});
ds18O2.listen([](float temperature) {
logger.info(TAG, "Output 2 Temperature changed to %.02f °C", temperature);
output2.updateTemperature(temperature);
mqttPublishTask.requestEarlyRun();
});

Expand Down
22 changes: 22 additions & 0 deletions src/init/MQTT.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -113,4 +113,26 @@ Mycila::Task initMqttSubscribersTask("Init MQTT Subscribers", [](void* params) {
grid.updateMQTTGridVoltage(v);
});
}

// output 1 temperature
String output1TemperatureMQTTTopic = config.get(KEY_OUTPUT1_TEMPERATURE_MQTT_TOPIC);
if (!output1TemperatureMQTTTopic.isEmpty()) {
logger.info(TAG, "Reading Output 1 Temperature from MQTT topic: %s", output1TemperatureMQTTTopic.c_str());
mqtt.subscribe(output1TemperatureMQTTTopic.c_str(), [](const String& topic, const String& payload) {
float t = payload.toFloat();
logger.info(TAG, "Output 1 Temperature from MQTT: %f", t);
output1.updateTemperature(t);
});
}

// output 2 temperature
String output2TemperatureMQTTTopic = config.get(KEY_OUTPUT2_TEMPERATURE_MQTT_TOPIC);
if (!output2TemperatureMQTTTopic.isEmpty()) {
logger.info(TAG, "Reading Output 2 Temperature from MQTT topic: %s", output2TemperatureMQTTTopic.c_str());
mqtt.subscribe(output2TemperatureMQTTTopic.c_str(), [](const String& topic, const String& payload) {
float t = payload.toFloat();
logger.info(TAG, "Output 2 Temperature from MQTT: %f", t);
output2.updateTemperature(t);
});
}
});
Loading

0 comments on commit 06253d6

Please sign in to comment.