mirror of
https://github.com/emsesp/EMS-ESP32.git
synced 2025-12-08 00:39:50 +03:00
@@ -590,6 +590,36 @@ void MyESP::_mqttPublishQueue() {
|
|||||||
_mqttRemoveLastPublish();
|
_mqttRemoveLastPublish();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// send online appended with the version information as JSON
|
||||||
|
void MyESP::_sendStartTopic() {
|
||||||
|
StaticJsonDocument<MYESP_JSON_MAXSIZE_SMALL> doc;
|
||||||
|
JsonObject payload = doc.to<JsonObject>();
|
||||||
|
payload["version"] = _app_version;
|
||||||
|
payload["IP"] = WiFi.localIP().toString();
|
||||||
|
// add time if we know it
|
||||||
|
if ((_ntp_enabled) && (NTP.tcr->abbrev != nullptr)) {
|
||||||
|
uint32_t real_time = getSystemTime();
|
||||||
|
// exclude millis() just in case
|
||||||
|
if (real_time > 10000L) {
|
||||||
|
char s[25];
|
||||||
|
// ISO 8601 describes an internationally accepted way to represent dates and times using numbers
|
||||||
|
snprintf_P(s,
|
||||||
|
25,
|
||||||
|
PSTR("%04u-%02u-%02uT%02u:%02u:%02u"),
|
||||||
|
to_year(real_time),
|
||||||
|
to_month(real_time),
|
||||||
|
to_day(real_time),
|
||||||
|
to_hour(real_time),
|
||||||
|
to_minute(real_time),
|
||||||
|
to_second(real_time)
|
||||||
|
|
||||||
|
);
|
||||||
|
payload["boottime"] = s;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
mqttPublish(MQTT_TOPIC_START, doc, true); // send with retain on
|
||||||
|
}
|
||||||
|
|
||||||
// MQTT onConnect - when a connect is established
|
// MQTT onConnect - when a connect is established
|
||||||
void MyESP::_mqttOnConnect() {
|
void MyESP::_mqttOnConnect() {
|
||||||
myDebug_P(PSTR("[MQTT] MQTT connected"));
|
myDebug_P(PSTR("[MQTT] MQTT connected"));
|
||||||
@@ -607,19 +637,10 @@ void MyESP::_mqttOnConnect() {
|
|||||||
// forcing retain to off since we only want to send this once
|
// forcing retain to off since we only want to send this once
|
||||||
mqttSubscribe(MQTT_TOPIC_START);
|
mqttSubscribe(MQTT_TOPIC_START);
|
||||||
|
|
||||||
// send online appended with the version information as JSON
|
// send start topic now unless NTP is enabled, otherwise wait for the time
|
||||||
StaticJsonDocument<MYESP_JSON_MAXSIZE_SMALL> doc;
|
if (!_ntp_enabled) {
|
||||||
JsonObject payload = doc.to<JsonObject>();
|
_sendStartTopic();
|
||||||
payload["version"] = _app_version;
|
|
||||||
payload["IP"] = WiFi.localIP().toString();
|
|
||||||
// add time if we know it
|
|
||||||
if ((_ntp_enabled) && (NTP.tcr->abbrev != nullptr)) {
|
|
||||||
uint32_t real_time = getSystemTime();
|
|
||||||
char s[30];
|
|
||||||
snprintf_P(s, 30, PSTR("%02d:%02d:%02d %s"), to_hour(real_time), to_minute(real_time), to_second(real_time), NTP.tcr->abbrev);
|
|
||||||
payload["boottime"] = s;
|
|
||||||
}
|
}
|
||||||
mqttPublish(MQTT_TOPIC_START, doc, false);
|
|
||||||
|
|
||||||
// send heartbeat if enabled
|
// send heartbeat if enabled
|
||||||
heartbeatCheck(true);
|
heartbeatCheck(true);
|
||||||
@@ -2868,9 +2889,11 @@ void MyESP::_bootupSequence() {
|
|||||||
|
|
||||||
// check if its booted
|
// check if its booted
|
||||||
if (boot_status == MYESP_BOOTSTATUS_BOOTED) {
|
if (boot_status == MYESP_BOOTSTATUS_BOOTED) {
|
||||||
if ((_ntp_enabled) && (now() > 10000) && !_have_ntp_time) {
|
if ((_ntp_enabled) && (now() > 10000L) && !_have_ntp_time) {
|
||||||
_have_ntp_time = true;
|
_have_ntp_time = true;
|
||||||
writeLogEvent(MYESP_SYSLOG_INFO, "System booted");
|
writeLogEvent(MYESP_SYSLOG_INFO, "System booted");
|
||||||
|
// send start topic
|
||||||
|
_sendStartTopic();
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
#ifndef MyESP_h
|
#ifndef MyESP_h
|
||||||
#define MyESP_h
|
#define MyESP_h
|
||||||
|
|
||||||
#define MYESP_VERSION "1.2.35"
|
#define MYESP_VERSION "1.2.36"
|
||||||
|
|
||||||
#include <ArduinoJson.h>
|
#include <ArduinoJson.h>
|
||||||
#include <ArduinoOTA.h>
|
#include <ArduinoOTA.h>
|
||||||
@@ -347,6 +347,7 @@ class MyESP {
|
|||||||
void _printMQTTQueue();
|
void _printMQTTQueue();
|
||||||
void _mqttPublishQueue();
|
void _mqttPublishQueue();
|
||||||
void _mqttRemoveLastPublish();
|
void _mqttRemoveLastPublish();
|
||||||
|
void _sendStartTopic();
|
||||||
AsyncMqttClient mqttClient; // the MQTT class
|
AsyncMqttClient mqttClient; // the MQTT class
|
||||||
uint32_t _mqtt_reconnect_delay;
|
uint32_t _mqtt_reconnect_delay;
|
||||||
mqtt_callback_f _mqtt_callback_f;
|
mqtt_callback_f _mqtt_callback_f;
|
||||||
|
|||||||
@@ -798,8 +798,8 @@ bool publishEMSValues_boiler() {
|
|||||||
// last_boilerActive stores heating in bit 1 and tap water in bit 2
|
// last_boilerActive stores heating in bit 1 and tap water in bit 2
|
||||||
static uint8_t last_boilerActive = 0xFF; // for remembering last setting of the tap water or heating on/off
|
static uint8_t last_boilerActive = 0xFF; // for remembering last setting of the tap water or heating on/off
|
||||||
if (last_boilerActive != ((EMS_Boiler.tapwaterActive << 1) + EMS_Boiler.heatingActive)) {
|
if (last_boilerActive != ((EMS_Boiler.tapwaterActive << 1) + EMS_Boiler.heatingActive)) {
|
||||||
myESP.mqttPublish(TOPIC_BOILER_TAPWATER_ACTIVE, EMS_Boiler.tapwaterActive == 1 ? "1" : "0");
|
myESP.mqttPublish(TOPIC_BOILER_TAPWATER_ACTIVE, EMS_Boiler.tapwaterActive ? "1" : "0");
|
||||||
myESP.mqttPublish(TOPIC_BOILER_HEATING_ACTIVE, EMS_Boiler.heatingActive == 1 ? "1" : "0");
|
myESP.mqttPublish(TOPIC_BOILER_HEATING_ACTIVE, EMS_Boiler.heatingActive ? "1" : "0");
|
||||||
last_boilerActive = ((EMS_Boiler.tapwaterActive << 1) + EMS_Boiler.heatingActive); // remember last state
|
last_boilerActive = ((EMS_Boiler.tapwaterActive << 1) + EMS_Boiler.heatingActive); // remember last state
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1908,9 +1908,9 @@ void MQTTCallback(unsigned int type, const char * topic, const char * message) {
|
|||||||
|
|
||||||
// wwOneTime
|
// wwOneTime
|
||||||
if (strcmp(topic, TOPIC_BOILER_CMD_WWONETIME) == 0) {
|
if (strcmp(topic, TOPIC_BOILER_CMD_WWONETIME) == 0) {
|
||||||
if (message[0] == '1' || strcmp(message, "on") == 0) {
|
if (message[0] == MYESP_MQTT_PAYLOAD_ON || strcmp(message, "on") == 0) {
|
||||||
ems_setWarmWaterOnetime(true);
|
ems_setWarmWaterOnetime(true);
|
||||||
} else if (message[0] == '0' || strcmp(message, "off") == 0) {
|
} else if (message[0] == MYESP_MQTT_PAYLOAD_OFF || strcmp(message, "off") == 0) {
|
||||||
ems_setWarmWaterOnetime(false);
|
ems_setWarmWaterOnetime(false);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
@@ -1918,9 +1918,9 @@ void MQTTCallback(unsigned int type, const char * topic, const char * message) {
|
|||||||
|
|
||||||
// wwCirculation
|
// wwCirculation
|
||||||
if (strcmp(topic, TOPIC_BOILER_CMD_WWCIRCULATION) == 0) {
|
if (strcmp(topic, TOPIC_BOILER_CMD_WWCIRCULATION) == 0) {
|
||||||
if (message[0] == '1' || strcmp(message, "on") == 0) {
|
if (message[0] == MYESP_MQTT_PAYLOAD_ON || strcmp(message, "on") == 0) {
|
||||||
ems_setWarmWaterCirculation(true);
|
ems_setWarmWaterCirculation(true);
|
||||||
} else if (message[0] == '0' || strcmp(message, "off") == 0) {
|
} else if (message[0] == MYESP_MQTT_PAYLOAD_OFF || strcmp(message, "off") == 0) {
|
||||||
ems_setWarmWaterCirculation(false);
|
ems_setWarmWaterCirculation(false);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -953,6 +953,7 @@ void _checkActive() {
|
|||||||
if (EMS_Boiler.selFlowTemp != EMS_VALUE_INT_NOTSET && EMS_Boiler.burnGas != EMS_VALUE_INT_NOTSET) {
|
if (EMS_Boiler.selFlowTemp != EMS_VALUE_INT_NOTSET && EMS_Boiler.burnGas != EMS_VALUE_INT_NOTSET) {
|
||||||
EMS_Boiler.heatingActive = ((EMS_Boiler.selFlowTemp >= EMS_BOILER_SELFLOWTEMP_HEATING) && (EMS_Boiler.burnGas == EMS_VALUE_BOOL_ON));
|
EMS_Boiler.heatingActive = ((EMS_Boiler.selFlowTemp >= EMS_BOILER_SELFLOWTEMP_HEATING) && (EMS_Boiler.burnGas == EMS_VALUE_BOOL_ON));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
#define APP_VERSION "1.9.5b54"
|
#define APP_VERSION "1.9.5b55"
|
||||||
|
|||||||
Reference in New Issue
Block a user