Merge pull request #33 from ElVit/heishamon_sync
Sync with Heishamon v4.1.2
This commit is contained in:
commit
c674f8f974
|
|
@ -473,6 +473,8 @@ text_sensor:
|
|||
name: "SmartDHW"
|
||||
top141:
|
||||
name: "Quiet Mode Priority"
|
||||
top143:
|
||||
name: "DHW Sensor Selection"
|
||||
```
|
||||
|
||||
### Numbers
|
||||
|
|
@ -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
|
||||
|
|
@ -713,9 +723,10 @@ When the ESP controller is connected initially to the heatpump (and 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 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)
|
||||
To solve this problem you can try one of the follwing:
|
||||
|
||||
* 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.
|
||||
|
||||
|
|
|
|||
|
|
@ -85,16 +85,15 @@ constexpr const uint8_t KnownModels[NUMBER_OF_MODELS][10] = {
|
|||
{0x12, 0xD7, 0x0D, 0x98, 0x11, 0x33, 0x94, 0x0C, 0x83, 0x10}, // 55
|
||||
{0xE2, 0xD5, 0x0B, 0x08, 0x95, 0x02, 0xD6, 0x0F, 0x67, 0x95}, // 56
|
||||
{0xE2, 0xD5, 0x0D, 0x36, 0x99, 0x02, 0xD6, 0x10, 0x66, 0x95}, // 57
|
||||
{0xE2, 0xCF, 0x0B, 0x84, 0x05, 0x12, 0xD0, 0x0B, 0x93, 0x05}, // 58
|
||||
{0xE2, 0xD5, 0x0F, 0x99, 0x94, 0x02, 0xD6, 0x10, 0x68, 0x95}, // 58
|
||||
{0xE2, 0xD5, 0x0C, 0x67, 0x00, 0x83, 0x92, 0x0C, 0x28, 0x98}, // 59
|
||||
{0xE2, 0xD5, 0x0C, 0x67, 0x00, 0x83, 0x92, 0x0D, 0x29, 0x98}, // 60
|
||||
{0xE2, 0xD5, 0x0D, 0x08, 0x95, 0x02, 0xD6, 0x10, 0x67, 0x95}, // 61
|
||||
{0xE2, 0xD5, 0x0C, 0x08, 0x95, 0x02, 0xD6, 0x0D, 0x67, 0x95}, // 62
|
||||
{0xE2, 0xD5, 0x0C, 0x08, 0x95, 0x02, 0xD6, 0x10, 0x67, 0x95}, // 63
|
||||
{0xE2, 0xD5, 0x0C, 0x08, 0x95, 0x02, 0xD6, 0x10, 0x66, 0x95}, // 64
|
||||
{0xE2, 0xD5, 0x0B, 0x08, 0x95, 0x02, 0xD6, 0x0E, 0x68, 0x95}, // 65
|
||||
{0xE2, 0xCF, 0x0C, 0x88, 0x05, 0x12, 0xD0, 0x0C, 0x97, 0x05}, // 66
|
||||
{0x12, 0xD7, 0x0D, 0x85, 0x11, 0x37, 0x94, 0x0E, 0x84, 0x10}, // 67
|
||||
{0xE2, 0xCF, 0x0D, 0x86, 0x05, 0x12, 0xD0, 0x0E, 0x95, 0x05}, // 60
|
||||
{0x12, 0xD7, 0x0C, 0x98, 0x14, 0x35, 0x94, 0x0D, 0x83, 0x10}, // 61
|
||||
{0xE2, 0xD5, 0x0C, 0x08, 0x95, 0x02, 0xD6, 0x10, 0x67, 0x95}, // 62
|
||||
{0xC2, 0xD3, 0x0D, 0x35, 0x65, 0xB2, 0xD3, 0x0B, 0x96, 0x65}, // 63
|
||||
{0xE2, 0xD5, 0x0C, 0x29, 0x99, 0x83, 0x92, 0x0C, 0x29, 0x98}, // 64
|
||||
{0x62, 0xD2, 0x0B, 0x45, 0x54, 0x42, 0xD2, 0x0B, 0x72, 0x66}, // 65
|
||||
{0xE2, 0xCF, 0x0B, 0x82, 0x09, 0x12, 0xD0, 0x0B, 0x10, 0x11}, // 66
|
||||
};
|
||||
|
||||
int PanasonicDecode::getBit1(uint8_t input) {
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@
|
|||
#define RESPONSE_MSG_SIZE 203
|
||||
#endif
|
||||
#ifndef NUMBER_OF_MODELS
|
||||
#define NUMBER_OF_MODELS 68
|
||||
#define NUMBER_OF_MODELS 67
|
||||
#endif
|
||||
|
||||
namespace esphome {
|
||||
|
|
@ -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
|
||||
};
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@ from esphome.const import (
|
|||
CONF_MIN_VALUE,
|
||||
CONF_MAX_VALUE,
|
||||
CONF_STEP,
|
||||
CONF_MODE,
|
||||
)
|
||||
from .. import (
|
||||
CONF_PANASONIC_HEATPUMP_ID,
|
||||
|
|
@ -49,6 +50,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 +86,7 @@ TYPES = [
|
|||
CONF_SET36,
|
||||
CONF_SET37,
|
||||
CONF_SET38,
|
||||
CONF_SET46,
|
||||
]
|
||||
|
||||
|
||||
|
|
@ -93,6 +96,9 @@ def number_options(min_val, max_val, step) -> cv.Schema:
|
|||
cv.Optional(CONF_MIN_VALUE, default=min_val): cv.float_,
|
||||
cv.Optional(CONF_MAX_VALUE, default=max_val): cv.float_,
|
||||
cv.Optional(CONF_STEP, default=step): cv.float_range(min=1.0, max=10.0),
|
||||
cv.Optional(CONF_MODE, default="BOX"): cv.enum(
|
||||
number.NUMBER_MODES, upper=True
|
||||
),
|
||||
}
|
||||
)
|
||||
return schema
|
||||
|
|
@ -254,6 +260,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)
|
||||
|
||||
|
|
|
|||
|
|
@ -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<uint8_t>& 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<uint8_t>& 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<uint8_t>& 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<uint8_t>& 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<uint8_t>& 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<uint8_t>& 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<uint8_t>& data
|
|||
if (this->has_state() && this->state == new_state)
|
||||
return;
|
||||
break;
|
||||
case NumberIds::CONF_SET46:
|
||||
new_state = PanasonicDecode::getByteMinus128(data[85]);
|
||||
if (this->has_state() && this->state == new_state)
|
||||
return;
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -41,6 +41,7 @@ enum NumberIds : uint8_t {
|
|||
CONF_SET36,
|
||||
CONF_SET37,
|
||||
CONF_SET38,
|
||||
CONF_SET46,
|
||||
};
|
||||
|
||||
class PanasonicHeatpumpNumber : public number::Number,
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
||||
|
|
|
|||
|
|
@ -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(index), 11);
|
||||
break;
|
||||
case SelectIds::CONF_SET44:
|
||||
this->parent_->set_command_byte(PanasonicCommand::setPlus1Multiply4(index), 9);
|
||||
break;
|
||||
case SelectIds::CONF_SET45:
|
||||
this->parent_->set_command_byte(PanasonicCommand::setPlus1(index), 9);
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
};
|
||||
|
|
@ -67,14 +76,8 @@ void PanasonicHeatpumpSelect::publish_new_state(const std::vector<uint8_t>& 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<uint8_t>& 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;
|
||||
|
|
@ -126,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;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -588,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,
|
||||
|
|
@ -924,9 +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,
|
||||
icon=ICON_VALVE,
|
||||
),
|
||||
cv.Optional(CONF_XTOP0): sensor.sensor_schema(
|
||||
PanasonicHeatpumpSensor,
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
||||
|
|
|
|||
|
|
@ -143,6 +143,12 @@ 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;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -31,6 +31,7 @@ enum TextSensorIds : uint8_t {
|
|||
CONF_TOP139,
|
||||
CONF_TOP140,
|
||||
CONF_TOP141,
|
||||
CONF_TOP143,
|
||||
};
|
||||
|
||||
class PanasonicHeatpumpTextSensor : public text_sensor::TextSensor,
|
||||
|
|
|
|||
Loading…
Reference in New Issue