diff --git a/components/panasonic_heatpump/README.md b/components/panasonic_heatpump/README.md index 9fda697..a031fc8 100644 --- a/components/panasonic_heatpump/README.md +++ b/components/panasonic_heatpump/README.md @@ -344,6 +344,8 @@ sensor: name: "Bivalent Advanced DHW Delay" top142: name: "Expansion Valve" + top143: + name: ""DHW Sensor Selection" xtop0: name: "Heat Power Consumption Extra" @@ -551,6 +553,8 @@ number: name: "Set Bivalent AP Start Temp" set38: name: "Set Bivalent AP Stop Temp" + set46: + name: ""Set Heater On Outdoor Temp" ``` ### Switches @@ -624,6 +628,12 @@ select: name: "Set Quiet Mode Priority" set42: name: "Set Pump Flow Rate Mode" + set43: + name: ""Set DHW Sensor Selection" + set44: + name: ""Set DHW Heater State" + set45: + name: ""Set Room Heater State" ``` ### Climates @@ -714,8 +724,8 @@ 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 0x31 05 10 01 ... These are initial request messages. To fix this problem you can try: -- enable the switch `error_reset` -- turn off and on the power of the heatpump (switching the heatpump off is not enough) +* enable the switch `error_reset` +* turn off and on the power of the heatpump (switching the heatpump off is not enough) The heatpump will restart and should respond to the requests. diff --git a/components/panasonic_heatpump/number/__init__.py b/components/panasonic_heatpump/number/__init__.py index 254a48b..5a3a559 100644 --- a/components/panasonic_heatpump/number/__init__.py +++ b/components/panasonic_heatpump/number/__init__.py @@ -49,6 +49,7 @@ CONF_SET29 = "set29" # Set Heating Off Outdoor Temp CONF_SET36 = "set36" # Set Bivalent Start Temp CONF_SET37 = "set37" # Set Bivalent AP Start Temp CONF_SET38 = "set38" # Set Bivalent AP Stop Temp +CONF_SET46 = "set46" # Set Heater On Outdoor Temp TYPES = [ CONF_SET5, @@ -84,6 +85,7 @@ TYPES = [ CONF_SET36, CONF_SET37, CONF_SET38, + CONF_SET46, ] @@ -254,6 +256,10 @@ CONFIG_SCHEMA = cv.Schema( PanasonicHeatpumpNumber, unit_of_measurement=UNIT_CELSIUS, ).extend(number_options(-10.0, 0.0, 1.0)), + cv.Optional(CONF_SET46): number.number_schema( + PanasonicHeatpumpNumber, + unit_of_measurement=UNIT_CELSIUS, + ).extend(number_options(-15.0, 20.0, 1.0)), } ).extend(cv.COMPONENT_SCHEMA) diff --git a/components/panasonic_heatpump/number/panasonic_heatpump_number.cpp b/components/panasonic_heatpump/number/panasonic_heatpump_number.cpp index 57389e0..53a2377 100644 --- a/components/panasonic_heatpump/number/panasonic_heatpump_number.cpp +++ b/components/panasonic_heatpump/number/panasonic_heatpump_number.cpp @@ -111,6 +111,9 @@ void PanasonicHeatpumpNumber::control(float value) { case NumberIds::CONF_SET38: this->parent_->set_command_byte(PanasonicCommand::setPlus128(value_int), 68); break; + case NumberIds::CONF_SET46: + this->parent_->set_command_byte(PanasonicCommand::setPlus128(value_int), 85); + break; default: return; }; @@ -129,26 +132,6 @@ void PanasonicHeatpumpNumber::publish_new_state(const std::vector& data float new_state; switch (this->id_) { - case NumberIds::CONF_SET11: - new_state = PanasonicDecode::getByteMinus128(data[42]); - if (this->has_state() && this->state == new_state) - return; - break; - case NumberIds::CONF_SET20: - new_state = PanasonicDecode::getByteMinus128(data[99]); - if (this->has_state() && this->state == new_state) - return; - break; - case NumberIds::CONF_SET18: - new_state = PanasonicDecode::getByteMinus128(data[84]); - if (this->has_state() && this->state == new_state) - return; - break; - case NumberIds::CONF_SET19: - new_state = PanasonicDecode::getByteMinus128(data[94]); - if (this->has_state() && this->state == new_state) - return; - break; case NumberIds::CONF_SET5: new_state = PanasonicDecode::getByteMinus128(data[38]); if (this->has_state() && this->state == new_state) @@ -159,26 +142,6 @@ void PanasonicHeatpumpNumber::publish_new_state(const std::vector& data if (this->has_state() && this->state == new_state) return; break; - case NumberIds::CONF_SET16_01: - new_state = PanasonicDecode::getByteMinus128(data[75]); - if (this->has_state() && this->state == new_state) - return; - break; - case NumberIds::CONF_SET16_02: - new_state = PanasonicDecode::getByteMinus128(data[76]); - if (this->has_state() && this->state == new_state) - return; - break; - case NumberIds::CONF_SET16_04: - new_state = PanasonicDecode::getByteMinus128(data[78]); - if (this->has_state() && this->state == new_state) - return; - break; - case NumberIds::CONF_SET16_03: - new_state = PanasonicDecode::getByteMinus128(data[77]); - if (this->has_state() && this->state == new_state) - return; - break; case NumberIds::CONF_SET7: new_state = PanasonicDecode::getByteMinus128(data[40]); if (this->has_state() && this->state == new_state) @@ -189,28 +152,33 @@ void PanasonicHeatpumpNumber::publish_new_state(const std::vector& data if (this->has_state() && this->state == new_state) return; break; - case NumberIds::CONF_SET16_09: - new_state = PanasonicDecode::getByteMinus128(data[86]); + case NumberIds::CONF_SET11: + new_state = PanasonicDecode::getByteMinus128(data[42]); if (this->has_state() && this->state == new_state) return; break; - case NumberIds::CONF_SET16_10: - new_state = PanasonicDecode::getByteMinus128(data[87]); + case NumberIds::CONF_SET15: + new_state = PanasonicDecode::getByteMinus1(data[45]); if (this->has_state() && this->state == new_state) return; break; - case NumberIds::CONF_SET16_12: - new_state = PanasonicDecode::getByteMinus128(data[89]); + case NumberIds::CONF_SET16_01: + new_state = PanasonicDecode::getByteMinus128(data[75]); if (this->has_state() && this->state == new_state) return; break; - case NumberIds::CONF_SET16_11: - new_state = PanasonicDecode::getByteMinus128(data[88]); + case NumberIds::CONF_SET16_02: + new_state = PanasonicDecode::getByteMinus128(data[76]); if (this->has_state() && this->state == new_state) return; break; - case NumberIds::CONF_SET29: - new_state = PanasonicDecode::getByteMinus128(data[83]); + case NumberIds::CONF_SET16_03: + new_state = PanasonicDecode::getByteMinus128(data[77]); + if (this->has_state() && this->state == new_state) + return; + break; + case NumberIds::CONF_SET16_04: + new_state = PanasonicDecode::getByteMinus128(data[78]); if (this->has_state() && this->state == new_state) return; break; @@ -224,13 +192,33 @@ void PanasonicHeatpumpNumber::publish_new_state(const std::vector& data if (this->has_state() && this->state == new_state) return; break; + case NumberIds::CONF_SET16_07: + new_state = PanasonicDecode::getByteMinus128(data[81]); + if (this->has_state() && this->state == new_state) + return; + break; case NumberIds::CONF_SET16_08: new_state = PanasonicDecode::getByteMinus128(data[82]); if (this->has_state() && this->state == new_state) return; break; - case NumberIds::CONF_SET16_07: - new_state = PanasonicDecode::getByteMinus128(data[81]); + case NumberIds::CONF_SET16_09: + new_state = PanasonicDecode::getByteMinus128(data[86]); + if (this->has_state() && this->state == new_state) + return; + break; + case NumberIds::CONF_SET16_10: + new_state = PanasonicDecode::getByteMinus128(data[87]); + if (this->has_state() && this->state == new_state) + return; + break; + case NumberIds::CONF_SET16_11: + new_state = PanasonicDecode::getByteMinus128(data[88]); + if (this->has_state() && this->state == new_state) + return; + break; + case NumberIds::CONF_SET16_12: + new_state = PanasonicDecode::getByteMinus128(data[89]); if (this->has_state() && this->state == new_state) return; break; @@ -244,18 +232,28 @@ void PanasonicHeatpumpNumber::publish_new_state(const std::vector& data if (this->has_state() && this->state == new_state) return; break; - case NumberIds::CONF_SET16_16: - new_state = PanasonicDecode::getByteMinus128(data[93]); - if (this->has_state() && this->state == new_state) - return; - break; case NumberIds::CONF_SET16_15: new_state = PanasonicDecode::getByteMinus128(data[92]); if (this->has_state() && this->state == new_state) return; break; - case NumberIds::CONF_SET15: - new_state = PanasonicDecode::getByteMinus1(data[45]); + case NumberIds::CONF_SET16_16: + new_state = PanasonicDecode::getByteMinus128(data[93]); + if (this->has_state() && this->state == new_state) + return; + break; + case NumberIds::CONF_SET18: + new_state = PanasonicDecode::getByteMinus128(data[84]); + if (this->has_state() && this->state == new_state) + return; + break; + case NumberIds::CONF_SET19: + new_state = PanasonicDecode::getByteMinus128(data[94]); + if (this->has_state() && this->state == new_state) + return; + break; + case NumberIds::CONF_SET20: + new_state = PanasonicDecode::getByteMinus128(data[99]); if (this->has_state() && this->state == new_state) return; break; @@ -279,6 +277,11 @@ void PanasonicHeatpumpNumber::publish_new_state(const std::vector& data if (this->has_state() && this->state == new_state) return; break; + case NumberIds::CONF_SET29: + new_state = PanasonicDecode::getByteMinus128(data[83]); + if (this->has_state() && this->state == new_state) + return; + break; case NumberIds::CONF_SET36: new_state = PanasonicDecode::getByteMinus128(data[65]); if (this->has_state() && this->state == new_state) @@ -294,6 +297,11 @@ 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]); + if (this->has_state() && this->state == new_state) + return; + break; default: return; }; diff --git a/components/panasonic_heatpump/number/panasonic_heatpump_number.h b/components/panasonic_heatpump/number/panasonic_heatpump_number.h index 9fd0fd3..6d15614 100644 --- a/components/panasonic_heatpump/number/panasonic_heatpump_number.h +++ b/components/panasonic_heatpump/number/panasonic_heatpump_number.h @@ -41,6 +41,7 @@ enum NumberIds : uint8_t { CONF_SET36, CONF_SET37, CONF_SET38, + CONF_SET46, }; class PanasonicHeatpumpNumber : public number::Number, diff --git a/components/panasonic_heatpump/panasonic_heatpump.h b/components/panasonic_heatpump/panasonic_heatpump.h index 6e0ef9f..fa496ef 100644 --- a/components/panasonic_heatpump/panasonic_heatpump.h +++ b/components/panasonic_heatpump/panasonic_heatpump.h @@ -12,7 +12,7 @@ #include "commands.h" #ifndef PANASONIC_HEATPUMP_VERSION -#define PANASONIC_HEATPUMP_VERSION "0.0.8" +#define PANASONIC_HEATPUMP_VERSION "0.0.9-beta.1" #endif #ifndef KEEP_STATE diff --git a/components/panasonic_heatpump/select/__init__.py b/components/panasonic_heatpump/select/__init__.py index 013dc43..d99c650 100644 --- a/components/panasonic_heatpump/select/__init__.py +++ b/components/panasonic_heatpump/select/__init__.py @@ -20,6 +20,9 @@ CONF_SET39 = "set39" # Set Heating Control CONF_SET40 = "set40" # Set Smart DHW CONF_SET41 = "set41" # Set Quiet Mode Priority CONF_SET42 = "set42" # Set Pump Flow Rate Mode +CONF_SET43 = "set43" # Set DHW Sensor Selection +CONF_SET44 = "set44" # Set DHW Heater State +CONF_SET45 = "set45" # Set Room Heater State TYPES = [ CONF_SET2, @@ -33,6 +36,9 @@ TYPES = [ CONF_SET40, CONF_SET41, CONF_SET42, + CONF_SET43, + CONF_SET44, + CONF_SET45, ] CONF_SELECTS = [ @@ -81,6 +87,18 @@ CONF_SELECTS = [ "DeltaT", "Max. Duty", ], + [ + "Top", + "Center", + ], + [ + "Blocked", + "Free", + ], + [ + "Blocked", + "Free", + ], ] CONF_SELECT_COOL_MODE = [ @@ -136,6 +154,15 @@ CONFIG_SCHEMA = cv.Schema( cv.Optional(CONF_SET42): select.select_schema( PanasonicHeatpumpSelect, ), + cv.Optional(CONF_SET43): select.select_schema( + PanasonicHeatpumpSelect, + ), + cv.Optional(CONF_SET44): select.select_schema( + PanasonicHeatpumpSelect, + ), + cv.Optional(CONF_SET45): select.select_schema( + PanasonicHeatpumpSelect, + ), } ).extend(cv.COMPONENT_SCHEMA) diff --git a/components/panasonic_heatpump/select/panasonic_heatpump_select.cpp b/components/panasonic_heatpump/select/panasonic_heatpump_select.cpp index 0267ffb..e702d90 100644 --- a/components/panasonic_heatpump/select/panasonic_heatpump_select.cpp +++ b/components/panasonic_heatpump/select/panasonic_heatpump_select.cpp @@ -49,6 +49,15 @@ void PanasonicHeatpumpSelect::control(const std::string& value) { case SelectIds::CONF_SET42: this->parent_->set_command_byte(PanasonicCommand::setPlus1Multiply16(index), 29); break; + case SelectIds::CONF_SET43: + this->parent_->set_command_byte(PanasonicCommand::setPlus1(value), 11); + break; + case SelectIds::CONF_SET44: + this->parent_->set_command_byte(PanasonicCommand::setPlus1Multiply4(value), 9); + break; + case SelectIds::CONF_SET45: + this->parent_->set_command_byte(PanasonicCommand::setPlus1(value), 9); + break; default: return; }; @@ -67,14 +76,8 @@ void PanasonicHeatpumpSelect::publish_new_state(const std::vector& data std::string new_state; switch (this->id_) { - case SelectIds::CONF_SET9: - new_state = - PanasonicDecode::getTextState(PanasonicDecode::OperationMode, PanasonicDecode::getOperationMode(data[6])); - if (this->has_state() && this->current_option() == new_state) - return; - break; - case SelectIds::CONF_SET4: - new_state = PanasonicDecode::getTextState(PanasonicDecode::PowerfulMode, PanasonicDecode::getBit6and7and8(data[7])); + case SelectIds::CONF_SET2: + new_state = PanasonicDecode::getTextState(PanasonicDecode::HolidayState, PanasonicDecode::getBit3and4(data[5])); if (this->has_state() && this->current_option() == new_state) return; break; @@ -83,8 +86,14 @@ void PanasonicHeatpumpSelect::publish_new_state(const std::vector& data if (this->has_state() && this->current_option() == new_state) return; break; - case SelectIds::CONF_SET2: - new_state = PanasonicDecode::getTextState(PanasonicDecode::HolidayState, PanasonicDecode::getBit3and4(data[5])); + case SelectIds::CONF_SET4: + new_state = PanasonicDecode::getTextState(PanasonicDecode::PowerfulMode, PanasonicDecode::getBit6and7and8(data[7])); + if (this->has_state() && this->current_option() == new_state) + return; + break; + case SelectIds::CONF_SET9: + new_state = + PanasonicDecode::getTextState(PanasonicDecode::OperationMode, PanasonicDecode::getOperationMode(data[6])); if (this->has_state() && this->current_option() == new_state) return; break; diff --git a/components/panasonic_heatpump/select/panasonic_heatpump_select.h b/components/panasonic_heatpump/select/panasonic_heatpump_select.h index e4a238a..0a1fb4f 100644 --- a/components/panasonic_heatpump/select/panasonic_heatpump_select.h +++ b/components/panasonic_heatpump/select/panasonic_heatpump_select.h @@ -19,6 +19,9 @@ enum SelectIds : uint8_t { CONF_SET40, CONF_SET41, CONF_SET42, + CONF_SET43, + CONF_SET44, + CONF_SET45, }; class PanasonicHeatpumpSelect : public select::Select, diff --git a/components/panasonic_heatpump/sensor/__init__.py b/components/panasonic_heatpump/sensor/__init__.py index 6707b49..9e4310e 100644 --- a/components/panasonic_heatpump/sensor/__init__.py +++ b/components/panasonic_heatpump/sensor/__init__.py @@ -134,6 +134,7 @@ 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 @@ -238,6 +239,7 @@ TYPES = [ CONF_TOP137, CONF_TOP138, CONF_TOP142, + CONF_TOP143, CONF_XTOP0, CONF_XTOP1, CONF_XTOP2, @@ -928,6 +930,13 @@ CONFIG_SCHEMA = cv.Schema( 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, + ), cv.Optional(CONF_XTOP0): sensor.sensor_schema( PanasonicHeatpumpSensor, accuracy_decimals=0, diff --git a/components/panasonic_heatpump/sensor/panasonic_heatpump_sensor.cpp b/components/panasonic_heatpump/sensor/panasonic_heatpump_sensor.cpp index 7e4355e..503b51c 100644 --- a/components/panasonic_heatpump/sensor/panasonic_heatpump_sensor.cpp +++ b/components/panasonic_heatpump/sensor/panasonic_heatpump_sensor.cpp @@ -495,6 +495,11 @@ 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 84c4350..f696351 100644 --- a/components/panasonic_heatpump/sensor/panasonic_heatpump_sensor.h +++ b/components/panasonic_heatpump/sensor/panasonic_heatpump_sensor.h @@ -103,6 +103,7 @@ enum SensorIds : uint8_t { CONF_TOP137, CONF_TOP138, CONF_TOP142, + CONF_TOP143, CONF_XTOP0, CONF_XTOP1,