Merge pull request #23 from ElVit/heatpump_heishamon_sync

Sync panasonic_heatpump with heishamon
This commit is contained in:
ElVit 2026-02-16 17:32:24 +01:00 committed by GitHub
commit 57e65412a8
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 93 additions and 66 deletions

View File

@ -79,6 +79,19 @@ constexpr const uint8_t KnownModels[NUMBER_OF_MODELS][10] = {
{0xE2, 0xD5, 0x0B, 0x34, 0x99, 0x83, 0x92, 0x0C, 0x27, 0x98}, // 52
{0x42, 0xD4, 0x0B, 0x83, 0x71, 0x32, 0xD2, 0x0C, 0x44, 0x55}, // 53
{0xE2, 0xCF, 0x0C, 0x74, 0x09, 0x12, 0xD0, 0x0E, 0x94, 0x05}, // 54
{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, 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
};
int PanasonicDecode::getBit1(uint8_t input) {
@ -160,30 +173,30 @@ int PanasonicDecode::getUintt16(const std::vector<uint8_t>& data, uint8_t index)
// TOP4 //
int PanasonicDecode::getOperationMode(uint8_t input) {
switch ((int)(input & 0b111111)) {
case 0b100001:
return 0; // 0x21 = tank
case 0b010010:
return 1; // 0x12 = heat
case 0b100010:
return 2; // 0x22 = heat+tank
case 0b010011:
return 3; // 0x13 = cool
case 0b100011:
return 4; // 0x23 = cool+tank
case 0b011000:
return 5; // 0x18 = auto
case 0b101000:
return 6; // 0x28 = auto-tank
case 0b011001:
return 7; // 0x19 = auto-heat
case 0b101001:
return 8; // 0x29 = auto-heat+tank
case 0b011010:
return 9; // 0x1A = auto-cool
case 0b101010:
return 10; // 0x2A = auto-cool+tank
default:
return -1; // unknown
case 0b100001: // 0x21 = tank
return 0;
case 0b010010: // 0x12 = heat
return 1;
case 0b100010: // 0x22 = heat+tank
return 2;
case 0b010011: // 0x13 = cool
return 3;
case 0b100011: // 0x23 = cool+tank
return 4;
case 0b011000: // 0x18 = auto
return 5;
case 0b101000: // 0x28 = auto-tank
return 6;
case 0b011001: // 0x19 = auto-heat
return 7;
case 0b101001: // 0x29 = auto-heat+tank
return 8;
case 0b011010: // 0x1A = auto-cool
return 9;
case 0b101010: // 0x2A = auto-cool+tank
return 10;
default: // unknown
return -1;
}
}
@ -225,12 +238,12 @@ std::string PanasonicDecode::getErrorInfo(uint8_t errorType, uint8_t errorNumber
char error_string[10];
switch (error_type) {
case 177: // B1=F type error
sprintf(error_string, "F%02X", error_number);
break;
case 161: // A1=H type error
case 0xA1: // H type error
sprintf(error_string, "H%02X", error_number);
break;
case 0xB1: // F type error
sprintf(error_string, "F%02X", error_number);
break;
default:
sprintf(error_string, "No error");
break;

View File

@ -7,7 +7,7 @@
#define RESPONSE_MSG_SIZE 203
#endif
#ifndef NUMBER_OF_MODELS
#define NUMBER_OF_MODELS 55
#define NUMBER_OF_MODELS 68
#endif
namespace esphome {
@ -68,7 +68,7 @@ class PanasonicDecode {
static const constexpr char* const ExtPadHeaterType[] = {"3", "Disabled", "Type-A", "Type-B"};
static const constexpr char* const BivalentMode[] = {"3", "Alternative", "Parallel", "Advanced Parallel"};
static const constexpr char* const ModelNames[] = {
"55", // string representation of number of known models (last model number + 1)
"58", // string representation of number of known models (last model number + 1)
"WH-MDC05H3E5", // 0
"WH-MDC07H3E5", // 1
"IDU:WH-SXC09H3E5, ODU:WH-UX09HE5", // 2
@ -88,42 +88,55 @@ class PanasonicDecode {
"IDU:WH-ADC0309H3E5, ODU:WH-UD09HE5", // 16
"IDU:WH-ADC0309J3E5, ODU:WH-UD05JE5", // 17
"IDU:WH-SDC0709J3E5, ODU:WH-UD07JE5", // 18
"IDU:WH-SDC07H3E5-1, ODU:WH-UD07HE5-1", // 19
"WH-MDC07J3E5", // 20
"WH-MDC09J3E5", // 21
"IDU:WH-SDC0305J3E5, ODU:WH-UD05JE5", // 22
"WH-MXC09J3E8", // 23
"WH-MXC12J9E8", // 24
"IDU:WH-ADC1216H6E5, ODU:WH-UD12HE5", // 25
"IDU:WH-ADC0309J3E5C, ODU:WH-UD07JE5", // 26
"WH-MDC07J3E5", // 27
"WH-MDC05J3E5", // 28
"IDU:WH-SQC12H9E8, ODU:WH-UQ12HE8", // 29
"IDU:WH-SXC12H6E5, ODU:WH-UX12HE5", // 30
"WH-MDC09J3E5", // 31
"WH-MXC09J3E5", // 32
"IDU:WH-ADC1216H6E5C, ODU:WH-UD12HE5", // 33
"IDU:WH-ADC0509L3E5, ODU:WH-WDG07LE5", // 34
"IDU:WH-SXC09H3E8, ODU:WH-UX09HE8", // 35
"IDU:WH-ADC0309K3E5AN, ODU:WH-UDZ07KE5", // 36
"IDU:WH-SDC0309K3E5, ODU:WH-UDZ05KE5", // 37
"IDU:WH-SDC0509L3E5, ODU:WH-WDG09LE5", // 38
"IDU:WH-SDC12H9E8, ODU:WH-UD12HE8", // 39
"IDU:WH-SDC0309K3E5, ODU:WH-UDZ07KE5", // 40
"IDU:WH-ADC0916H9E8, ODU:WH-UX16HE8", // 41
"IDU:WH-ADC0912H9E8, ODU:WH-UX12HE8", // 42
"WH-MXC16J9E8", // 43
"WH-MXC12J6E5", // 44
"IDU:WH-SQC09H3E8, ODU:WH-UQ09HE8", // 45
"IDU:WH-ADC0309K3E5, ODU:WH-UDZ09KE5", // 46
"IDU:WH-ADC0916H9E8, ODU:WH-UX12HE8", // 47
"IDU:WH-SDC0509L3E5, ODU:WH-WDG07LE5", // 48
"IDU:WH-SXC09H3E5, ODU:WH-UX09HE5", // 49
"WH-MXC12H9E8", // 50
"IDU:WH-ADC0509L3E5AN, ODU:WH-WDG05LE5", // 51
"IDU:WH-SDC0509L3E5, ODU:WH-WDG05LE5", // 52
"IDU:WH-ADC0309J3E5C, ODU:WH-UD03JE5", // 53
"IDU:WH-ADC0916H9E8, ODU:WH-UX09HE8", // 54
"IDU:WH-SDC07H3E5-1, ODU:WH-UD07HE5-1", // 19
"WH-MDC07J3E5", // 20
"WH-MDC09J3E5", // 21
"IDU:WH-SDC0305J3E5, ODU:WH-UD05JE5", // 22
"WH-MXC09J3E8", // 23
"WH-MXC12J9E8", // 24
"IDU:WH-ADC1216H6E5, ODU:WH-UD12HE5", // 25
"IDU:WH-ADC0309J3E5C, ODU:WH-UD07JE5", // 26
"WH-MDC07J3E5", // 27
"WH-MDC05J3E5", // 28
"IDU:WH-SQC12H9E8, ODU:WH-UQ12HE8", // 29
"IDU:WH-SXC12H6E5, ODU:WH-UX12HE5", // 30
"WH-MDC09J3E5", // 31
"WH-MXC09J3E5", // 32
"IDU:WH-ADC1216H6E5C, ODU:WH-UD12HE5", // 33
"IDU:WH-ADC0509L3E5, ODU:WH-WDG07LE5", // 34
"IDU:WH-SXC09H3E8, ODU:WH-UX09HE8", // 35
"IDU:WH-ADC0309K3E5AN, ODU:WH-UDZ07KE5", // 36
"IDU:WH-SDC0309K3E5, ODU:WH-UDZ05KE5", // 37
"IDU:WH-SDC0509L3E5, ODU:WH-WDG09LE5", // 38
"IDU:WH-SDC12H9E8, ODU:WH-UD12HE8", // 39
"IDU:WH-SDC0309K3E5, ODU:WH-UDZ07KE5", // 40
"IDU:WH-ADC0916H9E8, ODU:WH-UX16HE8", // 41
"IDU:WH-ADC0912H9E8, ODU:WH-UX12HE8", // 42
"WH-MXC16J9E8", // 43
"WH-MXC12J6E5", // 44
"IDU:WH-SQC09H3E8, ODU:WH-UQ09HE8", // 45
"IDU:WH-ADC0309K3E5, ODU:WH-UDZ09KE5", // 46
"IDU:WH-ADC0916H9E8, ODU:WH-UX12HE8", // 47
"IDU:WH-SDC0509L3E5, ODU:WH-WDG07LE5", // 48
"IDU:WH-SXC09H3E5, ODU:WH-UX09HE5", // 49
"WH-MXC12H9E8", // 50
"IDU:WH-ADC0509L3E5AN, ODU:WH-WDG05LE5", // 51
"IDU:WH-SDC0509L3E5, ODU:WH-WDG05LE5", // 52
"IDU:WH-ADC0309J3E5C, ODU:WH-UD03JE5", // 53
"IDU:WH-ADC0916H9E8, ODU:WH-UX09HE8", // 54
"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-ADC0509L3E5AN, ODU:WH-WDG07LE5", // 59
"IDU:WH-ADC0509L3E5AN, ODU:WH-WDG09LE5", // 60
"IDU:WH-SDC0309K3E5, ODU:WH-UDZ07KE5", // 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
};
};

View File

@ -0,0 +1 @@
[Link to heishamon_decode google spreadsheet](https://docs.google.com/spreadsheets/d/1IpGPg_Z_M5kcAj3TD48ABNItpEJu0iUv2wz5jdXhKX8/edit?usp=sharing)