ソースを参照

feat(devices): add Morris WFIN-35168 air conditioner

Issue #5115
Jason Rumney 1 ヶ月 前
コミット
020fa5e64b

+ 1 - 0
DEVICES.md

@@ -145,6 +145,7 @@
 - MeacoCool MC Series Pro portable air conditioners
 - Medion Life P1002 portable air conditioner
 - Monzana Klimaanlage air conditioner
+- Morris WFIN-35168 air conditioner
 - MyCond Berg air conditioner
 - Nedis ACMB1WT12 portable air conditioner
 - Rotenso Roni R35WI and Roni X

+ 567 - 0
custom_components/tuya_local/devices/morris_wfin35168_airconditioner.yaml

@@ -0,0 +1,567 @@
+name: Air conditioner
+products:
+  - id: nn2ooaacswz6uyi0
+    manufacturer: Morris
+    model: WFIN-35168
+entities:
+  - entity: climate
+    translation_key: aircon_extra
+    dps:
+      - id: 1
+        type: boolean
+        name: hvac_mode
+        mapping:
+          - dps_val: false
+            value: "off"
+          - dps_val: true
+            constraint: mode
+            conditions:
+              - dps_val: "0"
+                value: heat_cool
+              - dps_val: "1"
+                value: cool
+              - dps_val: "2"
+                value: dry
+              - dps_val: "3"
+                value: fan_only
+              - dps_val: "4"
+                value: heat
+      - id: 2
+        type: integer
+        name: temperature
+        unit: C
+        range:
+          min: 1600
+          max: 3200
+        mapping:
+          - scale: 100
+            step: 50
+      - id: 3
+        type: integer
+        name: current_temperature
+        mapping:
+          - scale: 100
+      - id: 4
+        type: string
+        name: mode
+        hidden: true
+      - id: 5
+        type: string
+        name: fan_speed
+        hidden: true
+      - id: 7
+        type: boolean
+        name: fan_mode
+        mapping:
+          - dps_val: true
+            value: auto
+          - dps_val: false
+            constraint: fan_speed
+            conditions:
+              - dps_val: "0"
+                value: "off"
+              - dps_val: "1"
+                value: quiet
+              - dps_val: "2"
+                value: low
+              - dps_val: "3"
+                value: medlow
+              - dps_val: "4"
+                value: medium
+              - dps_val: "5"
+                value: medhigh
+              - dps_val: "6"
+                value: high
+              - dps_val: "7"
+                value: strong
+      - id: 8
+        type: boolean
+        name: preset_mode
+        mapping:
+          - dps_val: true
+            value: eco
+          - dps_val: false
+            value: comfort
+      - id: 24
+        type: integer
+        name: temp_set_f
+      - id: 113
+        type: integer
+        name: max_temperature
+        mapping:
+          - scale: 100
+      - id: 114
+        type: integer
+        name: min_temperature
+        mapping:
+          - scale: 100
+      - id: 133
+        type: base64
+        optional: true
+        name: capabilities
+      - id: 137
+        type: string
+        name: swing_mode
+        mapping:
+          - dps_val: "0"
+            value: "off"
+          - dps_val: "1"
+            value: "on"
+      - id: 138
+        type: string
+        name: swing_horizontal_mode
+        mapping:
+          - dps_val: "0"
+            value: "off"
+          - dps_val: "1"
+            value: "on"
+  - entity: switch
+    name: Anti-mould
+    category: config
+    dps:
+      - id: 9
+        type: boolean
+        name: switch
+  - entity: switch
+    name: Emergency heat
+    category: config
+    hidden: true  # does not seem to be present
+    dps:
+      - id: 12
+        type: boolean
+        optional: true
+        name: switch
+  - entity: light
+    translation_key: indicator
+    category: config
+    dps:
+      - id: 13
+        type: boolean
+        name: switch
+  - entity: switch
+    translation_key: sound
+    category: config
+    dps:
+      - id: 16
+        type: boolean
+        name: switch
+  - entity: switch
+    name: Health
+    category: config
+    dps:
+      - id: 26
+        type: boolean
+        name: switch
+  - entity: switch
+    translation_key: evaporator_cleaning
+    category: config
+    dps:
+      - id: 27
+        type: boolean
+        name: switch
+  - entity: fan
+    translation_key: ventilation
+    category: config
+    hidden: true  # Does not seem to be present
+    dps:
+      - id: 39
+        type: boolean
+        optional: true
+        name: switch
+      - id: 40
+        type: string
+        optional: true
+        name: speed
+        mapping:
+          - dps_val: "0"
+            value: 0
+          - dps_val: "1"
+            value: 33
+          - dps_val: "2"
+            value: 66
+          - dps_val: "3"
+            value: 100
+      - id: 106
+        type: boolean
+        optional: true
+        name: preset_mode
+        mapping:
+          - dps_val: true
+            value: auto
+          - dps_val: false
+            value: manual
+  - entity: select
+    translation_key: temperature_unit
+    category: config
+    dps:
+      - id: 101
+        type: boolean
+        name: option
+        mapping:
+          - dps_val: false
+            value: celsius
+          - dps_val: true
+            value: fahrenheit
+  - entity: switch
+    name: Heat boost
+    category: config
+    dps:
+      - id: 102
+        type: boolean
+        name: switch
+  - entity: binary_sensor
+    class: heat
+    category: diagnostic
+    dps:
+      - id: 103
+        type: boolean
+        name: sensor
+  - entity: switch
+    name: High temperature wind
+    category: config
+    dps:
+      - id: 104
+        type: boolean
+        name: switch
+  - entity: switch
+    name: Cool wind
+    category: config
+    dps:
+      - id: 105
+        type: boolean
+        name: switch
+  - entity: text
+    translation_key: schedule
+    name: Schedule 1
+    category: config
+    hidden: true
+    dps:
+      - id: 107
+        type: string
+        name: value
+  - entity: text
+    translation_key: schedule
+    name: Schedule 2
+    category: config
+    hidden: true
+    dps:
+      - id: 109
+        type: string
+        name: value
+  - entity: binary_sensor
+    name: Ventilation
+    class: running
+    category: diagnostic
+    hidden: true  # does not seem to be present
+    dps:
+      - id: 108
+        type: boolean
+        optional: true
+        name: sensor
+  - entity: binary_sensor
+    name: Filter blockage
+    class: problem
+    category: diagnostic
+    dps:
+      - id: 110
+        type: boolean
+        name: sensor
+  - entity: switch
+    name: AI eco
+    category: config
+    dps:
+      - id: 111
+        type: boolean
+        name: switch
+      - id: 124
+        type: string
+        name: status
+        mapping:
+          - dps_val: "0"
+            value: disabled
+          - dps_val: "1"
+            value: frequency_modulated
+          - dps_val: "2"
+            value: PID
+  - entity: binary_sensor
+    name: Card
+    class: occupancy
+    category: diagnostic
+    dps:
+      - id: 112
+        type: boolean
+        name: sensor
+  - entity: sensor
+    name: Outdoor temperature
+    class: temperature
+    category: diagnostic
+    dps:
+      - id: 116
+        type: integer
+        name: sensor
+        unit: C
+        class: measurement
+        mapping:
+          - scale: 100
+  - entity: sensor
+    name: Compressor fan speed
+    category: diagnostic
+    dps:
+      - id: 117
+        type: integer
+        name: sensor
+        unit: rpm
+        class: measurement
+  - entity: number
+    name: Compressor fan speed
+    category: config
+    hidden: true  # docs say indoor unit should control it
+    dps:
+      - id: 118
+        type: integer
+        name: value
+        unit: rpm
+        range:
+          min: 0
+          max: 200
+        mapping:
+          - scale: 0.1
+  - entity: sensor
+    name: Compressor frequency
+    category: diagnostic
+    dps:
+      - id: 119
+        type: integer
+        name: sensor
+        class: measurement
+      - id: 120
+        type: integer
+        name: target
+  - entity: number
+    name: Compressor frequency
+    category: config
+    hidden: true  # does not seem like a user option
+    dps:
+      - id: 121
+        type: integer
+        name: value
+        range:
+          min: 0
+          max: 150
+        mapping:
+          - scale: 0.1
+  - entity: number
+    name: Compressor EEV opening
+    category: config
+    hidden: true  # does not seem like a user option
+    dps:
+      - id: 122
+        type: integer
+        name: value
+        unit: "°"
+        range:
+          min: 0
+          max: 500
+  - entity: switch
+    name: Soft wind
+    category: config
+    dps:
+      - id: 123
+        type: string
+        name: switch
+        mapping:
+          - dps_val: "0"
+            value: false
+          - dps_val: "1"
+            value: true
+          - value: true
+  - entity: select
+    name: Reporting
+    category: config
+    dps:
+      - id: 125
+        type: string
+        name: option
+        mapping:
+          - dps_val: "0"
+            value: "On mode change"
+          - dps_val: "1"
+            value: Hourly
+          - dps_val: "2"
+            value: "On demand"
+  - entity: select
+    name: Sleep mode
+    icon: "mdi:sleep"
+    category: config
+    dps:
+      - id: 126
+        type: string
+        name: option
+        mapping:
+          - dps_val: "0"
+            value: "Off"
+          - dps_val: "1"
+            value: Normal
+          - dps_val: "2"
+            value: Senior
+          - dps_val: "3"
+            value: Child
+  - entity: sensor
+    class: energy
+    dps:
+      - id: 127
+        type: integer
+        name: sensor
+        unit: kWh
+        class: total
+        mapping:
+          - scale: 100
+      - id: 128
+        type: unixtime
+        name: last_reset
+      - id: 129
+        type: unixtime
+        name: sample_time
+  - entity: number
+    name: Clear energy from
+    category: config
+    hidden: true  # docs say this is for cloud
+    dps:
+      - id: 130
+        type: unixtime
+        optional: true
+        name: value
+        range:
+          min: 0
+          max: 2147483647
+  - entity: number
+    name: Clear energy to
+    category: config
+    hidden: true  # docs say this is for cloud
+    dps:
+      - id: 131
+        type: unixtime
+        optional: true
+        name: value
+        range:
+          min: 0
+          max: 2147483647
+  - entity: select
+    name: Generator mode
+    category: config
+    dps:
+      - id: 132
+        type: string
+        name: option
+        mapping:
+          - dps_val: "0"
+            value: "Off"
+          - dps_val: "1"
+            value: Level 1
+          - dps_val: "2"
+            value: Level 2
+          - dps_val: "3"
+            value: Level 3
+          - dps_val: "4"
+            value: Level 4
+          - dps_val: "5"
+            value: Level 5
+          - dps_val: "6"
+            value: Level 6
+  - entity: binary_sensor
+    class: problem
+    category: diagnostic
+    dps:
+      - id: 134
+        type: base64
+        optional: true
+        name: sensor
+        mapping:
+          - dps_val: 0
+            value: false
+          - dps_val: null
+            value: false
+          - value: true
+      - id: 134
+        type: base64
+        optional: true
+        name: fault_code
+  - entity: switch
+    name: Light sensor
+    category: config
+    hidden: true  # does not seem to be supported
+    dps:
+      - id: 135
+        type: boolean
+        optional: true
+        name: switch
+  - entity: text
+    name: Special timer
+    category: config
+    icon: "mdi:timer"
+    hidden: true
+    dps:
+      - id: 136
+        type: string
+        name: value
+  - entity: select
+    name: Vertical swing
+    category: config
+    dps:
+      - id: 31
+        type: string
+        name: option
+        mapping:
+          - dps_val: "1"
+            value: Full swing
+          - dps_val: "2"
+            value: Upper
+          - dps_val: "3"
+            value: Lower
+          - dps_val: "6"
+            value: Surround
+          - dps_val: "8"
+            value: Hold
+          - dps_val: "9"
+            value: Top
+          - dps_val: "10"
+            value: Up
+          - dps_val: "11"
+            value: Center
+          - dps_val: "12"
+            value: Down
+          - dps_val: "13"
+            value: Bottom
+  - entity: select
+    name: Horizontal swing
+    category: config
+    dps:
+      - id: 34
+        type: string
+        name: option
+        mapping:
+          - dps_val: "1"
+            value: Full
+          - dps_val: "2"
+            value: Left
+          - dps_val: "3"
+            value: Center
+          - dps_val: "4"
+            value: Right
+          - dps_val: "5"
+            value: Opposing
+          - dps_val: "8"
+            value: Hold
+          - dps_val: "9"
+            value: Leftmost
+          - dps_val: "10"
+            value: Mid-left
+          - dps_val: "11"
+            value: Middle
+          - dps_val: "12"
+            value: Mid-right
+          - dps_val: "13"
+            value: Rightmost
+          - dps_val: "17"
+            value: Surround
+            # no sign of dps > 138 in logs, but there are many more documented