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

feat(devices): add FM Solar portable heat pump

- same product id and dps layout as kibernetik_12k_airconditioner,
  but this model has HEAT mode, despite the model dp reporting "0",
  and identical product id. The only solution is duplicate configs
  when manufacturers play loose with ids like this. There may be
  some cloud info that can reliably differentiate these, but it is
  not visible locally.

Issue #5715
Jason Rumney 10 часов назад
Родитель
Сommit
d47fec57b7
2 измененных файлов с 145 добавлено и 0 удалено
  1. 1 0
      DEVICES.md
  2. 144 0
      custom_components/tuya_local/devices/fmsolar_12k_heatpump.yaml

+ 1 - 0
DEVICES.md

@@ -132,6 +132,7 @@
 - Eurom AC 5201 Caravan and Home air conditioner
 - Fersk Vind 2
 - Fisher Summer air conditioner
+- FM Solar mobile split heat pump
 - Fral Super Cool FSC08 WiFi portable air conditioner
 - Fral Super Cool FSC14.2 DH portable air conditioner
 - Friedrich Uni-Fit air conditioner (models: UCT14A30, UCT12A30, UCT08B10A)

+ 144 - 0
custom_components/tuya_local/devices/fmsolar_12k_heatpump.yaml

@@ -0,0 +1,144 @@
+name: Heat pump
+products:
+  - id: deedvplnx2yvge08
+    manufacturer: FM Solar
+    model: 12K portable split with heating
+entities:
+  - entity: climate
+    translation_only_key: aircon_extra
+    dps:
+      - id: 1
+        name: hvac_mode
+        type: boolean
+        mapping:
+          - dps_val: false
+            value: "off"
+          - dps_val: true
+            constraint: mode
+            conditions:
+              - dps_val: COOL
+                value: cool
+              - dps_val: FAN
+                value: fan_only
+              - dps_val: HEAT
+                value: heat
+              - dps_val: DRY
+                value: dry
+      - id: 2
+        name: temperature
+        type: integer
+        mapping:
+          - constraint: temperature_unit
+            conditions:
+              - dps_val: C
+                range:
+                  min: 16
+                  max: 32
+              - dps_val: F
+                range:
+                  min: 60
+                  max: 90
+      - id: 3
+        name: current_temperature
+        type: integer
+      - id: 4
+        name: mode
+        type: string
+        hidden: true
+      - id: 5
+        name: fan_mode
+        type: string
+        mapping:
+          - dps_val: "1"
+            value: quiet
+          - dps_val: "2"
+            value: low
+          - dps_val: "3"
+            value: medium
+          - dps_val: "4"
+            value: high
+          - dps_val: "5"
+            value: strong
+      - id: 19
+        name: temperature_unit
+        type: string
+      - id: 101
+        type: boolean
+        name: preset_mode
+        mapping:
+          - dps_val: true
+            value: sleep
+          - dps_val: false
+            value: comfort
+      - id: 104
+        name: swing_mode
+        type: boolean
+        mapping:
+          - dps_val: true
+            value: "vertical"
+          - dps_val: false
+            value: "off"
+      - id: 110
+        # "model" per Tuya data model; meaning of values unconfirmed.
+        #  - cool-only unit reports "0" - see kibernetik_12k_airconditioner
+        #  - this heat-capable 5-speed model also reports "0".
+        name: model
+        type: string
+  - entity: select
+    translation_key: temperature_unit
+    category: config
+    dps:
+      - id: 19
+        type: string
+        name: option
+        mapping:
+          - dps_val: C
+            value: celsius
+          - dps_val: F
+            value: fahrenheit
+  - entity: switch
+    translation_key: auto_dry
+    category: config
+    dps:
+      - id: 109
+        type: boolean
+        name: switch
+  - entity: number
+    translation_key: timer
+    category: config
+    class: duration
+    dps:
+      - id: 103
+        type: integer
+        name: value
+        unit: h
+        range:
+          min: 0
+          max: 24
+  - entity: sensor
+    translation_key: time_remaining
+    category: diagnostic
+    class: duration
+    dps:
+      - id: 105
+        type: integer
+        name: sensor
+        unit: min
+  - entity: binary_sensor
+    translation_key: defrost
+    category: diagnostic
+    dps:
+      - id: 102
+        type: boolean
+        name: sensor
+  - entity: binary_sensor
+    class: problem
+    category: diagnostic
+    dps:
+      - id: 106
+        type: bitfield
+        name: sensor
+        mapping:
+          - dps_val: 0
+            value: false
+          - value: true