mirror of
https://github.com/Laxilef/OTGateway.git
synced 2025-12-26 01:53:35 +05:00
Compare commits
10 Commits
4b1b7f5857
...
1.5.5
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
14b1eac732 | ||
|
|
d16f56d280 | ||
|
|
8b50ed48c1 | ||
|
|
f212d9d9a8 | ||
|
|
0e78e71493 | ||
|
|
655313562d | ||
|
|
c8e7724da8 | ||
|
|
f986129c72 | ||
|
|
7b31315242 | ||
|
|
6872cad8ce |
@@ -14,7 +14,7 @@ extra_configs = secrets.default.ini
|
|||||||
core_dir = .pio
|
core_dir = .pio
|
||||||
|
|
||||||
[env]
|
[env]
|
||||||
version = 1.5.4
|
version = 1.5.5
|
||||||
framework = arduino
|
framework = arduino
|
||||||
lib_deps =
|
lib_deps =
|
||||||
bblanchon/ArduinoJson@^7.3.0
|
bblanchon/ArduinoJson@^7.3.0
|
||||||
@@ -291,6 +291,11 @@ framework = arduino, espidf
|
|||||||
platform_packages = ${esp32_defaults.platform_packages}
|
platform_packages = ${esp32_defaults.platform_packages}
|
||||||
board = esp32-c6-devkitm-1
|
board = esp32-c6-devkitm-1
|
||||||
board_build.partitions = ${esp32_defaults.board_build.partitions}
|
board_build.partitions = ${esp32_defaults.board_build.partitions}
|
||||||
|
board_build.embed_txtfiles =
|
||||||
|
managed_components/espressif__esp_insights/server_certs/https_server.crt
|
||||||
|
managed_components/espressif__esp_rainmaker/server_certs/rmaker_mqtt_server.crt
|
||||||
|
managed_components/espressif__esp_rainmaker/server_certs/rmaker_claim_service_server.crt
|
||||||
|
managed_components/espressif__esp_rainmaker/server_certs/rmaker_ota_server.crt
|
||||||
lib_deps = ${esp32_defaults.lib_deps}
|
lib_deps = ${esp32_defaults.lib_deps}
|
||||||
lib_ignore =
|
lib_ignore =
|
||||||
${esp32_defaults.lib_ignore}
|
${esp32_defaults.lib_ignore}
|
||||||
|
|||||||
@@ -287,6 +287,15 @@ protected:
|
|||||||
Sensors::setConnectionStatusByType(Sensors::Type::OT_FAN_SPEED_SETPOINT, false);
|
Sensors::setConnectionStatusByType(Sensors::Type::OT_FAN_SPEED_SETPOINT, false);
|
||||||
Sensors::setConnectionStatusByType(Sensors::Type::OT_FAN_SPEED_CURRENT, false);
|
Sensors::setConnectionStatusByType(Sensors::Type::OT_FAN_SPEED_CURRENT, false);
|
||||||
|
|
||||||
|
Sensors::setConnectionStatusByType(Sensors::Type::OT_BURNER_STARTS, false);
|
||||||
|
Sensors::setConnectionStatusByType(Sensors::Type::OT_DHW_BURNER_STARTS, false);
|
||||||
|
Sensors::setConnectionStatusByType(Sensors::Type::OT_HEATING_PUMP_STARTS, false);
|
||||||
|
Sensors::setConnectionStatusByType(Sensors::Type::OT_DHW_PUMP_STARTS, false);
|
||||||
|
Sensors::setConnectionStatusByType(Sensors::Type::OT_BURNER_HOURS, false);
|
||||||
|
Sensors::setConnectionStatusByType(Sensors::Type::OT_DHW_BURNER_HOURS, false);
|
||||||
|
Sensors::setConnectionStatusByType(Sensors::Type::OT_HEATING_PUMP_HOURS, false);
|
||||||
|
Sensors::setConnectionStatusByType(Sensors::Type::OT_DHW_PUMP_HOURS, false);
|
||||||
|
|
||||||
this->initialized = false;
|
this->initialized = false;
|
||||||
this->disconnectedTime = millis();
|
this->disconnectedTime = millis();
|
||||||
vars.slave.connected = false;
|
vars.slave.connected = false;
|
||||||
@@ -342,6 +351,35 @@ protected:
|
|||||||
|
|
||||||
// These parameters will be updated every minute
|
// These parameters will be updated every minute
|
||||||
if (millis() - this->prevUpdateNonEssentialVars > 60000) {
|
if (millis() - this->prevUpdateNonEssentialVars > 60000) {
|
||||||
|
// Set date & time
|
||||||
|
if (settings.opentherm.options.setDateAndTime) {
|
||||||
|
struct tm ti;
|
||||||
|
|
||||||
|
if (getLocalTime(&ti)) {
|
||||||
|
if (this->setYear(&ti)) {
|
||||||
|
Log.sinfoln(FPSTR(L_OT), F("Year of date set successfully"));
|
||||||
|
|
||||||
|
} else {
|
||||||
|
Log.sinfoln(FPSTR(L_OT), F("Failed set year of date"));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this->setDayAndMonth(&ti)) {
|
||||||
|
Log.sinfoln(FPSTR(L_OT), F("Day and month of date set successfully"));
|
||||||
|
|
||||||
|
} else {
|
||||||
|
Log.sinfoln(FPSTR(L_OT), F("Failed set day and month of date"));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this->setTime(&ti)) {
|
||||||
|
Log.sinfoln(FPSTR(L_OT), F("Time set successfully"));
|
||||||
|
|
||||||
|
} else {
|
||||||
|
Log.sinfoln(FPSTR(L_OT), F("Failed set time"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get min modulation level & max power
|
||||||
if (this->updateMinModulationLevel()) {
|
if (this->updateMinModulationLevel()) {
|
||||||
Log.snoticeln(
|
Log.snoticeln(
|
||||||
FPSTR(L_OT), F("Received min modulation: %hhu%%, max power: %.2f kW"),
|
FPSTR(L_OT), F("Received min modulation: %hhu%%, max power: %.2f kW"),
|
||||||
@@ -507,6 +545,126 @@ protected:
|
|||||||
vars.slave.diag.code = 0;
|
vars.slave.diag.code = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Update burner starts
|
||||||
|
if (Sensors::getAmountByType(Sensors::Type::OT_BURNER_STARTS, true)) {
|
||||||
|
if (this->updateBurnerStarts()) {
|
||||||
|
Log.snoticeln(FPSTR(L_OT), F("Received burner starts: %hu"), vars.slave.stats.burnerStarts);
|
||||||
|
|
||||||
|
Sensors::setValueByType(
|
||||||
|
Sensors::Type::OT_BURNER_STARTS, vars.slave.stats.burnerStarts,
|
||||||
|
Sensors::ValueType::PRIMARY, true, true
|
||||||
|
);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
Log.swarningln(FPSTR(L_OT), F("Failed receive burner starts"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update DHW burner starts
|
||||||
|
if (Sensors::getAmountByType(Sensors::Type::OT_DHW_BURNER_STARTS, true)) {
|
||||||
|
if (this->updateDhwBurnerStarts()) {
|
||||||
|
Log.snoticeln(FPSTR(L_OT), F("Received DHW burner starts: %hu"), vars.slave.stats.dhwBurnerStarts);
|
||||||
|
|
||||||
|
Sensors::setValueByType(
|
||||||
|
Sensors::Type::OT_DHW_BURNER_STARTS, vars.slave.stats.dhwBurnerStarts,
|
||||||
|
Sensors::ValueType::PRIMARY, true, true
|
||||||
|
);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
Log.swarningln(FPSTR(L_OT), F("Failed receive DHW burner starts"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update heating pump starts
|
||||||
|
if (Sensors::getAmountByType(Sensors::Type::OT_HEATING_PUMP_STARTS, true)) {
|
||||||
|
if (this->updateHeatingPumpStarts()) {
|
||||||
|
Log.snoticeln(FPSTR(L_OT), F("Received heating pump starts: %hu"), vars.slave.stats.heatingPumpStarts);
|
||||||
|
|
||||||
|
Sensors::setValueByType(
|
||||||
|
Sensors::Type::OT_HEATING_PUMP_STARTS, vars.slave.stats.heatingPumpStarts,
|
||||||
|
Sensors::ValueType::PRIMARY, true, true
|
||||||
|
);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
Log.swarningln(FPSTR(L_OT), F("Failed receive heating pump starts"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update DHW pump starts
|
||||||
|
if (Sensors::getAmountByType(Sensors::Type::OT_DHW_PUMP_STARTS, true)) {
|
||||||
|
if (this->updateDhwPumpStarts()) {
|
||||||
|
Log.snoticeln(FPSTR(L_OT), F("Received DHW pump starts: %hu"), vars.slave.stats.dhwPumpStarts);
|
||||||
|
|
||||||
|
Sensors::setValueByType(
|
||||||
|
Sensors::Type::OT_DHW_PUMP_STARTS, vars.slave.stats.dhwPumpStarts,
|
||||||
|
Sensors::ValueType::PRIMARY, true, true
|
||||||
|
);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
Log.swarningln(FPSTR(L_OT), F("Failed receive DHW pump starts"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update burner hours
|
||||||
|
if (Sensors::getAmountByType(Sensors::Type::OT_BURNER_HOURS, true)) {
|
||||||
|
if (this->updateBurnerHours()) {
|
||||||
|
Log.snoticeln(FPSTR(L_OT), F("Received burner hours: %hu"), vars.slave.stats.burnerHours);
|
||||||
|
|
||||||
|
Sensors::setValueByType(
|
||||||
|
Sensors::Type::OT_BURNER_HOURS, vars.slave.stats.burnerHours,
|
||||||
|
Sensors::ValueType::PRIMARY, true, true
|
||||||
|
);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
Log.swarningln(FPSTR(L_OT), F("Failed receive burner hours"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update DHW burner hours
|
||||||
|
if (Sensors::getAmountByType(Sensors::Type::OT_DHW_BURNER_HOURS, true)) {
|
||||||
|
if (this->updateDhwBurnerHours()) {
|
||||||
|
Log.snoticeln(FPSTR(L_OT), F("Received DHW burner hours: %hu"), vars.slave.stats.dhwBurnerHours);
|
||||||
|
|
||||||
|
Sensors::setValueByType(
|
||||||
|
Sensors::Type::OT_DHW_BURNER_HOURS, vars.slave.stats.dhwBurnerHours,
|
||||||
|
Sensors::ValueType::PRIMARY, true, true
|
||||||
|
);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
Log.swarningln(FPSTR(L_OT), F("Failed receive DHW burner hours"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update heating pump hours
|
||||||
|
if (Sensors::getAmountByType(Sensors::Type::OT_HEATING_PUMP_HOURS, true)) {
|
||||||
|
if (this->updateHeatingPumpHours()) {
|
||||||
|
Log.snoticeln(FPSTR(L_OT), F("Received heating pump hours: %hu"), vars.slave.stats.heatingPumpHours);
|
||||||
|
|
||||||
|
Sensors::setValueByType(
|
||||||
|
Sensors::Type::OT_HEATING_PUMP_HOURS, vars.slave.stats.heatingPumpHours,
|
||||||
|
Sensors::ValueType::PRIMARY, true, true
|
||||||
|
);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
Log.swarningln(FPSTR(L_OT), F("Failed receive heating pump hours"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update DHW pump hours
|
||||||
|
if (Sensors::getAmountByType(Sensors::Type::OT_DHW_PUMP_HOURS, true)) {
|
||||||
|
if (this->updateDhwPumpHours()) {
|
||||||
|
Log.snoticeln(FPSTR(L_OT), F("Received DHW pump hours: %hu"), vars.slave.stats.dhwPumpHours);
|
||||||
|
|
||||||
|
Sensors::setValueByType(
|
||||||
|
Sensors::Type::OT_DHW_PUMP_HOURS, vars.slave.stats.dhwPumpHours,
|
||||||
|
Sensors::ValueType::PRIMARY, true, true
|
||||||
|
);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
Log.swarningln(FPSTR(L_OT), F("Failed receive DHW pump hours"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Auto fault reset
|
// Auto fault reset
|
||||||
if (settings.opentherm.options.autoFaultReset && vars.slave.fault.active && !vars.actions.resetFault) {
|
if (settings.opentherm.options.autoFaultReset && vars.slave.fault.active && !vars.actions.resetFault) {
|
||||||
vars.actions.resetFault = true;
|
vars.actions.resetFault = true;
|
||||||
@@ -529,19 +687,17 @@ protected:
|
|||||||
targetMaxModulation = settings.dhw.maxModulation;
|
targetMaxModulation = settings.dhw.maxModulation;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (vars.slave.modulation.max != targetMaxModulation) {
|
if (this->setMaxModulationLevel(targetMaxModulation)) {
|
||||||
if (this->setMaxModulationLevel(targetMaxModulation)) {
|
Log.snoticeln(
|
||||||
Log.snoticeln(
|
FPSTR(L_OT), F("Set max modulation: %hhu%% (response: %hhu%%)"),
|
||||||
FPSTR(L_OT), F("Set max modulation: %hhu%% (response: %hhu%%)"),
|
targetMaxModulation, vars.slave.modulation.max
|
||||||
targetMaxModulation, vars.slave.modulation.max
|
);
|
||||||
);
|
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
Log.swarningln(
|
Log.swarningln(
|
||||||
FPSTR(L_OT), F("Failed set max modulation: %hhu%% (response: %hhu%%)"),
|
FPSTR(L_OT), F("Failed set max modulation: %hhu%% (response: %hhu%%)"),
|
||||||
targetMaxModulation, vars.slave.modulation.max
|
targetMaxModulation, vars.slave.modulation.max
|
||||||
);
|
);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update modulation level
|
// Update modulation level
|
||||||
@@ -1265,6 +1421,64 @@ protected:
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool setYear(const struct tm *ptm) {
|
||||||
|
const unsigned int request = (ptm->tm_year + 1900) & 0xFFFF;
|
||||||
|
const unsigned long response = this->instance->sendRequest(CustomOpenTherm::buildRequest(
|
||||||
|
OpenThermRequestType::WRITE_DATA,
|
||||||
|
OpenThermMessageID::Year,
|
||||||
|
request
|
||||||
|
));
|
||||||
|
|
||||||
|
if (!CustomOpenTherm::isValidResponse(response)) {
|
||||||
|
return false;
|
||||||
|
|
||||||
|
} else if (!CustomOpenTherm::isValidResponseId(response, OpenThermMessageID::Year)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return CustomOpenTherm::getUInt(response) == request;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool setDayAndMonth(const struct tm *ptm) {
|
||||||
|
const uint8_t month = (ptm->tm_mon + 1) & 0xFF;
|
||||||
|
const unsigned int request = (month << 8) | (ptm->tm_mday & 0xFF);
|
||||||
|
const unsigned long response = this->instance->sendRequest(CustomOpenTherm::buildRequest(
|
||||||
|
OpenThermRequestType::WRITE_DATA,
|
||||||
|
OpenThermMessageID::Date,
|
||||||
|
request
|
||||||
|
));
|
||||||
|
|
||||||
|
if (!CustomOpenTherm::isValidResponse(response)) {
|
||||||
|
return false;
|
||||||
|
|
||||||
|
} else if (!CustomOpenTherm::isValidResponseId(response, OpenThermMessageID::Date)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return CustomOpenTherm::getUInt(response) == request;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool setTime(const struct tm *ptm) {
|
||||||
|
const uint8_t dayOfWeek = ptm->tm_wday == 0 ? 6 : ptm->tm_wday - 1;
|
||||||
|
const unsigned int request = ((dayOfWeek & 0x07) << 13)
|
||||||
|
| ((ptm->tm_hour & 0x1F) << 8)
|
||||||
|
| (ptm->tm_min & 0x3F);
|
||||||
|
|
||||||
|
const unsigned long response = this->instance->sendRequest(CustomOpenTherm::buildRequest(
|
||||||
|
OpenThermRequestType::WRITE_DATA,
|
||||||
|
OpenThermMessageID::DayTime,
|
||||||
|
request
|
||||||
|
));
|
||||||
|
|
||||||
|
if (!CustomOpenTherm::isValidResponse(response)) {
|
||||||
|
return false;
|
||||||
|
|
||||||
|
} else if (!CustomOpenTherm::isValidResponseId(response, OpenThermMessageID::DayTime)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return CustomOpenTherm::getUInt(response) == request;
|
||||||
|
}
|
||||||
|
|
||||||
bool setMaxModulationLevel(const uint8_t value) {
|
bool setMaxModulationLevel(const uint8_t value) {
|
||||||
const unsigned int request = CustomOpenTherm::toFloat(value);
|
const unsigned int request = CustomOpenTherm::toFloat(value);
|
||||||
@@ -1677,6 +1891,158 @@ protected:
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool updateBurnerStarts() {
|
||||||
|
const unsigned long response = this->instance->sendRequest(CustomOpenTherm::buildRequest(
|
||||||
|
OpenThermRequestType::READ_DATA,
|
||||||
|
OpenThermMessageID::SuccessfulBurnerStarts,
|
||||||
|
0
|
||||||
|
));
|
||||||
|
|
||||||
|
if (!CustomOpenTherm::isValidResponse(response)) {
|
||||||
|
return false;
|
||||||
|
|
||||||
|
} else if (!CustomOpenTherm::isValidResponseId(response, OpenThermMessageID::SuccessfulBurnerStarts)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
vars.slave.stats.burnerStarts = CustomOpenTherm::getUInt(response);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool updateDhwBurnerStarts() {
|
||||||
|
const unsigned long response = this->instance->sendRequest(CustomOpenTherm::buildRequest(
|
||||||
|
OpenThermRequestType::READ_DATA,
|
||||||
|
OpenThermMessageID::DHWBurnerStarts,
|
||||||
|
0
|
||||||
|
));
|
||||||
|
|
||||||
|
if (!CustomOpenTherm::isValidResponse(response)) {
|
||||||
|
return false;
|
||||||
|
|
||||||
|
} else if (!CustomOpenTherm::isValidResponseId(response, OpenThermMessageID::DHWBurnerStarts)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
vars.slave.stats.dhwBurnerStarts = CustomOpenTherm::getUInt(response);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool updateHeatingPumpStarts() {
|
||||||
|
const unsigned long response = this->instance->sendRequest(CustomOpenTherm::buildRequest(
|
||||||
|
OpenThermRequestType::READ_DATA,
|
||||||
|
OpenThermMessageID::CHPumpStarts,
|
||||||
|
0
|
||||||
|
));
|
||||||
|
|
||||||
|
if (!CustomOpenTherm::isValidResponse(response)) {
|
||||||
|
return false;
|
||||||
|
|
||||||
|
} else if (!CustomOpenTherm::isValidResponseId(response, OpenThermMessageID::CHPumpStarts)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
vars.slave.stats.heatingPumpStarts = CustomOpenTherm::getUInt(response);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool updateDhwPumpStarts() {
|
||||||
|
const unsigned long response = this->instance->sendRequest(CustomOpenTherm::buildRequest(
|
||||||
|
OpenThermRequestType::READ_DATA,
|
||||||
|
OpenThermMessageID::DHWPumpValveStarts,
|
||||||
|
0
|
||||||
|
));
|
||||||
|
|
||||||
|
if (!CustomOpenTherm::isValidResponse(response)) {
|
||||||
|
return false;
|
||||||
|
|
||||||
|
} else if (!CustomOpenTherm::isValidResponseId(response, OpenThermMessageID::DHWPumpValveStarts)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
vars.slave.stats.dhwPumpStarts = CustomOpenTherm::getUInt(response);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool updateBurnerHours() {
|
||||||
|
const unsigned long response = this->instance->sendRequest(CustomOpenTherm::buildRequest(
|
||||||
|
OpenThermRequestType::READ_DATA,
|
||||||
|
OpenThermMessageID::BurnerOperationHours,
|
||||||
|
0
|
||||||
|
));
|
||||||
|
|
||||||
|
if (!CustomOpenTherm::isValidResponse(response)) {
|
||||||
|
return false;
|
||||||
|
|
||||||
|
} else if (!CustomOpenTherm::isValidResponseId(response, OpenThermMessageID::BurnerOperationHours)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
vars.slave.stats.burnerHours = CustomOpenTherm::getUInt(response);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool updateDhwBurnerHours() {
|
||||||
|
const unsigned long response = this->instance->sendRequest(CustomOpenTherm::buildRequest(
|
||||||
|
OpenThermRequestType::READ_DATA,
|
||||||
|
OpenThermMessageID::DHWBurnerOperationHours,
|
||||||
|
0
|
||||||
|
));
|
||||||
|
|
||||||
|
if (!CustomOpenTherm::isValidResponse(response)) {
|
||||||
|
return false;
|
||||||
|
|
||||||
|
} else if (!CustomOpenTherm::isValidResponseId(response, OpenThermMessageID::DHWBurnerOperationHours)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
vars.slave.stats.dhwBurnerHours = CustomOpenTherm::getUInt(response);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool updateHeatingPumpHours() {
|
||||||
|
const unsigned long response = this->instance->sendRequest(CustomOpenTherm::buildRequest(
|
||||||
|
OpenThermRequestType::READ_DATA,
|
||||||
|
OpenThermMessageID::CHPumpOperationHours,
|
||||||
|
0
|
||||||
|
));
|
||||||
|
|
||||||
|
if (!CustomOpenTherm::isValidResponse(response)) {
|
||||||
|
return false;
|
||||||
|
|
||||||
|
} else if (!CustomOpenTherm::isValidResponseId(response, OpenThermMessageID::CHPumpOperationHours)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
vars.slave.stats.heatingPumpHours = CustomOpenTherm::getUInt(response);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool updateDhwPumpHours() {
|
||||||
|
const unsigned long response = this->instance->sendRequest(CustomOpenTherm::buildRequest(
|
||||||
|
OpenThermRequestType::READ_DATA,
|
||||||
|
OpenThermMessageID::DHWPumpValveOperationHours,
|
||||||
|
0
|
||||||
|
));
|
||||||
|
|
||||||
|
if (!CustomOpenTherm::isValidResponse(response)) {
|
||||||
|
return false;
|
||||||
|
|
||||||
|
} else if (!CustomOpenTherm::isValidResponseId(response, OpenThermMessageID::DHWPumpValveOperationHours)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
vars.slave.stats.dhwPumpHours = CustomOpenTherm::getUInt(response);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
bool updateModulationLevel() {
|
bool updateModulationLevel() {
|
||||||
const unsigned long response = this->instance->sendRequest(CustomOpenTherm::buildRequest(
|
const unsigned long response = this->instance->sendRequest(CustomOpenTherm::buildRequest(
|
||||||
OpenThermRequestType::READ_DATA,
|
OpenThermRequestType::READ_DATA,
|
||||||
|
|||||||
@@ -25,6 +25,15 @@ public:
|
|||||||
OT_SOLAR_COLLECTOR_TEMP = 16,
|
OT_SOLAR_COLLECTOR_TEMP = 16,
|
||||||
OT_FAN_SPEED_SETPOINT = 17,
|
OT_FAN_SPEED_SETPOINT = 17,
|
||||||
OT_FAN_SPEED_CURRENT = 18,
|
OT_FAN_SPEED_CURRENT = 18,
|
||||||
|
|
||||||
|
OT_BURNER_STARTS = 19,
|
||||||
|
OT_DHW_BURNER_STARTS = 20,
|
||||||
|
OT_HEATING_PUMP_STARTS = 21,
|
||||||
|
OT_DHW_PUMP_STARTS = 22,
|
||||||
|
OT_BURNER_HOURS = 23,
|
||||||
|
OT_DHW_BURNER_HOURS = 24,
|
||||||
|
OT_HEATING_PUMP_HOURS = 25,
|
||||||
|
OT_DHW_PUMP_HOURS = 26,
|
||||||
|
|
||||||
NTC_10K_TEMP = 50,
|
NTC_10K_TEMP = 50,
|
||||||
DALLAS_TEMP = 51,
|
DALLAS_TEMP = 51,
|
||||||
@@ -46,6 +55,7 @@ public:
|
|||||||
EXHAUST_TEMP = 7,
|
EXHAUST_TEMP = 7,
|
||||||
MODULATION_LEVEL = 8,
|
MODULATION_LEVEL = 8,
|
||||||
|
|
||||||
|
NUMBER = 247,
|
||||||
POWER_FACTOR = 248,
|
POWER_FACTOR = 248,
|
||||||
POWER = 249,
|
POWER = 249,
|
||||||
FAN_SPEED = 250,
|
FAN_SPEED = 250,
|
||||||
|
|||||||
@@ -76,6 +76,7 @@ struct Settings {
|
|||||||
bool ignoreDiagState = false;
|
bool ignoreDiagState = false;
|
||||||
bool autoFaultReset = false;
|
bool autoFaultReset = false;
|
||||||
bool autoDiagReset = false;
|
bool autoDiagReset = false;
|
||||||
|
bool setDateAndTime = false;
|
||||||
bool nativeHeatingControl = false;
|
bool nativeHeatingControl = false;
|
||||||
bool immergasFix = false;
|
bool immergasFix = false;
|
||||||
} options;
|
} options;
|
||||||
@@ -353,6 +354,17 @@ struct Variables {
|
|||||||
uint16_t supply = 0;
|
uint16_t supply = 0;
|
||||||
} fanSpeed;
|
} fanSpeed;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
uint16_t burnerStarts = 0;
|
||||||
|
uint16_t dhwBurnerStarts = 0;
|
||||||
|
uint16_t heatingPumpStarts = 0;
|
||||||
|
uint16_t dhwPumpStarts = 0;
|
||||||
|
uint16_t burnerHours = 0;
|
||||||
|
uint16_t dhwBurnerHours = 0;
|
||||||
|
uint16_t heatingPumpHours = 0;
|
||||||
|
uint16_t dhwPumpHours = 0;
|
||||||
|
} stats;
|
||||||
|
|
||||||
struct {
|
struct {
|
||||||
bool active = false;
|
bool active = false;
|
||||||
bool enabled = false;
|
bool enabled = false;
|
||||||
|
|||||||
@@ -175,6 +175,7 @@ const char S_SENSORS[] PROGMEM = "sensors";
|
|||||||
const char S_SERIAL[] PROGMEM = "serial";
|
const char S_SERIAL[] PROGMEM = "serial";
|
||||||
const char S_SERVER[] PROGMEM = "server";
|
const char S_SERVER[] PROGMEM = "server";
|
||||||
const char S_SETTINGS[] PROGMEM = "settings";
|
const char S_SETTINGS[] PROGMEM = "settings";
|
||||||
|
const char S_SET_DATE_AND_TIME[] PROGMEM = "setDateAndTime";
|
||||||
const char S_SIGNAL_QUALITY[] PROGMEM = "signalQuality";
|
const char S_SIGNAL_QUALITY[] PROGMEM = "signalQuality";
|
||||||
const char S_SIZE[] PROGMEM = "size";
|
const char S_SIZE[] PROGMEM = "size";
|
||||||
const char S_SLAVE[] PROGMEM = "slave";
|
const char S_SLAVE[] PROGMEM = "slave";
|
||||||
|
|||||||
20
src/utils.h
20
src/utils.h
@@ -466,6 +466,7 @@ void settingsToJson(const Settings& src, JsonVariant dst, bool safe = false) {
|
|||||||
otOptions[FPSTR(S_IGNORE_DIAG_STATE)] = src.opentherm.options.ignoreDiagState;
|
otOptions[FPSTR(S_IGNORE_DIAG_STATE)] = src.opentherm.options.ignoreDiagState;
|
||||||
otOptions[FPSTR(S_AUTO_FAULT_RESET)] = src.opentherm.options.autoFaultReset;
|
otOptions[FPSTR(S_AUTO_FAULT_RESET)] = src.opentherm.options.autoFaultReset;
|
||||||
otOptions[FPSTR(S_AUTO_DIAG_RESET)] = src.opentherm.options.autoDiagReset;
|
otOptions[FPSTR(S_AUTO_DIAG_RESET)] = src.opentherm.options.autoDiagReset;
|
||||||
|
otOptions[FPSTR(S_SET_DATE_AND_TIME)] = src.opentherm.options.setDateAndTime;
|
||||||
otOptions[FPSTR(S_NATIVE_HEATING_CONTROL)] = src.opentherm.options.nativeHeatingControl;
|
otOptions[FPSTR(S_NATIVE_HEATING_CONTROL)] = src.opentherm.options.nativeHeatingControl;
|
||||||
otOptions[FPSTR(S_IMMERGAS_FIX)] = src.opentherm.options.immergasFix;
|
otOptions[FPSTR(S_IMMERGAS_FIX)] = src.opentherm.options.immergasFix;
|
||||||
|
|
||||||
@@ -967,6 +968,15 @@ bool jsonToSettings(const JsonVariantConst src, Settings& dst, bool safe = false
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (src[FPSTR(S_OPENTHERM)][FPSTR(S_OPTIONS)][FPSTR(S_SET_DATE_AND_TIME)].is<bool>()) {
|
||||||
|
bool value = src[FPSTR(S_OPENTHERM)][FPSTR(S_OPTIONS)][FPSTR(S_SET_DATE_AND_TIME)].as<bool>();
|
||||||
|
|
||||||
|
if (value != dst.opentherm.options.setDateAndTime) {
|
||||||
|
dst.opentherm.options.setDateAndTime = value;
|
||||||
|
changed = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (src[FPSTR(S_OPENTHERM)][FPSTR(S_OPTIONS)][FPSTR(S_NATIVE_HEATING_CONTROL)].is<bool>()) {
|
if (src[FPSTR(S_OPENTHERM)][FPSTR(S_OPTIONS)][FPSTR(S_NATIVE_HEATING_CONTROL)].is<bool>()) {
|
||||||
bool value = src[FPSTR(S_OPENTHERM)][FPSTR(S_OPTIONS)][FPSTR(S_NATIVE_HEATING_CONTROL)].as<bool>();
|
bool value = src[FPSTR(S_OPENTHERM)][FPSTR(S_OPTIONS)][FPSTR(S_NATIVE_HEATING_CONTROL)].as<bool>();
|
||||||
|
|
||||||
@@ -1723,6 +1733,7 @@ bool jsonToSensorSettings(const uint8_t sensorId, const JsonVariantConst src, Se
|
|||||||
case static_cast<uint8_t>(Sensors::Purpose::EXHAUST_TEMP):
|
case static_cast<uint8_t>(Sensors::Purpose::EXHAUST_TEMP):
|
||||||
case static_cast<uint8_t>(Sensors::Purpose::MODULATION_LEVEL):
|
case static_cast<uint8_t>(Sensors::Purpose::MODULATION_LEVEL):
|
||||||
|
|
||||||
|
case static_cast<uint8_t>(Sensors::Purpose::NUMBER):
|
||||||
case static_cast<uint8_t>(Sensors::Purpose::POWER_FACTOR):
|
case static_cast<uint8_t>(Sensors::Purpose::POWER_FACTOR):
|
||||||
case static_cast<uint8_t>(Sensors::Purpose::POWER):
|
case static_cast<uint8_t>(Sensors::Purpose::POWER):
|
||||||
case static_cast<uint8_t>(Sensors::Purpose::FAN_SPEED):
|
case static_cast<uint8_t>(Sensors::Purpose::FAN_SPEED):
|
||||||
@@ -1767,6 +1778,15 @@ bool jsonToSensorSettings(const uint8_t sensorId, const JsonVariantConst src, Se
|
|||||||
case static_cast<uint8_t>(Sensors::Type::OT_FAN_SPEED_SETPOINT):
|
case static_cast<uint8_t>(Sensors::Type::OT_FAN_SPEED_SETPOINT):
|
||||||
case static_cast<uint8_t>(Sensors::Type::OT_FAN_SPEED_CURRENT):
|
case static_cast<uint8_t>(Sensors::Type::OT_FAN_SPEED_CURRENT):
|
||||||
|
|
||||||
|
case static_cast<uint8_t>(Sensors::Type::OT_BURNER_STARTS):
|
||||||
|
case static_cast<uint8_t>(Sensors::Type::OT_DHW_BURNER_STARTS):
|
||||||
|
case static_cast<uint8_t>(Sensors::Type::OT_HEATING_PUMP_STARTS):
|
||||||
|
case static_cast<uint8_t>(Sensors::Type::OT_DHW_PUMP_STARTS):
|
||||||
|
case static_cast<uint8_t>(Sensors::Type::OT_BURNER_HOURS):
|
||||||
|
case static_cast<uint8_t>(Sensors::Type::OT_DHW_BURNER_HOURS):
|
||||||
|
case static_cast<uint8_t>(Sensors::Type::OT_HEATING_PUMP_HOURS):
|
||||||
|
case static_cast<uint8_t>(Sensors::Type::OT_DHW_PUMP_HOURS):
|
||||||
|
|
||||||
case static_cast<uint8_t>(Sensors::Type::NTC_10K_TEMP):
|
case static_cast<uint8_t>(Sensors::Type::NTC_10K_TEMP):
|
||||||
case static_cast<uint8_t>(Sensors::Type::DALLAS_TEMP):
|
case static_cast<uint8_t>(Sensors::Type::DALLAS_TEMP):
|
||||||
case static_cast<uint8_t>(Sensors::Type::BLUETOOTH):
|
case static_cast<uint8_t>(Sensors::Type::BLUETOOTH):
|
||||||
|
|||||||
@@ -201,6 +201,7 @@
|
|||||||
"dhwFlowRate": "DHW, flow rate",
|
"dhwFlowRate": "DHW, flow rate",
|
||||||
"exhaustTemp": "Exhaust temperature",
|
"exhaustTemp": "Exhaust temperature",
|
||||||
"modLevel": "Modulation level (in percents)",
|
"modLevel": "Modulation level (in percents)",
|
||||||
|
"number": "Number (raw)",
|
||||||
"powerFactor": "Power (in percent)",
|
"powerFactor": "Power (in percent)",
|
||||||
"power": "Power (in kWt)",
|
"power": "Power (in kWt)",
|
||||||
"fanSpeed": "Fan speed",
|
"fanSpeed": "Fan speed",
|
||||||
@@ -231,6 +232,14 @@
|
|||||||
"otSolarCollectorTemp": "OpenTherm, solar collector temp",
|
"otSolarCollectorTemp": "OpenTherm, solar collector temp",
|
||||||
"otFanSpeedSetpoint": "OpenTherm, setpoint fan speed",
|
"otFanSpeedSetpoint": "OpenTherm, setpoint fan speed",
|
||||||
"otFanSpeedCurrent": "OpenTherm, current fan speed",
|
"otFanSpeedCurrent": "OpenTherm, current fan speed",
|
||||||
|
"otBurnerStarts": "OpenTherm, number of burner starts",
|
||||||
|
"otDhwBurnerStarts": "OpenTherm, number of burner starts (DHW)",
|
||||||
|
"otHeatingPumpStarts": "OpenTherm, number of pump starts (heating)",
|
||||||
|
"otDhwPumpStarts": "OpenTherm, number of pump starts (DHW)",
|
||||||
|
"otBurnerHours": "OpenTherm, number of burner operating hours",
|
||||||
|
"otDhwBurnerHours": "OpenTherm, number of burner operating hours (DHW)",
|
||||||
|
"otHeatingPumpHours": "OpenTherm, number of pump operating hours (heating)",
|
||||||
|
"otDhwPumpHours": "OpenTherm, number of pump operating hours (DHW)",
|
||||||
|
|
||||||
"ntcTemp": "NTC sensor",
|
"ntcTemp": "NTC sensor",
|
||||||
"dallasTemp": "DALLAS sensor",
|
"dallasTemp": "DALLAS sensor",
|
||||||
@@ -400,6 +409,7 @@
|
|||||||
"ignoreDiagState": "Ignore diag state",
|
"ignoreDiagState": "Ignore diag state",
|
||||||
"autoFaultReset": "Auto fault reset <small>(not recommended!)</small>",
|
"autoFaultReset": "Auto fault reset <small>(not recommended!)</small>",
|
||||||
"autoDiagReset": "Auto diag reset <small>(not recommended!)</small>",
|
"autoDiagReset": "Auto diag reset <small>(not recommended!)</small>",
|
||||||
|
"setDateAndTime": "Set date & time on boiler",
|
||||||
"immergasFix": "Fix for Immergas boilers"
|
"immergasFix": "Fix for Immergas boilers"
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
@@ -201,6 +201,7 @@
|
|||||||
"dhwFlowRate": "ACS, prelievo",
|
"dhwFlowRate": "ACS, prelievo",
|
||||||
"exhaustTemp": "Temperatura fumi",
|
"exhaustTemp": "Temperatura fumi",
|
||||||
"modLevel": "Livello Modulazione (%)",
|
"modLevel": "Livello Modulazione (%)",
|
||||||
|
"number": "Numero (raw)",
|
||||||
"powerFactor": "Potenza (%)",
|
"powerFactor": "Potenza (%)",
|
||||||
"power": "Potenza (in kW)",
|
"power": "Potenza (in kW)",
|
||||||
"fanSpeed": "Velocità ventilatore",
|
"fanSpeed": "Velocità ventilatore",
|
||||||
@@ -231,6 +232,14 @@
|
|||||||
"otSolarCollectorTemp": "OpenTherm, temp collettore solare",
|
"otSolarCollectorTemp": "OpenTherm, temp collettore solare",
|
||||||
"otFanSpeedSetpoint": "OpenTherm, velocità ventola impostata",
|
"otFanSpeedSetpoint": "OpenTherm, velocità ventola impostata",
|
||||||
"otFanSpeedCurrent": "OpenTherm, velocità ventola attuale",
|
"otFanSpeedCurrent": "OpenTherm, velocità ventola attuale",
|
||||||
|
"otBurnerStarts": "OpenTherm, numero di avviamenti del bruciatore",
|
||||||
|
"otDhwBurnerStarts": "OpenTherm, numero di avviamenti del bruciatore (ACS)",
|
||||||
|
"otHeatingPumpStarts": "OpenTherm, numero di avviamenti della pompa (riscaldamento)",
|
||||||
|
"otDhwPumpStarts": "OpenTherm, numero di avviamenti della pompa (ACS)",
|
||||||
|
"otBurnerHours": "OpenTherm, numero di ore di funzionamento del bruciatore",
|
||||||
|
"otDhwBurnerHours": "OpenTherm, numero di ore di funzionamento del bruciatore (ACS)",
|
||||||
|
"otHeatingPumpHours": "OpenTherm, numero di ore di funzionamento della pompa (riscaldamento)",
|
||||||
|
"otDhwPumpHours": "OpenTherm, numero di ore di funzionamento della pompa (ACS)",
|
||||||
|
|
||||||
"ntcTemp": "Sensore NTC",
|
"ntcTemp": "Sensore NTC",
|
||||||
"dallasTemp": "Sensore DALLAS",
|
"dallasTemp": "Sensore DALLAS",
|
||||||
@@ -400,6 +409,7 @@
|
|||||||
"ignoreDiagState": "Ignora lo stato diagnostico",
|
"ignoreDiagState": "Ignora lo stato diagnostico",
|
||||||
"autoFaultReset": "Ripristino automatico degli errori <small>(sconsigliato!)</small>",
|
"autoFaultReset": "Ripristino automatico degli errori <small>(sconsigliato!)</small>",
|
||||||
"autoDiagReset": "Ripristino diagnostico automatica <small>(sconsigliato!)</small>",
|
"autoDiagReset": "Ripristino diagnostico automatica <small>(sconsigliato!)</small>",
|
||||||
|
"setDateAndTime": "Imposta data e ora sulla caldaia",
|
||||||
"immergasFix": "Fix per caldiaie Immergas"
|
"immergasFix": "Fix per caldiaie Immergas"
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
@@ -201,6 +201,7 @@
|
|||||||
"dhwFlowRate": "ГВС, расход/скорость потока",
|
"dhwFlowRate": "ГВС, расход/скорость потока",
|
||||||
"exhaustTemp": "Температура выхлопных газов",
|
"exhaustTemp": "Температура выхлопных газов",
|
||||||
"modLevel": "Уровень модуляции (в процентах)",
|
"modLevel": "Уровень модуляции (в процентах)",
|
||||||
|
"number": "Число (raw)",
|
||||||
"powerFactor": "Мощность (в процентах)",
|
"powerFactor": "Мощность (в процентах)",
|
||||||
"power": "Мощность (в кВт)",
|
"power": "Мощность (в кВт)",
|
||||||
"fanSpeed": "Скорость вентилятора",
|
"fanSpeed": "Скорость вентилятора",
|
||||||
@@ -231,6 +232,14 @@
|
|||||||
"otSolarCollectorTemp": "OpenTherm, темп. солн. коллектора",
|
"otSolarCollectorTemp": "OpenTherm, темп. солн. коллектора",
|
||||||
"otFanSpeedSetpoint": "OpenTherm, установленная мощн. вентилятора",
|
"otFanSpeedSetpoint": "OpenTherm, установленная мощн. вентилятора",
|
||||||
"otFanSpeedCurrent": "OpenTherm, текущая мощн. вентилятора",
|
"otFanSpeedCurrent": "OpenTherm, текущая мощн. вентилятора",
|
||||||
|
"otBurnerStarts": "OpenTherm, кол-во запусков горелки",
|
||||||
|
"otDhwBurnerStarts": "OpenTherm, кол-во запусков горелки (ГВС)",
|
||||||
|
"otHeatingPumpStarts": "OpenTherm, кол-во запусков насоса (отопление)",
|
||||||
|
"otDhwPumpStarts": "OpenTherm, кол-во запусков насоса (ГВС)",
|
||||||
|
"otBurnerHours": "OpenTherm, кол-во часов работы горелки",
|
||||||
|
"otDhwBurnerHours": "OpenTherm, кол-во часов работы горелки (ГВС)",
|
||||||
|
"otHeatingPumpHours": "OpenTherm, кол-во часов работы насоса (отопление)",
|
||||||
|
"otDhwPumpHours": "OpenTherm, кол-во часов работы насоса (ГВС)",
|
||||||
|
|
||||||
"ntcTemp": "NTC датчик",
|
"ntcTemp": "NTC датчик",
|
||||||
"dallasTemp": "DALLAS датчик",
|
"dallasTemp": "DALLAS датчик",
|
||||||
@@ -400,6 +409,7 @@
|
|||||||
"ignoreDiagState": "Игнорировать состояние диагностики",
|
"ignoreDiagState": "Игнорировать состояние диагностики",
|
||||||
"autoFaultReset": "Автоматический сброс ошибок <small>(не рекомендуется!)</small>",
|
"autoFaultReset": "Автоматический сброс ошибок <small>(не рекомендуется!)</small>",
|
||||||
"autoDiagReset": "Автоматический сброс диагностики <small>(не рекомендуется!)</small>",
|
"autoDiagReset": "Автоматический сброс диагностики <small>(не рекомендуется!)</small>",
|
||||||
|
"setDateAndTime": "Устанавливать время и дату на котле",
|
||||||
"immergasFix": "Фикс для котлов Immergas"
|
"immergasFix": "Фикс для котлов Immergas"
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
@@ -261,16 +261,16 @@
|
|||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary><b data-i18n>dashboard.section.diag</b></summary>
|
<summary><b data-i18n>dashboard.section.diag</b></summary>
|
||||||
<pre><b>Vendor:</b> <span class="sVendor"></span>
|
<pre><b>Vendor:</b> <span class="sVendor"></span>
|
||||||
<b>Member ID:</b> <span class="sMemberId"></span>
|
<b>Member ID:</b> <span class="sMemberId"></span>
|
||||||
<b>Flags:</b> <span class="sFlags"></span>
|
<b>Flags:</b> <span class="sFlags"></span>
|
||||||
<b>Type:</b> <span class="sType"></span>
|
<b>Type:</b> <span class="sType"></span>
|
||||||
<b>AppVersion:</b> <span class="sAppVersion"></span>
|
<b>AppVersion:</b> <span class="sAppVersion"></span>
|
||||||
<b>OT version:</b> <span class="sProtocolVersion"></span>
|
<b>OT version:</b> <span class="sProtocolVersion"></span>
|
||||||
<b>Modulation limits:</b> <span class="sModMin"></span>...<span class="sAbsModMax"></span> %, curr. max: <span class="sModMax"></span> %
|
<b>Modulation:</b> min: <span class="sModMin"></span> %, curr. max: <span class="sModMax"></span> %
|
||||||
<b>Power limits:</b> <span class="sPowerMin"></span>...<span class="sPowerMax"></span> kW
|
<b>Power limits:</b> <span class="sPowerMin"></span>...<span class="sPowerMax"></span> kW
|
||||||
<b>Heating limits:</b> <span class="sHeatMinTemp"></span>...<span class="sHeatMaxTemp"></span> <span class="tempUnit"></span>
|
<b>Heating limits:</b> <span class="sHeatMinTemp"></span>...<span class="sHeatMaxTemp"></span> <span class="tempUnit"></span>
|
||||||
<b>DHW limits:</b> <span class="sDhwMinTemp"></span>...<span class="sDhwMaxTemp"></span> <span class="tempUnit"></span></pre>
|
<b>DHW limits:</b> <span class="sDhwMinTemp"></span>...<span class="sDhwMaxTemp"></span> <span class="tempUnit"></span></pre>
|
||||||
</details>
|
</details>
|
||||||
</div>
|
</div>
|
||||||
</article>
|
</article>
|
||||||
@@ -508,7 +508,6 @@
|
|||||||
setValue('.tempUnit', temperatureUnit(unitSystem));
|
setValue('.tempUnit', temperatureUnit(unitSystem));
|
||||||
setValue('.pressureUnit', pressureUnit(unitSystem));
|
setValue('.pressureUnit', pressureUnit(unitSystem));
|
||||||
setValue('.volumeUnit', volumeUnit(unitSystem));
|
setValue('.volumeUnit', volumeUnit(unitSystem));
|
||||||
setValue('.sAbsModMax', result.opentherm.maxModulation);
|
|
||||||
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.log(error);
|
console.log(error);
|
||||||
|
|||||||
@@ -69,6 +69,7 @@
|
|||||||
<option value="6" data-i18n>sensors.purposes.dhwFlowRate</option>
|
<option value="6" data-i18n>sensors.purposes.dhwFlowRate</option>
|
||||||
<option value="7" data-i18n>sensors.purposes.exhaustTemp</option>
|
<option value="7" data-i18n>sensors.purposes.exhaustTemp</option>
|
||||||
<option value="8" data-i18n>sensors.purposes.modLevel</option>
|
<option value="8" data-i18n>sensors.purposes.modLevel</option>
|
||||||
|
<option value="247" data-i18n>sensors.purposes.number</option>
|
||||||
<option value="248" data-i18n>sensors.purposes.powerFactor</option>
|
<option value="248" data-i18n>sensors.purposes.powerFactor</option>
|
||||||
<option value="249" data-i18n>sensors.purposes.power</option>
|
<option value="249" data-i18n>sensors.purposes.power</option>
|
||||||
<option value="250" data-i18n>sensors.purposes.fanSpeed</option>
|
<option value="250" data-i18n>sensors.purposes.fanSpeed</option>
|
||||||
@@ -102,6 +103,14 @@
|
|||||||
<option value="16" data-i18n>sensors.types.otSolarCollectorTemp</option>
|
<option value="16" data-i18n>sensors.types.otSolarCollectorTemp</option>
|
||||||
<option value="17" data-i18n>sensors.types.otFanSpeedSetpoint</option>
|
<option value="17" data-i18n>sensors.types.otFanSpeedSetpoint</option>
|
||||||
<option value="18" data-i18n>sensors.types.otFanSpeedCurrent</option>
|
<option value="18" data-i18n>sensors.types.otFanSpeedCurrent</option>
|
||||||
|
<option value="19" data-i18n>sensors.types.otBurnerStarts</option>
|
||||||
|
<option value="20" data-i18n>sensors.types.otDhwBurnerStarts</option>
|
||||||
|
<option value="21" data-i18n>sensors.types.otHeatingPumpStarts</option>
|
||||||
|
<option value="22" data-i18n>sensors.types.otDhwPumpStarts</option>
|
||||||
|
<option value="23" data-i18n>sensors.types.otBurnerHours</option>
|
||||||
|
<option value="24" data-i18n>sensors.types.otDhwBurnerHours</option>
|
||||||
|
<option value="25" data-i18n>sensors.types.otHeatingPumpHours</option>
|
||||||
|
<option value="26" data-i18n>sensors.types.otDhwPumpHours</option>
|
||||||
|
|
||||||
<option value="50" data-i18n>sensors.types.ntcTemp</option>
|
<option value="50" data-i18n>sensors.types.ntcTemp</option>
|
||||||
<option value="51" data-i18n>sensors.types.dallasTemp</option>
|
<option value="51" data-i18n>sensors.types.dallasTemp</option>
|
||||||
|
|||||||
@@ -551,6 +551,11 @@
|
|||||||
<span data-i18n>settings.ot.options.autoDiagReset</span>
|
<span data-i18n>settings.ot.options.autoDiagReset</span>
|
||||||
</label>
|
</label>
|
||||||
|
|
||||||
|
<label>
|
||||||
|
<input type="checkbox" name="opentherm[options][setDateAndTime]" value="true">
|
||||||
|
<span data-i18n>settings.ot.options.setDateAndTime</span>
|
||||||
|
</label>
|
||||||
|
|
||||||
<label>
|
<label>
|
||||||
<input type="checkbox" name="opentherm[options][immergasFix]" value="true">
|
<input type="checkbox" name="opentherm[options][immergasFix]" value="true">
|
||||||
<span data-i18n>settings.ot.options.immergasFix</span>
|
<span data-i18n>settings.ot.options.immergasFix</span>
|
||||||
@@ -818,6 +823,7 @@
|
|||||||
setCheckboxValue("[name='opentherm[options][ignoreDiagState]']", data.opentherm.options.ignoreDiagState);
|
setCheckboxValue("[name='opentherm[options][ignoreDiagState]']", data.opentherm.options.ignoreDiagState);
|
||||||
setCheckboxValue("[name='opentherm[options][autoFaultReset]']", data.opentherm.options.autoFaultReset);
|
setCheckboxValue("[name='opentherm[options][autoFaultReset]']", data.opentherm.options.autoFaultReset);
|
||||||
setCheckboxValue("[name='opentherm[options][autoDiagReset]']", data.opentherm.options.autoDiagReset);
|
setCheckboxValue("[name='opentherm[options][autoDiagReset]']", data.opentherm.options.autoDiagReset);
|
||||||
|
setCheckboxValue("[name='opentherm[options][setDateAndTime]']", data.opentherm.options.setDateAndTime);
|
||||||
setCheckboxValue("[name='opentherm[options][nativeHeatingControl]']", data.opentherm.options.nativeHeatingControl);
|
setCheckboxValue("[name='opentherm[options][nativeHeatingControl]']", data.opentherm.options.nativeHeatingControl);
|
||||||
setCheckboxValue("[name='opentherm[options][immergasFix]']", data.opentherm.options.immergasFix);
|
setCheckboxValue("[name='opentherm[options][immergasFix]']", data.opentherm.options.immergasFix);
|
||||||
setBusy('#ot-settings-busy', '#ot-settings', false);
|
setBusy('#ot-settings-busy', '#ot-settings', false);
|
||||||
|
|||||||
Reference in New Issue
Block a user