From 1848863966c9c0f7b38b96868e0846f4467408ca Mon Sep 17 00:00:00 2001 From: ElVit Date: Sun, 9 Feb 2025 17:24:14 +0100 Subject: [PATCH 1/6] Minor changes --- .../binary_sensor/__init__.py | 160 +-- .../panasonic_heatpump_binary_sensor.h | 1 - .../panasonic_heatpump/sensor/__init__.py | 1116 ++++++++--------- .../sensor/panasonic_heatpump_sensor.h | 1 - .../switch/panasonic_heatpump_switch.h | 1 - .../text_sensor/__init__.py | 162 +-- .../panasonic_heatpump_text_sensor.h | 1 - 7 files changed, 719 insertions(+), 723 deletions(-) diff --git a/components/panasonic_heatpump/binary_sensor/__init__.py b/components/panasonic_heatpump/binary_sensor/__init__.py index f15e868..e334744 100644 --- a/components/panasonic_heatpump/binary_sensor/__init__.py +++ b/components/panasonic_heatpump/binary_sensor/__init__.py @@ -61,87 +61,87 @@ PanasonicHeatpumpBinarySensor = panasonic_heatpump_ns.class_("PanasonicHeatpumpB CONFIG_SCHEMA = cv.Schema( { - cv.GenerateID(CONF_PANASONIC_HEATPUMP_ID): cv.use_id(PanasonicHeatpumpComponent), + cv.GenerateID(CONF_PANASONIC_HEATPUMP_ID): cv.use_id(PanasonicHeatpumpComponent), - cv.Optional(CONF_TOP0): binary_sensor.binary_sensor_schema( - PanasonicHeatpumpBinarySensor, - device_class = DEVICE_CLASS_RUNNING, - ), - cv.Optional(CONF_TOP2): binary_sensor.binary_sensor_schema( - PanasonicHeatpumpBinarySensor, - device_class = DEVICE_CLASS_RUNNING, - ), - cv.Optional(CONF_TOP3): binary_sensor.binary_sensor_schema( - PanasonicHeatpumpBinarySensor, - device_class = DEVICE_CLASS_RUNNING, - ), - cv.Optional(CONF_TOP13): binary_sensor.binary_sensor_schema( - PanasonicHeatpumpBinarySensor, - device_class = DEVICE_CLASS_RUNNING, - ), - cv.Optional(CONF_TOP26): binary_sensor.binary_sensor_schema( - PanasonicHeatpumpBinarySensor, - device_class = DEVICE_CLASS_RUNNING, - ), - cv.Optional(CONF_TOP60): binary_sensor.binary_sensor_schema( - PanasonicHeatpumpBinarySensor, - device_class = DEVICE_CLASS_RUNNING, - ), - cv.Optional(CONF_TOP61): binary_sensor.binary_sensor_schema( - PanasonicHeatpumpBinarySensor, - device_class = DEVICE_CLASS_RUNNING, - ), - cv.Optional(CONF_TOP68): binary_sensor.binary_sensor_schema( - PanasonicHeatpumpBinarySensor, - device_class = DEVICE_CLASS_RUNNING, - ), - cv.Optional(CONF_TOP69): binary_sensor.binary_sensor_schema( - PanasonicHeatpumpBinarySensor, - device_class = DEVICE_CLASS_RUNNING, - ), - cv.Optional(CONF_TOP99): binary_sensor.binary_sensor_schema( - PanasonicHeatpumpBinarySensor, - ), - cv.Optional(CONF_TOP100): binary_sensor.binary_sensor_schema( - PanasonicHeatpumpBinarySensor, - ), - cv.Optional(CONF_TOP108): binary_sensor.binary_sensor_schema( - PanasonicHeatpumpBinarySensor, - ), - cv.Optional(CONF_TOP109): binary_sensor.binary_sensor_schema( - PanasonicHeatpumpBinarySensor, - device_class = DEVICE_CLASS_RUNNING, - ), - cv.Optional(CONF_TOP110): binary_sensor.binary_sensor_schema( - PanasonicHeatpumpBinarySensor, - ), - cv.Optional(CONF_TOP119): binary_sensor.binary_sensor_schema( - PanasonicHeatpumpBinarySensor, - ), - cv.Optional(CONF_TOP120): binary_sensor.binary_sensor_schema( - PanasonicHeatpumpBinarySensor, - ), - cv.Optional(CONF_TOP121): binary_sensor.binary_sensor_schema( - PanasonicHeatpumpBinarySensor, - ), - cv.Optional(CONF_TOP122): binary_sensor.binary_sensor_schema( - PanasonicHeatpumpBinarySensor, - ), - cv.Optional(CONF_TOP123): binary_sensor.binary_sensor_schema( - PanasonicHeatpumpBinarySensor, - ), - cv.Optional(CONF_TOP124): binary_sensor.binary_sensor_schema( - PanasonicHeatpumpBinarySensor, - ), - cv.Optional(CONF_TOP129): binary_sensor.binary_sensor_schema( - PanasonicHeatpumpBinarySensor, - ), - cv.Optional(CONF_TOP132): binary_sensor.binary_sensor_schema( - PanasonicHeatpumpBinarySensor, - ), - cv.Optional(CONF_TOP133): binary_sensor.binary_sensor_schema( - PanasonicHeatpumpBinarySensor, - ), + cv.Optional(CONF_TOP0): binary_sensor.binary_sensor_schema( + PanasonicHeatpumpBinarySensor, + device_class = DEVICE_CLASS_RUNNING, + ), + cv.Optional(CONF_TOP2): binary_sensor.binary_sensor_schema( + PanasonicHeatpumpBinarySensor, + device_class = DEVICE_CLASS_RUNNING, + ), + cv.Optional(CONF_TOP3): binary_sensor.binary_sensor_schema( + PanasonicHeatpumpBinarySensor, + device_class = DEVICE_CLASS_RUNNING, + ), + cv.Optional(CONF_TOP13): binary_sensor.binary_sensor_schema( + PanasonicHeatpumpBinarySensor, + device_class = DEVICE_CLASS_RUNNING, + ), + cv.Optional(CONF_TOP26): binary_sensor.binary_sensor_schema( + PanasonicHeatpumpBinarySensor, + device_class = DEVICE_CLASS_RUNNING, + ), + cv.Optional(CONF_TOP60): binary_sensor.binary_sensor_schema( + PanasonicHeatpumpBinarySensor, + device_class = DEVICE_CLASS_RUNNING, + ), + cv.Optional(CONF_TOP61): binary_sensor.binary_sensor_schema( + PanasonicHeatpumpBinarySensor, + device_class = DEVICE_CLASS_RUNNING, + ), + cv.Optional(CONF_TOP68): binary_sensor.binary_sensor_schema( + PanasonicHeatpumpBinarySensor, + device_class = DEVICE_CLASS_RUNNING, + ), + cv.Optional(CONF_TOP69): binary_sensor.binary_sensor_schema( + PanasonicHeatpumpBinarySensor, + device_class = DEVICE_CLASS_RUNNING, + ), + cv.Optional(CONF_TOP99): binary_sensor.binary_sensor_schema( + PanasonicHeatpumpBinarySensor, + ), + cv.Optional(CONF_TOP100): binary_sensor.binary_sensor_schema( + PanasonicHeatpumpBinarySensor, + ), + cv.Optional(CONF_TOP108): binary_sensor.binary_sensor_schema( + PanasonicHeatpumpBinarySensor, + ), + cv.Optional(CONF_TOP109): binary_sensor.binary_sensor_schema( + PanasonicHeatpumpBinarySensor, + device_class = DEVICE_CLASS_RUNNING, + ), + cv.Optional(CONF_TOP110): binary_sensor.binary_sensor_schema( + PanasonicHeatpumpBinarySensor, + ), + cv.Optional(CONF_TOP119): binary_sensor.binary_sensor_schema( + PanasonicHeatpumpBinarySensor, + ), + cv.Optional(CONF_TOP120): binary_sensor.binary_sensor_schema( + PanasonicHeatpumpBinarySensor, + ), + cv.Optional(CONF_TOP121): binary_sensor.binary_sensor_schema( + PanasonicHeatpumpBinarySensor, + ), + cv.Optional(CONF_TOP122): binary_sensor.binary_sensor_schema( + PanasonicHeatpumpBinarySensor, + ), + cv.Optional(CONF_TOP123): binary_sensor.binary_sensor_schema( + PanasonicHeatpumpBinarySensor, + ), + cv.Optional(CONF_TOP124): binary_sensor.binary_sensor_schema( + PanasonicHeatpumpBinarySensor, + ), + cv.Optional(CONF_TOP129): binary_sensor.binary_sensor_schema( + PanasonicHeatpumpBinarySensor, + ), + cv.Optional(CONF_TOP132): binary_sensor.binary_sensor_schema( + PanasonicHeatpumpBinarySensor, + ), + cv.Optional(CONF_TOP133): binary_sensor.binary_sensor_schema( + PanasonicHeatpumpBinarySensor, + ), } ).extend(cv.COMPONENT_SCHEMA) diff --git a/components/panasonic_heatpump/binary_sensor/panasonic_heatpump_binary_sensor.h b/components/panasonic_heatpump/binary_sensor/panasonic_heatpump_binary_sensor.h index 4283ce8..8d620ba 100644 --- a/components/panasonic_heatpump/binary_sensor/panasonic_heatpump_binary_sensor.h +++ b/components/panasonic_heatpump/binary_sensor/panasonic_heatpump_binary_sensor.h @@ -8,7 +8,6 @@ namespace esphome { namespace panasonic_heatpump { - class PanasonicHeatpumpComponent; class PanasonicHeatpumpBinarySensor : public binary_sensor::BinarySensor, public Component, public Parented { public: diff --git a/components/panasonic_heatpump/sensor/__init__.py b/components/panasonic_heatpump/sensor/__init__.py index ffcc1b7..4366194 100644 --- a/components/panasonic_heatpump/sensor/__init__.py +++ b/components/panasonic_heatpump/sensor/__init__.py @@ -230,565 +230,565 @@ PanasonicHeatpumpSensor = panasonic_heatpump_ns.class_("PanasonicHeatpumpSensor" CONFIG_SCHEMA = cv.Schema( { - cv.GenerateID(CONF_PANASONIC_HEATPUMP_ID): cv.use_id(PanasonicHeatpumpComponent), + cv.GenerateID(CONF_PANASONIC_HEATPUMP_ID): cv.use_id(PanasonicHeatpumpComponent), - cv.Optional(CONF_TOP1): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_VOLUME_FLOW_RATE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_LITRE_PER_MINUTE, - ), - cv.Optional(CONF_TOP5): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP6): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP7): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP8): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_FREQUENCY, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_HERTZ, - ), - cv.Optional(CONF_TOP9): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP10): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP11): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_DURATION, - state_class=STATE_CLASS_TOTAL_INCREASING, - unit_of_measurement = UNIT_HOUR, - ), - cv.Optional(CONF_TOP12): sensor.sensor_schema( - PanasonicHeatpumpSensor, - unit_of_measurement=UNIT_EMPTY, - icon=ICON_COUNTER, - ), - cv.Optional(CONF_TOP14): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP15): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_POWER, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_WATT, - ), - cv.Optional(CONF_TOP16): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_POWER, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_WATT, - ), - cv.Optional(CONF_TOP21): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP22): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_KELVIN, - ), - cv.Optional(CONF_TOP23): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_KELVIN, - ), - cv.Optional(CONF_TOP24): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_KELVIN, - ), - cv.Optional(CONF_TOP25): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_KELVIN, - ), - cv.Optional(CONF_TOP27): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP28): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP29): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP30): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP31): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP32): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP33): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP34): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP35): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP36): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP37): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP38): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_POWER, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_WATT, - ), - cv.Optional(CONF_TOP39): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_POWER, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_WATT, - ), - cv.Optional(CONF_TOP40): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_POWER, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_WATT, - ), - cv.Optional(CONF_TOP41): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_POWER, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_WATT, - ), - cv.Optional(CONF_TOP42): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP43): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP45): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_KELVIN, - ), - cv.Optional(CONF_TOP46): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP47): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP48): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP49): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP50): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP51): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP52): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP53): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP54): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP55): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP56): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP57): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP62): sensor.sensor_schema( - PanasonicHeatpumpSensor, - icon=ICON_FAN_SPEED, - unit_of_measurement = UNIT_ROTATIONS_PER_MINUTE, - ), - cv.Optional(CONF_TOP63): sensor.sensor_schema( - PanasonicHeatpumpSensor, - icon=ICON_FAN_SPEED, - unit_of_measurement = UNIT_ROTATIONS_PER_MINUTE, - ), - cv.Optional(CONF_TOP64): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_PRESSURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_PRESSURE_KGFCM2, - ), - cv.Optional(CONF_TOP65): sensor.sensor_schema( - PanasonicHeatpumpSensor, - unit_of_measurement = UNIT_ROTATIONS_PER_MINUTE, - ), - cv.Optional(CONF_TOP66): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_PRESSURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_PRESSURE_KGFCM2, - ), - cv.Optional(CONF_TOP67): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_CURRENT, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_AMPERE, - ), - cv.Optional(CONF_TOP70): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP71): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_DURATION, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_MINUTE, - ), - cv.Optional(CONF_TOP72): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP73): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP74): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP75): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP77): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP78): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP79): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP80): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP82): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP83): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP84): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP85): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP86): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP87): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP88): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP89): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP90): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_DURATION, - state_class=STATE_CLASS_TOTAL_INCREASING, - unit_of_measurement = UNIT_HOUR, - ), - cv.Optional(CONF_TOP91): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_DURATION, - state_class=STATE_CLASS_TOTAL_INCREASING, - unit_of_measurement = UNIT_HOUR, - ), - cv.Optional(CONF_TOP93): sensor.sensor_schema( - PanasonicHeatpumpSensor, - ), - cv.Optional(CONF_TOP95): sensor.sensor_schema( - PanasonicHeatpumpSensor, - ), - cv.Optional(CONF_TOP96): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_DURATION, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_MINUTE, - ), - cv.Optional(CONF_TOP97): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_KELVIN, - ), - cv.Optional(CONF_TOP98): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_KELVIN, - ), - cv.Optional(CONF_TOP102): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_KELVIN, - ), - cv.Optional(CONF_TOP103): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_KELVIN, - ), - cv.Optional(CONF_TOP104): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP105): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP113): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_KELVIN, - ), - cv.Optional(CONF_TOP115): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_PRESSURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_BAR, - ), - cv.Optional(CONF_TOP116): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP117): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP118): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP127): sensor.sensor_schema( - PanasonicHeatpumpSensor, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_PERCENT, - ), - cv.Optional(CONF_TOP128): sensor.sensor_schema( - PanasonicHeatpumpSensor, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_PERCENT, - ), - cv.Optional(CONF_TOP131): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP134): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP135): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_CELSIUS, - ), - cv.Optional(CONF_TOP136): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_DURATION, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_MINUTE, - ), - cv.Optional(CONF_TOP137): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_DURATION, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_MINUTE, - ), - cv.Optional(CONF_TOP138): sensor.sensor_schema( - PanasonicHeatpumpSensor, - device_class=DEVICE_CLASS_DURATION, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement = UNIT_MINUTE, - ), + cv.Optional(CONF_TOP1): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_VOLUME_FLOW_RATE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_LITRE_PER_MINUTE, + ), + cv.Optional(CONF_TOP5): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP6): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP7): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP8): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_FREQUENCY, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_HERTZ, + ), + cv.Optional(CONF_TOP9): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP10): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP11): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_DURATION, + state_class=STATE_CLASS_TOTAL_INCREASING, + unit_of_measurement = UNIT_HOUR, + ), + cv.Optional(CONF_TOP12): sensor.sensor_schema( + PanasonicHeatpumpSensor, + unit_of_measurement=UNIT_EMPTY, + icon=ICON_COUNTER, + ), + cv.Optional(CONF_TOP14): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP15): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_POWER, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_WATT, + ), + cv.Optional(CONF_TOP16): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_POWER, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_WATT, + ), + cv.Optional(CONF_TOP21): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP22): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_KELVIN, + ), + cv.Optional(CONF_TOP23): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_KELVIN, + ), + cv.Optional(CONF_TOP24): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_KELVIN, + ), + cv.Optional(CONF_TOP25): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_KELVIN, + ), + cv.Optional(CONF_TOP27): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP28): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP29): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP30): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP31): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP32): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP33): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP34): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP35): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP36): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP37): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP38): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_POWER, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_WATT, + ), + cv.Optional(CONF_TOP39): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_POWER, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_WATT, + ), + cv.Optional(CONF_TOP40): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_POWER, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_WATT, + ), + cv.Optional(CONF_TOP41): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_POWER, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_WATT, + ), + cv.Optional(CONF_TOP42): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP43): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP45): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_KELVIN, + ), + cv.Optional(CONF_TOP46): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP47): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP48): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP49): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP50): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP51): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP52): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP53): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP54): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP55): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP56): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP57): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP62): sensor.sensor_schema( + PanasonicHeatpumpSensor, + icon=ICON_FAN_SPEED, + unit_of_measurement = UNIT_ROTATIONS_PER_MINUTE, + ), + cv.Optional(CONF_TOP63): sensor.sensor_schema( + PanasonicHeatpumpSensor, + icon=ICON_FAN_SPEED, + unit_of_measurement = UNIT_ROTATIONS_PER_MINUTE, + ), + cv.Optional(CONF_TOP64): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_PRESSURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_PRESSURE_KGFCM2, + ), + cv.Optional(CONF_TOP65): sensor.sensor_schema( + PanasonicHeatpumpSensor, + unit_of_measurement = UNIT_ROTATIONS_PER_MINUTE, + ), + cv.Optional(CONF_TOP66): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_PRESSURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_PRESSURE_KGFCM2, + ), + cv.Optional(CONF_TOP67): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_CURRENT, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_AMPERE, + ), + cv.Optional(CONF_TOP70): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP71): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_DURATION, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_MINUTE, + ), + cv.Optional(CONF_TOP72): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP73): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP74): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP75): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP77): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP78): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP79): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP80): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP82): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP83): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP84): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP85): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP86): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP87): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP88): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP89): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP90): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_DURATION, + state_class=STATE_CLASS_TOTAL_INCREASING, + unit_of_measurement = UNIT_HOUR, + ), + cv.Optional(CONF_TOP91): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_DURATION, + state_class=STATE_CLASS_TOTAL_INCREASING, + unit_of_measurement = UNIT_HOUR, + ), + cv.Optional(CONF_TOP93): sensor.sensor_schema( + PanasonicHeatpumpSensor, + ), + cv.Optional(CONF_TOP95): sensor.sensor_schema( + PanasonicHeatpumpSensor, + ), + cv.Optional(CONF_TOP96): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_DURATION, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_MINUTE, + ), + cv.Optional(CONF_TOP97): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_KELVIN, + ), + cv.Optional(CONF_TOP98): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_KELVIN, + ), + cv.Optional(CONF_TOP102): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_KELVIN, + ), + cv.Optional(CONF_TOP103): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_KELVIN, + ), + cv.Optional(CONF_TOP104): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP105): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP113): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_KELVIN, + ), + cv.Optional(CONF_TOP115): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_PRESSURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_BAR, + ), + cv.Optional(CONF_TOP116): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP117): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP118): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP127): sensor.sensor_schema( + PanasonicHeatpumpSensor, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_PERCENT, + ), + cv.Optional(CONF_TOP128): sensor.sensor_schema( + PanasonicHeatpumpSensor, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_PERCENT, + ), + cv.Optional(CONF_TOP131): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP134): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP135): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_CELSIUS, + ), + cv.Optional(CONF_TOP136): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_DURATION, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_MINUTE, + ), + cv.Optional(CONF_TOP137): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_DURATION, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_MINUTE, + ), + cv.Optional(CONF_TOP138): sensor.sensor_schema( + PanasonicHeatpumpSensor, + device_class=DEVICE_CLASS_DURATION, + state_class=STATE_CLASS_MEASUREMENT, + unit_of_measurement = UNIT_MINUTE, + ), } ).extend(cv.COMPONENT_SCHEMA) diff --git a/components/panasonic_heatpump/sensor/panasonic_heatpump_sensor.h b/components/panasonic_heatpump/sensor/panasonic_heatpump_sensor.h index 64447e6..82072b9 100644 --- a/components/panasonic_heatpump/sensor/panasonic_heatpump_sensor.h +++ b/components/panasonic_heatpump/sensor/panasonic_heatpump_sensor.h @@ -8,7 +8,6 @@ namespace esphome { namespace panasonic_heatpump { - class PanasonicHeatpumpComponent; class PanasonicHeatpumpSensor : public sensor::Sensor, public Component, public Parented { public: diff --git a/components/panasonic_heatpump/switch/panasonic_heatpump_switch.h b/components/panasonic_heatpump/switch/panasonic_heatpump_switch.h index a7abd93..7fd5264 100644 --- a/components/panasonic_heatpump/switch/panasonic_heatpump_switch.h +++ b/components/panasonic_heatpump/switch/panasonic_heatpump_switch.h @@ -8,7 +8,6 @@ namespace esphome { namespace panasonic_heatpump { - class PanasonicHeatpumpComponent; class PanasonicHeatpumpSwitch : public switch_::Switch, public Component, public Parented { public: diff --git a/components/panasonic_heatpump/text_sensor/__init__.py b/components/panasonic_heatpump/text_sensor/__init__.py index 275e3ca..5d44cc0 100644 --- a/components/panasonic_heatpump/text_sensor/__init__.py +++ b/components/panasonic_heatpump/text_sensor/__init__.py @@ -74,88 +74,88 @@ PanasonicHeatpumpTextSensor = panasonic_heatpump_ns.class_("PanasonicHeatpumpTex CONFIG_SCHEMA = cv.Schema( { - cv.GenerateID(CONF_PANASONIC_HEATPUMP_ID): cv.use_id(PanasonicHeatpumpComponent), + cv.GenerateID(CONF_PANASONIC_HEATPUMP_ID): cv.use_id(PanasonicHeatpumpComponent), - cv.Optional(CONF_TOP4): text_sensor.text_sensor_schema( - PanasonicHeatpumpTextSensor, - icon=ICON_OPERATING_MODE, - ), - cv.Optional(CONF_TOP17): text_sensor.text_sensor_schema( - PanasonicHeatpumpTextSensor, - icon=ICON_POWERFUL_MODE, - ), - cv.Optional(CONF_TOP18): text_sensor.text_sensor_schema( - PanasonicHeatpumpTextSensor, - icon=ICON_QUIET_MODE, - ), - cv.Optional(CONF_TOP19): text_sensor.text_sensor_schema( - PanasonicHeatpumpTextSensor, - icon=ICON_HOLIDAY_MODE, - ), - cv.Optional(CONF_TOP20): text_sensor.text_sensor_schema( - PanasonicHeatpumpTextSensor, - icon=ICON_VALVE, - ), - cv.Optional(CONF_TOP44): text_sensor.text_sensor_schema( - PanasonicHeatpumpTextSensor, - icon=ICON_ERROR, - ), - cv.Optional(CONF_TOP58): text_sensor.text_sensor_schema( - PanasonicHeatpumpTextSensor, - icon=ICON_BLOCKED, - ), - cv.Optional(CONF_TOP59): text_sensor.text_sensor_schema( - PanasonicHeatpumpTextSensor, - icon=ICON_BLOCKED, - ), - cv.Optional(CONF_TOP76): text_sensor.text_sensor_schema( - PanasonicHeatpumpTextSensor, - icon=ICON_HEATING_MODE, - ), - cv.Optional(CONF_TOP81): text_sensor.text_sensor_schema( - PanasonicHeatpumpTextSensor, - icon=ICON_COOLING_MODE, - ), - cv.Optional(CONF_TOP92): text_sensor.text_sensor_schema( - PanasonicHeatpumpTextSensor, - icon=ICON_MODEL, - ), - cv.Optional(CONF_TOP94): text_sensor.text_sensor_schema( - PanasonicHeatpumpTextSensor, - icon=ICON_ZONE, - ), - cv.Optional(CONF_TOP101): text_sensor.text_sensor_schema( - PanasonicHeatpumpTextSensor, - icon=ICON_SOLAR_MODE, - ), - cv.Optional(CONF_TOP106): text_sensor.text_sensor_schema( - PanasonicHeatpumpTextSensor, - icon=ICON_PUMP, - ), - cv.Optional(CONF_TOP107): text_sensor.text_sensor_schema( - PanasonicHeatpumpTextSensor, - icon=ICON_LIQUID, - ), - cv.Optional(CONF_TOP111): text_sensor.text_sensor_schema( - PanasonicHeatpumpTextSensor, - ), - cv.Optional(CONF_TOP112): text_sensor.text_sensor_schema( - PanasonicHeatpumpTextSensor, - ), - cv.Optional(CONF_TOP114): text_sensor.text_sensor_schema( - PanasonicHeatpumpTextSensor, - icon=ICON_EXTERNAL_PAD_HEATER, - ), - cv.Optional(CONF_TOP125): text_sensor.text_sensor_schema( - PanasonicHeatpumpTextSensor, - icon=ICON_VALVE, - ), - cv.Optional(CONF_TOP126): text_sensor.text_sensor_schema( - PanasonicHeatpumpTextSensor, - icon=ICON_VALVE, - ), - cv.Optional(CONF_TOP130): text_sensor.text_sensor_schema( - PanasonicHeatpumpTextSensor,), + cv.Optional(CONF_TOP4): text_sensor.text_sensor_schema( + PanasonicHeatpumpTextSensor, + icon=ICON_OPERATING_MODE, + ), + cv.Optional(CONF_TOP17): text_sensor.text_sensor_schema( + PanasonicHeatpumpTextSensor, + icon=ICON_POWERFUL_MODE, + ), + cv.Optional(CONF_TOP18): text_sensor.text_sensor_schema( + PanasonicHeatpumpTextSensor, + icon=ICON_QUIET_MODE, + ), + cv.Optional(CONF_TOP19): text_sensor.text_sensor_schema( + PanasonicHeatpumpTextSensor, + icon=ICON_HOLIDAY_MODE, + ), + cv.Optional(CONF_TOP20): text_sensor.text_sensor_schema( + PanasonicHeatpumpTextSensor, + icon=ICON_VALVE, + ), + cv.Optional(CONF_TOP44): text_sensor.text_sensor_schema( + PanasonicHeatpumpTextSensor, + icon=ICON_ERROR, + ), + cv.Optional(CONF_TOP58): text_sensor.text_sensor_schema( + PanasonicHeatpumpTextSensor, + icon=ICON_BLOCKED, + ), + cv.Optional(CONF_TOP59): text_sensor.text_sensor_schema( + PanasonicHeatpumpTextSensor, + icon=ICON_BLOCKED, + ), + cv.Optional(CONF_TOP76): text_sensor.text_sensor_schema( + PanasonicHeatpumpTextSensor, + icon=ICON_HEATING_MODE, + ), + cv.Optional(CONF_TOP81): text_sensor.text_sensor_schema( + PanasonicHeatpumpTextSensor, + icon=ICON_COOLING_MODE, + ), + cv.Optional(CONF_TOP92): text_sensor.text_sensor_schema( + PanasonicHeatpumpTextSensor, + icon=ICON_MODEL, + ), + cv.Optional(CONF_TOP94): text_sensor.text_sensor_schema( + PanasonicHeatpumpTextSensor, + icon=ICON_ZONE, + ), + cv.Optional(CONF_TOP101): text_sensor.text_sensor_schema( + PanasonicHeatpumpTextSensor, + icon=ICON_SOLAR_MODE, + ), + cv.Optional(CONF_TOP106): text_sensor.text_sensor_schema( + PanasonicHeatpumpTextSensor, + icon=ICON_PUMP, + ), + cv.Optional(CONF_TOP107): text_sensor.text_sensor_schema( + PanasonicHeatpumpTextSensor, + icon=ICON_LIQUID, + ), + cv.Optional(CONF_TOP111): text_sensor.text_sensor_schema( + PanasonicHeatpumpTextSensor, + ), + cv.Optional(CONF_TOP112): text_sensor.text_sensor_schema( + PanasonicHeatpumpTextSensor, + ), + cv.Optional(CONF_TOP114): text_sensor.text_sensor_schema( + PanasonicHeatpumpTextSensor, + icon=ICON_EXTERNAL_PAD_HEATER, + ), + cv.Optional(CONF_TOP125): text_sensor.text_sensor_schema( + PanasonicHeatpumpTextSensor, + icon=ICON_VALVE, + ), + cv.Optional(CONF_TOP126): text_sensor.text_sensor_schema( + PanasonicHeatpumpTextSensor, + icon=ICON_VALVE, + ), + cv.Optional(CONF_TOP130): text_sensor.text_sensor_schema( + PanasonicHeatpumpTextSensor,), } ).extend(cv.COMPONENT_SCHEMA) diff --git a/components/panasonic_heatpump/text_sensor/panasonic_heatpump_text_sensor.h b/components/panasonic_heatpump/text_sensor/panasonic_heatpump_text_sensor.h index 254e6df..164d7eb 100644 --- a/components/panasonic_heatpump/text_sensor/panasonic_heatpump_text_sensor.h +++ b/components/panasonic_heatpump/text_sensor/panasonic_heatpump_text_sensor.h @@ -8,7 +8,6 @@ namespace esphome { namespace panasonic_heatpump { - class PanasonicHeatpumpComponent; class PanasonicHeatpumpTextSensor : public text_sensor::TextSensor, public Component, public Parented { public: From c3e9f30b1fccd09f0314618b4eb5246de60476bd Mon Sep 17 00:00:00 2001 From: ElVit Date: Thu, 13 Feb 2025 19:27:40 +0100 Subject: [PATCH 2/6] renamed some functions, splitted decode_response in multiple functions --- components/panasonic_heatpump/commands.cpp | 22 ++- components/panasonic_heatpump/decode.cpp | 36 ++-- .../panasonic_heatpump/number/__init__.py | 7 +- .../number/panasonic_heatpump_number.cpp | 2 +- .../panasonic_heatpump/panasonic_heatpump.cpp | 187 ++++++++++-------- .../panasonic_heatpump/panasonic_heatpump.h | 16 +- .../select/panasonic_heatpump_select.cpp | 2 +- .../switch/panasonic_heatpump_switch.cpp | 4 +- 8 files changed, 154 insertions(+), 122 deletions(-) diff --git a/components/panasonic_heatpump/commands.cpp b/components/panasonic_heatpump/commands.cpp index 6ce90e4..35e077d 100644 --- a/components/panasonic_heatpump/commands.cpp +++ b/components/panasonic_heatpump/commands.cpp @@ -89,15 +89,19 @@ namespace esphome { switch (input) { - case 0: return 18; - case 1: return 19; - case 2: return 24; - case 3: return 33; - case 4: return 34; - case 5: return 35; - case 6: return 40; + case 0: return 18; // heat-only + case 1: return 19; // cool-only + case 2: return 24; // auto + case 3: return 25; // auto-heat + case 4: return 26; // auto-cool + case 5: return 33; // dhw-only + case 6: return 34; // heat+dhw + case 7: return 35; // cool+dhw + case 8: return 40; // auto-dhw + case 9: return 41; // auto-heat+dhw + case 10: return 42; // auto-cool+dhw + default: return 0; // do nothing } - return 0; } //start of optional pcb commands @@ -142,8 +146,8 @@ namespace esphome case 2: return 0x85; case 3: return 0x52; case 4: return 0x2B; + default: return 0; // do nothing } - return 0; } } // namespace panasonic_heatpump } // namespace esphome \ No newline at end of file diff --git a/components/panasonic_heatpump/decode.cpp b/components/panasonic_heatpump/decode.cpp index c0cdb07..0e93d3f 100644 --- a/components/panasonic_heatpump/decode.cpp +++ b/components/panasonic_heatpump/decode.cpp @@ -183,30 +183,18 @@ namespace esphome { switch ((int)(input & 0b111111)) { - case 18: // heat-only - return 0; - case 19: // cool-only - return 1; - case 24: // auto - return 2; - case 25: // auto-heat - return 3; - case 26: // auto-cool - return 4; - case 33: // dhw-only - return 5; - case 34: // heat+dhw - return 6; - case 35: // cool+dhw - return 7; - case 40: // auto-dhw - return 8; - case 41: // auto-heat+dhw - return 9; - case 42: // auto-cool+dhw - return 10; - default: // unknown - return -1; + case 18: return 0; // heat-only + case 19: return 1; // cool-only + case 24: return 2; // auto + case 25: return 3; // auto-heat + case 26: return 4; // auto-cool + case 33: return 5; // dhw-only + case 34: return 6; // heat+dhw + case 35: return 7; // cool+dhw + case 40: return 8; // auto-dhw + case 41: return 9; // auto-heat+dhw + case 42: return 10; // auto-cool+dhw + default: return -1; // unknown } } diff --git a/components/panasonic_heatpump/number/__init__.py b/components/panasonic_heatpump/number/__init__.py index ad3ec06..548c478 100644 --- a/components/panasonic_heatpump/number/__init__.py +++ b/components/panasonic_heatpump/number/__init__.py @@ -277,7 +277,12 @@ async def to_code(config): hub = await cg.get_variable(config[CONF_PANASONIC_HEATPUMP_ID]) for index, key in enumerate(TYPES): if child_config := config.get(key): - var = await number.new_number(child_config, min_value=CONF_NUMBERS[index][0], max_value=CONF_NUMBERS[index][1], step=CONF_NUMBERS[index][2]) + var = await number.new_number( + child_config, + min_value=CONF_NUMBERS[index][0], + max_value=CONF_NUMBERS[index][1], + step=CONF_NUMBERS[index][2] + ) await cg.register_component(var, child_config) await cg.register_parented(var, config[CONF_PANASONIC_HEATPUMP_ID]) cg.add(getattr(hub, f"set_{key}_number")(var)) diff --git a/components/panasonic_heatpump/number/panasonic_heatpump_number.cpp b/components/panasonic_heatpump/number/panasonic_heatpump_number.cpp index 124c318..1f17697 100644 --- a/components/panasonic_heatpump/number/panasonic_heatpump_number.cpp +++ b/components/panasonic_heatpump/number/panasonic_heatpump_number.cpp @@ -16,7 +16,7 @@ namespace esphome void PanasonicHeatpumpNumber::control(float value) { this->publish_state(value); - this->parent_->number_control(this, value); + this->parent_->control_number(this, value); } } // namespace panasonic_heatpump } // namespace esphome diff --git a/components/panasonic_heatpump/panasonic_heatpump.cpp b/components/panasonic_heatpump/panasonic_heatpump.cpp index 800f498..bf6751b 100644 --- a/components/panasonic_heatpump/panasonic_heatpump.cpp +++ b/components/panasonic_heatpump/panasonic_heatpump.cpp @@ -30,8 +30,6 @@ namespace esphome void PanasonicHeatpumpComponent::loop() { - // ToDo: if response timeout then send init again - this->read_response(); this->send_request(); this->read_request(); @@ -46,6 +44,7 @@ namespace esphome uint8_t byte; while (this->available()) { + // Read byte from heatpump and forward it directly to the client (CZ-TAW1) this->read_byte(&byte); if (this->uart_client_ != nullptr) this->uart_client_->write_byte(byte); @@ -122,10 +121,11 @@ namespace esphome uint8_t byte; while (this->uart_client_->available()) { + // Read byte from client and forward it directly to the heatpump this->uart_client_->read_byte(&byte); this->write_byte(byte); - // Message shall start with 0x71, if not skip this byte + // Message shall start with 0x71 or 0xF1, if not skip this byte if (!this->request_receiving_) { if (byte != 0x71 && byte != 0xF1) @@ -214,6 +214,35 @@ namespace esphome return; } + this->publish_sensor(bytes); + this->publish_binary_sensor(bytes); + this->publish_text_sensor(bytes); + this->publish_number(bytes); + this->publish_select(bytes); + this->publish_switch(bytes); + } + + void PanasonicHeatpumpComponent::set_command_byte(uint8_t value, uint8_t index) + { + if (this->next_request_ == 1) + { + // initialize the command + command_message_.clear(); + command_message_.insert(this->command_message_.end(), PanasonicCommand::CommandMessage, + PanasonicCommand::CommandMessage + REQUEST_DATA_MSG_SIZE); + } + // set command byte + command_message_[index] = value; + // calculate and set set checksum (last element) + command_message_.back() = PanasonicCommand::calcChecksum(command_message_, command_message_.size() - 1); + + // command will be send on next loop + this->next_request_ = 2; + this->trigger_request_ = true; + } + + void PanasonicHeatpumpComponent::publish_sensor(std::vector bytes) + { #ifdef USE_SENSOR if (this->top1_sensor_) this->top1_sensor_->publish_state(PanasonicDecode::getPumpFlow(bytes[169], bytes[170])); if (this->top5_sensor_) this->top5_sensor_->publish_state(PanasonicDecode::getByteMinus128(bytes[143]) + PanasonicDecode::getFractional(bytes[118], 0)); @@ -311,6 +340,10 @@ namespace esphome if (this->top137_sensor_) this->top137_sensor_->publish_state(PanasonicDecode::getByteMinus1(bytes[69])); if (this->top138_sensor_) this->top138_sensor_->publish_state(PanasonicDecode::getByteMinus1(bytes[70])); #endif + } + + void PanasonicHeatpumpComponent::publish_binary_sensor(std::vector bytes) + { #ifdef USE_BINARY_SENSOR if (this->top0_binary_sensor_) this->top0_binary_sensor_->publish_state(PanasonicDecode::getBinaryState(PanasonicDecode::getBit7and8(bytes[4]))); if (this->top2_binary_sensor_) this->top2_binary_sensor_->publish_state(PanasonicDecode::getBinaryState(PanasonicDecode::getBit1and2(bytes[4]))); @@ -336,6 +369,10 @@ namespace esphome if (this->top132_binary_sensor_) this->top132_binary_sensor_->publish_state(PanasonicDecode::getBinaryState(PanasonicDecode::getBit3and4(bytes[26]))); if (this->top133_binary_sensor_) this->top133_binary_sensor_->publish_state(PanasonicDecode::getBinaryState(PanasonicDecode::getBit1and2(bytes[26]))); #endif + } + + void PanasonicHeatpumpComponent::publish_text_sensor(std::vector bytes) + { #ifdef USE_TEXT_SENSOR if (this->top4_text_sensor_) this->top4_text_sensor_->publish_state(PanasonicDecode::getTextState(PanasonicDecode::OpModeDesc, PanasonicDecode::getOpMode(bytes[6]))); if (this->top17_text_sensor_) this->top17_text_sensor_->publish_state(PanasonicDecode::getTextState(PanasonicDecode::Powerfulmode, PanasonicDecode::getBit6and7and8(bytes[7]))); @@ -359,6 +396,10 @@ namespace esphome if (this->top126_text_sensor_) this->top126_text_sensor_->publish_state(PanasonicDecode::getTextState(PanasonicDecode::Valve, PanasonicDecode::getBit7and8(bytes[116]))); if (this->top130_text_sensor_) this->top130_text_sensor_->publish_state(PanasonicDecode::getTextState(PanasonicDecode::Bivalent, PanasonicDecode::getBit5and6(bytes[26]))); #endif + } + + void PanasonicHeatpumpComponent::publish_number(std::vector bytes) + { #ifdef USE_NUMBER if (this->set11_number_) this->set11_number_->publish_state(PanasonicDecode::getByteMinus128(bytes[42])); if (this->set20_number_) this->set20_number_->publish_state(PanasonicDecode::getByteMinus128(bytes[99])); @@ -394,6 +435,10 @@ namespace esphome if (this->set37_number_) this->set37_number_->publish_state(PanasonicDecode::getByteMinus128(bytes[66])); if (this->set38_number_) this->set38_number_->publish_state(PanasonicDecode::getByteMinus128(bytes[68])); #endif + } + + void PanasonicHeatpumpComponent::publish_select(std::vector bytes) + { #ifdef USE_SELECT if (this->set9_select_) this->set9_select_->publish_state(PanasonicDecode::getTextState(PanasonicDecode::OpModeDesc, PanasonicDecode::getOpMode(bytes[6]))); if (this->set4_select_) this->set4_select_->publish_state(PanasonicDecode::getTextState(PanasonicDecode::Powerfulmode, PanasonicDecode::getBit6and7and8(bytes[7]))); @@ -403,6 +448,10 @@ namespace esphome if (this->set26_select_) this->set26_select_->publish_state(PanasonicDecode::getTextState(PanasonicDecode::ExtPadHeaterType, PanasonicDecode::getBit3and4(bytes[25]))); if (this->set35_select_) this->set35_select_->publish_state(PanasonicDecode::getTextState(PanasonicDecode::Bivalent, PanasonicDecode::getBit5and6(bytes[26]))); #endif + } + + void PanasonicHeatpumpComponent::publish_switch(std::vector bytes) + { #ifdef USE_SWITCH if (this->set1_switch_) this->set1_switch_->publish_state(PanasonicDecode::getBinaryState(PanasonicDecode::getBit7and8(bytes[4]))); if (this->set10_switch_) this->set10_switch_->publish_state(PanasonicDecode::getBinaryState(PanasonicDecode::getBit1and2(bytes[4]))); @@ -418,91 +467,75 @@ namespace esphome #endif } - void PanasonicHeatpumpComponent::set_command_message(uint8_t value, uint8_t index) - { - if (this->next_request_ == 1) - { - // initialize the command - command_message_.clear(); - command_message_.insert(this->command_message_.end(), PanasonicCommand::CommandMessage, - PanasonicCommand::CommandMessage + REQUEST_DATA_MSG_SIZE); - } - // set command byte - command_message_[index] = value; - // calculate and set set checksum (last element) - command_message_.back() = PanasonicCommand::calcChecksum(command_message_, command_message_.size() - 1); - - // command will be send on next loop - this->next_request_ = 2; - this->trigger_request_ = true; - } #ifdef USE_NUMBER - void PanasonicHeatpumpComponent::number_control(number::Number* object, float value) + void PanasonicHeatpumpComponent::control_number(number::Number* object, float value) { - if (object == this->set5_number_) this->set_command_message(PanasonicCommand::setPlus128(value), 38); - else if (object == this->set6_number_) this->set_command_message(PanasonicCommand::setPlus128(value), 39); - else if (object == this->set7_number_) this->set_command_message(PanasonicCommand::setPlus128(value), 40); - else if (object == this->set8_number_) this->set_command_message(PanasonicCommand::setPlus128(value), 41); - else if (object == this->set11_number_) this->set_command_message(PanasonicCommand::setPlus128(value), 42); - else if (object == this->set15_number_) this->set_command_message(PanasonicCommand::setPlus1(value), 45); - else if (object == this->set16_1_number_) this->set_command_message(PanasonicCommand::setPlus128(value), 75); - else if (object == this->set16_2_number_) this->set_command_message(PanasonicCommand::setPlus128(value), 76); - else if (object == this->set16_3_number_) this->set_command_message(PanasonicCommand::setPlus128(value), 77); - else if (object == this->set16_4_number_) this->set_command_message(PanasonicCommand::setPlus128(value), 78); - else if (object == this->set16_5_number_) this->set_command_message(PanasonicCommand::setPlus128(value), 79); - else if (object == this->set16_6_number_) this->set_command_message(PanasonicCommand::setPlus128(value), 80); - else if (object == this->set16_7_number_) this->set_command_message(PanasonicCommand::setPlus128(value), 81); - else if (object == this->set16_8_number_) this->set_command_message(PanasonicCommand::setPlus128(value), 82); - else if (object == this->set16_9_number_) this->set_command_message(PanasonicCommand::setPlus128(value), 86); - else if (object == this->set16_10_number_) this->set_command_message(PanasonicCommand::setPlus128(value), 87); - else if (object == this->set16_11_number_) this->set_command_message(PanasonicCommand::setPlus128(value), 88); - else if (object == this->set16_12_number_) this->set_command_message(PanasonicCommand::setPlus128(value), 89); - else if (object == this->set16_13_number_) this->set_command_message(PanasonicCommand::setPlus128(value), 90); - else if (object == this->set16_14_number_) this->set_command_message(PanasonicCommand::setPlus128(value), 91); - else if (object == this->set16_15_number_) this->set_command_message(PanasonicCommand::setPlus128(value), 92); - else if (object == this->set16_16_number_) this->set_command_message(PanasonicCommand::setPlus128(value), 93); - else if (object == this->set18_number_) this->set_command_message(PanasonicCommand::setPlus128(value), 84); - else if (object == this->set19_number_) this->set_command_message(PanasonicCommand::setPlus128(value), 94); - else if (object == this->set20_number_) this->set_command_message(PanasonicCommand::setPlus128(value), 99); - else if (object == this->set21_number_) this->set_command_message(PanasonicCommand::setPlus1(value), 104); - else if (object == this->set22_number_) this->set_command_message(PanasonicCommand::setPlus128(value), 105); - else if (object == this->set23_number_) this->set_command_message(PanasonicCommand::setPlus128(value), 106); - else if (object == this->set27_number_) this->set_command_message(PanasonicCommand::setPlus128(value), 59); - else if (object == this->set29_number_) this->set_command_message(PanasonicCommand::setPlus128(value), 83); - else if (object == this->set36_number_) this->set_command_message(PanasonicCommand::setPlus128(value), 65); - else if (object == this->set37_number_) this->set_command_message(PanasonicCommand::setPlus128(value), 66); - else if (object == this->set38_number_) this->set_command_message(PanasonicCommand::setPlus128(value), 68); + if (object == this->set5_number_) this->set_command_byte(PanasonicCommand::setPlus128(value), 38); + else if (object == this->set6_number_) this->set_command_byte(PanasonicCommand::setPlus128(value), 39); + else if (object == this->set7_number_) this->set_command_byte(PanasonicCommand::setPlus128(value), 40); + else if (object == this->set8_number_) this->set_command_byte(PanasonicCommand::setPlus128(value), 41); + else if (object == this->set11_number_) this->set_command_byte(PanasonicCommand::setPlus128(value), 42); + else if (object == this->set15_number_) this->set_command_byte(PanasonicCommand::setPlus1(value), 45); + else if (object == this->set16_1_number_) this->set_command_byte(PanasonicCommand::setPlus128(value), 75); + else if (object == this->set16_2_number_) this->set_command_byte(PanasonicCommand::setPlus128(value), 76); + else if (object == this->set16_3_number_) this->set_command_byte(PanasonicCommand::setPlus128(value), 77); + else if (object == this->set16_4_number_) this->set_command_byte(PanasonicCommand::setPlus128(value), 78); + else if (object == this->set16_5_number_) this->set_command_byte(PanasonicCommand::setPlus128(value), 79); + else if (object == this->set16_6_number_) this->set_command_byte(PanasonicCommand::setPlus128(value), 80); + else if (object == this->set16_7_number_) this->set_command_byte(PanasonicCommand::setPlus128(value), 81); + else if (object == this->set16_8_number_) this->set_command_byte(PanasonicCommand::setPlus128(value), 82); + else if (object == this->set16_9_number_) this->set_command_byte(PanasonicCommand::setPlus128(value), 86); + else if (object == this->set16_10_number_) this->set_command_byte(PanasonicCommand::setPlus128(value), 87); + else if (object == this->set16_11_number_) this->set_command_byte(PanasonicCommand::setPlus128(value), 88); + else if (object == this->set16_12_number_) this->set_command_byte(PanasonicCommand::setPlus128(value), 89); + else if (object == this->set16_13_number_) this->set_command_byte(PanasonicCommand::setPlus128(value), 90); + else if (object == this->set16_14_number_) this->set_command_byte(PanasonicCommand::setPlus128(value), 91); + else if (object == this->set16_15_number_) this->set_command_byte(PanasonicCommand::setPlus128(value), 92); + else if (object == this->set16_16_number_) this->set_command_byte(PanasonicCommand::setPlus128(value), 93); + else if (object == this->set18_number_) this->set_command_byte(PanasonicCommand::setPlus128(value), 84); + else if (object == this->set19_number_) this->set_command_byte(PanasonicCommand::setPlus128(value), 94); + else if (object == this->set20_number_) this->set_command_byte(PanasonicCommand::setPlus128(value), 99); + else if (object == this->set21_number_) this->set_command_byte(PanasonicCommand::setPlus1(value), 104); + else if (object == this->set22_number_) this->set_command_byte(PanasonicCommand::setPlus128(value), 105); + else if (object == this->set23_number_) this->set_command_byte(PanasonicCommand::setPlus128(value), 106); + else if (object == this->set27_number_) this->set_command_byte(PanasonicCommand::setPlus128(value), 59); + else if (object == this->set29_number_) this->set_command_byte(PanasonicCommand::setPlus128(value), 83); + else if (object == this->set36_number_) this->set_command_byte(PanasonicCommand::setPlus128(value), 65); + else if (object == this->set37_number_) this->set_command_byte(PanasonicCommand::setPlus128(value), 66); + else if (object == this->set38_number_) this->set_command_byte(PanasonicCommand::setPlus128(value), 68); } #endif + #ifdef USE_SELECT - void PanasonicHeatpumpComponent::select_control(select::Select* object, size_t value) + void PanasonicHeatpumpComponent::control_select(select::Select* object, size_t value) { - if (object == this->set2_select_) this->set_command_message(PanasonicCommand::setPlus1Multiply16(value), 5); - else if (object == this->set3_select_) this->set_command_message(PanasonicCommand::setPlus1Multiply8(value), 7); - else if (object == this->set4_select_) this->set_command_message(PanasonicCommand::setPlus73(value), 7); - else if (object == this->set9_select_) this->set_command_message(PanasonicCommand::setOperationMode(value), 6); - else if (object == this->set17_select_) this->set_command_message(PanasonicCommand::setPlus1Multiply64(value), 6); - else if (object == this->set26_select_) this->set_command_message(PanasonicCommand::setPlus1Multiply16(value), 25); - else if (object == this->set35_select_) this->set_command_message(PanasonicCommand::setPlus1Multiply4(value), 26); + if (object == this->set2_select_) this->set_command_byte(PanasonicCommand::setPlus1Multiply16(value), 5); + else if (object == this->set3_select_) this->set_command_byte(PanasonicCommand::setPlus1Multiply8(value), 7); + else if (object == this->set4_select_) this->set_command_byte(PanasonicCommand::setPlus73(value), 7); + else if (object == this->set9_select_) this->set_command_byte(PanasonicCommand::setOperationMode(value), 6); + else if (object == this->set17_select_) this->set_command_byte(PanasonicCommand::setPlus1Multiply64(value), 6); + else if (object == this->set26_select_) this->set_command_byte(PanasonicCommand::setPlus1Multiply16(value), 25); + else if (object == this->set35_select_) this->set_command_byte(PanasonicCommand::setPlus1Multiply4(value), 26); } #endif + #ifdef USE_SWITCH - void PanasonicHeatpumpComponent::switch_control(switch_::Switch* object, size_t value) + void PanasonicHeatpumpComponent::control_switch(switch_::Switch* object, size_t value) { - if (object == this->set1_switch_) this->set_command_message(PanasonicCommand::setPlus1(value), 4); - else if (object == this->set10_switch_) this->set_command_message(PanasonicCommand::setPlus1Multiply64(value), 4); - else if (object == this->set12_switch_) this->set_command_message(PanasonicCommand::setMultiply2(value), 8); - else if (object == this->set13_switch_) this->set_command_message(PanasonicCommand::setMultiply4(value), 8); - else if (object == this->set14_switch_) this->set_command_message(PanasonicCommand::setPlus1Multiply16(value), 4); - else if (object == this->set24_switch_) this->set_command_message(PanasonicCommand::setPlus1Multiply64(value), 5); - else if (object == this->set25_switch_) this->set_command_message(PanasonicCommand::setPlus1Multiply16(value), 20); - else if (object == this->set28_switch_) this->set_command_message(PanasonicCommand::setPlus1Multiply4(value), 24); - else if (object == this->set30_switch_) this->set_command_message(PanasonicCommand::setPlus1(value), 23); - else if (object == this->set31_switch_) this->set_command_message(PanasonicCommand::setPlus1Multiply16(value), 23); - else if (object == this->set32_switch_) this->set_command_message(PanasonicCommand::setPlus1Multiply64(value), 23); - else if (object == this->set33_switch_) this->set_command_message(PanasonicCommand::setPlus1Multiply4(value), 23); - else if (object == this->set34_switch_) this->set_command_message(PanasonicCommand::setPlus1(value), 26); + if (object == this->set1_switch_) this->set_command_byte(PanasonicCommand::setPlus1(value), 4); + else if (object == this->set10_switch_) this->set_command_byte(PanasonicCommand::setPlus1Multiply64(value), 4); + else if (object == this->set12_switch_) this->set_command_byte(PanasonicCommand::setMultiply2(value), 8); + else if (object == this->set13_switch_) this->set_command_byte(PanasonicCommand::setMultiply4(value), 8); + else if (object == this->set14_switch_) this->set_command_byte(PanasonicCommand::setPlus1Multiply16(value), 4); + else if (object == this->set24_switch_) this->set_command_byte(PanasonicCommand::setPlus1Multiply64(value), 5); + else if (object == this->set25_switch_) this->set_command_byte(PanasonicCommand::setPlus1Multiply16(value), 20); + else if (object == this->set28_switch_) this->set_command_byte(PanasonicCommand::setPlus1Multiply4(value), 24); + else if (object == this->set30_switch_) this->set_command_byte(PanasonicCommand::setPlus1(value), 23); + else if (object == this->set31_switch_) this->set_command_byte(PanasonicCommand::setPlus1Multiply16(value), 23); + else if (object == this->set32_switch_) this->set_command_byte(PanasonicCommand::setPlus1Multiply64(value), 23); + else if (object == this->set33_switch_) this->set_command_byte(PanasonicCommand::setPlus1Multiply4(value), 23); + else if (object == this->set34_switch_) this->set_command_byte(PanasonicCommand::setPlus1(value), 26); } #endif } // namespace panasonic_heatpump diff --git a/components/panasonic_heatpump/panasonic_heatpump.h b/components/panasonic_heatpump/panasonic_heatpump.h index ceb8278..0c097cf 100644 --- a/components/panasonic_heatpump/panasonic_heatpump.h +++ b/components/panasonic_heatpump/panasonic_heatpump.h @@ -216,7 +216,7 @@ namespace esphome SUB_NUMBER(set37); SUB_NUMBER(set38); - void number_control(number::Number* object, float value); + void control_number(number::Number* object, float value); #endif #ifdef USE_SELECT SUB_SELECT(set2); @@ -227,7 +227,7 @@ namespace esphome SUB_SELECT(set26); SUB_SELECT(set35); - void select_control(select::Select* object, size_t value); + void control_select(select::Select* object, size_t value); #endif #ifdef USE_SWITCH SUB_SWITCH(set1); @@ -254,15 +254,11 @@ namespace esphome void update() override; void loop() override; - //void set_uart_hp(uart::UARTComponent *uart) { this->uart_hp_ = uart; } - //void set_uart_wm(uart::UARTComponent *uart) { this->uart_wm_ = uart; } void set_uart_client(uart::UARTComponent *uart) { this->uart_client_ = uart; } void set_log_uart_msg(bool enable) { this->log_uart_msg_ = enable; } void set_polling_time(uint32_t time_sec) { this->polling_time_ = time_sec; } protected: - //uart::UARTComponent* uart_hp_; - //uart::UARTComponent* uart_wm_; uart::UARTComponent* uart_client_{nullptr}; bool log_uart_msg_{false}; uint32_t polling_time_{1}; @@ -281,7 +277,13 @@ namespace esphome void send_request(); void read_request(); void decode_response(std::vector data); - void set_command_message(uint8_t value, uint8_t index); + void set_command_byte(uint8_t value, uint8_t index); + void publish_sensor(std::vector bytes); + void publish_binary_sensor(std::vector bytes); + void publish_text_sensor(std::vector bytes); + void publish_number(std::vector bytes); + void publish_select(std::vector bytes); + void publish_switch(std::vector bytes); void log_uart_hex(std::string prefix, const std::vector &data, uint8_t separator) { this->log_uart_hex(prefix, &data[0], data.size(), separator); } void log_uart_hex(std::string prefix, const uint8_t *data, size_t length, uint8_t separator); }; diff --git a/components/panasonic_heatpump/select/panasonic_heatpump_select.cpp b/components/panasonic_heatpump/select/panasonic_heatpump_select.cpp index f2129f7..b44ffc7 100644 --- a/components/panasonic_heatpump/select/panasonic_heatpump_select.cpp +++ b/components/panasonic_heatpump/select/panasonic_heatpump_select.cpp @@ -18,7 +18,7 @@ namespace esphome this->publish_state(value); auto index = this->active_index(); if (index.has_value()) - this->parent_->select_control(this, index.value()); + this->parent_->control_select(this, index.value()); } } // namespace panasonic_heatpump } // namespace esphome diff --git a/components/panasonic_heatpump/switch/panasonic_heatpump_switch.cpp b/components/panasonic_heatpump/switch/panasonic_heatpump_switch.cpp index f6d5281..1b698c4 100644 --- a/components/panasonic_heatpump/switch/panasonic_heatpump_switch.cpp +++ b/components/panasonic_heatpump/switch/panasonic_heatpump_switch.cpp @@ -12,12 +12,12 @@ namespace esphome { LOG_SWITCH("", "Panasonic Heatpump Switch", this); } - + void PanasonicHeatpumpSwitch::write_state(bool state) { this->publish_state(state); size_t value = state ? 1 : 0; - this->parent_->switch_control(this, value); + this->parent_->control_switch(this, value); } } // namespace panasonic_heatpump } // namespace esphome From b148b465f4f856f059b67e2649e99fff3738502d Mon Sep 17 00:00:00 2001 From: ElVit Date: Sat, 15 Feb 2025 22:13:18 +0100 Subject: [PATCH 3/6] Added 10ms delay after log msg. Accept also init message in read_response and read_request. --- .../panasonic_heatpump_binary_sensor.cpp | 1 + .../number/panasonic_heatpump_number.cpp | 1 + .../panasonic_heatpump/panasonic_heatpump.cpp | 21 ++++++++++--------- .../panasonic_heatpump/panasonic_heatpump.h | 7 +++++-- .../select/panasonic_heatpump_select.cpp | 1 + .../sensor/panasonic_heatpump_sensor.cpp | 1 + .../switch/panasonic_heatpump_switch.cpp | 1 + .../panasonic_heatpump_text_sensor.cpp | 1 + 8 files changed, 22 insertions(+), 12 deletions(-) diff --git a/components/panasonic_heatpump/binary_sensor/panasonic_heatpump_binary_sensor.cpp b/components/panasonic_heatpump/binary_sensor/panasonic_heatpump_binary_sensor.cpp index ddbb516..c2f0f96 100644 --- a/components/panasonic_heatpump/binary_sensor/panasonic_heatpump_binary_sensor.cpp +++ b/components/panasonic_heatpump/binary_sensor/panasonic_heatpump_binary_sensor.cpp @@ -11,6 +11,7 @@ namespace esphome void PanasonicHeatpumpBinarySensor::dump_config() { LOG_BINARY_SENSOR("", "Panasonic Heatpump Binary Sensor", this); + delay(10); } } // namespace panasonic_heatpump } // namespace esphome diff --git a/components/panasonic_heatpump/number/panasonic_heatpump_number.cpp b/components/panasonic_heatpump/number/panasonic_heatpump_number.cpp index 1f17697..3a2fc9f 100644 --- a/components/panasonic_heatpump/number/panasonic_heatpump_number.cpp +++ b/components/panasonic_heatpump/number/panasonic_heatpump_number.cpp @@ -11,6 +11,7 @@ namespace esphome void PanasonicHeatpumpNumber::dump_config() { LOG_NUMBER("", "Panasonic Heatpump Number", this); + delay(10); } void PanasonicHeatpumpNumber::control(float value) diff --git a/components/panasonic_heatpump/panasonic_heatpump.cpp b/components/panasonic_heatpump/panasonic_heatpump.cpp index bf6751b..712efcd 100644 --- a/components/panasonic_heatpump/panasonic_heatpump.cpp +++ b/components/panasonic_heatpump/panasonic_heatpump.cpp @@ -10,6 +10,7 @@ namespace esphome void PanasonicHeatpumpComponent::dump_config() { ESP_LOGCONFIG(TAG, "Panasonic Heatpump"); + delay(10); } void PanasonicHeatpumpComponent::setup() @@ -52,7 +53,7 @@ namespace esphome // Message shall start with 0x71, if not skip this byte if (!this->response_receiving_) { - if (byte != 0x71) + if (byte != 0x31 && byte != 0x71 && byte != 0xF1) continue; this->response_receiving_ = true; } @@ -63,11 +64,11 @@ namespace esphome if (this->response_message_.size() == 2) this->response_payload_length_ = byte; // Discard message if format is wrong - if (this->response_message_.size() == 3 && byte != 0x01 || - this->response_message_.size() == 4 && byte != 0x10) + if ((this->response_message_.size() == 3 || this->response_message_.size() == 4) + && byte != 0x01 && byte != 0x10) { - ESP_LOGW(TAG, "Invalid response message: %d. byte is 0x%02X but expexted is 0x%02X", - response_message_.size(), byte, response_message_.size() == 3 ? "01" : "10"); + ESP_LOGW(TAG, "Invalid response message: %d. byte is 0x%02X but expexted is 0x01 or 0x10", + response_message_.size(), byte); delay(10); this->response_message_.clear(); this->response_receiving_ = false; @@ -128,7 +129,7 @@ namespace esphome // Message shall start with 0x71 or 0xF1, if not skip this byte if (!this->request_receiving_) { - if (byte != 0x71 && byte != 0xF1) + if (byte != 0x31 && byte != 0x71 && byte != 0xF1) continue; this->request_receiving_ = true; } @@ -140,11 +141,11 @@ namespace esphome this->request_payload_length_ = byte; // Discard message if format is wrong - if (this->request_message_.size() == 3 && byte != 0x01 || - this->request_message_.size() == 4 && byte != 0x10) + if ((this->request_message_.size() == 3 || this->request_message_.size() == 4) + && byte != 0x01 && byte != 0x10) { - ESP_LOGW(TAG, "Invalid request message: %d. byte is 0x%02X but expexted is 0x%02X", - request_message_.size(), byte, request_message_.size() == 3 ? "01" : "10"); + ESP_LOGW(TAG, "Invalid request message: %d. byte is 0x%02X but expexted is 0x01 or 0x10", + request_message_.size(), byte); delay(10); this->request_message_.clear(); this->request_receiving_ = false; diff --git a/components/panasonic_heatpump/panasonic_heatpump.h b/components/panasonic_heatpump/panasonic_heatpump.h index 0c097cf..d7f1d3b 100644 --- a/components/panasonic_heatpump/panasonic_heatpump.h +++ b/components/panasonic_heatpump/panasonic_heatpump.h @@ -244,7 +244,7 @@ namespace esphome SUB_SWITCH(set33); SUB_SWITCH(set34); - void switch_control(switch_::Switch* object, size_t value); + void control_switch(switch_::Switch* object, size_t value); #endif PanasonicHeatpumpComponent() = default; @@ -284,7 +284,10 @@ namespace esphome void publish_number(std::vector bytes); void publish_select(std::vector bytes); void publish_switch(std::vector bytes); - void log_uart_hex(std::string prefix, const std::vector &data, uint8_t separator) { this->log_uart_hex(prefix, &data[0], data.size(), separator); } + void log_uart_hex(std::string prefix, const std::vector &data, uint8_t separator) + { + this->log_uart_hex(prefix, &data[0], data.size(), separator); + } void log_uart_hex(std::string prefix, const uint8_t *data, size_t length, uint8_t separator); }; } // namespace panasonic_heatpump diff --git a/components/panasonic_heatpump/select/panasonic_heatpump_select.cpp b/components/panasonic_heatpump/select/panasonic_heatpump_select.cpp index b44ffc7..062abf2 100644 --- a/components/panasonic_heatpump/select/panasonic_heatpump_select.cpp +++ b/components/panasonic_heatpump/select/panasonic_heatpump_select.cpp @@ -11,6 +11,7 @@ namespace esphome void PanasonicHeatpumpSelect::dump_config() { LOG_SELECT("", "Panasonic Heatpump Select", this); + delay(10); } void PanasonicHeatpumpSelect::control(const std::string &value) diff --git a/components/panasonic_heatpump/sensor/panasonic_heatpump_sensor.cpp b/components/panasonic_heatpump/sensor/panasonic_heatpump_sensor.cpp index e6d5307..58c558c 100644 --- a/components/panasonic_heatpump/sensor/panasonic_heatpump_sensor.cpp +++ b/components/panasonic_heatpump/sensor/panasonic_heatpump_sensor.cpp @@ -11,6 +11,7 @@ namespace esphome void PanasonicHeatpumpSensor::dump_config() { LOG_SENSOR("", "Panasonic Heatpump Sensor", this); + delay(10); } } // namespace panasonic_heatpump } // namespace esphome diff --git a/components/panasonic_heatpump/switch/panasonic_heatpump_switch.cpp b/components/panasonic_heatpump/switch/panasonic_heatpump_switch.cpp index 1b698c4..5736b69 100644 --- a/components/panasonic_heatpump/switch/panasonic_heatpump_switch.cpp +++ b/components/panasonic_heatpump/switch/panasonic_heatpump_switch.cpp @@ -11,6 +11,7 @@ namespace esphome void PanasonicHeatpumpSwitch::dump_config() { LOG_SWITCH("", "Panasonic Heatpump Switch", this); + delay(10); } void PanasonicHeatpumpSwitch::write_state(bool state) diff --git a/components/panasonic_heatpump/text_sensor/panasonic_heatpump_text_sensor.cpp b/components/panasonic_heatpump/text_sensor/panasonic_heatpump_text_sensor.cpp index f065e88..016838b 100644 --- a/components/panasonic_heatpump/text_sensor/panasonic_heatpump_text_sensor.cpp +++ b/components/panasonic_heatpump/text_sensor/panasonic_heatpump_text_sensor.cpp @@ -11,6 +11,7 @@ namespace esphome void PanasonicHeatpumpTextSensor::dump_config() { LOG_TEXT_SENSOR("", "Panasonic Heatpump Text Sensor", this); + delay(10); } } // namespace panasonic_heatpump } // namespace esphome From a869f4167220d84224ed44a1a07ea2b6ed781c4d Mon Sep 17 00:00:00 2001 From: ElVit Date: Sun, 16 Feb 2025 11:38:15 +0100 Subject: [PATCH 4/6] improved log_uart_hex --- components/panasonic_heatpump/README.md | 4 +++ .../panasonic_heatpump/panasonic_heatpump.cpp | 36 ++++++++++++++----- .../panasonic_heatpump/panasonic_heatpump.h | 12 +++++-- 3 files changed, 41 insertions(+), 11 deletions(-) diff --git a/components/panasonic_heatpump/README.md b/components/panasonic_heatpump/README.md index 2895639..4084656 100644 --- a/components/panasonic_heatpump/README.md +++ b/components/panasonic_heatpump/README.md @@ -546,6 +546,10 @@ select: name: "Set Bivalent Mode" ``` +## Known Issues + +When the ESP controller is connected initially to the heatpump, the heatpump may not respond to any request messages. If the CZ-TAW1 is also connected to the ESP controller you will probably see some requests like 31 05 10 01 ... These are initial request messages. If the heatpump is not responding, it may help to turn off and on the power of the heatpump (switching the heatpump off is not enough). After a power on the heatpump should respond to the requests. + ## Sources :heart: A big THANKS to [Egyras](https://github.com/Egyras) and the work done on the repository [HeishaMon](https://github.com/Egyras/HeishaMon) for decoding the panasonic uart protocol and providing information to build hardware based on an ESP Chip. diff --git a/components/panasonic_heatpump/panasonic_heatpump.cpp b/components/panasonic_heatpump/panasonic_heatpump.cpp index 712efcd..138f211 100644 --- a/components/panasonic_heatpump/panasonic_heatpump.cpp +++ b/components/panasonic_heatpump/panasonic_heatpump.cpp @@ -78,7 +78,7 @@ namespace esphome // Check if message is complete if (this->response_message_.size() > 2 && this->response_message_.size() == this->response_payload_length_ + 3) { - this->log_uart_hex("<<<", this->response_message_, ','); + this->log_uart_hex(UART_LOG_RX, this->response_message_, ','); this->decode_response(this->response_message_); this->response_message_.clear(); this->response_receiving_ = false; @@ -92,7 +92,7 @@ namespace esphome if (this->next_request_ == 2) // command { - this->log_uart_hex(">>>", this->command_message_, ','); + this->log_uart_hex(UART_LOG_RX, this->command_message_, ','); this->write_array(this->command_message_); this->flush(); return; @@ -103,13 +103,13 @@ namespace esphome if (this->next_request_ == 0) // initial { // Probably not necessary but CZ-TAW1 sends this query on boot - this->log_uart_hex(">>>", PanasonicCommand::InitialMessage, REQUEST_INIT_MSG_SIZE, ','); + this->log_uart_hex(UART_LOG_RX, PanasonicCommand::InitialMessage, REQUEST_INIT_MSG_SIZE, ','); this->write_array(PanasonicCommand::InitialMessage, REQUEST_INIT_MSG_SIZE); this->flush(); } else if (this->next_request_ == 1) // polling { - this->log_uart_hex(">>>", PanasonicCommand::PollingMessage, REQUEST_DATA_MSG_SIZE, ','); + this->log_uart_hex(UART_LOG_RX, PanasonicCommand::PollingMessage, REQUEST_DATA_MSG_SIZE, ','); this->write_array(PanasonicCommand::PollingMessage, REQUEST_DATA_MSG_SIZE); this->flush(); } @@ -155,20 +155,40 @@ namespace esphome // Check if message is complete if (this->request_message_.size() > 2 && this->request_message_.size() == this->request_payload_length_ + 3) { - this->log_uart_hex(">>>", this->request_message_, ','); + this->log_uart_hex(UART_LOG_TX, this->request_message_, ','); this->request_message_.clear(); this->request_receiving_ = false; } } } - void PanasonicHeatpumpComponent::log_uart_hex(std::string prefix, const uint8_t *data, size_t length, uint8_t separator) + void PanasonicHeatpumpComponent::log_uart_hex(UartLogDirection direction, const uint8_t *data, size_t length, uint8_t separator) { if (this->log_uart_msg_ == false) return; std::string logStr; + std::string msgDir = direction == UART_LOG_TX ? ">>>" : "<<<"; + std::string msgType = "response"; + if (direction == UART_LOG_TX) + { + switch(data[0]) + { + case 0x31: + msgType = "initial_request"; + break; + case 0x71: + msgType = "polling_request"; + break; + case 0xF1: + msgType = "command_request"; + break; + default: + msgType = "request"; + }; + } + logStr = "[" + std::to_string(length) + "]"; - ESP_LOGI(TAG, "%s %s", prefix.c_str(), logStr.c_str()); + ESP_LOGI(TAG, "%s %s%s", msgDir.c_str(), msgType.c_str(), logStr.c_str()); delay(10); logStr = ""; @@ -183,7 +203,7 @@ namespace esphome size_t chunkSize = 90; for (size_t i = 0; i < logStr.length(); i += chunkSize) { - ESP_LOGI(TAG, "%s %s", prefix.c_str(), logStr.substr(i, chunkSize).c_str()); + ESP_LOGD(TAG, "%s %s", msgDir.c_str(), logStr.substr(i, chunkSize).c_str()); delay(10); } } diff --git a/components/panasonic_heatpump/panasonic_heatpump.h b/components/panasonic_heatpump/panasonic_heatpump.h index d7f1d3b..e72fccb 100644 --- a/components/panasonic_heatpump/panasonic_heatpump.h +++ b/components/panasonic_heatpump/panasonic_heatpump.h @@ -32,6 +32,12 @@ namespace esphome { namespace panasonic_heatpump { + enum UartLogDirection + { + UART_LOG_RX, + UART_LOG_TX, + }; + class PanasonicHeatpumpComponent : public PollingComponent, public uart::UARTDevice { public: @@ -284,11 +290,11 @@ namespace esphome void publish_number(std::vector bytes); void publish_select(std::vector bytes); void publish_switch(std::vector bytes); - void log_uart_hex(std::string prefix, const std::vector &data, uint8_t separator) + void log_uart_hex(UartLogDirection direction, const std::vector &data, uint8_t separator) { - this->log_uart_hex(prefix, &data[0], data.size(), separator); + this->log_uart_hex(direction, &data[0], data.size(), separator); } - void log_uart_hex(std::string prefix, const uint8_t *data, size_t length, uint8_t separator); + void log_uart_hex(UartLogDirection direction, const uint8_t *data, size_t length, uint8_t separator); }; } // namespace panasonic_heatpump } // namespace esphome From e3f68833b45174220307c708c01dea60e111be5e Mon Sep 17 00:00:00 2001 From: ElVit Date: Sun, 16 Feb 2025 11:58:01 +0100 Subject: [PATCH 5/6] improved log_uart_hex --- components/panasonic_heatpump/panasonic_heatpump.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/components/panasonic_heatpump/panasonic_heatpump.cpp b/components/panasonic_heatpump/panasonic_heatpump.cpp index 138f211..3ea4dba 100644 --- a/components/panasonic_heatpump/panasonic_heatpump.cpp +++ b/components/panasonic_heatpump/panasonic_heatpump.cpp @@ -92,7 +92,7 @@ namespace esphome if (this->next_request_ == 2) // command { - this->log_uart_hex(UART_LOG_RX, this->command_message_, ','); + this->log_uart_hex(UART_LOG_TX, this->command_message_, ','); this->write_array(this->command_message_); this->flush(); return; @@ -103,13 +103,13 @@ namespace esphome if (this->next_request_ == 0) // initial { // Probably not necessary but CZ-TAW1 sends this query on boot - this->log_uart_hex(UART_LOG_RX, PanasonicCommand::InitialMessage, REQUEST_INIT_MSG_SIZE, ','); + this->log_uart_hex(UART_LOG_TX, PanasonicCommand::InitialMessage, REQUEST_INIT_MSG_SIZE, ','); this->write_array(PanasonicCommand::InitialMessage, REQUEST_INIT_MSG_SIZE); this->flush(); } else if (this->next_request_ == 1) // polling { - this->log_uart_hex(UART_LOG_RX, PanasonicCommand::PollingMessage, REQUEST_DATA_MSG_SIZE, ','); + this->log_uart_hex(UART_LOG_TX, PanasonicCommand::PollingMessage, REQUEST_DATA_MSG_SIZE, ','); this->write_array(PanasonicCommand::PollingMessage, REQUEST_DATA_MSG_SIZE); this->flush(); } From a4b0f605f807a1a570f754adff5cb6e04073a978 Mon Sep 17 00:00:00 2001 From: ElVit Date: Sun, 16 Feb 2025 13:10:27 +0100 Subject: [PATCH 6/6] added comments --- components/panasonic_heatpump/panasonic_heatpump.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/components/panasonic_heatpump/panasonic_heatpump.cpp b/components/panasonic_heatpump/panasonic_heatpump.cpp index 3ea4dba..7bd7dbe 100644 --- a/components/panasonic_heatpump/panasonic_heatpump.cpp +++ b/components/panasonic_heatpump/panasonic_heatpump.cpp @@ -50,7 +50,7 @@ namespace esphome if (this->uart_client_ != nullptr) this->uart_client_->write_byte(byte); - // Message shall start with 0x71, if not skip this byte + // Message shall start with 0x31, 0x71 or 0xF1, if not skip this byte if (!this->response_receiving_) { if (byte != 0x31 && byte != 0x71 && byte != 0xF1) @@ -126,7 +126,7 @@ namespace esphome this->uart_client_->read_byte(&byte); this->write_byte(byte); - // Message shall start with 0x71 or 0xF1, if not skip this byte + // Message shall start with 0x31, 0x71 or 0xF1, if not skip this byte if (!this->request_receiving_) { if (byte != 0x31 && byte != 0x71 && byte != 0xF1)