Merge branch 'main' into heatpump/feature/uart-task-handling

This commit is contained in:
ElVit
2026-03-20 22:05:00 +01:00
10 changed files with 175 additions and 13 deletions
+28 -5
View File
@@ -101,13 +101,24 @@ switch:
climate:
- platform: panasonic_heatpump
cool_mode: true
tank:
name: "DHW"
zone1:
name: "Zone 1"
min_temperature: -5.0
max_temperature: 5.0
temperature_step: 0.5
temperature_step: 1.0
water_heater:
- platform: panasonic_heatpump
tank:
name: "DHW"
min_temperature: 40.0
max_temperature: 65.0
target_temperature_step: 1.0
```
Thanks to [oxyde42](https://github.com/oxyde42) there is also an exmaple yaml code for the HeishaMon Large Board:
- [example_heishamon_large.yaml](../../prototypes/panasonic_heatpump/example_heishamon_large.yaml)
## Configuration variables
* **id** (*Optional*, ID): Manually specify the ID used for actions.
@@ -315,6 +326,8 @@ sensor:
name: "Bivalent Advanced Stop Delay"
top138:
name: "Bivalent Advanced DHW Delay"
top142:
name: "Expansion Valve"
xtop0:
name: "Heat Power Consumption Extra"
@@ -594,14 +607,24 @@ Here a list of all supported climates:
climate:
- platform: panasonic_heatpump
cool_mode: false
tank:
name: "DHW"
zone1:
name: "Zone 1"
zone2:
name: "Zone 2"
```
### Water Heater
All water_heater are optional and all options from [water_heater component](https://esphome.io/components/water_heater/) can be applied.
Here a list of all supported water_heater:
```yaml
water_heater:
- platform: panasonic_heatpump
tank:
name: "DHW"
```
## Custom Entities (For Advanced Users)
If you review the [ProtocolByteDecrypt.md](https://github.com/Egyras/HeishaMon/blob/master/ProtocolByteDecrypt.md) file you will find also some TOPs and SETs which are not implemented yet in heishamon.
@@ -21,6 +21,7 @@ from esphome.const import (
STATE_CLASS_MEASUREMENT,
STATE_CLASS_TOTAL_INCREASING,
ICON_COUNTER,
ICON_FAN,
)
from .. import (
CONF_PANASONIC_HEATPUMP_ID,
@@ -32,7 +33,7 @@ UNIT_LITRE_PER_MINUTE = "L/min"
UNIT_ROTATIONS_PER_MINUTE = "r/min"
UNIT_PRESSURE_KGFCM2 = "kgf/cm²"
UNIT_BAR = "bar"
ICON_FAN_SPEED = "mdi:fan"
ICON_VALVE = "mdi:pipe-valve"
CONF_TOP1 = "top1" # Pump Flow
CONF_TOP5 = "top5" # Main Inlet Temp
@@ -129,7 +130,7 @@ CONF_TOP135 = "top135" # Bivalent Advanced Stop Temp
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_XTOP0 = "xtop0" # Heat Power Consumption Extra
CONF_XTOP1 = "xtop1" # Cool Power Consumption Extra
CONF_XTOP2 = "xtop2" # DHW Power Consumption Extra
@@ -233,6 +234,7 @@ TYPES = [
CONF_TOP136,
CONF_TOP137,
CONF_TOP138,
CONF_TOP142,
CONF_XTOP0,
CONF_XTOP1,
CONF_XTOP2,
@@ -582,14 +584,14 @@ CONFIG_SCHEMA = cv.Schema(
cv.Optional(CONF_TOP62): sensor.sensor_schema(
PanasonicHeatpumpSensor,
accuracy_decimals=2,
icon=ICON_FAN_SPEED,
icon=ICON_FAN,
state_class=STATE_CLASS_MEASUREMENT,
unit_of_measurement=UNIT_ROTATIONS_PER_MINUTE,
),
cv.Optional(CONF_TOP63): sensor.sensor_schema(
PanasonicHeatpumpSensor,
accuracy_decimals=2,
icon=ICON_FAN_SPEED,
icon=ICON_FAN,
state_class=STATE_CLASS_MEASUREMENT,
unit_of_measurement=UNIT_ROTATIONS_PER_MINUTE,
),
@@ -910,6 +912,13 @@ CONFIG_SCHEMA = cv.Schema(
state_class=STATE_CLASS_MEASUREMENT,
unit_of_measurement=UNIT_MINUTE,
),
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_XTOP0): sensor.sensor_schema(
PanasonicHeatpumpSensor,
accuracy_decimals=0,
@@ -490,6 +490,11 @@ 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_TOP142:
new_state = PanasonicDecode::getByteMinus1(data[175]);
if (this->has_state() && this->get_state() == new_state)
return;
break;
case SensorIds::CONF_XTOP0:
new_state = PanasonicDecode::getWordMinus1(data, 14);
@@ -102,6 +102,7 @@ enum SensorIds : uint8_t {
CONF_TOP136,
CONF_TOP137,
CONF_TOP138,
CONF_TOP142,
CONF_XTOP0,
CONF_XTOP1,
@@ -22,6 +22,8 @@ ICON_LIQUID = "mdi:water"
ICON_VALVE = "mdi:pipe-valve"
ICON_PUMP = "mdi:pump"
ICON_EXTERNAL_PAD_HEATER = "mdi:radiator"
ICON_THERMOMETER = "mdi:thermometer"
ICON_BIVALENT = "mdi:vector-combine"
CONF_TOP4 = "top4" # Operation Mode
# TODO: Split up top4 into top4_1 (Heating Mode State) and top4_2 (DHW Mode State)
@@ -141,9 +143,11 @@ CONFIG_SCHEMA = cv.Schema(
),
cv.Optional(CONF_TOP111): text_sensor.text_sensor_schema(
PanasonicHeatpumpTextSensor,
icon=ICON_THERMOMETER,
),
cv.Optional(CONF_TOP112): text_sensor.text_sensor_schema(
PanasonicHeatpumpTextSensor,
icon=ICON_THERMOMETER,
),
cv.Optional(CONF_TOP114): text_sensor.text_sensor_schema(
PanasonicHeatpumpTextSensor,
@@ -159,6 +163,7 @@ CONFIG_SCHEMA = cv.Schema(
),
cv.Optional(CONF_TOP130): text_sensor.text_sensor_schema(
PanasonicHeatpumpTextSensor,
icon=ICON_BIVALENT,
),
}
).extend(cv.COMPONENT_SCHEMA)
@@ -5,9 +5,9 @@ namespace esphome {
namespace panasonic_heatpump {
static const char* const TAG = "panasonic_heatpump.water_heater";
void PanasonicHeatpumpWaterHeater::dump_config() {
LOG_WATER_HEATER("", "Panasonic Heatpump Water Heater", this);
}
// void PanasonicHeatpumpWaterHeater::dump_config() {
// LOG_WATER_HEATER("", "Panasonic Heatpump Water Heater", this);
// }
water_heater::WaterHeaterTraits PanasonicHeatpumpWaterHeater::traits() {
auto traits = water_heater::WaterHeaterTraits();
@@ -17,7 +17,7 @@ class PanasonicHeatpumpWaterHeater : public water_heater::WaterHeater,
public PanasonicHeatpumpEntity {
public:
PanasonicHeatpumpWaterHeater() = default;
void dump_config() override;
// void dump_config() override;
water_heater::WaterHeaterTraits traits() override;
void publish_new_state(const std::vector<uint8_t>& data) override;