mirror of
https://github.com/emsesp/EMS-ESP32.git
synced 2025-12-07 08:19:52 +03:00
fix bug in MQTT HC
This commit is contained in:
@@ -843,10 +843,10 @@ void publishValues(bool force) {
|
||||
for (uint8_t hc_v = 1; hc_v <= EMS_THERMOSTAT_MAXHC; hc_v++) {
|
||||
_EMS_Thermostat_HC * thermostat = &EMS_Thermostat.hc[hc_v - 1];
|
||||
|
||||
total_active_hc++; // increase count for #HCs we encounter
|
||||
|
||||
// only send if we have an active Heating Circuit with real data
|
||||
if ((thermostat->active) && (thermostat->curr_roomTemp != EMS_VALUE_SHORT_NOTSET) && (thermostat->setpoint_roomTemp != EMS_VALUE_SHORT_NOTSET)) {
|
||||
total_active_hc++; // increase count for #HCs we encounter
|
||||
|
||||
// build new json object
|
||||
doc.clear();
|
||||
JsonObject rootThermostat = doc.to<JsonObject>();
|
||||
|
||||
26
src/ems.cpp
26
src/ems.cpp
@@ -176,10 +176,10 @@ const _EMS_Type EMS_Types[] = {
|
||||
{EMS_MODEL_EASY, EMS_TYPE_EasyStatusMessage, "EasyStatusMessage", _process_EasyStatusMessage},
|
||||
|
||||
// Nefit 1010, RC300, RC310 (EMS Plus)
|
||||
{EMS_MODEL_ALL, EMS_TYPE_RCPLUSStatusMessage1, "RCPLUSStatusMessage", _process_RCPLUSStatusMessage},
|
||||
{EMS_MODEL_ALL, EMS_TYPE_RCPLUSStatusMessage2, "RCPLUSStatusMessage", _process_RCPLUSStatusMessage},
|
||||
{EMS_MODEL_ALL, EMS_TYPE_RCPLUSStatusMessage3, "RCPLUSStatusMessage", _process_RCPLUSStatusMessage},
|
||||
{EMS_MODEL_ALL, EMS_TYPE_RCPLUSStatusMessage4, "RCPLUSStatusMessage", _process_RCPLUSStatusMessage},
|
||||
{EMS_MODEL_ALL, EMS_TYPE_RCPLUSStatusMessage_HC1, "RCPLUSStatusMessage_HC1", _process_RCPLUSStatusMessage},
|
||||
{EMS_MODEL_ALL, EMS_TYPE_RCPLUSStatusMessage_HC2, "RCPLUSStatusMessage_HC2", _process_RCPLUSStatusMessage},
|
||||
{EMS_MODEL_ALL, EMS_TYPE_RCPLUSStatusMessage_HC3, "RCPLUSStatusMessage_HC3", _process_RCPLUSStatusMessage},
|
||||
{EMS_MODEL_ALL, EMS_TYPE_RCPLUSStatusMessage_HC4, "RCPLUSStatusMessage_HC4", _process_RCPLUSStatusMessage},
|
||||
{EMS_MODEL_ALL, EMS_TYPE_RCPLUSSet, "RCPLUSSetMessage", _process_RCPLUSSetMessage},
|
||||
{EMS_MODEL_ALL, EMS_TYPE_RCPLUSStatusMode, "RCPLUSStatusMode", _process_RCPLUSStatusMode},
|
||||
|
||||
@@ -1448,7 +1448,7 @@ void _process_EasyStatusMessage(_EMS_RxTelegram * EMS_RxTelegram) {
|
||||
*/
|
||||
void _process_RCPLUSStatusMessage(_EMS_RxTelegram * EMS_RxTelegram) {
|
||||
// figure out which heating circuit
|
||||
uint8_t hc = (EMS_RxTelegram->type - EMS_TYPE_RCPLUSStatusMessage1); // 0 to 3
|
||||
uint8_t hc = (EMS_RxTelegram->type - EMS_TYPE_RCPLUSStatusMessage_HC1); // 0 to 3
|
||||
if (hc > 4) {
|
||||
return; // invalid type
|
||||
}
|
||||
@@ -2225,10 +2225,10 @@ void ems_getThermostatValues() {
|
||||
}
|
||||
break;
|
||||
case EMS_MODEL_RC300:
|
||||
ems_doReadCommand(EMS_TYPE_RCPLUSStatusMessage1, device_id);
|
||||
ems_doReadCommand(EMS_TYPE_RCPLUSStatusMessage2, device_id);
|
||||
ems_doReadCommand(EMS_TYPE_RCPLUSStatusMessage3, device_id);
|
||||
ems_doReadCommand(EMS_TYPE_RCPLUSStatusMessage4, device_id);
|
||||
ems_doReadCommand(EMS_TYPE_RCPLUSStatusMessage_HC1, device_id);
|
||||
ems_doReadCommand(EMS_TYPE_RCPLUSStatusMessage_HC2, device_id);
|
||||
ems_doReadCommand(EMS_TYPE_RCPLUSStatusMessage_HC3, device_id);
|
||||
ems_doReadCommand(EMS_TYPE_RCPLUSStatusMessage_HC4, device_id);
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -2754,7 +2754,7 @@ void ems_setThermostatTemp(float temperature, uint8_t hc_num, uint8_t temptype)
|
||||
// EMS_TxTelegram.type_validate = EMS_TYPE_RCPLUSStatusMessage; // validate by reading from a different telegram
|
||||
EMS_TxTelegram.type_validate = EMS_ID_NONE; // validate by reading from a different telegram
|
||||
|
||||
EMS_TxTelegram.comparisonPostRead = EMS_TYPE_RCPLUSStatusMessage1 + hc_num - 1; // after write, do a full fetch of all values
|
||||
EMS_TxTelegram.comparisonPostRead = EMS_TYPE_RCPLUSStatusMessage_HC1 + hc_num - 1; // after write, do a full fetch of all values
|
||||
|
||||
} else if ((model_id == EMS_MODEL_RC35) || (model_id == EMS_MODEL_ES73)) {
|
||||
switch (temptype) {
|
||||
@@ -2880,9 +2880,9 @@ void ems_setThermostatMode(uint8_t mode, uint8_t hc_num) {
|
||||
EMS_TxTelegram.type = EMS_TYPE_RCPLUSSet; // for 3000 and 1010, e.g. 48 10 FF 00 01 B9 00 for manual
|
||||
EMS_TxTelegram.offset = EMS_OFFSET_RCPLUSSet_mode;
|
||||
|
||||
// EMS_TxTelegram.type_validate = EMS_TYPE_RCPLUSStatusMessage; // validate by reading from a different telegram
|
||||
EMS_TxTelegram.type_validate = EMS_ID_NONE; // don't validate after the write
|
||||
EMS_TxTelegram.comparisonPostRead = EMS_TYPE_RCPLUSStatusMessage1 + hc_num - 1; // after write, do a full fetch of all values
|
||||
// EMS_TxTelegram.type_validate = EMS_TYPE_RCPLUSStatusMessage_HC1; // validate by reading from a different telegram
|
||||
EMS_TxTelegram.type_validate = EMS_ID_NONE; // don't validate after the write
|
||||
EMS_TxTelegram.comparisonPostRead = EMS_TYPE_RCPLUSStatusMessage_HC1 + hc_num - 1; // after write, do a full fetch of all values
|
||||
}
|
||||
|
||||
EMS_TxTelegram.comparisonOffset = EMS_TxTelegram.offset;
|
||||
|
||||
@@ -117,10 +117,10 @@
|
||||
#define EMS_OFFSET_EasyStatusMessage_curr 8 // current temp
|
||||
|
||||
// RC1010, RC310 and RC300 specific (EMS Plus)
|
||||
#define EMS_TYPE_RCPLUSStatusMessage1 0x01A5 // is an automatic thermostat broadcast giving us temps for HC1
|
||||
#define EMS_TYPE_RCPLUSStatusMessage2 0x01A6 // is an automatic thermostat broadcast giving us temps for HC2
|
||||
#define EMS_TYPE_RCPLUSStatusMessage3 0x01A7 // is an automatic thermostat broadcast giving us temps for HC3
|
||||
#define EMS_TYPE_RCPLUSStatusMessage4 0x01A8 // is an automatic thermostat broadcast giving us temps for HC4
|
||||
#define EMS_TYPE_RCPLUSStatusMessage_HC1 0x01A5 // is an automatic thermostat broadcast giving us temps for HC1
|
||||
#define EMS_TYPE_RCPLUSStatusMessage_HC2 0x01A6 // is an automatic thermostat broadcast giving us temps for HC2
|
||||
#define EMS_TYPE_RCPLUSStatusMessage_HC3 0x01A7 // is an automatic thermostat broadcast giving us temps for HC3
|
||||
#define EMS_TYPE_RCPLUSStatusMessage_HC4 0x01A8 // is an automatic thermostat broadcast giving us temps for HC4
|
||||
#define EMS_TYPE_RCPLUSStatusMode 0x1AF // summer/winter mode
|
||||
#define EMS_OFFSET_RCPLUSStatusMessage_mode 10 // thermostat mode (auto, manual)
|
||||
#define EMS_OFFSET_RCPLUSStatusMessage_setpoint 3 // setpoint temp
|
||||
|
||||
Reference in New Issue
Block a user