Added TOP143, SET43, SET44, SET45, SET46

This commit is contained in:
ElVit 2026-04-13 12:20:11 +02:00
parent 652fb1b31f
commit ef0cbc6447
11 changed files with 63 additions and 49 deletions

View File

@ -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

View File

@ -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
};
};

View File

@ -297,8 +297,8 @@ void PanasonicHeatpumpNumber::publish_new_state(const std::vector<uint8_t>& 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;

View File

@ -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<uint8_t>& 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;
};

View File

@ -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,

View File

@ -495,11 +495,6 @@ void PanasonicHeatpumpSensor::publish_new_state(const std::vector<uint8_t>& 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);

View File

@ -103,7 +103,6 @@ enum SensorIds : uint8_t {
CONF_TOP137,
CONF_TOP138,
CONF_TOP142,
CONF_TOP143,
CONF_XTOP0,
CONF_XTOP1,

View File

@ -83,11 +83,6 @@ void PanasonicHeatpumpSwitch::publish_new_state(const std::vector<uint8_t>& 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<uint8_t>& 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<uint8_t>& 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<uint8_t>& 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)

View File

@ -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)

View File

@ -143,6 +143,11 @@ void PanasonicHeatpumpTextSensor::publish_new_state(const std::vector<uint8_t>&
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;
};

View File

@ -31,6 +31,7 @@ enum TextSensorIds : uint8_t {
CONF_TOP139,
CONF_TOP140,
CONF_TOP141,
CONF_TOP143,
};
class PanasonicHeatpumpTextSensor : public text_sensor::TextSensor,