You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
This repository has been archived by the owner on Oct 4, 2021. It is now read-only.
added ES73 ID in ems_getThermostatValues() else if (model_id == EMS_MODEL_ES73) { ems_doReadCommand(EMS_TYPE_RC35StatusMessage, type); // to get the setpoint temp ems_doReadCommand(EMS_TYPE_RC35Set, type); // to get the mode }
added ES73 ID in ems_setThermostatTemp(float temperature) else if (model_id == EMS_MODEL_ES73) { EMS_TxTelegram.type = EMS_TYPE_RC35Set; EMS_TxTelegram.offset = EMS_OFFSET_RC35Set_temp; EMS_TxTelegram.comparisonPostRead = EMS_TYPE_RC35StatusMessage; // call a different type to refresh temperature value }
added ES73 ID in ems_setThermostatMode(uint8_t mode) else if (model_id == EMS_MODEL_ES73) { EMS_TxTelegram.type = EMS_TYPE_RC35Set; EMS_TxTelegram.offset = EMS_OFFSET_RC35Set_mode; }
I use the MQTT message for my home server software (fhem). Unfortunately I really don't know how to set the thermostat temperature in type 0x3D if the thermostat is set in "Auto" Mode. In 0x3D you can set the night/day/holiday temperature with offset 0x01/0x02/0x03. Therefore it could be a possibility to read out the "day mode" in 0x3E and send it via mqtt
get day mode:
#define EMS_OFFSET_RC35Get_mode_day 1 // position of thermostat day mode
add
uint8_t mode_day; // 0=night, 1=day
in struct _EMS_Thermostat
void _process_RC35StatusMessage(uint8_t * data, uint8_t length)
uint8_t v = data[EMS_OFFSET_RC35Get_mode_day];
EMS_Thermostat.mode_day = bitRead(v, 1); //get day mode flag
...
... write to setpoint temperature offset in void ems_setThermostatTemp(float temperature)
} else if (model_id == EMS_MODEL_RC35) {
EMS_TxTelegram.type = EMS_TYPE_RC35Set;
EMS_TxTelegram.offset = EMS_Thermostat.mode_day +1; //daymode value +1
EMS_TxTelegram.comparisonPostRead = EMS_TYPE_RC35StatusMessage; // call a different type to refresh temperature value
} else if (model_id == EMS_MODEL_ES73) {
EMS_TxTelegram.type = EMS_TYPE_RC35Set;
EMS_TxTelegram.offset = EMS_Thermostat.mode_day +1; //daymode value +1
EMS_TxTelegram.comparisonPostRead = EMS_TYPE_RC35StatusMessage; // call a different type to refresh temperature value
}
...
👍
The text was updated successfully, but these errors were encountered:
Good finds! thanks. I've updated the code. I will dig into the RC35 messaging. There's a lot already published on these telegrams so it should be quite easy. Only thing is I can't really test it. I may start updating my dev branch in GitHub with some experimental code.
So for the RC35 modes, you can read them using 0x3E (EMS_TYPE_RC35StatusMessage). The Holiday mode is bitRead(data[0], 5), Summer Mode is bitRead(data[1],0) and Day Mode is bitRead(data[1],1).
To set the temperature values you would use 0x3D (EMS_TYPE_RC35Set) with data[3] for Summer Temp, data[2] for Day Temp and data[1] for Night Temp.
This is all pretty straight forward to implement. Thing is I can't really test it. Would you mind closing this issue (since its a bug) and open a feature request for the mode support?
dear Paul,
Following items I've found in 1.2.1:
info:
minor:
EMS_MODEL_RC35, EMS_TYPE_RC30Set, "RC35Set", _process_RC35Set}, {EMS_MODEL_RC35, EMS_TYPE_RC30StatusMessage, "RC35StatusMessage", _process_RC35StatusMessage},}
modifications:
ems.cpp
{EMS_MODEL_ES73, EMS_THERMOSTAT_READ_YES, EMS_THERMOSTAT_WRITE_YES}
// ES73 {EMS_MODEL_ES73, EMS_TYPE_RCOutdoorTempMessage, "RCOutdoorTempMessage", _process_RCOutdoorTempMessage}, {EMS_MODEL_ES73, EMS_TYPE_RCTime, "RCTime", _process_RCTime}, {EMS_MODEL_ES73, EMS_TYPE_RC35Set, "RC35Set", _process_RC35Set}, {EMS_MODEL_ES73, EMS_TYPE_RC35StatusMessage, "RC35StatusMessage", _process_RC35StatusMessage}, {EMS_MODEL_ES73, EMS_TYPE_UBASetPoints, "UBASetPoints", _process_SetPoints},
else if (model_id == EMS_MODEL_ES73) { ems_doReadCommand(EMS_TYPE_RC35StatusMessage, type); // to get the setpoint temp ems_doReadCommand(EMS_TYPE_RC35Set, type); // to get the mode }
else if (model_id == EMS_MODEL_ES73) { EMS_TxTelegram.type = EMS_TYPE_RC35Set; EMS_TxTelegram.offset = EMS_OFFSET_RC35Set_temp; EMS_TxTelegram.comparisonPostRead = EMS_TYPE_RC35StatusMessage; // call a different type to refresh temperature value }
else if (model_id == EMS_MODEL_ES73) { EMS_TxTelegram.type = EMS_TYPE_RC35Set; EMS_TxTelegram.offset = EMS_OFFSET_RC35Set_mode; }
boiler.ino
rootBoiler["selFlowTemp"] = _float_to_char(s, EMS_Boiler.selFlowTemp); rootBoiler["outdoorTemp"] = _float_to_char(s, EMS_Boiler.extTemp);
question:
#define EMS_OFFSET_RC35Get_mode_day 1 // position of thermostat day mode
add
uint8_t mode_day; // 0=night, 1=day
in struct _EMS_Thermostat
void _process_RC35StatusMessage(uint8_t * data, uint8_t length)
uint8_t v = data[EMS_OFFSET_RC35Get_mode_day];
EMS_Thermostat.mode_day = bitRead(v, 1); //get day mode flag
...
... write to setpoint temperature offset in void ems_setThermostatTemp(float temperature)
} else if (model_id == EMS_MODEL_RC35) {
EMS_TxTelegram.type = EMS_TYPE_RC35Set;
EMS_TxTelegram.offset = EMS_Thermostat.mode_day +1; //daymode value +1
EMS_TxTelegram.comparisonPostRead = EMS_TYPE_RC35StatusMessage; // call a different type to refresh temperature value
} else if (model_id == EMS_MODEL_ES73) {
EMS_TxTelegram.type = EMS_TYPE_RC35Set;
EMS_TxTelegram.offset = EMS_Thermostat.mode_day +1; //daymode value +1
EMS_TxTelegram.comparisonPostRead = EMS_TYPE_RC35StatusMessage; // call a different type to refresh temperature value
}
...
👍
The text was updated successfully, but these errors were encountered: