Bläddra i källkod

feat (devices): add Homvana H111S humidifier

Issue #3940
Jason Rumney 3 månader sedan
förälder
incheckning
6e51636d9e
26 ändrade filer med 311 tillägg och 23 borttagningar
  1. 1 0
      ACKNOWLEDGEMENTS.md
  2. 1 0
      DEVICES.md
  3. 215 0
      custom_components/tuya_local/devices/homvana_h111s_humidifier.yaml
  4. 4 1
      custom_components/tuya_local/translations/bg.json
  5. 4 1
      custom_components/tuya_local/translations/ca.json
  6. 4 1
      custom_components/tuya_local/translations/cz.json
  7. 4 1
      custom_components/tuya_local/translations/de.json
  8. 4 1
      custom_components/tuya_local/translations/el.json
  9. 4 1
      custom_components/tuya_local/translations/en.json
  10. 4 1
      custom_components/tuya_local/translations/es.json
  11. 4 1
      custom_components/tuya_local/translations/fr.json
  12. 4 1
      custom_components/tuya_local/translations/hu.json
  13. 5 1
      custom_components/tuya_local/translations/id.json
  14. 4 1
      custom_components/tuya_local/translations/it.json
  15. 4 1
      custom_components/tuya_local/translations/ja.json
  16. 4 1
      custom_components/tuya_local/translations/no-NB.json
  17. 4 1
      custom_components/tuya_local/translations/pl.json
  18. 4 1
      custom_components/tuya_local/translations/pt-BR.json
  19. 4 1
      custom_components/tuya_local/translations/pt-PT.json
  20. 4 1
      custom_components/tuya_local/translations/ro.json
  21. 4 1
      custom_components/tuya_local/translations/ru.json
  22. 5 1
      custom_components/tuya_local/translations/sv.json
  23. 4 1
      custom_components/tuya_local/translations/uk.json
  24. 4 1
      custom_components/tuya_local/translations/ur.json
  25. 4 1
      custom_components/tuya_local/translations/zh-Hans.json
  26. 4 1
      custom_components/tuya_local/translations/zh-Hant.json

+ 1 - 0
ACKNOWLEDGEMENTS.md

@@ -1117,3 +1117,4 @@ Further device support has been made with the assistance of users. Please consid
 - [dtaylor7](https://github.com/dtaylor7) for contributing support for eTowel Mini04 plus towel rail thermostat and WarmeHaus thermostatic towel rail element.
 - [StrandmonYellow](https://github.com/StrandmonYellow) for assisting with support for Amenzo dishwasher.
 - [rbswift](https://github.com/rbswift) for assisting with support for Intaflo Intabloc air-water heat pump.
+- [evilpig](https://github.com/evilpig) for assisting with support for Homvana H111S humidifier.

+ 1 - 0
DEVICES.md

@@ -444,6 +444,7 @@
 - Clean Air Optima CA-604B, CA-605B humidifiers
 - Clofte Duo 400 humidifier
 - Eanons QT-JS2014 purifying humidifier
+- Homvana H111S humidifier
 - Inkbird IHC-200 humidity controller
 - Klarta Humea humidifier
 - Kyvol EA200 humidifier

+ 215 - 0
custom_components/tuya_local/devices/homvana_h111s_humidifier.yaml

@@ -0,0 +1,215 @@
+name: Humidifier
+products:
+  - id: iduvrkbxe1w174v7
+    manufacturer: Homvana
+    model: H111S
+entities:
+  - entity: humidifier
+    class: humidifier
+    dps:
+      - id: 1
+        type: boolean
+        name: switch
+      - id: 6
+        type: string
+        optional: true
+        name: mode
+        mapping:
+          - dps_val: botany
+            value: Plant
+          - dps_val: piano
+            value: Piano
+          - dps_val: pet
+            value: Pet
+      - id: 14
+        type: integer
+        name: current_humidity
+      - id: 102
+        type: string
+        optional: true
+        name: str_humidity
+      - id: 105
+        type: integer
+        name: humidity
+        range:
+          min: 30
+          max: 90
+        mapping:
+          - step: 5
+  - entity: fan
+    name: Spray
+    icon: "mdi:sprinkler-variant"
+    dps:
+      - id: 1
+        type: boolean
+        name: switch
+      - id: 3
+        type: string
+        name: speed
+        mapping:
+          - dps_val: low
+            value: 33
+          - dps_val: middle
+            value: 66
+          - dps_val: high
+            value: 100
+      - id: 104
+        type: boolean
+        optional: true
+        name: preset_mode
+        mapping:
+          - dps_val: false
+            value: continuous
+          - dps_val: true
+            value: auto
+  - entity: light
+    translation_key: display
+    category: config
+    dps:
+      - id: 5
+        type: boolean
+        name: switch
+  - entity: switch
+    translation_key: sleep
+    category: config
+    dps:
+      - id: 16
+        type: boolean
+        optional: true
+        name: switch
+  - entity: select
+    translation_key: timer
+    category: config
+    dps:
+      - id: 19
+        type: string
+        name: option
+        mapping:
+          - dps_val: cancel
+            value: cancel
+          - dps_val: "2h"
+            value: "2h"
+          - dps_val: "4h"
+            value: "4h"
+          - dps_val: "6h"
+            value: "6h"
+          - dps_val: "8h"
+            value: "8h"
+          - dps_val: "10h"
+            value: "10h"
+          - dps_val: "12h"
+            value: "12h"
+  - entity: select
+    name: Heating
+    icon: "mdi:fire"
+    category: config
+    dps:
+      - id: 101
+        type: string
+        name: option
+        mapping:
+          - dps_val: cancel
+            value: "Off"
+          - dps_val: "1"
+            value: low
+          - dps_val: "2"
+            value: medium
+          - dps_val: "3"
+            value: high
+  - entity: switch
+    name: Humidity setting
+    category: config
+    dps:
+      - id: 106
+        type: boolean
+        name: switch
+  - entity: switch
+    name: Heating
+    category: config
+    dps:
+      - id: 107
+        type: boolean
+        optional: true
+        name: switch
+  - entity: sensor
+    class: temperature
+    category: diagnostic
+    dps:
+      - id: 12
+        type: integer
+        name: sensor
+        unit: F
+        class: measurement
+  - entity: sensor
+    translation_key: time_remaining
+    class: duration
+    category: diagnostic
+    dps:
+      - id: 20
+        type: integer
+        name: sensor
+        unit: h
+        class: measurement
+  - entity: binary_sensor
+    class: problem
+    category: diagnostic
+    dps:
+      - id: 22
+        type: bitfield
+        name: sensor
+        mapping:
+          - dps_val: 0
+            value: false
+          - dps_val: 4
+            value: false
+          - value: true
+      - id: 22
+        type: bitfield
+        name: fault_code
+      - id: 22
+        type: bitfield
+        name: description
+        mapping:
+          - dps_val: 0
+            value: ok
+          - dps_val: 1
+            value: other
+          - dps_val: 2
+            value: PTC temperature
+          - dps_val: 4
+            value: Water low
+          - dps_val: 8
+            value: PCB temperature
+          - dps_val: 16
+            value: UART error
+          - dps_val: 32
+            value: Water empty
+          - dps_val: 64
+            value: IIC error
+  - entity: binary_sensor
+    translation_key: tank_empty
+    dps:
+      - id: 22
+        type: bitfield
+        name: sensor
+        mapping:
+          - dps_val: 4  # low
+            value: true
+          - dps_val: 32  # empty
+            value: true
+          - value: false
+  - entity: sensor
+    translation_key: status
+    class: enum
+    category: diagnostic
+    dps:
+      - id: 103
+        type: string
+        name: sensor
+        mapping:
+          - dps_val: dry
+            value: dry
+          - dps_val: comfortable
+            value: comfortable
+          - dps_val: damp
+            value: damp

+ 4 - 1
custom_components/tuya_local/translations/bg.json

@@ -788,7 +788,10 @@
                     "missing": "Липсва",
                     "formatting": "Форматиране",
                     "unformatted": "Неформатиран",
-                    "maintenance_required": "Изисква се поддръжка"
+                    "maintenance_required": "Изисква се поддръжка",
+                    "dry": "Сухо",
+                    "comfortable": "Удобно",
+                    "damp": "Влажно"
                 }
             },
             "time_remaining": {

+ 4 - 1
custom_components/tuya_local/translations/ca.json

@@ -458,7 +458,10 @@
                     "missing": "Falta",
                     "formatting": "Formatant",
                     "unformatted": "No formatat",
-                    "maintenance_required": "Manteniment necessari"
+                    "maintenance_required": "Manteniment necessari",
+                    "dry": "Sec",
+                    "comfortable": "Còmode",
+                    "damp": "Humit"
                 }
             },
             "time_remaining": {

+ 4 - 1
custom_components/tuya_local/translations/cz.json

@@ -787,7 +787,10 @@
                     "missing": "Chybí",
                     "formatting": "Formátování",
                     "unformatted": "Neformátováno",
-                    "maintenance_required": "Vyžadována údržba"
+                    "maintenance_required": "Vyžadována údržba",
+                    "dry": "Suchý",
+                    "comfortable": "Pohodlný",
+                    "damp": "Vlhost"
                 }
             },
             "time_remaining": {

+ 4 - 1
custom_components/tuya_local/translations/de.json

@@ -788,7 +788,10 @@
                     "missing": "Fehlend",
                     "formatting": "Formatieren",
                     "unformatted": "Unformatiert",
-                    "maintenance_required": "Wartung erforderlich"
+                    "maintenance_required": "Wartung erforderlich",
+                    "dry": "Trocken",
+                    "comfortable": "Bequem",
+                    "damp": "Feucht"
                 }
             },
             "time_remaining": {

+ 4 - 1
custom_components/tuya_local/translations/el.json

@@ -787,7 +787,10 @@
                     "missing": "Ελλιπές",
                     "formatting": "Μορφοποίηση",
                     "unformatted": "Μη μορφοποιημένο",
-                    "maintenance_required": "Απαιτείται συντήρηση"
+                    "maintenance_required": "Απαιτείται συντήρηση",
+                    "dry": "Στεγνό",
+                    "comfortable": "Άνετο",
+                    "damp": "Υγρό"
                 }
             },
             "time_remaining": {

+ 4 - 1
custom_components/tuya_local/translations/en.json

@@ -787,7 +787,10 @@
                     "missing": "Missing",
                     "formatting": "Formatting",
                     "unformatted": "Unformatted",
-                    "maintenance_required": "Maintenance required"
+                    "maintenance_required": "Maintenance required",
+                    "dry": "Dry",
+                    "comfortable": "Comfortable",
+                    "damp": "Damp"
                 }
             },
             "time_remaining": {

+ 4 - 1
custom_components/tuya_local/translations/es.json

@@ -787,7 +787,10 @@
                     "missing": "Faltante",
                     "formatting": "Formateando",
                     "unformatted": "Sin formatear",
-                    "maintenance_required": "Mantenimiento requerido"
+                    "maintenance_required": "Mantenimiento requerido",
+                    "dry": "Seco",
+                    "comfortable": "Cómodo",
+                    "damp": "Húmedo"
                 }
             },
             "time_remaining": {

+ 4 - 1
custom_components/tuya_local/translations/fr.json

@@ -787,7 +787,10 @@
                     "missing": "Manquant",
                     "formatting": "Formatage",
                     "unformatted": "Non formaté",
-                    "maintenance_required": "Entretien requis"
+                    "maintenance_required": "Entretien requis",
+                    "dry": "Sec",
+                    "comfortable": "Confortable",
+                    "damp": "Humide"
                 }
             },
             "time_remaining": {

+ 4 - 1
custom_components/tuya_local/translations/hu.json

@@ -788,7 +788,10 @@
                     "missing": "Hiányzik",
                     "formatting": "Formázás",
                     "unformatted": "Nem formázott",
-                    "maintenance_required": "Karbantartás szükséges"
+                    "maintenance_required": "Karbantartás szükséges",
+                    "dry": "Száraz",
+                    "comfortable": "Kényelmes",
+                    "damp": "Párás"
                 }
             },
             "time_remaining": {

+ 5 - 1
custom_components/tuya_local/translations/id.json

@@ -1,3 +1,4 @@
+
 {
     "title": "Tuya Local",
     "config": {
@@ -787,7 +788,10 @@
                     "missing": "Hilang",
                     "formatting": "Memformat",
                     "unformatted": "Belum diformat",
-                    "maintenance_required": "Perawatan diperlukan"
+                    "maintenance_required": "Perawatan diperlukan",
+                    "dry": "Kering",
+                    "comfortable": "Nyaman",
+                    "damp": "Lembab"
                 }
             },
             "time_remaining": {

+ 4 - 1
custom_components/tuya_local/translations/it.json

@@ -788,7 +788,10 @@
                     "missing": "Mancante",
                     "formatting": "Formattazione",
                     "unformatted": "Non formattato",
-                    "maintenance_required": "Manutenzione richiesta"
+                    "maintenance_required": "Manutenzione richiesta",
+                    "dry": "Asciutto",
+                    "comfortable": "Confortevole",
+                    "damp": "Umido"
                 }
             },
             "time_remaining": {

+ 4 - 1
custom_components/tuya_local/translations/ja.json

@@ -787,7 +787,10 @@
                     "missing": "欠落",
                     "formatting": "フォーマット中",
                     "unformatted": "未フォーマット",
-                    "maintenance_required": "メンテナンス必要"
+                    "maintenance_required": "メンテナンス必要",
+                    "dry": "乾燥",
+                    "comfortable": "快適",
+                    "damp": "湿気"
                 }
             },
             "time_remaining": {

+ 4 - 1
custom_components/tuya_local/translations/no-NB.json

@@ -788,7 +788,10 @@
                     "missing": "Manglende",
                     "formatting": "Formatering",
                     "unformatted": "Uformaterte",
-                    "maintenance_required": "Vedlikehold kreves"
+                    "maintenance_required": "Vedlikehold kreves",
+                    "dry": "Tørr"
+                    "comfortable": "Komfortabel",
+                    "damp": "Fuktig"
                 }
             },
             "time_remaining": {

+ 4 - 1
custom_components/tuya_local/translations/pl.json

@@ -788,7 +788,10 @@
                     "missing": "Brakujące",
                     "formatting": "Formatowanie",
                     "unformatted": "Niesformatowane",
-                    "maintenance_required": "Wymagana konserwacja"
+                    "maintenance_required": "Wymagana konserwacja",
+                    "dry": "Suchy",
+                    "comfortable": "Wygodny",
+                    "damp": "Wilgotny"
                 }
             },
             "time_remaining": {

+ 4 - 1
custom_components/tuya_local/translations/pt-BR.json

@@ -787,7 +787,10 @@
                     "missing": "Faltando",
                     "formatting": "Formatando",
                     "unformatted": "Não formatado",
-                    "maintenance_required": "Manutenção necessária"
+                    "maintenance_required": "Manutenção necessária",
+                    "dry": "Seco",
+                    "comfortable": "Confortável",
+                    "damp": "Úmido"
                 }
             },
             "time_remaining": {

+ 4 - 1
custom_components/tuya_local/translations/pt-PT.json

@@ -787,7 +787,10 @@
                     "missing": "Faltando",
                     "formatting": "Formatando",
                     "unformatted": "Não formatado",
-                    "maintenance_required": "Manutenção necessária"
+                    "maintenance_required": "Manutenção necessária",
+                    "dry": "Seco",
+                    "comfortable": "Confortável",
+                    "damp": "Úmido"
                 }
             },
             "time_remaining": {

+ 4 - 1
custom_components/tuya_local/translations/ro.json

@@ -787,7 +787,10 @@
                     "missing": "Lipsă",
                     "formatting": "Formatare",
                     "unformatted": "Neformatat",
-                    "maintenance_required": "Necesită întreținere"
+                    "maintenance_required": "Necesită întreținere",
+                    "dry": "Uscat",
+                    "comfortable": "Confortabil",
+                    "damp": "Umed"
                 }
             },
             "time_remaining": {

+ 4 - 1
custom_components/tuya_local/translations/ru.json

@@ -787,7 +787,10 @@
                     "missing": "Отсутствует",
                     "formatting": "Форматирование",
                     "unformatted": "Не отформатировано",
-                    "maintenance_required": "Требуется техническое обслуживание"
+                    "maintenance_required": "Требуется техническое обслуживание",
+                    "dry": "Сухой",
+                    "comfortable": "Комфортный",
+                    "damp": "Влажный"
                 }
             },
             "time_remaining": {

+ 5 - 1
custom_components/tuya_local/translations/sv.json

@@ -786,7 +786,11 @@
                     "empty": "Tom",
                     "missing": "Saknas",
                     "formatting": "Formaterar",
-                    "unformatted": "Oformaterad"
+                    "unformatted": "Oformaterad",
+                    "maintenance_required": "Underhåll krävs",
+                    "dry": "Torr",
+                    "comfortable": "Bekväm",
+                    "damp": "Fuktig"                    
                 }
             },
             "time_remaining": {

+ 4 - 1
custom_components/tuya_local/translations/uk.json

@@ -788,7 +788,10 @@
                     "missing": "Відсутній",
                     "formatting": "Форматування",
                     "unformatted": "Неформатований",
-                    "maintenance_required": "Потрібне обслуговування"
+                    "maintenance_required": "Потрібне обслуговування",
+                    "dry": "Сухий",
+                    "comfortable": "Комфортний",
+                    "damp": "Вогкий"
                 }
             },
             "time_remaining": {

+ 4 - 1
custom_components/tuya_local/translations/ur.json

@@ -789,7 +789,10 @@
                     "missing": "غائب",
                     "formatting": "فارمیٹنگ",
                     "unformatted": "غیر شکل بند",
-                    "maintenance_required": "مینٹیننس کی ضرورت ہے"
+                    "maintenance_required": "مینٹیننس کی ضرورت ہے",
+                    "dry": "خشک",
+                    "comfortable": "آرام دہ",
+                    "damp": "نم"
                 }
             },
             "time_remaining": {

+ 4 - 1
custom_components/tuya_local/translations/zh-Hans.json

@@ -787,7 +787,10 @@
                     "missing": "缺失",
                     "formatting": "格式化中",
                     "unformatted": "未格式化",
-                    "maintenance_required": "需要维护"
+                    "maintenance_required": "需要维护",
+                    "dry": "干燥",
+                    "comfortable": "舒适",
+                    "damp": "潮湿"
                 }
             },
             "time_remaining": {

+ 4 - 1
custom_components/tuya_local/translations/zh-Hant.json

@@ -788,7 +788,10 @@
                     "missing": "缺失",
                     "formatting": "格式化中",
                     "unformatted": "未格式化",
-                    "maintenance_required": "需要維護"
+                    "maintenance_required": "需要維護",
+                    "dry": "乾燥",
+                    "comfortable": "舒適",
+                    "damp": "潮濕"
                 }
             },
             "time_remaining": {