Sfoglia il codice sorgente

feat(devices): add Jiahong/ThermoLife ET-61 thermostat

Issue #4835
Jason Rumney 1 mese fa
parent
commit
33bf2f4c6b

+ 1 - 2
DEVICES.md

@@ -275,8 +275,7 @@
 - Hysen HY02TP, HY08ACF, HY08WE-2, HY101RF thermostats
 - Inkbird IPT-2CH v2.0 reptile thermostat
 - Inkbird ITC306A, ITC308, C236T thermostat smartplugs
-- Jiahong ET-44W thermostat (also sold under the TheroLife brand)
-- Jiahong ET-72W thermostat (branded Warmme in the app)
+- Jiahong ET-44W, ET-61, ET-72W thermostats (also sold under the ThermoLife, and Warmme brands)
 - Kiturami NCTR-100 water and heating thermostat
 - KKMoon knob thermostat
 - Konlen WF72TT/WF96TT dual temperature controller

+ 328 - 0
custom_components/tuya_local/devices/jiahong_et61plus_thermometer.yaml

@@ -0,0 +1,328 @@
+name: Thermostat
+products:
+  - id: tqS7rb8AmQtwAza1
+    manufacturer: ThermoLife
+    model: ET-61
+entities:
+  - entity: climate
+    translation_key: thermostat
+    dps:
+      - id: 101
+        type: boolean
+        name: hvac_mode
+        mapping:
+          - dps_val: false
+            value: "off"
+          - dps_val: true
+            value: heat
+      - id: 102
+        type: integer
+        name: temperature
+        range:
+          min: 50
+          max: 400
+          # holiday is limited to 15C/59F but we only have a single constraint
+        mapping:
+          - scale: 10
+            step: 5
+            constraint: temperature_unit
+            conditions:
+              - dps_val: true
+                range:
+                  min: 410
+                  max: 1040
+      - id: 103
+        type: string
+        name: preset_mode
+        mapping:
+          - dps_val: holiday
+            value: away
+          - dps_val: smart
+            value: program
+          - dps_val: hold
+            value: manual
+      - id: 105
+        type: integer
+        name: current_temperature
+        mapping:
+          - constraint: sensor
+            scale: 10
+            conditions:
+              - dps_val: "1"
+                value_redirect: floor_temperature
+      - id: 106
+        type: integer
+        name: floor_temperature
+        hidden: true
+        mapping:
+          - scale: 10
+      - id: 107
+        name: temperature_unit
+        type: boolean
+        mapping:
+          - dps_val: true
+            value: F
+          - value: C
+      - id: 111
+        type: string
+        name: sensor
+        hidden: true
+      - id: 118
+        type: string
+        name: hvac_action
+        mapping:
+          - dps_val: heating
+            value: heating
+          - value: idle
+  - entity: lock
+    translation_key: child_lock
+    category: config
+    dps:
+      - id: 108
+        type: boolean
+        name: lock
+  - entity: sensor
+    name: Room temperature
+    class: temperature
+    icon: "mdi:home-thermometer"
+    dps:
+      - id: 105
+        type: integer
+        name: sensor
+        class: measurement
+        mapping:
+          - scale: 10
+      - id: 107
+        name: unit
+        type: boolean
+        mapping:
+          - dps_val: true
+            value: F
+          - value: C
+  - entity: sensor
+    name: Floor temperature
+    class: temperature
+    icon: "mdi:thermometer-lines"
+    dps:
+      - id: 106
+        type: integer
+        name: sensor
+        class: measurement
+        mapping:
+          - scale: 10
+      - id: 107
+        name: unit
+        type: boolean
+        mapping:
+          - dps_val: true
+            value: F
+          - value: C
+  - entity: sensor
+    name: Runtime
+    class: duration
+    icon: "mdi:update"
+    dps:
+      - id: 117
+        type: integer
+        name: sensor
+        unit: min
+  - entity: select
+    category: config
+    translation_key: temperature_unit
+    dps:
+      - id: 107
+        name: option
+        type: boolean
+        mapping:
+          - dps_val: false
+            value: celsius
+          - dps_val: true
+            value: fahrenheit
+  - entity: number
+    category: config
+    class: temperature
+    name: Floor temperature limit
+    icon: "mdi:thermometer-chevron-down"
+    dps:
+      - id: 121
+        type: integer
+        name: value
+        range:
+          min: 200
+          max: 500
+        mapping:
+          - scale: 10
+            step: 5
+            constraint: unit
+            conditions:
+              - dps_val: true
+                range:
+                  min: 680
+                  max: 1220
+      - id: 107
+        name: unit
+        type: boolean
+        mapping:
+          - dps_val: true
+            value: F
+          - value: C
+  - entity: select
+    category: config
+    name: Temperature sensor
+    icon: "mdi:thermometer-check"
+    dps:
+      - id: 111
+        type: string
+        name: option
+        mapping:
+          - dps_val: "0"
+            value: "Room"
+            icon: "mdi:home-thermometer"
+          - dps_val: "1"
+            value: "Floor"
+            icon: "mdi:heating-coil"
+          - dps_val: "2"
+            value: "Both"
+            icon: "mdi:thermometer"
+  - entity: select
+    category: config
+    name: Auto schedule
+    icon: "mdi:calendar-sync"
+    dps:
+      - id: 110
+        type: integer
+        name: option
+        mapping:
+          - dps_val: 0
+            value: "7"
+          - dps_val: 1
+            value: "5+1+1"
+          - dps_val: 2
+            value: "7 (Adaptive)"
+          - dps_val: 3
+            value: "5+1+1 (Adaptive)"
+  - entity: number
+    category: config
+    name: Floor sensor power
+    class: power
+    dps:
+      - id: 116
+        type: integer
+        name: option
+        range:
+          min: 0
+          max: 4500
+  - entity: binary_sensor
+    class: problem
+    category: diagnostic
+    dps:
+      - id: 104
+        type: bitfield
+        name: sensor
+        mapping:
+          - dps_val: 0
+            value: false
+          - value: true
+      - id: 104
+        type: bitfield
+        name: fault_code
+  - entity: number
+    name: Holiday length
+    category: config
+    icon: "mdi:island"
+    class: duration
+    dps:
+      - id: 109
+        type: integer
+        optional: true
+        name: value
+        unit: d
+        range:
+          min: 0
+          max: 99
+  - entity: button
+    translation_key: factory_reset
+    category: config
+    hidden: true
+    dps:
+      - id: 115
+        type: boolean
+        optional: true
+        name: button
+  - entity: text
+    translation_key: schedule
+    category: config
+    hidden: true
+    dps:
+      - id: 119
+        type: base64
+        optional: true
+        name: value
+  - entity: number
+    name: Floor temperature calibration
+    category: config
+    translation_key: temperature_calibration
+    class: temperature_delta
+    dps:
+      - id: 112
+        type: integer
+        name: value
+        range:
+          min: -90
+          max: 90
+        mapping:
+          - scale: 10
+      - id: 107
+        name: unit
+        type: boolean
+        mapping:
+          - dps_val: true
+            value: F
+          - value: C
+  - entity: number
+    name: Room temperature calibration
+    category: config
+    translation_key: temperature_calibration
+    class: temperature_delta
+    dps:
+      - id: 113
+        type: integer
+        name: value
+        range:
+          min: -90
+          max: 90
+        mapping:
+          - scale: 10
+      - id: 107
+        name: unit
+        type: boolean
+        mapping:
+          - dps_val: true
+            value: F
+          - value: C
+  - entity: select
+    name: Temperature hysteresis
+    category: config
+    icon: "mdi:thermometer-lines"
+    dps:
+      - id: 114
+        type: string
+        name: option
+        mapping:
+          - dps_val: "0_5"
+            value: "0.5°"
+          - dps_val: "1"
+            value: "1°"
+          - dps_val: "2"
+            value: "2°"
+          - dps_val: "3"
+            value: "3°"
+  - entity: button
+    name: Refresh schedule
+    category: config
+    hidden: true
+    dps:
+      - id: 122
+        type: boolean
+        optional: true
+        name: button