From 5db8924b9d320e2776e7b28cb652f34e864a63ab Mon Sep 17 00:00:00 2001 From: ElVit Date: Tue, 28 Jan 2025 08:29:48 +0100 Subject: [PATCH] Added icons and device classes. Added top92. --- components/panasonic_heatpump/__init__.py | 2 +- .../panasonic_heatpump/binary_sensor.py | 54 +++++++++---- components/panasonic_heatpump/decode.cpp | 64 ++++++++++++++- components/panasonic_heatpump/decode.h | 57 ------------- .../panasonic_heatpump/panasonic_heatpump.cpp | 2 +- .../panasonic_heatpump/panasonic_heatpump.h | 2 +- components/panasonic_heatpump/sensor.py | 9 ++- components/panasonic_heatpump/text_sensor.py | 80 +++++++++++++++---- example_panasonic_heatpump.yaml | 4 +- 9 files changed, 177 insertions(+), 97 deletions(-) diff --git a/components/panasonic_heatpump/__init__.py b/components/panasonic_heatpump/__init__.py index ef71476..0c18bd6 100644 --- a/components/panasonic_heatpump/__init__.py +++ b/components/panasonic_heatpump/__init__.py @@ -18,7 +18,7 @@ CONFIG_SCHEMA = ( cv.Schema( { cv.GenerateID(): cv.declare_id(PanasonicHeatpumpComponent), - + cv.Required(CONF_UART_HP): cv.use_id(uart.UARTComponent), cv.Required(CONF_UART_WM): cv.use_id(uart.UARTComponent), } diff --git a/components/panasonic_heatpump/binary_sensor.py b/components/panasonic_heatpump/binary_sensor.py index ae28dfc..015e292 100755 --- a/components/panasonic_heatpump/binary_sensor.py +++ b/components/panasonic_heatpump/binary_sensor.py @@ -2,7 +2,7 @@ import esphome.codegen as cg import esphome.config_validation as cv from esphome.components import binary_sensor from esphome.const import ( - DEVICE_CLASS_HEAT, + DEVICE_CLASS_RUNNING, ) from . import PanasonicHeatpumpComponent, CONF_PANASONIC_HEATPUMP_ID @@ -43,20 +43,44 @@ CONFIG_SCHEMA = cv.All( { cv.GenerateID(CONF_PANASONIC_HEATPUMP_ID): cv.use_id(PanasonicHeatpumpComponent), - cv.Optional(CONF_BIN_SENS_TOP0): binary_sensor.binary_sensor_schema(), - cv.Optional(CONF_BIN_SENS_TOP2): binary_sensor.binary_sensor_schema(), - cv.Optional(CONF_BIN_SENS_TOP3): binary_sensor.binary_sensor_schema(), - cv.Optional(CONF_BIN_SENS_TOP13): binary_sensor.binary_sensor_schema(), - cv.Optional(CONF_BIN_SENS_TOP26): binary_sensor.binary_sensor_schema(), - cv.Optional(CONF_BIN_SENS_TOP60): binary_sensor.binary_sensor_schema(), - cv.Optional(CONF_BIN_SENS_TOP61): binary_sensor.binary_sensor_schema(), - cv.Optional(CONF_BIN_SENS_TOP68): binary_sensor.binary_sensor_schema(), - cv.Optional(CONF_BIN_SENS_TOP69): binary_sensor.binary_sensor_schema(), - cv.Optional(CONF_BIN_SENS_TOP99): binary_sensor.binary_sensor_schema(), - cv.Optional(CONF_BIN_SENS_TOP100): binary_sensor.binary_sensor_schema(), - cv.Optional(CONF_BIN_SENS_TOP108): binary_sensor.binary_sensor_schema(), - cv.Optional(CONF_BIN_SENS_TOP109): binary_sensor.binary_sensor_schema(), - cv.Optional(CONF_BIN_SENS_TOP110): binary_sensor.binary_sensor_schema(), + cv.Optional(CONF_BIN_SENS_TOP0): binary_sensor.binary_sensor_schema( + device_class = DEVICE_CLASS_RUNNING, + ), + cv.Optional(CONF_BIN_SENS_TOP2): binary_sensor.binary_sensor_schema( + device_class = DEVICE_CLASS_RUNNING, + ), + cv.Optional(CONF_BIN_SENS_TOP3): binary_sensor.binary_sensor_schema( + device_class = DEVICE_CLASS_RUNNING, + ), + cv.Optional(CONF_BIN_SENS_TOP13): binary_sensor.binary_sensor_schema( + device_class = DEVICE_CLASS_RUNNING, + ), + cv.Optional(CONF_BIN_SENS_TOP26): binary_sensor.binary_sensor_schema( + device_class = DEVICE_CLASS_RUNNING, + ), + cv.Optional(CONF_BIN_SENS_TOP60): binary_sensor.binary_sensor_schema( + device_class = DEVICE_CLASS_RUNNING, + ), + cv.Optional(CONF_BIN_SENS_TOP61): binary_sensor.binary_sensor_schema( + device_class = DEVICE_CLASS_RUNNING, + ), + cv.Optional(CONF_BIN_SENS_TOP68): binary_sensor.binary_sensor_schema( + device_class = DEVICE_CLASS_RUNNING, + ), + cv.Optional(CONF_BIN_SENS_TOP69): binary_sensor.binary_sensor_schema( + device_class = DEVICE_CLASS_RUNNING, + ), + cv.Optional(CONF_BIN_SENS_TOP99): binary_sensor.binary_sensor_schema( + ), + cv.Optional(CONF_BIN_SENS_TOP100): binary_sensor.binary_sensor_schema( + ), + cv.Optional(CONF_BIN_SENS_TOP108): binary_sensor.binary_sensor_schema( + ), + cv.Optional(CONF_BIN_SENS_TOP109): binary_sensor.binary_sensor_schema( + device_class = DEVICE_CLASS_RUNNING, + ), + cv.Optional(CONF_BIN_SENS_TOP110): binary_sensor.binary_sensor_schema( + ), } ).extend(cv.COMPONENT_SCHEMA) ) diff --git a/components/panasonic_heatpump/decode.cpp b/components/panasonic_heatpump/decode.cpp index 27cd208..056d69a 100755 --- a/components/panasonic_heatpump/decode.cpp +++ b/components/panasonic_heatpump/decode.cpp @@ -21,6 +21,61 @@ constexpr const char* const PanasonicDecode::ExtPadHeaterType[]; constexpr const char* const PanasonicDecode::Bivalent[]; constexpr const char* const PanasonicDecode::ModelNames[]; +// stores the bytes #129 to #138 of known models in the same order as the ModelNames above +static const uint8_t KnownModels[NUMBER_OF_MODELS][10] = +{ + 0xE2, 0xCF, 0x0B, 0x13, 0x33, 0x32, 0xD1, 0x0C, 0x16, 0x33, //0 + 0xE2, 0xCF, 0x0B, 0x14, 0x33, 0x42, 0xD1, 0x0B, 0x17, 0x33, //1 + 0xE2, 0xCF, 0x0D, 0x77, 0x09, 0x12, 0xD0, 0x0B, 0x05, 0x11, //2 + 0xE2, 0xCF, 0x0C, 0x88, 0x05, 0x12, 0xD0, 0x0B, 0x97, 0x05, //3 + 0xE2, 0xCF, 0x0D, 0x85, 0x05, 0x12, 0xD0, 0x0C, 0x94, 0x05, //4 + 0xE2, 0xCF, 0x0D, 0x86, 0x05, 0x12, 0xD0, 0x0C, 0x95, 0x05, //5 + 0xE2, 0xCF, 0x0D, 0x87, 0x05, 0x12, 0xD0, 0x0C, 0x96, 0x05, //6 + 0xE2, 0xCE, 0x0D, 0x71, 0x81, 0x72, 0xCE, 0x0C, 0x92, 0x81, //7 + 0x62, 0xD2, 0x0B, 0x43, 0x54, 0x42, 0xD2, 0x0B, 0x72, 0x66, //8 + 0xC2, 0xD3, 0x0B, 0x33, 0x65, 0xB2, 0xD3, 0x0B, 0x94, 0x65, //9 + 0xE2, 0xCF, 0x0B, 0x15, 0x33, 0x42, 0xD1, 0x0B, 0x18, 0x33, //10 + 0xE2, 0xCF, 0x0B, 0x41, 0x34, 0x82, 0xD1, 0x0B, 0x31, 0x35, //11 + 0x62, 0xD2, 0x0B, 0x45, 0x54, 0x42, 0xD2, 0x0B, 0x47, 0x55, //12 + 0xE2, 0xCF, 0x0C, 0x74, 0x09, 0x12, 0xD0, 0x0D, 0x95, 0x05, //13 + 0xE2, 0xCF, 0x0B, 0x82, 0x05, 0x12, 0xD0, 0x0C, 0x91, 0x05, //14 + 0xE2, 0xCF, 0x0C, 0x55, 0x14, 0x12, 0xD0, 0x0B, 0x15, 0x08, //15 + 0xE2, 0xCF, 0x0C, 0x43, 0x00, 0x12, 0xD0, 0x0B, 0x15, 0x08, //16 + 0x62, 0xD2, 0x0B, 0x45, 0x54, 0x32, 0xD2, 0x0C, 0x45, 0x55, //17 + 0x62, 0xD2, 0x0B, 0x43, 0x54, 0x42, 0xD2, 0x0C, 0x46, 0x55, //18 + 0xE2, 0xCF, 0x0C, 0x54, 0x14, 0x12, 0xD0, 0x0B, 0x14, 0x08, //19 + 0xC2, 0xD3, 0x0B, 0x34, 0x65, 0xB2, 0xD3, 0x0B, 0x95, 0x65, //20 + 0xC2, 0xD3, 0x0B, 0x35, 0x65, 0xB2, 0xD3, 0x0B, 0x96, 0x65, //21 + 0x62, 0xD2, 0x0B, 0x41, 0x54, 0x32, 0xD2, 0x0C, 0x45, 0x55, //22 + 0x32, 0xD4, 0x0B, 0x87, 0x84, 0x73, 0x90, 0x0C, 0x84, 0x84, //23 + 0x32, 0xD4, 0x0B, 0x88, 0x84, 0x73, 0x90, 0x0C, 0x85, 0x84, //24 + 0xE2, 0xCF, 0x0B, 0x75, 0x09, 0x12, 0xD0, 0x0C, 0x06, 0x11, //25 + 0x42, 0xD4, 0x0B, 0x83, 0x71, 0x42, 0xD2, 0x0C, 0x46, 0x55, //26 + 0xC2, 0xD3, 0x0C, 0x34, 0x65, 0xB2, 0xD3, 0x0B, 0x95, 0x65, //27 + 0xC2, 0xD3, 0x0C, 0x33, 0x65, 0xB2, 0xD3, 0x0B, 0x94, 0x65, //28 + 0xE2, 0xCF, 0x0B, 0x83, 0x05, 0x12, 0xD0, 0x0D, 0x92, 0x05, //29 + 0xE2, 0xCF, 0x0C, 0x78, 0x09, 0x12, 0xD0, 0x0B, 0x06, 0x11, //30 + 0xC2, 0xD3, 0x0C, 0x35, 0x65, 0xB2, 0xD3, 0x0B, 0x96, 0x65, //31 + 0x32, 0xD4, 0x0B, 0x99, 0x77, 0x62, 0x90, 0x0B, 0x01, 0x78, //32 + 0x42, 0xD4, 0x0B, 0x15, 0x76, 0x12, 0xD0, 0x0B, 0x10, 0x11, //33 + 0xE2, 0xD5, 0x0C, 0x29, 0x99, 0x83, 0x92, 0x0C, 0x28, 0x98, //34 + 0xE2, 0xCF, 0x0D, 0x85, 0x05, 0x12, 0xD0, 0x0E, 0x94, 0x05, //35 + 0xE2, 0xD5, 0x0D, 0x36, 0x99, 0x02, 0xD6, 0x0F, 0x67, 0x95, //36 + 0xE2, 0xD5, 0x0B, 0x08, 0x95, 0x02, 0xD6, 0x0E, 0x66, 0x95, //37 + 0xE2, 0xD5, 0x0B, 0x34, 0x99, 0x83, 0x92, 0x0C, 0x29, 0x98, //38 + 0xE2, 0xCF, 0x0C, 0x89, 0x05, 0x12, 0xD0, 0x0C, 0x98, 0x05, //39 + 0xE2, 0xD5, 0x0B, 0x08, 0x95, 0x02, 0xD6, 0x0E, 0x67, 0x95, //40 + 0xE2, 0xCF, 0x0C, 0x74, 0x09, 0x12, 0xD0, 0x0C, 0x96, 0x05, //41 + 0xE2, 0xCF, 0x0C, 0x74, 0x09, 0x12, 0xD0, 0x0E, 0x95, 0x05, //42 + 0x32, 0xD4, 0x0B, 0x89, 0x84, 0x73, 0x90, 0x0C, 0x86, 0x84, //43 + 0x32, 0xD4, 0x0B, 0x00, 0x78, 0x62, 0x90, 0x0B, 0x02, 0x78, //44 + 0xE2, 0xCF, 0x0B, 0x82, 0x05, 0x12, 0xD0, 0x0D, 0x91, 0x05, //45 + 0xE2, 0xD5, 0x0D, 0x99, 0x94, 0x02, 0xD6, 0x0D, 0x68, 0x95, //46 + 0xE2, 0xCF, 0x0C, 0x74, 0x09, 0x12, 0xD0, 0x0C, 0x95, 0x05, //47 + 0xE2, 0xD5, 0x0B, 0x34, 0x99, 0x83, 0x92, 0x0C, 0x28, 0x98, //48 + 0xE2, 0xCF, 0x0D, 0x77, 0x09, 0x12, 0xD0, 0x0C, 0x05, 0x11, //49 + 0xE2, 0xCF, 0x0D, 0x86, 0x05, 0x12, 0xD0, 0x0E, 0x95, 0x05, //50 +}; int PanasonicDecode::getBit1(uint8_t input) { @@ -177,11 +232,14 @@ int PanasonicDecode::getBivalent(uint8_t input) // TOP92 // int PanasonicDecode::getModel(std::vector& data, uint8_t index) { - uint8_t model[10] = { data[index], data[index+1], data[index+2], data[index+3], data[index+4], data[index+5], data[index+6], data[index+7], data[index+8], data[index+9] }; int result = -1; - int size = sizeof(KnownModels) / sizeof(KnownModels[0]); + uint8_t model[10] = + { + data[index], data[index+1], data[index+2], data[index+3], data[index+4], + data[index+5], data[index+6], data[index+7], data[index+8], data[index+9] + }; - for (unsigned int i = 0 ; i < size; i++) + for (size_t i = 0 ; i < NUMBER_OF_MODELS; i++) { if (memcmp(model, KnownModels[i], 10) == 0) { diff --git a/components/panasonic_heatpump/decode.h b/components/panasonic_heatpump/decode.h index 7c59bbc..ff21545 100755 --- a/components/panasonic_heatpump/decode.h +++ b/components/panasonic_heatpump/decode.h @@ -66,7 +66,6 @@ public: static const constexpr char* const LiquidType[] = {"2", "Water", "Glycol"}; static const constexpr char* const ExtPadHeaterType[] = {"3", "Disabled", "Type-A","Type-B"}; static const constexpr char* const Bivalent[] = {"6", "Off", "Alternativ", "A-Off", "Parallel", "P-Off", "Parallel Advanced"}; - static const constexpr char* const ModelNames[] = { "51", //string representation of number of known models (last model number + 1) @@ -122,60 +121,4 @@ public: "IDU:WH-SXC09H3E5, ODU:WH-UX09HE5", //49 "IDU:WH-SXC12H9E8, ODU:WH-UX12HE8", //50 }; - - // stores the bytes #129 to #138 of known models in the same order as the ModelNames above - static constexpr uint8_t KnownModels[NUMBER_OF_MODELS][10] = - { - 0xE2, 0xCF, 0x0B, 0x13, 0x33, 0x32, 0xD1, 0x0C, 0x16, 0x33, //0 - 0xE2, 0xCF, 0x0B, 0x14, 0x33, 0x42, 0xD1, 0x0B, 0x17, 0x33, //1 - 0xE2, 0xCF, 0x0D, 0x77, 0x09, 0x12, 0xD0, 0x0B, 0x05, 0x11, //2 - 0xE2, 0xCF, 0x0C, 0x88, 0x05, 0x12, 0xD0, 0x0B, 0x97, 0x05, //3 - 0xE2, 0xCF, 0x0D, 0x85, 0x05, 0x12, 0xD0, 0x0C, 0x94, 0x05, //4 - 0xE2, 0xCF, 0x0D, 0x86, 0x05, 0x12, 0xD0, 0x0C, 0x95, 0x05, //5 - 0xE2, 0xCF, 0x0D, 0x87, 0x05, 0x12, 0xD0, 0x0C, 0x96, 0x05, //6 - 0xE2, 0xCE, 0x0D, 0x71, 0x81, 0x72, 0xCE, 0x0C, 0x92, 0x81, //7 - 0x62, 0xD2, 0x0B, 0x43, 0x54, 0x42, 0xD2, 0x0B, 0x72, 0x66, //8 - 0xC2, 0xD3, 0x0B, 0x33, 0x65, 0xB2, 0xD3, 0x0B, 0x94, 0x65, //9 - 0xE2, 0xCF, 0x0B, 0x15, 0x33, 0x42, 0xD1, 0x0B, 0x18, 0x33, //10 - 0xE2, 0xCF, 0x0B, 0x41, 0x34, 0x82, 0xD1, 0x0B, 0x31, 0x35, //11 - 0x62, 0xD2, 0x0B, 0x45, 0x54, 0x42, 0xD2, 0x0B, 0x47, 0x55, //12 - 0xE2, 0xCF, 0x0C, 0x74, 0x09, 0x12, 0xD0, 0x0D, 0x95, 0x05, //13 - 0xE2, 0xCF, 0x0B, 0x82, 0x05, 0x12, 0xD0, 0x0C, 0x91, 0x05, //14 - 0xE2, 0xCF, 0x0C, 0x55, 0x14, 0x12, 0xD0, 0x0B, 0x15, 0x08, //15 - 0xE2, 0xCF, 0x0C, 0x43, 0x00, 0x12, 0xD0, 0x0B, 0x15, 0x08, //16 - 0x62, 0xD2, 0x0B, 0x45, 0x54, 0x32, 0xD2, 0x0C, 0x45, 0x55, //17 - 0x62, 0xD2, 0x0B, 0x43, 0x54, 0x42, 0xD2, 0x0C, 0x46, 0x55, //18 - 0xE2, 0xCF, 0x0C, 0x54, 0x14, 0x12, 0xD0, 0x0B, 0x14, 0x08, //19 - 0xC2, 0xD3, 0x0B, 0x34, 0x65, 0xB2, 0xD3, 0x0B, 0x95, 0x65, //20 - 0xC2, 0xD3, 0x0B, 0x35, 0x65, 0xB2, 0xD3, 0x0B, 0x96, 0x65, //21 - 0x62, 0xD2, 0x0B, 0x41, 0x54, 0x32, 0xD2, 0x0C, 0x45, 0x55, //22 - 0x32, 0xD4, 0x0B, 0x87, 0x84, 0x73, 0x90, 0x0C, 0x84, 0x84, //23 - 0x32, 0xD4, 0x0B, 0x88, 0x84, 0x73, 0x90, 0x0C, 0x85, 0x84, //24 - 0xE2, 0xCF, 0x0B, 0x75, 0x09, 0x12, 0xD0, 0x0C, 0x06, 0x11, //25 - 0x42, 0xD4, 0x0B, 0x83, 0x71, 0x42, 0xD2, 0x0C, 0x46, 0x55, //26 - 0xC2, 0xD3, 0x0C, 0x34, 0x65, 0xB2, 0xD3, 0x0B, 0x95, 0x65, //27 - 0xC2, 0xD3, 0x0C, 0x33, 0x65, 0xB2, 0xD3, 0x0B, 0x94, 0x65, //28 - 0xE2, 0xCF, 0x0B, 0x83, 0x05, 0x12, 0xD0, 0x0D, 0x92, 0x05, //29 - 0xE2, 0xCF, 0x0C, 0x78, 0x09, 0x12, 0xD0, 0x0B, 0x06, 0x11, //30 - 0xC2, 0xD3, 0x0C, 0x35, 0x65, 0xB2, 0xD3, 0x0B, 0x96, 0x65, //31 - 0x32, 0xD4, 0x0B, 0x99, 0x77, 0x62, 0x90, 0x0B, 0x01, 0x78, //32 - 0x42, 0xD4, 0x0B, 0x15, 0x76, 0x12, 0xD0, 0x0B, 0x10, 0x11, //33 - 0xE2, 0xD5, 0x0C, 0x29, 0x99, 0x83, 0x92, 0x0C, 0x28, 0x98, //34 - 0xE2, 0xCF, 0x0D, 0x85, 0x05, 0x12, 0xD0, 0x0E, 0x94, 0x05, //35 - 0xE2, 0xD5, 0x0D, 0x36, 0x99, 0x02, 0xD6, 0x0F, 0x67, 0x95, //36 - 0xE2, 0xD5, 0x0B, 0x08, 0x95, 0x02, 0xD6, 0x0E, 0x66, 0x95, //37 - 0xE2, 0xD5, 0x0B, 0x34, 0x99, 0x83, 0x92, 0x0C, 0x29, 0x98, //38 - 0xE2, 0xCF, 0x0C, 0x89, 0x05, 0x12, 0xD0, 0x0C, 0x98, 0x05, //39 - 0xE2, 0xD5, 0x0B, 0x08, 0x95, 0x02, 0xD6, 0x0E, 0x67, 0x95, //40 - 0xE2, 0xCF, 0x0C, 0x74, 0x09, 0x12, 0xD0, 0x0C, 0x96, 0x05, //41 - 0xE2, 0xCF, 0x0C, 0x74, 0x09, 0x12, 0xD0, 0x0E, 0x95, 0x05, //42 - 0x32, 0xD4, 0x0B, 0x89, 0x84, 0x73, 0x90, 0x0C, 0x86, 0x84, //43 - 0x32, 0xD4, 0x0B, 0x00, 0x78, 0x62, 0x90, 0x0B, 0x02, 0x78, //44 - 0xE2, 0xCF, 0x0B, 0x82, 0x05, 0x12, 0xD0, 0x0D, 0x91, 0x05, //45 - 0xE2, 0xD5, 0x0D, 0x99, 0x94, 0x02, 0xD6, 0x0D, 0x68, 0x95, //46 - 0xE2, 0xCF, 0x0C, 0x74, 0x09, 0x12, 0xD0, 0x0C, 0x95, 0x05, //47 - 0xE2, 0xD5, 0x0B, 0x34, 0x99, 0x83, 0x92, 0x0C, 0x28, 0x98, //48 - 0xE2, 0xCF, 0x0D, 0x77, 0x09, 0x12, 0xD0, 0x0C, 0x05, 0x11, //49 - 0xE2, 0xCF, 0x0D, 0x86, 0x05, 0x12, 0xD0, 0x0E, 0x95, 0x05, //50 - }; }; diff --git a/components/panasonic_heatpump/panasonic_heatpump.cpp b/components/panasonic_heatpump/panasonic_heatpump.cpp index 6ae00bc..99b7436 100644 --- a/components/panasonic_heatpump/panasonic_heatpump.cpp +++ b/components/panasonic_heatpump/panasonic_heatpump.cpp @@ -249,7 +249,7 @@ namespace esphome if (this->top59_text_sensor_) this->top59_text_sensor_->publish_state(PanasonicDecode::getTextState(PanasonicDecode::BlockedFree, PanasonicDecode::getBit7and8(bytes[9]))); if (this->top76_text_sensor_) this->top76_text_sensor_->publish_state(PanasonicDecode::getTextState(PanasonicDecode::HeatCoolModeDesc, PanasonicDecode::getBit7and8(bytes[28]))); if (this->top81_text_sensor_) this->top81_text_sensor_->publish_state(PanasonicDecode::getTextState(PanasonicDecode::HeatCoolModeDesc, PanasonicDecode::getBit5and6(bytes[28]))); - // if (this->top92_text_sensor_) this->top92_text_sensor_->publish_state(PanasonicDecode::getTextState(PanasonicDecode::ModelNames, PanasonicDecode::getModel(bytes, 129))); + if (this->top92_text_sensor_) this->top92_text_sensor_->publish_state(PanasonicDecode::getTextState(PanasonicDecode::ModelNames, PanasonicDecode::getModel(bytes, 129))); if (this->top94_text_sensor_) this->top94_text_sensor_->publish_state(PanasonicDecode::getTextState(PanasonicDecode::ZonesState, PanasonicDecode::getBit1and2(bytes[6]))); if (this->top101_text_sensor_) this->top101_text_sensor_->publish_state(PanasonicDecode::getTextState(PanasonicDecode::SolarModeDesc, PanasonicDecode::getBit3and4(bytes[24]))); if (this->top106_text_sensor_) this->top106_text_sensor_->publish_state(PanasonicDecode::getTextState(PanasonicDecode::PumpFlowRateMode, PanasonicDecode::getBit3and4(bytes[29]))); diff --git a/components/panasonic_heatpump/panasonic_heatpump.h b/components/panasonic_heatpump/panasonic_heatpump.h index 186abc1..7619e97 100755 --- a/components/panasonic_heatpump/panasonic_heatpump.h +++ b/components/panasonic_heatpump/panasonic_heatpump.h @@ -151,7 +151,7 @@ namespace esphome SUB_TEXT_SENSOR(top59); SUB_TEXT_SENSOR(top76); SUB_TEXT_SENSOR(top81); - // SUB_TEXT_SENSOR(top92); + SUB_TEXT_SENSOR(top92); SUB_TEXT_SENSOR(top94); SUB_TEXT_SENSOR(top101); SUB_TEXT_SENSOR(top106); diff --git a/components/panasonic_heatpump/sensor.py b/components/panasonic_heatpump/sensor.py index d695742..012f553 100755 --- a/components/panasonic_heatpump/sensor.py +++ b/components/panasonic_heatpump/sensor.py @@ -16,17 +16,20 @@ from esphome.const import ( DEVICE_CLASS_POWER, DEVICE_CLASS_PRESSURE, DEVICE_CLASS_CURRENT, + DEVICE_CLASS_VOLUME_FLOW_RATE, STATE_CLASS_MEASUREMENT, STATE_CLASS_TOTAL_INCREASING, ICON_COUNTER, ) from . import PanasonicHeatpumpComponent, CONF_PANASONIC_HEATPUMP_ID -UNIT_LITRE_PER_MINUTE = "l/min" +UNIT_LITRE_PER_MINUTE = "L/min" UNIT_ROTATIONS_PER_MINUTE = "r/min" UNIT_PRESSURE_KGFCM2 = "kgf/cm²" UNIT_BAR = "bar" +ICON_FAN_SPEED = "mdi:fan" + CONF_SENS_TOP1 = "top1" CONF_SENS_TOP5 = "top5" CONF_SENS_TOP6 = "top6" @@ -225,6 +228,8 @@ CONFIG_SCHEMA = cv.All( cv.GenerateID(CONF_PANASONIC_HEATPUMP_ID): cv.use_id(PanasonicHeatpumpComponent), cv.Optional(CONF_SENS_TOP1): sensor.sensor_schema( + device_class=DEVICE_CLASS_VOLUME_FLOW_RATE, + state_class=STATE_CLASS_MEASUREMENT, unit_of_measurement = UNIT_LITRE_PER_MINUTE, ), cv.Optional(CONF_SENS_TOP5): sensor.sensor_schema( @@ -457,9 +462,11 @@ CONFIG_SCHEMA = cv.All( unit_of_measurement = UNIT_CELSIUS, ), cv.Optional(CONF_SENS_TOP62): sensor.sensor_schema( + icon=ICON_FAN_SPEED, unit_of_measurement = UNIT_ROTATIONS_PER_MINUTE, ), cv.Optional(CONF_SENS_TOP63): sensor.sensor_schema( + icon=ICON_FAN_SPEED, unit_of_measurement = UNIT_ROTATIONS_PER_MINUTE, ), cv.Optional(CONF_SENS_TOP64): sensor.sensor_schema( diff --git a/components/panasonic_heatpump/text_sensor.py b/components/panasonic_heatpump/text_sensor.py index 036f5c3..949516a 100755 --- a/components/panasonic_heatpump/text_sensor.py +++ b/components/panasonic_heatpump/text_sensor.py @@ -6,6 +6,22 @@ from esphome.const import ( ) from . import PanasonicHeatpumpComponent, CONF_PANASONIC_HEATPUMP_ID +ICON_OPERATING_MODE = "mdi:thermostat" +ICON_POWERFUL_MODE = "mdi:arm-flex" +ICON_QUIET_MODE = "mdi:sleep" +ICON_HOLIDAY_MODE = "mdi:palm-tree" +ICON_ERROR = "mdi:close-circle" +ICON_BLOCKED = "mdi:cancel" +ICON_HEATING_MODE = "mdi:fire" +ICON_COOLING_MODE = "mdi:snowflake" +ICON_ZONE = "mdi:texture-box" +ICON_MODEL = "mdi:heat-pump" +ICON_SOLAR_MODE = "mdi:solar-power-variant" +ICON_LIQUID = "mdi:water" +ICON_VALVE = "mdi:pipe-valve" +ICON_PUMP = "mdi:pump" +ICON_EXTERNAL_PAD_HEATER = "mdi:radiator" + CONF_TEXT_SENS_TOP4 = "top4" CONF_TEXT_SENS_TOP17 = "top17" CONF_TEXT_SENS_TOP18 = "top18" @@ -53,24 +69,56 @@ CONFIG_SCHEMA = cv.All( { cv.GenerateID(CONF_PANASONIC_HEATPUMP_ID): cv.use_id(PanasonicHeatpumpComponent), - cv.Optional(CONF_TEXT_SENS_TOP4): text_sensor.text_sensor_schema(), - cv.Optional(CONF_TEXT_SENS_TOP17): text_sensor.text_sensor_schema(), - cv.Optional(CONF_TEXT_SENS_TOP18): text_sensor.text_sensor_schema(), - cv.Optional(CONF_TEXT_SENS_TOP19): text_sensor.text_sensor_schema(), - cv.Optional(CONF_TEXT_SENS_TOP20): text_sensor.text_sensor_schema(), - cv.Optional(CONF_TEXT_SENS_TOP44): text_sensor.text_sensor_schema(), - cv.Optional(CONF_TEXT_SENS_TOP58): text_sensor.text_sensor_schema(), - cv.Optional(CONF_TEXT_SENS_TOP59): text_sensor.text_sensor_schema(), - cv.Optional(CONF_TEXT_SENS_TOP76): text_sensor.text_sensor_schema(), - cv.Optional(CONF_TEXT_SENS_TOP81): text_sensor.text_sensor_schema(), - cv.Optional(CONF_TEXT_SENS_TOP92): text_sensor.text_sensor_schema(), - cv.Optional(CONF_TEXT_SENS_TOP94): text_sensor.text_sensor_schema(), - cv.Optional(CONF_TEXT_SENS_TOP101): text_sensor.text_sensor_schema(), - cv.Optional(CONF_TEXT_SENS_TOP106): text_sensor.text_sensor_schema(), - cv.Optional(CONF_TEXT_SENS_TOP107): text_sensor.text_sensor_schema(), + cv.Optional(CONF_TEXT_SENS_TOP4): text_sensor.text_sensor_schema( + icon=ICON_OPERATING_MODE, + ), + cv.Optional(CONF_TEXT_SENS_TOP17): text_sensor.text_sensor_schema( + icon=ICON_POWERFUL_MODE, + ), + cv.Optional(CONF_TEXT_SENS_TOP18): text_sensor.text_sensor_schema( + icon=ICON_QUIET_MODE, + ), + cv.Optional(CONF_TEXT_SENS_TOP19): text_sensor.text_sensor_schema( + icon=ICON_HOLIDAY_MODE, + ), + cv.Optional(CONF_TEXT_SENS_TOP20): text_sensor.text_sensor_schema( + icon=ICON_VALVE, + ), + cv.Optional(CONF_TEXT_SENS_TOP44): text_sensor.text_sensor_schema( + icon=ICON_ERROR, + ), + cv.Optional(CONF_TEXT_SENS_TOP58): text_sensor.text_sensor_schema( + icon=ICON_BLOCKED, + ), + cv.Optional(CONF_TEXT_SENS_TOP59): text_sensor.text_sensor_schema( + icon=ICON_BLOCKED, + ), + cv.Optional(CONF_TEXT_SENS_TOP76): text_sensor.text_sensor_schema( + icon=ICON_HEATING_MODE, + ), + cv.Optional(CONF_TEXT_SENS_TOP81): text_sensor.text_sensor_schema( + icon=ICON_COOLING_MODE, + ), + cv.Optional(CONF_TEXT_SENS_TOP92): text_sensor.text_sensor_schema( + icon=ICON_MODEL, + ), + cv.Optional(CONF_TEXT_SENS_TOP94): text_sensor.text_sensor_schema( + icon=ICON_ZONE, + ), + cv.Optional(CONF_TEXT_SENS_TOP101): text_sensor.text_sensor_schema( + icon=ICON_SOLAR_MODE, + ), + cv.Optional(CONF_TEXT_SENS_TOP106): text_sensor.text_sensor_schema( + icon=ICON_PUMP, + ), + cv.Optional(CONF_TEXT_SENS_TOP107): text_sensor.text_sensor_schema( + icon=ICON_LIQUID, + ), cv.Optional(CONF_TEXT_SENS_TOP111): text_sensor.text_sensor_schema(), cv.Optional(CONF_TEXT_SENS_TOP112): text_sensor.text_sensor_schema(), - cv.Optional(CONF_TEXT_SENS_TOP114): text_sensor.text_sensor_schema(), + cv.Optional(CONF_TEXT_SENS_TOP114): text_sensor.text_sensor_schema( + icon=ICON_EXTERNAL_PAD_HEATER, + ), cv.Optional(CONF_TEXT_SENS_TOP124): text_sensor.text_sensor_schema(), } ).extend(cv.COMPONENT_SCHEMA) diff --git a/example_panasonic_heatpump.yaml b/example_panasonic_heatpump.yaml index da00d9d..4101b52 100755 --- a/example_panasonic_heatpump.yaml +++ b/example_panasonic_heatpump.yaml @@ -322,8 +322,8 @@ text_sensor: name: "Heating Mode" top81: name: "Cooling Mode" - #top92: - #name: "Heat Pump Model" + top92: + name: "Heat Pump Model" top94: name: "Zones State" top101: