Просмотр исходного кода

Add support for Axen/Arielli KW100W combo heat pump

Issue #2561

- HY combo heat pump: improve handling of hot water on/off variations
  in climate entity using availability flags.
Jason Rumney 1 год назад
Родитель
Сommit
582afe55c6

+ 1 - 0
ACKNOWLEDGEMENTS.md

@@ -787,3 +787,4 @@ Further device support has been made with the assistance of users. Please consid
 - [tompapajr](https://github.com/tompapajr) for contributing support for Edge Theory Labs cold plunge heat pump.
 - [ThinkDualBrain](https://github.com/ThinkDualBrain) for contributing support for Dr Heater DR008 thermostat.
 - [keskival](https://github.com/keskival) for contributing support for ZPMeter ultrasonic water meter (without valve control).
+- [djvalex](https://github.com/djvalex) for assisting with support for Axen/Arielli KS-100W/EN8BP combo heat pump.

+ 1 - 0
DEVICES.md

@@ -149,6 +149,7 @@
 ### Water heaters
 
 - Aquatech Rapid/X6 heat pump water heater
+- Axen KS-100W/EN8BP combo heat pump (rebranded as Arielli)
 - Deakon EVI DC inverter heat pump
 - EMS Thermal 200L domestic heat pump hot water system
 - Ferroli Titano Twin water heater

+ 359 - 0
custom_components/tuya_local/devices/axen_ks100w_heatpump.yaml

@@ -0,0 +1,359 @@
+# Most DPS above 128 not implemented, as they do not appear in the log
+# see #2561 for details if they show up in future.
+name: Combo heat pump
+products:
+  - id: l01fseshej0xmz8x
+    name: Axen KS-100W/EN8BP
+primary_entity:
+  entity: switch
+  category: config
+  dps:
+    - id: 1
+      type: boolean
+      name: switch
+secondary_entities:
+  - entity: binary_sensor
+    class: problem
+    category: diagnostic
+    dps:
+      - id: 6
+        type: bitfield
+        name: sensor
+        mapping:
+          - dps_val: 0
+            value: false
+          - value: true
+      - id: 6
+        type: bitfield
+        name: fault_code
+  - entity: switch
+    name: Mute
+    icon: "mdi:volume-mute"
+    icon_priority: 2
+    category: config
+    dps:
+      - id: 101
+        type: boolean
+        name: switch
+        mapping:
+          - dps_val: false
+            icon: "mdi-volume-high"
+            icon_priority: 1
+  - entity: climate
+    dps:
+      - id: 1
+        type: boolean
+        name: available
+      - id: 102
+        type: integer
+        name: cool_temperature
+        range:
+          min: 70
+          max: 250
+        mapping:
+          - scale: 10
+            step: 10
+      - id: 103
+        type: integer
+        name: temperature
+        unit: C
+        range:
+          min: 250
+          max: 650
+        mapping:
+          - scale: 10
+            step: 10
+            constraint: hvac_mode
+            conditions:
+              - dps_val: ["cool", "cool_hot_water"]
+                value_redirect: cool_temperature
+                range:
+                  min: 70
+                  max: 250
+              - dps_val: ["auto", "auto_dhw"]
+                value_redirect: auto_temperature
+                range:
+                  min: 70
+                  max: 600
+      - id: 105
+        type: integer
+        optional: true
+        name: auto_temperature
+        range:
+          min: 70
+          max: 600
+        mapping:
+          - scale: 10
+            step: 10
+      - id: 109
+        type: string
+        name: water_off
+        hidden: true
+        mapping:
+          - dps_val: cool
+            value: true
+          - dps_val: heat
+            value: true
+          - dps_val: auto
+            value: true
+          - value: false
+      - id: 109
+        type: string
+        name: water_on
+        hidden: true
+        mapping:
+          - dps_val: cool
+            value: false
+          - dps_val: heat
+            value: false
+          - dps_val: auto
+            value: false
+          - value: true
+      - id: 109
+        type: string
+        name: hvac_mode
+        mapping:
+          - dps_val: cool
+            value: cool
+            available: water_off
+          - dps_val: heat
+            value: heat
+            available: water_off
+          - dps_val: auto
+            value: heat_cool
+            available: water_off
+          - dps_val: hot_water
+            value: "off"
+            available: water_on
+          - dps_val: cool_hot_water
+            value: cool
+            available: water_on
+          - dps_val: heat_hot_water
+            value: heat
+            available: water_on
+          - dps_val: auto_dhw
+            value: auto
+            available: water_on
+      - id: 117
+        type: boolean
+        name: hvac_action
+        mapping:
+          - dps_val: false
+            value: idle
+          - dps_val: true
+            constraint: hvac_mode
+            conditions:
+              - dps_val: ["cool", "cool_hotwater"]
+                value: cooling
+              - dps_val: ["heat", "heat_hotwater"]
+                value: heating
+              - dps_val: "hot_water"
+                value: idle
+              - dps_val: ["auto", "auto_dhw"]
+                value: null
+      - id: 118
+        type: integer
+        name: current_temperature
+        mapping:
+          - scale: 10
+  - entity: water_heater
+    dps:
+      - id: 1
+        type: boolean
+        name: operation_mode
+        mapping:
+          - dps_val: false
+            value: "off"
+          - dps_val: true
+            constraint: work_mode
+            conditions:
+              - dps_val: cool
+                value: air_cooling
+              - dps_val: heat
+                value: air_heating
+              - dps_val: auto
+                value: air_heat_cool
+              - dps_val: hot_water
+                value: hot_water
+              - dps_val: cool_hot_water
+                value: hot_water_and_cooling
+              - dps_val: heat_hot_water
+                value: hot_water_and_heating
+              - dps_val: auto_dhw
+                value: hot_water_and_heat_cool
+      - id: 104
+        type: integer
+        name: temperature
+        unit: C
+        range:
+          min: 250
+          max: 600
+        mapping:
+          - scale: 10
+            step: 10
+      - id: 108
+        type: integer
+        name: current_temperature
+        mapping:
+          - scale: 10
+      - id: 109
+        type: string
+        name: work_mode
+        hidden: true
+      - id: 165
+        type: boolean
+        optional: true
+        name: away_mode
+        mapping:
+          - dps_val: null
+            value: false
+            hidden: true
+  - entity: sensor
+    name: Inlet temperature
+    class: temperature
+    category: diagnostic
+    dps:
+      - id: 106
+        type: integer
+        name: sensor
+        unit: C
+        class: measurement
+        mapping:
+          - scale: 10
+  - entity: sensor
+    name: Outlet temperature
+    class: temperature
+    category: diagnostic
+    dps:
+      - id: 107
+        type: integer
+        name: sensor
+        unit: C
+        class: measurement
+        mapping:
+          - scale: 10
+  - entity: binary_sensor
+    name: Frost protection
+    class: cold
+    category: diagnostic
+    dps:
+      - id: 114
+        type: boolean
+        name: sensor
+      - id: 110
+        type: boolean
+        optional: true
+        name: protect_indicator
+  - entity: binary_sensor
+    translation_key: defrost
+    category: diagnostic
+    dps:
+      - id: 115
+        type: boolean
+        name: sensor
+  - entity: binary_sensor
+    name: Pump
+    class: running
+    category: diagnostic
+    dps:
+      - id: 116
+        type: boolean
+        name: sensor
+  - entity: sensor
+    name: Exhaust temperature
+    class: temperature
+    category: diagnostic
+    dps:
+      - id: 119
+        type: integer
+        name: sensor
+        unit: C
+        class: measurement
+        mapping:
+          - scale: 10
+  - entity: sensor
+    name: Return temperature
+    class: temperature
+    category: diagnostic
+    dps:
+      - id: 120
+        type: integer
+        name: sensor
+        unit: C
+        class: measurement
+        mapping:
+          - scale: 10
+  - entity: sensor
+    name: Compressor frequency
+    class: frequency
+    category: diagnostic
+    dps:
+      - id: 121
+        type: integer
+        name: sensor
+        unit: Hz
+        class: measurement
+  - entity: sensor
+    name: Main EEV
+    class: frequency
+    category: diagnostic
+    dps:
+      - id: 122
+        type: integer
+        name: sensor
+        unit: Hz
+        class: measurement
+  - entity: sensor
+    name: Auxiliary EEV
+    class: frequency
+    category: diagnostic
+    dps:
+      - id: 123
+        type: integer
+        name: sensor
+        unit: Hz
+        class: measurement
+  - entity: sensor
+    name: AC Fan
+    class: enum
+    category: diagnostic
+    dps:
+      - id: 124
+        type: string
+        name: sensor
+        mapping:
+          - dps_val: close
+            value: "off"
+          - dps_val: low_spd
+            value: low
+          - dps_val: high_spd
+            value: high
+  - entity: sensor
+    name: DC fan 1
+    category: diagnostic
+    dps:
+      - id: 125
+        type: integer
+        name: sensor
+        unit: rpm
+        class: measurement
+  - entity: sensor
+    name: DC fan 2
+    category: diagnostic
+    dps:
+      - id: 126
+        type: integer
+        name: sensor
+        unit: rpm
+        class: measurement
+  - entity: sensor
+    class: volume_flow_rate
+    category: diagnostic
+    dps:
+      - id: 127
+        type: integer
+        name: sensor
+        unit: m³/h
+        class: measurement
+        mapping:
+          - scale: 10

+ 26 - 3
custom_components/tuya_local/devices/hy_combo_heatpump.yaml

@@ -11,25 +11,48 @@ primary_entity:
       mapping:
         - dps_val: false
           value: "off"
-          hidden: true
+          available: water_off
         - dps_val: true
           constraint: mode
           conditions:
             - dps_val: Hot
               value: "off"
+              available: water_on
             - dps_val: Heating
               value: heat
-              hidden: true
+              available: water_off
             - dps_val: Hot_Heating
               value: heat
+              available: water_on
             - dps_val: Cooling
               value: cool
-              hidden: true
+              available: water_off
             - dps_val: Hot_Cooling
               value: cool
+              available: water_on
     - id: 2
       type: string
       name: mode
+    - id: 2
+      type: string
+      name: water_on
+      hidden: true
+      mapping:
+        - dps_val: Cooling
+          value: false
+        - dps_val: Heating
+          value: false
+        - value: true
+    - id: 2
+      type: string
+      name: water_off
+      hidden: true
+      mapping:
+        - dps_val: Cooling
+          value: true
+        - dps_val: Heating
+          value: true
+        - value: false
     - id: 21
       type: integer
       name: current_temperature