Переглянути джерело

feat (devices): add Brokton BRST12 air conditioner

Issue #4156

Includes some new status translations for voice commands
Jason Rumney 2 тижнів тому
батько
коміт
d6dc956da5
26 змінених файлів з 888 додано та 0 видалено
  1. 1 0
      ACKNOWLEDGEMENTS.md
  2. 1 0
      DEVICES.md
  3. 817 0
      custom_components/tuya_local/devices/brokton_brst12_airconditioner.yaml
  4. 3 0
      custom_components/tuya_local/translations/bg.json
  5. 3 0
      custom_components/tuya_local/translations/ca.json
  6. 3 0
      custom_components/tuya_local/translations/cz.json
  7. 3 0
      custom_components/tuya_local/translations/de.json
  8. 3 0
      custom_components/tuya_local/translations/el.json
  9. 3 0
      custom_components/tuya_local/translations/en.json
  10. 3 0
      custom_components/tuya_local/translations/es.json
  11. 3 0
      custom_components/tuya_local/translations/fr.json
  12. 3 0
      custom_components/tuya_local/translations/hu.json
  13. 3 0
      custom_components/tuya_local/translations/id.json
  14. 3 0
      custom_components/tuya_local/translations/it.json
  15. 3 0
      custom_components/tuya_local/translations/ja.json
  16. 3 0
      custom_components/tuya_local/translations/no-NB.json
  17. 3 0
      custom_components/tuya_local/translations/pl.json
  18. 3 0
      custom_components/tuya_local/translations/pt-BR.json
  19. 3 0
      custom_components/tuya_local/translations/pt-PT.json
  20. 3 0
      custom_components/tuya_local/translations/ro.json
  21. 3 0
      custom_components/tuya_local/translations/ru.json
  22. 3 0
      custom_components/tuya_local/translations/sv.json
  23. 3 0
      custom_components/tuya_local/translations/uk.json
  24. 3 0
      custom_components/tuya_local/translations/ur.json
  25. 3 0
      custom_components/tuya_local/translations/zh-Hans.json
  26. 3 0
      custom_components/tuya_local/translations/zh-Hant.json

+ 1 - 0
ACKNOWLEDGEMENTS.md

@@ -1228,3 +1228,4 @@ Further device support has been made with the assistance of users. Please consid
 - [ben-h-a](https://github.com/ben-h-a) for contributing support for Xtuos dual pet feeder.
 - [drkn](https://github.com/drkn) for contributing support for Eberg HUMI humidifier.
 - [pacopaues](https://github.com/pacopaues) for assisting with support for RTI-Tek T5Z thermostat.
+- [ivan-mendez](https://github.com/ivan-mendez) for assisting with support for Brokton BRST12 air conditioner.

+ 1 - 0
DEVICES.md

@@ -91,6 +91,7 @@ devices # Supported
 - Arlec PA1123BKHA portable air conditioner
 - Ballu Aura air conditioner
 - Be Cool BC14KL2101F
+- Brokton BRST12 air conditioner
 - Carson CB PA280
 - Cecotec ForceClima Soundless portable air conditioner
 - Confortotal CICON242 mini split air conditioner

+ 817 - 0
custom_components/tuya_local/devices/brokton_brst12_airconditioner.yaml

@@ -0,0 +1,817 @@
+name: Air conditioner
+products:
+  - id: nn2ooaacswz6uyi0
+    manufacturer: Brokton
+    model: BRST12
+entities:
+  - entity: climate
+    translation_key: aircon_extra
+    dps:
+      - id: 1
+        type: boolean
+        name: switch
+        mapping:
+          - dps_val: false
+            value: "off"
+          - dps_val: true
+            constraint: mode
+            conditions:
+              - dps_val: "0"
+                value: auto
+              - 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
+        precision: 1
+        unit: C
+        range:
+          min: 1600
+          max: 3100
+        mapping:
+          - scale: 100
+            step: 50
+      - id: 3
+        type: integer
+        name: current_temperature
+        precision: 1
+        mapping:
+          - scale: 100
+      - id: 4
+        type: string
+        name: mode
+        hidden: true  # control via hvac_mode
+      - id: 5
+        type: string
+        name: fan_speed
+        hidden: true  # control via fan_mode
+      - 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
+        optional: true
+        name: preset_mode
+        mapping:
+          - dps_val: false
+            value: comfort
+          - dps_val: true
+            value: eco
+          - value_redirect: ai_eco
+      - id: 111
+        type: boolean
+        name: ai_eco
+        optional: true
+        hidden: true  # control via above
+        mapping:
+          - dps_val: false
+            value: comfort
+          - dps_val: true
+            value: eco
+      - id: 124
+        type: string
+        optional: true
+        name: ai_eco_status
+        mapping:
+          - dps_val: "0"
+            value: "off"
+          - dps_val: "1"
+            value: "AI eco frequency modulation"
+          - dps_val: "2"
+            value: "AI eco PID"
+      - id: 113
+        type: integer
+        name: max_temperature
+        mapping:
+          - scale: 100
+      - id: 114
+        type: integer
+        name: min_temperature
+        mapping:
+          - scale: 100
+      - id: 24
+        type: integer
+        name: temp_set_f
+      - id: 31
+        type: string
+        name: swing_mode
+        mapping:
+          - dps_val: "1"
+            value: "on"
+          - dps_val: "2"
+            value: upper_half
+          - dps_val: "3"
+            value: lower_half
+          - dps_val: "6"
+            value: surround
+          - dps_val: "8"
+            value: "off"
+          - dps_val: "9"
+            value: topmost
+          - dps_val: "10"
+            value: top
+          - dps_val: "11"
+            value: middle
+          - dps_val: "12"
+            value: down
+          - dps_val: "13"
+            value: downmost
+      - id: 34
+        type: string
+        name: swing_horizontal_mode
+        mapping:
+          - dps_val: "1"
+            value: "on"
+          - dps_val: "2"
+            value: left_swing
+          - dps_val: "3"
+            value: center_swing
+          - dps_val: "4"
+            value: right_swing
+          - dps_val: "5"
+            value: direct
+          - dps_val: "8"
+            value: "off"
+          - dps_val: "9"
+            value: leftmost
+          - dps_val: "10"
+            value: left
+          - dps_val: "11"
+            value: center
+          - dps_val: "12"
+            value: right
+          - dps_val: "13"
+            value: rightmost
+          - dps_val: "17"
+            value: surround
+  - entity: switch
+    name: Anti-mould
+    category: config
+    hidden: unavailable
+    dps:
+      - id: 9
+        type: boolean
+        optional: true
+        name: switch
+      # Capabilities looks promising, but exact format unclear, and it
+      # is not reported which prevents its use
+      # - id: 133
+      #   type: base64
+      #   mask: "000000000010"
+      #   name: available
+      - id: 9
+        type: boolean
+        optional: true
+        name: available
+        mapping:
+          - dps_val: null
+            value: false
+          - value: true
+  - entity: switch
+    name: Emergency heat
+    category: config
+    dps:
+      - id: 12
+        type: boolean
+        optional: true
+        name: switch
+  - entity: light
+    translation_key: display
+    category: config
+    dps:
+      - id: 13
+        type: boolean
+        name: switch
+  - entity: switch
+    name: Beep
+    category: config
+    dps:
+      - id: 16
+        type: boolean
+        name: switch
+  - entity: switch
+    translation_key: uv_sterilization
+    category: config
+    dps:
+      - id: 26
+        type: boolean
+        name: switch
+  - entity: switch
+    translation_key: evaporator_cleaning
+    category: config
+    hidden: unavailable
+    dps:
+      - id: 27
+        type: boolean
+        optional: true
+        name: switch
+      # - id: 133
+      #   type: base64
+      #   mask: "000000000008"
+      #   name: available
+      - id: 27
+        type: boolean
+        optional: true
+        name: available
+        mapping:
+          - dps_val: null
+            value: false
+          - value: true
+  - entity: fan
+    translation_key: ventilation
+    category: config
+    hidden: unavailable
+    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: 133
+      #   type: base64
+      #   mask: ""
+      #   name: available
+      - id: 39
+        type: boolean
+        optional: true
+        name: available
+        mapping:
+          - dps_val: null
+            value: false
+          - value: true
+  - 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: Eight-stage heating
+    category: config
+    dps:
+      - id: 102
+        type: boolean
+        name: switch
+  - entity: binary_sensor
+    name: Aux heat
+    class: running
+    category: diagnostic
+    dps:
+      - id: 103
+        type: boolean
+        name: sensor
+  - entity: switch
+    name: Hot 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: switch
+    name: Auto ventilation
+    category: config
+    hidden: unavailable
+    dps:
+      - id: 106
+        type: boolean
+        optional: true
+        name: switch
+      - id: 39
+        type: boolean
+        optional: true
+        name: available
+        mapping:
+          - dps_val: null
+            value: false
+          - value: true
+  - entity: text
+    name: Week timer 1
+    category: config
+    icon: "mdi:calendar-clock"
+    hidden: true  # advanced: need to understand format to use
+    dps:
+      - id: 107
+        type: string
+        name: value
+  - entity: text
+    name: Week timer 2
+    category: config
+    icon: "mdi:calendar-clock"
+    hidden: true  # advanced: need to understand format to use
+    dps:
+      - id: 109
+        type: string
+        name: value
+  - entity: binary_sensor
+    name: Ventilation blocked
+    class: problem
+    category: diagnostic
+    hidden: unavailable
+    dps:
+      - id: 108
+        type: boolean
+        optional: true
+        name: sensor
+      - id: 39
+        type: boolean
+        optional: true
+        name: available
+        mapping:
+          - dps_val: null
+            value: false
+          - value: true
+  - entity: binary_sensor
+    name: Filter blocked
+    class: problem
+    category: diagnostic
+    dps:
+      - id: 110
+        type: boolean
+        name: sensor
+      - id: 149
+        type: boolean
+        name: voice_alert
+  - entity: binary_sensor
+    name: Access card
+    class: lock
+    category: diagnostic
+    dps:
+      - id: 112
+        type: boolean
+        name: sensor
+  - entity: sensor
+    name: Ambient temperature
+    class: temperature
+    category: diagnostic
+    dps:
+      - id: 116
+        type: integer
+        name: sensor
+        unit: C
+        class: measurement
+        precision: 1
+        mapping:
+          - scale: 100
+  - entity: sensor
+    name: Outdoor fan speed
+    icon: "mdi:fan"
+    category: diagnostic
+    dps:
+      - id: 117
+        type: integer
+        name: sensor
+        unit: rpm
+        class: measurement
+  - entity: number
+    name: Outdoor fan speed
+    category: config
+    hidden: true  # should be controlled by the unit
+    icon: "mdi:fan"
+    dps:
+      - id: 118
+        type: integer
+        name: value
+        unit: rpm
+        range:
+          min: 0
+          max: 200
+        mapping:
+          - scale: 0.1
+  - entity: sensor
+    name: Compressor frequency
+    class: frequency
+    category: diagnostic
+    dps:
+      - id: 119
+        type: integer
+        name: sensor
+        unit: Hz
+        class: measurement
+      - id: 120
+        type: integer
+        name: target
+  - entity: number
+    name: Compressor frequency
+    category: config
+    hidden: true  # should be controlled by the unit
+    class: frequency
+    dps:
+      - id: 121
+        type: integer
+        name: value
+        unit: Hz
+        range:
+          min: 0
+          max: 150
+  - entity: number
+    name: EEV opening
+    category: config
+    hidden: true  # should be controlled by the unit
+    icon: "mdi:valve"
+    dps:
+      - id: 122
+        type: integer
+        name: value
+        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
+            hidden: true
+  - entity: select
+    name: Reporting mode
+    icon: "mdi:invoice-text-send"
+    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: "Cloud pull"
+  - 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: elderly
+          - 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: timestamp
+  - entity: datetime
+    name: Reset energy starting
+    hidden: true  # avoid conflict with cloud
+    category: config
+    dps:
+      - id: 130
+        type: unixtime
+        optional: true
+        name: second
+  - entity: datetime
+    name: Reset energy ending
+    hidden: true  # avoid conflict with cloud
+    category: config
+    dps:
+      - id: 131
+        type: unixtime
+        optional: true
+        name: second
+  - entity: select
+    name: Generator mode
+    icon: "mdi:solar-power-variant"
+    category: config
+    dps:
+      - id: 132
+        type: string
+        name: option
+        mapping:
+          - dps_val: "0"
+            value: disabled
+          - 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: string
+        optional: true
+        name: sensor
+        mapping:
+          # Since we don't have any observations, cover many possibilities
+          - dps_val: ""
+            value: false
+          - dps_val: AA==
+            value: false
+          - dps_val: AAAA
+            value: false
+          - dps_val: AAAAAAAA
+            value: false
+          - dps_val: null
+            value: false
+          - value: true
+      - id: 134
+        type: base64
+        optional: true
+        name: fault_code
+      - id: 144
+        type: boolean
+        name: inspection_mode
+      - id: 145
+        type: boolean
+        name: demo_mode
+  - entity: switch
+    class: Light sensor
+    category: config
+    hidden: unavailable
+    dps:
+      - id: 135
+        type: boolean
+        optional: true
+        name: switch
+      - id: 135
+        type: boolean
+        optional: true
+        name: available
+        mapping:
+          - dps_val: null
+            value: false
+          - value: true
+  - entity: text
+    name: Special timer
+    category: config
+    icon: "mdi:clock"
+    hidden: true  # advanced config, need to understand format to use
+    dps:
+      - id: 136
+        type: string
+        name: value
+  - entity: switch
+    name: Vertical swing
+    category: config
+    hidden: true  # duplicates dp 31 but in more simplistic way
+    dps:
+      - id: 137
+        type: string
+        name: switch
+        mapping:
+          - dps_val: "0"
+            value: false
+          - dps_val: "1"
+            value: true
+  - entity: switch
+    name: Horizontal swing
+    category: config
+    hidden: true  # duplicates dp 34 but in more simplistic way
+    dps:
+      - id: 138
+        type: string
+        name: switch
+        mapping:
+          - dps_val: "0"
+            value: false
+          - dps_val: "1"
+            value: true
+  - entity: switch
+    name: Voice activation
+    icon: "mdi:account-voice"
+    category: config
+    dps:
+      - id: 142
+        type: boolean
+        name: switch
+  - entity: sensor
+    name: Voice status
+    class: enum
+    translation_key: status
+    category: diagnostic
+    dps:
+      - id: 143
+        type: string
+        name: sensor
+        mapping:
+          - dps_val: "0"
+            value: standby
+          - dps_val: "1"
+            value: starting
+          - dps_val: "2"
+            value: working
+          - dps_val: "3"
+            value: failed
+          - dps_val: "4"
+            value: replying
+          - dps_val: "5"
+            value: playback
+  - entity: select
+    name: Voice location
+    icon: "mdi:account-voice"
+    category: config
+    hidden: true  # not clear whether this is user setting
+    dps:
+      - id: 146
+        type: string
+        name: option
+        mapping:
+          - dps_val: "0"
+            value: location_1
+          - dps_val: "1"
+            value: location_2
+          - dps_val: "2"
+            value: location_3
+          - dps_val: "3"
+            value: location_4
+          - dps_val: "4"
+            value: location_5
+      - id: 148
+        type: integer
+        name: mic_distance
+  - entity: select
+    name: Smart wind
+    icon: "mdi:weather-windy"
+    category: config
+    dps:
+      - id: 147
+        type: string
+        name: option
+        mapping:
+          - dps_val: "0"
+            value: "off"
+          - dps_val: "1"
+            value: Avoid people
+          - dps_val: "2"
+            value: Target people
+  - entity: select
+    name: Auto generator mode
+    icon: "mdi:solar-power-variant"
+    category: config
+    hidden: unavailable
+    dps:
+      - id: 151
+        type: string
+        optional: true
+        name: option
+        mapping:
+          - dps_val: "0"
+            value: disabled
+          - 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
+          - dps_val: "7"
+            value: paused
+      - id: 151
+        type: string
+        optional: true
+        name: available
+        mapping:
+          - dps_val: null
+            value: false
+          - value: true
+  - entity: sensor
+    name: Power source
+    class: enum
+    category: diagnostic
+    hidden: unavailable
+    dps:
+      - id: 152
+        type: string
+        optional: true
+        name: sensor
+        mapping:
+          - dps_val: "0"
+            value: grid
+          - dps_val: "1"
+            value: generator
+      - id: 152
+        type: string
+        optional: true
+        name: available
+        mapping:
+          - dps_val: null
+            value: false
+          - value: true
+  - entity: switch
+    name: Turbo ventilation
+    category: config
+    icon: "mdi:car-turbocharger"
+    hidden: unavailable
+    dps:
+      - id: 155
+        type: boolean
+        optional: true
+        name: switch
+      - id: 155
+        type: boolean
+        optional: true
+        name: available
+        mapping:
+          - dps_val: null
+            value: false
+          - value: true
+  - entity: binary_sensor
+    class: light
+    category: diagnostic
+    hidden: unavailable
+    dps:
+      - id: 156
+        type: boolean
+        optional: true
+        name: sensor
+      - id: 156
+        type: boolean
+        optional: true
+        name: available
+        mapping:
+          - dps_val: null
+            value: false
+          - value: true

+ 3 - 0
custom_components/tuya_local/translations/bg.json

@@ -955,6 +955,9 @@
                     "missing": "Липсва",
                     "formatting": "Форматиране",
                     "unformatted": "Неформатиран",
+                    "failed": "Неуспешен",
+                    "replying": "Отговаряне",
+                    "playback": "Възпроизвеждане",
                     "maintenance_required": "Изисква се поддръжка",
                     "dry": "Сухо",
                     "comfortable": "Удобно",

+ 3 - 0
custom_components/tuya_local/translations/ca.json

@@ -475,6 +475,9 @@
                     "missing": "Falta",
                     "formatting": "Formatant",
                     "unformatted": "No formatat",
+                    "failed": "Ha fallat",
+                    "replying": "Responent",
+                    "playback": "Reproducció",
                     "maintenance_required": "Manteniment necessari",
                     "dry": "Sec",
                     "comfortable": "Còmode",

+ 3 - 0
custom_components/tuya_local/translations/cz.json

@@ -954,6 +954,9 @@
                     "missing": "Chybí",
                     "formatting": "Formátování",
                     "unformatted": "Neformátováno",
+                    "failed": "Selhalo",
+                    "replying": "Odpovídání",
+                    "platback": "Přehrávání",
                     "maintenance_required": "Vyžadována údržba",
                     "dry": "Suchý",
                     "comfortable": "Pohodlný",

+ 3 - 0
custom_components/tuya_local/translations/de.json

@@ -955,6 +955,9 @@
                     "missing": "Fehlend",
                     "formatting": "Formatieren",
                     "unformatted": "Unformatiert",
+                    "failed": "Fehlgeschlagen",
+                    "replying": "Antworten",
+                    "playback": "Wiedergabe",
                     "maintenance_required": "Wartung erforderlich",
                     "dry": "Trocken",
                     "comfortable": "Bequem",

+ 3 - 0
custom_components/tuya_local/translations/el.json

@@ -954,6 +954,9 @@
                     "missing": "Ελλιπές",
                     "formatting": "Μορφοποίηση",
                     "unformatted": "Μη μορφοποιημένο",
+                    "failed": "Απέτυχε",
+                    "replying": "Απάντηση",
+                    "playback": "Αναπαραγωγή",
                     "maintenance_required": "Απαιτείται συντήρηση",
                     "dry": "Στεγνό",
                     "comfortable": "Άνετο",

+ 3 - 0
custom_components/tuya_local/translations/en.json

@@ -954,6 +954,9 @@
                     "missing": "Missing",
                     "formatting": "Formatting",
                     "unformatted": "Unformatted",
+                    "failed": "Failed",
+                    "replying": "Replying",
+                    "playback": "Playback",
                     "maintenance_required": "Maintenance required",
                     "dry": "Dry",
                     "comfortable": "Comfortable",

+ 3 - 0
custom_components/tuya_local/translations/es.json

@@ -954,6 +954,9 @@
                     "missing": "Faltante",
                     "formatting": "Formateando",
                     "unformatted": "Sin formatear",
+                    "failed": "Fallido",
+                    "replying": "Respondiendo",
+                    "playback": "Reproduciendo",
                     "maintenance_required": "Mantenimiento requerido",
                     "dry": "Seco",
                     "comfortable": "Cómodo",

+ 3 - 0
custom_components/tuya_local/translations/fr.json

@@ -954,6 +954,9 @@
                     "missing": "Manquant",
                     "formatting": "Formatage",
                     "unformatted": "Non formaté",
+                    "failed": "Échoué",
+                    "replying": "Répondre",
+                    "playback": "Lecture",
                     "maintenance_required": "Entretien requis",
                     "dry": "Sec",
                     "comfortable": "Confortable",

+ 3 - 0
custom_components/tuya_local/translations/hu.json

@@ -955,6 +955,9 @@
                     "missing": "Hiányzik",
                     "formatting": "Formázás",
                     "unformatted": "Nem formázott",
+                    "failed": "Sikertelen",
+                    "replying": "Válaszadás",
+                    "playback": "Lejátszás",
                     "maintenance_required": "Karbantartás szükséges",
                     "dry": "Száraz",
                     "comfortable": "Kényelmes",

+ 3 - 0
custom_components/tuya_local/translations/id.json

@@ -954,6 +954,9 @@
                     "missing": "Hilang",
                     "formatting": "Memformat",
                     "unformatted": "Belum diformat",
+                    "failed": "Gagal",
+                    "replying": "Membalas",
+                    "playback": "Pemutaran",
                     "maintenance_required": "Perawatan diperlukan",
                     "dry": "Kering",
                     "comfortable": "Nyaman",

+ 3 - 0
custom_components/tuya_local/translations/it.json

@@ -955,6 +955,9 @@
                     "missing": "Mancante",
                     "formatting": "Formattazione",
                     "unformatted": "Non formattato",
+                    "failed": "Fallito",
+                    "replying": "Risposta",
+                    "playback": "Riproduzione",
                     "maintenance_required": "Manutenzione richiesta",
                     "dry": "Asciutto",
                     "comfortable": "Confortevole",

+ 3 - 0
custom_components/tuya_local/translations/ja.json

@@ -954,6 +954,9 @@
                     "missing": "欠落",
                     "formatting": "フォーマット中",
                     "unformatted": "未フォーマット",
+                    "failed": "失敗",
+                    "replying": "返信中",
+                    "playnack": "再生",
                     "maintenance_required": "メンテナンス必要",
                     "dry": "乾燥",
                     "comfortable": "快適",

+ 3 - 0
custom_components/tuya_local/translations/no-NB.json

@@ -955,6 +955,9 @@
                     "missing": "Manglende",
                     "formatting": "Formatering",
                     "unformatted": "Uformaterte",
+                    "failed": "Mislyktes",
+                    "replying": "Svarer",
+                    "playback": "Avspilling",
                     "maintenance_required": "Vedlikehold kreves",
                     "dry": "Tørr",
                     "comfortable": "Komfortabel",

+ 3 - 0
custom_components/tuya_local/translations/pl.json

@@ -955,6 +955,9 @@
                     "missing": "Brakujące",
                     "formatting": "Formatowanie",
                     "unformatted": "Niesformatowane",
+                    "failed": "Nieudane",
+                    "replying": "Odpowiadanie",
+                    "playback": "Odtwarzanie",
                     "maintenance_required": "Wymagana konserwacja",
                     "dry": "Suchy",
                     "comfortable": "Wygodny",

+ 3 - 0
custom_components/tuya_local/translations/pt-BR.json

@@ -954,6 +954,9 @@
                     "missing": "Faltando",
                     "formatting": "Formatando",
                     "unformatted": "Não formatado",
+                    "failed": "Falhou",
+                    "replying": "Respondendo",
+                    "playback": "Reproduzindo",
                     "maintenance_required": "Manutenção necessária",
                     "dry": "Seco",
                     "comfortable": "Confortável",

+ 3 - 0
custom_components/tuya_local/translations/pt-PT.json

@@ -954,6 +954,9 @@
                     "missing": "Faltando",
                     "formatting": "Formatando",
                     "unformatted": "Não formatado",
+                    "failed": "Falhou",
+                    "replying": "Respondendo",
+                    "playback": "Reprodução",
                     "maintenance_required": "Manutenção necessária",
                     "dry": "Seco",
                     "comfortable": "Confortável",

+ 3 - 0
custom_components/tuya_local/translations/ro.json

@@ -954,6 +954,9 @@
                     "missing": "Lipsă",
                     "formatting": "Formatare",
                     "unformatted": "Neformatat",
+                    "failed": "Eșuat",
+                    "replying": "Răspuns",
+                    "playback": "Redare",
                     "maintenance_required": "Necesită întreținere",
                     "dry": "Uscat",
                     "comfortable": "Confortabil",

+ 3 - 0
custom_components/tuya_local/translations/ru.json

@@ -954,6 +954,9 @@
                     "missing": "Отсутствует",
                     "formatting": "Форматирование",
                     "unformatted": "Не отформатировано",
+                    "failed": "Не удалось",
+                    "replying": "Ответ",
+                    "playback": "Воспроизведение",
                     "maintenance_required": "Требуется техническое обслуживание",
                     "dry": "Сухой",
                     "comfortable": "Комфортный",

+ 3 - 0
custom_components/tuya_local/translations/sv.json

@@ -954,6 +954,9 @@
                     "missing": "Saknas",
                     "formatting": "Formaterar",
                     "unformatted": "Oformaterad",
+                    "failed": "Misslyckades",
+                    "replying": "Svarar",
+                    "playback": "Uppspelning",
                     "maintenance_required": "Underhåll krävs",
                     "dry": "Torr",
                     "comfortable": "Bekväm",

+ 3 - 0
custom_components/tuya_local/translations/uk.json

@@ -955,6 +955,9 @@
                     "missing": "Відсутній",
                     "formatting": "Форматування",
                     "unformatted": "Неформатований",
+                    "failed": "Не вдалося",
+                    "replying": "Відповідь",
+                    "playback": "Відтворення",
                     "maintenance_required": "Потрібне обслуговування",
                     "dry": "Сухий",
                     "comfortable": "Комфортний",

+ 3 - 0
custom_components/tuya_local/translations/ur.json

@@ -957,6 +957,9 @@
                     "missing": "غائب",
                     "formatting": "فارمیٹنگ",
                     "unformatted": "غیر شکل بند",
+                    "failed": "ناکام",
+                    "replying": "جواب دے رہا ہے",
+                    "playback": "پلے بیک",
                     "maintenance_required": "مینٹیننس کی ضرورت ہے",
                     "dry": "خشک",
                     "comfortable": "آرام دہ",

+ 3 - 0
custom_components/tuya_local/translations/zh-Hans.json

@@ -954,6 +954,9 @@
                     "missing": "缺失",
                     "formatting": "格式化中",
                     "unformatted": "未格式化",
+                    "failed": "失败",
+                    "replying": "回复中",
+                    "playback": "回放中",
                     "maintenance_required": "需要维护",
                     "dry": "干燥",
                     "comfortable": "舒适",

+ 3 - 0
custom_components/tuya_local/translations/zh-Hant.json

@@ -955,6 +955,9 @@
                     "missing": "缺失",
                     "formatting": "格式化中",
                     "unformatted": "未格式化",
+                    "failed": "失敗",
+                    "replying": "回覆中",
+                    "playback": "播放中",
                     "maintenance_required": "需要維護",
                     "dry": "乾燥",
                     "comfortable": "舒適",