mirror of
https://github.com/emsesp/EMS-ESP32.git
synced 2026-01-31 19:19:08 +03:00
fix #521 crashes
This commit is contained in:
@@ -508,6 +508,26 @@ std::shared_ptr<Thermostat::HeatingCircuit> Thermostat::heating_circuit(std::sha
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// not found, search summer message types
|
||||||
|
if (hc_num == 0) {
|
||||||
|
for (uint8_t i = 0; i < summer_typeids.size(); i++) {
|
||||||
|
if (summer_typeids[i] == telegram->type_id) {
|
||||||
|
hc_num = i + 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// not found, search timer message types
|
||||||
|
if (hc_num == 0) {
|
||||||
|
for (uint8_t i = 0; i < timer_typeids.size(); i++) {
|
||||||
|
if (timer_typeids[i] == telegram->type_id) {
|
||||||
|
hc_num = i + 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// not found, search device-id types for remote thermostats
|
// not found, search device-id types for remote thermostats
|
||||||
if (telegram->src >= 0x18 && telegram->src <= 0x1B) {
|
if (telegram->src >= 0x18 && telegram->src <= 0x1B) {
|
||||||
hc_num = telegram->src - 0x17;
|
hc_num = telegram->src - 0x17;
|
||||||
@@ -1561,7 +1581,7 @@ bool Thermostat::set_mode_n(const uint8_t mode, const uint8_t hc_num) {
|
|||||||
// get hc based on number
|
// get hc based on number
|
||||||
std::shared_ptr<Thermostat::HeatingCircuit> hc = heating_circuit(hc_num);
|
std::shared_ptr<Thermostat::HeatingCircuit> hc = heating_circuit(hc_num);
|
||||||
if (hc == nullptr) {
|
if (hc == nullptr) {
|
||||||
LOG_WARNING(F("set mode: Heating Circuit %d not found or activated"), hc_num);
|
LOG_WARNING(F("Set mode: Heating Circuit %d not found or activated"), hc_num);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1652,8 +1672,13 @@ bool Thermostat::set_mode_n(const uint8_t mode, const uint8_t hc_num) {
|
|||||||
bool Thermostat::set_summermode(const char * value, const int8_t id) {
|
bool Thermostat::set_summermode(const char * value, const int8_t id) {
|
||||||
uint8_t hc_num = (id == -1) ? AUTO_HEATING_CIRCUIT : id;
|
uint8_t hc_num = (id == -1) ? AUTO_HEATING_CIRCUIT : id;
|
||||||
std::shared_ptr<Thermostat::HeatingCircuit> hc = heating_circuit(hc_num);
|
std::shared_ptr<Thermostat::HeatingCircuit> hc = heating_circuit(hc_num);
|
||||||
|
if (hc == nullptr) {
|
||||||
|
LOG_WARNING(F("Setting summer mode: Heating Circuit %d not found or activated"), hc_num);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
std::string v(10, '\0');
|
std::string v(10, '\0');
|
||||||
if (!Helpers::value2string(value, v)) {
|
if (!Helpers::value2string(value, v)) {
|
||||||
|
LOG_WARNING(F("Setting summer mode: Invalid value"));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1668,6 +1693,7 @@ bool Thermostat::set_summermode(const char * value, const int8_t id) {
|
|||||||
LOG_INFO(F("Setting summer mode to always off for heating circuit %d"), hc->hc_num());
|
LOG_INFO(F("Setting summer mode to always off for heating circuit %d"), hc->hc_num());
|
||||||
set = 2;
|
set = 2;
|
||||||
} else {
|
} else {
|
||||||
|
LOG_WARNING(F("Setting summer mode: Invalid value %s"), v.c_str());
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
write_command(summer_typeids[hc->hc_num() - 1], 7, set, summer_typeids[hc->hc_num() - 1]);
|
write_command(summer_typeids[hc->hc_num() - 1], 7, set, summer_typeids[hc->hc_num() - 1]);
|
||||||
|
|||||||
Reference in New Issue
Block a user