From 975797a300132ca75be055127a703383f65b514d Mon Sep 17 00:00:00 2001 From: Your Name Date: Sun, 19 Mar 2023 18:42:07 +0100 Subject: [PATCH] Add heater error code sensors. --- components/truma_inetbox/TrumaiNetBoxApp.h | 3 ++- .../binary_sensor/TrumaHeaterBinarySensor.cpp | 3 +++ components/truma_inetbox/binary_sensor/__init__.py | 1 + components/truma_inetbox/binary_sensor/enum.h | 4 ++++ components/truma_inetbox/sensor/TrumaSensor.cpp | 4 ++++ components/truma_inetbox/sensor/TrumaSensor.h | 4 ++++ components/truma_inetbox/sensor/__init__.py | 1 + truma.yaml | 10 ++++++++++ 8 files changed, 29 insertions(+), 1 deletion(-) diff --git a/components/truma_inetbox/TrumaiNetBoxApp.h b/components/truma_inetbox/TrumaiNetBoxApp.h index 67efb5a..7a987f9 100644 --- a/components/truma_inetbox/TrumaiNetBoxApp.h +++ b/components/truma_inetbox/TrumaiNetBoxApp.h @@ -203,7 +203,8 @@ struct StatusFrameHeater { // NOLINT(altera-struct-pack-align) u_int16_t current_temp_water; u_int16_t current_temp_room; OperatingStatus operating_status; - u_int16_t error_code; + u_int8_t error_code_low; + u_int8_t error_code_high; u_int8_t heater_unknown_2; } __attribute__((packed)); diff --git a/components/truma_inetbox/binary_sensor/TrumaHeaterBinarySensor.cpp b/components/truma_inetbox/binary_sensor/TrumaHeaterBinarySensor.cpp index 4bbd6eb..1600062 100644 --- a/components/truma_inetbox/binary_sensor/TrumaHeaterBinarySensor.cpp +++ b/components/truma_inetbox/binary_sensor/TrumaHeaterBinarySensor.cpp @@ -30,6 +30,9 @@ void TrumaHeaterBinarySensor::setup() { case TRUMA_BINARY_SENSOR_TYPE::HEATER_ELECTRICITY: this->publish_state(status_heater->energy_mix_a == EnergyMix::ENERGY_MIX_ELECTRICITY); break; + case TRUMA_BINARY_SENSOR_TYPE::HEATER_HAS_ERROR: + this->publish_state(status_heater->error_code_high != 0x00); + break; default: break; } diff --git a/components/truma_inetbox/binary_sensor/__init__.py b/components/truma_inetbox/binary_sensor/__init__.py index f157194..064cc5e 100644 --- a/components/truma_inetbox/binary_sensor/__init__.py +++ b/components/truma_inetbox/binary_sensor/__init__.py @@ -30,6 +30,7 @@ CONF_SUPPORTED_TYPE = { "HEATER_MIX_1": (truma_inetbox_ns.class_("TrumaHeaterBinarySensor", binary_sensor.BinarySensor, cg.Component), TRUMA_BINARY_SENSOR_TYPE_dummy_ns.HEATER_MIX_1), "HEATER_MIX_2": (truma_inetbox_ns.class_("TrumaHeaterBinarySensor", binary_sensor.BinarySensor, cg.Component), TRUMA_BINARY_SENSOR_TYPE_dummy_ns.HEATER_MIX_2), "HEATER_ELECTRICITY": (truma_inetbox_ns.class_("TrumaHeaterBinarySensor", binary_sensor.BinarySensor, cg.Component), TRUMA_BINARY_SENSOR_TYPE_dummy_ns.HEATER_ELECTRICITY), + "HEATER_HAS_ERROR": (truma_inetbox_ns.class_("TrumaHeaterBinarySensor", binary_sensor.BinarySensor, cg.Component), TRUMA_BINARY_SENSOR_TYPE_dummy_ns.HEATER_HAS_ERROR), # TrumaTimerBinarySensor "TIMER_ACTIVE": (truma_inetbox_ns.class_("TrumaTimerBinarySensor", binary_sensor.BinarySensor, cg.Component), TRUMA_BINARY_SENSOR_TYPE_dummy_ns.TIMER_ACTIVE), "TIMER_ROOM": (truma_inetbox_ns.class_("TrumaTimerBinarySensor", binary_sensor.BinarySensor, cg.Component), TRUMA_BINARY_SENSOR_TYPE_dummy_ns.TIMER_ROOM), diff --git a/components/truma_inetbox/binary_sensor/enum.h b/components/truma_inetbox/binary_sensor/enum.h index 1327caf..2c6779e 100644 --- a/components/truma_inetbox/binary_sensor/enum.h +++ b/components/truma_inetbox/binary_sensor/enum.h @@ -10,6 +10,7 @@ enum class TRUMA_BINARY_SENSOR_TYPE { HEATER_MIX_1, HEATER_MIX_2, HEATER_ELECTRICITY, + HEATER_HAS_ERROR, TIMER_ACTIVE, TIMER_ROOM, @@ -36,6 +37,9 @@ static const char *enum_to_c_str(const TRUMA_BINARY_SENSOR_TYPE val) { case TRUMA_BINARY_SENSOR_TYPE::HEATER_ELECTRICITY: return "HEATER_ELECTRICITY"; break; + case TRUMA_BINARY_SENSOR_TYPE::HEATER_HAS_ERROR: + return "HEATER_HAS_ERROR"; + break; case TRUMA_BINARY_SENSOR_TYPE::TIMER_ACTIVE: return "TIMER_ACTIVE"; diff --git a/components/truma_inetbox/sensor/TrumaSensor.cpp b/components/truma_inetbox/sensor/TrumaSensor.cpp index 0cb5d85..8c82a6f 100644 --- a/components/truma_inetbox/sensor/TrumaSensor.cpp +++ b/components/truma_inetbox/sensor/TrumaSensor.cpp @@ -34,6 +34,10 @@ void TrumaSensor::setup() { case TRUMA_SENSOR_TYPE::OPERATING_STATUS: this->publish_state(static_cast(status_heater->operating_status)); break; + case TRUMA_SENSOR_TYPE::HEATER_ERROR_CODE: + float errorcode = status_heater->error_code_high * 100.0f + status_heater->error_code_low; + this->publish_state(errorcode); + break; } }); } diff --git a/components/truma_inetbox/sensor/TrumaSensor.h b/components/truma_inetbox/sensor/TrumaSensor.h index 1412a33..41dca14 100644 --- a/components/truma_inetbox/sensor/TrumaSensor.h +++ b/components/truma_inetbox/sensor/TrumaSensor.h @@ -14,6 +14,7 @@ enum class TRUMA_SENSOR_TYPE { ELECTRIC_POWER_LEVEL, ENERGY_MIX, OPERATING_STATUS, + HEATER_ERROR_CODE, }; static const char *enum_to_c_str(const TRUMA_SENSOR_TYPE val) { @@ -42,6 +43,9 @@ static const char *enum_to_c_str(const TRUMA_SENSOR_TYPE val) { case TRUMA_SENSOR_TYPE::OPERATING_STATUS: return "OPERATING_STATUS"; break; + case TRUMA_SENSOR_TYPE::HEATER_ERROR_CODE: + return "HEATER_ERROR_CODE"; + break; default: return ""; break; diff --git a/components/truma_inetbox/sensor/__init__.py b/components/truma_inetbox/sensor/__init__.py index f7b6864..295e3d0 100644 --- a/components/truma_inetbox/sensor/__init__.py +++ b/components/truma_inetbox/sensor/__init__.py @@ -42,6 +42,7 @@ CONF_SUPPORTED_TYPE = { "ELECTRIC_POWER_LEVEL": (TRUMA_SENSOR_TYPE_dummy_ns.ELECTRIC_POWER_LEVEL, UNIT_WATT, ICON_POWER, 0, DEVICE_CLASS_TEMPERATURE), "ENERGY_MIX": (TRUMA_SENSOR_TYPE_dummy_ns.ENERGY_MIX, UNIT_EMPTY, ICON_GAS_CYLINDER, 0, DEVICE_CLASS_TEMPERATURE), "OPERATING_STATUS": (TRUMA_SENSOR_TYPE_dummy_ns.OPERATING_STATUS, UNIT_EMPTY, ICON_POWER, 0, DEVICE_CLASS_TEMPERATURE), + "HEATER_ERROR_CODE": (TRUMA_SENSOR_TYPE_dummy_ns.HEATER_ERROR_CODE, UNIT_EMPTY, ICON_POWER, 0, DEVICE_CLASS_TEMPERATURE), } diff --git a/truma.yaml b/truma.yaml index 9175b71..0ccbaeb 100644 --- a/truma.yaml +++ b/truma.yaml @@ -8,6 +8,10 @@ esphome: external_components: - source: github://Fabian-Schmidt/esphome-truma_inetbox + #- source: + # type: local + # path: ./components + # components: ["truma_inetbox", "uart"] esp32: board: mhetesp32devkit @@ -74,6 +78,9 @@ binary_sensor: - platform: truma_inetbox name: "Heater mode Elec" type: HEATER_ELECTRICITY + - platform: truma_inetbox + name: "Heater has error" + type: HEATER_HAS_ERROR - platform: truma_inetbox name: "Timer active" @@ -130,6 +137,9 @@ sensor: - platform: truma_inetbox name: "Operating status" type: OPERATING_STATUS + - platform: truma_inetbox + name: "Heater error code" + type: HEATER_ERROR_CODE switch: - platform: template