diff --git a/components/panasonic_heatpump/README.md b/components/panasonic_heatpump/README.md index a031fc8..c7412f0 100644 --- a/components/panasonic_heatpump/README.md +++ b/components/panasonic_heatpump/README.md @@ -344,8 +344,6 @@ sensor: name: "Bivalent Advanced DHW Delay" top142: name: "Expansion Valve" - top143: - name: ""DHW Sensor Selection" xtop0: name: "Heat Power Consumption Extra" @@ -475,6 +473,8 @@ text_sensor: name: "SmartDHW" top141: name: "Quiet Mode Priority" + top143: + name: "DHW Sensor Selection" ``` ### Numbers @@ -554,7 +554,7 @@ number: set38: name: "Set Bivalent AP Stop Temp" set46: - name: ""Set Heater On Outdoor Temp" + name: "Set Heater On Outdoor Temp" ``` ### Switches @@ -629,11 +629,11 @@ select: set42: name: "Set Pump Flow Rate Mode" set43: - name: ""Set DHW Sensor Selection" + name: "Set DHW Sensor Selection" set44: - name: ""Set DHW Heater State" + name: "Set DHW Heater State" set45: - name: ""Set Room Heater State" + name: "Set Room Heater State" ``` ### Climates diff --git a/components/panasonic_heatpump/decode.h b/components/panasonic_heatpump/decode.h index 7c48d1d..81ddb54 100644 --- a/components/panasonic_heatpump/decode.h +++ b/components/panasonic_heatpump/decode.h @@ -70,8 +70,9 @@ class PanasonicDecode { static const constexpr char* const HeatingControl[] = {"2", "Comfort", "Efficiency"}; static const constexpr char* const SmartDHW[] = {"2", "Variable", "Standard"}; static const constexpr char* const QuietModePriority[] = {"2", "Sound", "Capacity"}; + static const constexpr char* const DHWSensorSelection[] = {"2", "Top", "Center"}; static const constexpr char* const ModelNames[] = { - "58", // string representation of number of known models (last model number + 1) + "67", // string representation of number of known models (last model number + 1) "WH-MDC05H3E5", // 0 "WH-MDC07H3E5", // 1 "IDU:WH-SXC09H3E5, ODU:WH-UX09HE5", // 2 @@ -130,16 +131,15 @@ class PanasonicDecode { "IDU:WH-ADC0316M9E8AN2, ODU:WH-WXG09ME8", // 55 "IDU:WH-SDC0309K3E5, ODU:WH-UDZ07KE5", // 56 "IDU:WH-ADC0309K3E5AN, ODU:WH-UDZ05KE5", // 57 - "IDU:WH-SQC16H9E8, ODU:WH-UQ16HE8", // 58 + "IDU:WH-ADC0309K3E5, ODU:WH-UDZ09KE5", // 58 "IDU:WH-ADC0509L3E5AN, ODU:WH-WDG07LE5", // 59 - "IDU:WH-ADC0509L3E5AN, ODU:WH-WDG09LE5", // 60 - "IDU:WH-SDC0309K3E5, ODU:WH-UDZ07KE5", // 61 + "IDU:WH-SXC12H9E8, ODU:WH-UX12HE8", // 60 + "IDU:WH-SDC0316M9E8, ODU:WH-WXG09ME8", // 61 "IDU:WH-SDC0309K3E5, ODU:WH-UDZ07KE5", // 62 - "IDU:WH-SDC0309K3E5, ODU:WH-UDZ07KE5", // 63 - "IDU:WH-SDC0309K3E5, ODU:WH-UDZ05KE5", // 64 - "IDU:WH-SDC0309K3E5, ODU:WH-UDZ09KE5", // 65 - "IDU:WH-SDC09H3E8, ODU:WH-UD09HE8", // 66 - "WH-WXG12ME8", // 67 + "WH-MDC09J3E5-1", // 63 + "IDU:WH-ADC0509L3E5, ODU:WH-WDG09LE5", // 64 + "IDU:WH-ADC0309J3E5, ODU:WH-UD09JE5-1", // 65 + "IDU:WH-SDC12H6E5, ODU:WH-UD12HE5", // 66 }; }; diff --git a/components/panasonic_heatpump/number/panasonic_heatpump_number.cpp b/components/panasonic_heatpump/number/panasonic_heatpump_number.cpp index 53a2377..d1b3bde 100644 --- a/components/panasonic_heatpump/number/panasonic_heatpump_number.cpp +++ b/components/panasonic_heatpump/number/panasonic_heatpump_number.cpp @@ -297,8 +297,8 @@ void PanasonicHeatpumpNumber::publish_new_state(const std::vector& data if (this->has_state() && this->state == new_state) return; break; - case NumberIds::CONF_SET43: - new_state = PanasonicDecode::getBit7and8(data[11]); + case NumberIds::CONF_SET46: + new_state = PanasonicDecode::getByteMinus128(data[85]); if (this->has_state() && this->state == new_state) return; break; diff --git a/components/panasonic_heatpump/select/panasonic_heatpump_select.cpp b/components/panasonic_heatpump/select/panasonic_heatpump_select.cpp index e702d90..b3527a1 100644 --- a/components/panasonic_heatpump/select/panasonic_heatpump_select.cpp +++ b/components/panasonic_heatpump/select/panasonic_heatpump_select.cpp @@ -50,13 +50,13 @@ void PanasonicHeatpumpSelect::control(const std::string& value) { this->parent_->set_command_byte(PanasonicCommand::setPlus1Multiply16(index), 29); break; case SelectIds::CONF_SET43: - this->parent_->set_command_byte(PanasonicCommand::setPlus1(value), 11); + this->parent_->set_command_byte(PanasonicCommand::setPlus1(index), 11); break; case SelectIds::CONF_SET44: - this->parent_->set_command_byte(PanasonicCommand::setPlus1Multiply4(value), 9); + this->parent_->set_command_byte(PanasonicCommand::setPlus1Multiply4(index), 9); break; case SelectIds::CONF_SET45: - this->parent_->set_command_byte(PanasonicCommand::setPlus1(value), 9); + this->parent_->set_command_byte(PanasonicCommand::setPlus1(index), 9); break; default: return; @@ -135,6 +135,22 @@ void PanasonicHeatpumpSelect::publish_new_state(const std::vector& data if (this->has_state() && this->current_option() == new_state) return; break; + case SelectIds::CONF_SET43: + new_state = + PanasonicDecode::getTextState(PanasonicDecode::DHWSensorSelection, PanasonicDecode::getBit7and8(data[11])); + if (this->has_state() && this->current_option() == new_state) + return; + break; + case SelectIds::CONF_SET44: + new_state = PanasonicDecode::getTextState(PanasonicDecode::BlockedFree, PanasonicDecode::getBit5and6(data[9])); + if (this->has_state() && this->current_option() == new_state) + return; + break; + case SelectIds::CONF_SET45: + new_state = PanasonicDecode::getTextState(PanasonicDecode::BlockedFree, PanasonicDecode::getBit7and8(data[9])); + if (this->has_state() && this->current_option() == new_state) + return; + break; default: return; }; diff --git a/components/panasonic_heatpump/sensor/__init__.py b/components/panasonic_heatpump/sensor/__init__.py index 9e4310e..e962e6c 100644 --- a/components/panasonic_heatpump/sensor/__init__.py +++ b/components/panasonic_heatpump/sensor/__init__.py @@ -134,7 +134,6 @@ CONF_TOP136 = "top136" # Bivalent Advanced Start Delay CONF_TOP137 = "top137" # Bivalent Advanced Stop Delay CONF_TOP138 = "top138" # Bivalent Advanced DHW Delay CONF_TOP142 = "top142" # Expansion Valve -CONF_TOP143 = "top143" # DHW Sensor Selection CONF_XTOP0 = "xtop0" # Heat Power Consumption Extra CONF_XTOP1 = "xtop1" # Cool Power Consumption Extra CONF_XTOP2 = "xtop2" # DHW Power Consumption Extra @@ -239,7 +238,6 @@ TYPES = [ CONF_TOP137, CONF_TOP138, CONF_TOP142, - CONF_TOP143, CONF_XTOP0, CONF_XTOP1, CONF_XTOP2, @@ -590,16 +588,16 @@ CONFIG_SCHEMA = cv.Schema( cv.Optional(CONF_TOP62): sensor.sensor_schema( PanasonicHeatpumpSensor, accuracy_decimals=2, - icon=ICON_FAN, state_class=STATE_CLASS_MEASUREMENT, unit_of_measurement=UNIT_ROTATIONS_PER_MINUTE, + icon=ICON_FAN, ), cv.Optional(CONF_TOP63): sensor.sensor_schema( PanasonicHeatpumpSensor, accuracy_decimals=2, - icon=ICON_FAN, state_class=STATE_CLASS_MEASUREMENT, unit_of_measurement=UNIT_ROTATIONS_PER_MINUTE, + icon=ICON_FAN, ), cv.Optional(CONF_TOP64): sensor.sensor_schema( PanasonicHeatpumpSensor, @@ -926,16 +924,9 @@ CONFIG_SCHEMA = cv.Schema( cv.Optional(CONF_TOP142): sensor.sensor_schema( PanasonicHeatpumpSensor, accuracy_decimals=0, - icon=ICON_VALVE, state_class=STATE_CLASS_MEASUREMENT, unit_of_measurement=UNIT_EMPTY, - ), - cv.Optional(CONF_TOP143): sensor.sensor_schema( - PanasonicHeatpumpSensor, - accuracy_decimals=1, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - unit_of_measurement=UNIT_CELSIUS, + icon=ICON_VALVE, ), cv.Optional(CONF_XTOP0): sensor.sensor_schema( PanasonicHeatpumpSensor, diff --git a/components/panasonic_heatpump/sensor/panasonic_heatpump_sensor.cpp b/components/panasonic_heatpump/sensor/panasonic_heatpump_sensor.cpp index 503b51c..7e4355e 100644 --- a/components/panasonic_heatpump/sensor/panasonic_heatpump_sensor.cpp +++ b/components/panasonic_heatpump/sensor/panasonic_heatpump_sensor.cpp @@ -495,11 +495,6 @@ void PanasonicHeatpumpSensor::publish_new_state(const std::vector& data if (this->has_state() && this->get_state() == new_state) return; break; - case SensorIds::CONF_TOP143: - new_state = PanasonicDecode::getBit7and8(data[11]); - if (this->has_state() && this->get_state() == new_state) - return; - break; case SensorIds::CONF_XTOP0: new_state = PanasonicDecode::getWordMinus1(data, 14); diff --git a/components/panasonic_heatpump/sensor/panasonic_heatpump_sensor.h b/components/panasonic_heatpump/sensor/panasonic_heatpump_sensor.h index f696351..84c4350 100644 --- a/components/panasonic_heatpump/sensor/panasonic_heatpump_sensor.h +++ b/components/panasonic_heatpump/sensor/panasonic_heatpump_sensor.h @@ -103,7 +103,6 @@ enum SensorIds : uint8_t { CONF_TOP137, CONF_TOP138, CONF_TOP142, - CONF_TOP143, CONF_XTOP0, CONF_XTOP1, diff --git a/components/panasonic_heatpump/switch/panasonic_heatpump_switch.cpp b/components/panasonic_heatpump/switch/panasonic_heatpump_switch.cpp index 868017c..c78ee1a 100644 --- a/components/panasonic_heatpump/switch/panasonic_heatpump_switch.cpp +++ b/components/panasonic_heatpump/switch/panasonic_heatpump_switch.cpp @@ -83,11 +83,6 @@ void PanasonicHeatpumpSwitch::publish_new_state(const std::vector& data if (this->state == new_state) return; break; - case SwitchIds::CONF_SET24: - new_state = PanasonicDecode::getBinaryState(PanasonicDecode::getBit1and2(data[5])); - if (this->state == new_state) - return; - break; case SwitchIds::CONF_SET12: new_state = PanasonicDecode::getBinaryState(PanasonicDecode::getBit5and6(data[111])); if (this->state == new_state) @@ -98,8 +93,8 @@ void PanasonicHeatpumpSwitch::publish_new_state(const std::vector& data if (this->state == new_state) return; break; - case SwitchIds::CONF_SET28: - new_state = PanasonicDecode::getBinaryState(PanasonicDecode::getBit5and6(data[24])); + case SwitchIds::CONF_SET24: + new_state = PanasonicDecode::getBinaryState(PanasonicDecode::getBit1and2(data[5])); if (this->state == new_state) return; break; @@ -108,13 +103,13 @@ void PanasonicHeatpumpSwitch::publish_new_state(const std::vector& data if (this->state == new_state) return; break; - case SwitchIds::CONF_SET30: - new_state = PanasonicDecode::getBinaryState(PanasonicDecode::getBit7and8(data[23])); + case SwitchIds::CONF_SET28: + new_state = PanasonicDecode::getBinaryState(PanasonicDecode::getBit5and6(data[24])); if (this->state == new_state) return; break; - case SwitchIds::CONF_SET33: - new_state = PanasonicDecode::getBinaryState(PanasonicDecode::getBit5and6(data[23])); + case SwitchIds::CONF_SET30: + new_state = PanasonicDecode::getBinaryState(PanasonicDecode::getBit7and8(data[23])); if (this->state == new_state) return; break; @@ -128,6 +123,11 @@ void PanasonicHeatpumpSwitch::publish_new_state(const std::vector& data if (this->state == new_state) return; break; + case SwitchIds::CONF_SET33: + new_state = PanasonicDecode::getBinaryState(PanasonicDecode::getBit5and6(data[23])); + if (this->state == new_state) + return; + break; case SwitchIds::CONF_SET34: new_state = PanasonicDecode::getBinaryState(PanasonicDecode::getBit7and8(data[26])); if (this->state == new_state) diff --git a/components/panasonic_heatpump/text_sensor/__init__.py b/components/panasonic_heatpump/text_sensor/__init__.py index bb6c174..dac49b4 100644 --- a/components/panasonic_heatpump/text_sensor/__init__.py +++ b/components/panasonic_heatpump/text_sensor/__init__.py @@ -26,6 +26,7 @@ ICON_THERMOMETER = "mdi:thermometer" ICON_BIVALENT = "mdi:vector-combine" ICON_HEATING_CONTROL = "mdi:thermostat-auto" ICON_SMART_DHW = "mdi:water-boiler-auto" +ICON_DHW = "mdi:water-boiler" CONF_TOP4 = "top4" # Operation Mode # TODO: Split up top4 into top4_1 (Heating Mode State) and top4_2 (DHW Mode State) @@ -52,6 +53,7 @@ CONF_TOP130 = "top130" # Bivalent Mode CONF_TOP139 = "top139" # HeatingControl CONF_TOP140 = "top140" # SmartDHW CONF_TOP141 = "top141" # Quiet Mode Priority +CONF_TOP143 = "top143" # DHW Sensor Selection TYPES = [ CONF_TOP4, @@ -78,6 +80,7 @@ TYPES = [ CONF_TOP139, CONF_TOP140, CONF_TOP141, + CONF_TOP143, ] PanasonicHeatpumpTextSensor = panasonic_heatpump_ns.class_( @@ -185,6 +188,10 @@ CONFIG_SCHEMA = cv.Schema( PanasonicHeatpumpTextSensor, icon=ICON_QUIET_MODE, ), + cv.Optional(CONF_TOP143): text_sensor.text_sensor_schema( + PanasonicHeatpumpTextSensor, + icon=ICON_DHW, + ), } ).extend(cv.COMPONENT_SCHEMA) 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 79ea7ae..c8caf35 100644 --- a/components/panasonic_heatpump/text_sensor/panasonic_heatpump_text_sensor.cpp +++ b/components/panasonic_heatpump/text_sensor/panasonic_heatpump_text_sensor.cpp @@ -143,6 +143,11 @@ void PanasonicHeatpumpTextSensor::publish_new_state(const std::vector& if (this->has_state() && this->get_state() == new_state) return; break; + case TextSensorIds::CONF_TOP143: + new_state = PanasonicDecode::getTextState(PanasonicDecode::DHWSensorSelection, PanasonicDecode::getBit7and8(data[11])); + if (this->has_state() && this->get_state() == new_state) + return; + break; default: return; }; 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 7d34d9d..2514131 100644 --- a/components/panasonic_heatpump/text_sensor/panasonic_heatpump_text_sensor.h +++ b/components/panasonic_heatpump/text_sensor/panasonic_heatpump_text_sensor.h @@ -31,6 +31,7 @@ enum TextSensorIds : uint8_t { CONF_TOP139, CONF_TOP140, CONF_TOP141, + CONF_TOP143, }; class PanasonicHeatpumpTextSensor : public text_sensor::TextSensor,