Răsfoiți Sursa

feat(devices): add Breville Allrounder (#4966)

Add device definition for Breville Airrounder air purifier and heater

- Model: LPH408
- Tuya Product ID: 56ssixusjwkhp6yg
- Tested with Home Assistant 2026.4.4 and tuya-local v2026.4.2
- Based on Breville Airrounder Plus config
- Updated modes as fan and heat settings needed further constraints.

---------

Co-authored-by: Jason Rumney <make-all@users.noreply.github.com>
elcarabo 1 zi în urmă
părinte
comite
d3eb1e159d

+ 165 - 0
custom_components/tuya_local/devices/breville_airrounder_heater.yaml

@@ -0,0 +1,165 @@
+# Loosly based on the Airrounder Plus config
+# Dealing with the overlapping DP modes, decided to retain one climate window
+# and have that auto update rather than seperate Fan and Climate UI's.
+# Mode matrix for reference:
+#  Fan only mode:
+#   Low DP4=heat_low DP5=NatureWind_Low
+#   Med DP4=heat_low DP5=NatureWind_High
+#   High DP4=heat_low DP5=CoolWind_0
+#  Heat:
+#   Low - DP4=heat_high DP5=SleepWind
+#   High - DP4=heat_0 DP5=SleepWind
+
+name: Purifier heater
+products:
+  - id: 56ssixusjwkhp6yg
+    manufacturer: Breville
+    model: AirRounder LPH408
+entities:
+  - entity: climate
+    translation_key: heater
+    dps:
+      - id: 1
+        type: boolean
+        name: hvac_mode
+        mapping:
+          - dps_val: false
+            value: "off"
+          - dps_val: true
+            constraint: preset_mode
+            conditions:
+              - dps_val: heat_low
+                value: fan_only
+              - dps_val: heat_high
+                value: heat
+              - dps_val: heat_0
+                value: heat
+                hidden: true
+      - id: 2
+        type: integer
+        name: temperature
+        range:
+          min: 5
+          max: 35
+        unit: C
+      - id: 3
+        type: integer
+        name: current_temperature
+      - id: 4
+        type: string
+        name: preset_mode
+        mapping:
+          - dps_val: heat_low
+            value: fan_only
+          - dps_val: heat_high
+            constraint: fan_mode
+            conditions:
+              - dps_val: SleepWind
+                value: low
+          - dps_val: heat_0
+            constraint: fan_mode
+            conditions:
+              - dps_val: SleepWind
+                value: high
+      - id: 5
+        type: string
+        name: fan_mode
+        mapping:
+          - dps_val: NatureWind_Low
+            constraint: preset_mode
+            conditions:
+              - dps_val: heat_low
+                value: low
+          - dps_val: NatureWind_High
+            constraint: preset_mode
+            conditions:
+              - dps_val: heat_low
+                value: medium
+          - dps_val: CoolWind_0
+            constraint: preset_mode
+            conditions:
+              - dps_val: heat_low
+                value: high
+          - dps_val: SleepWind
+            value: auto
+            hidden: true
+      - id: 101
+        type: string
+        name: swing_mode
+        mapping:
+          - dps_val: "off"
+            value: "off"
+          - dps_val: "30"
+            value: "60"
+          - dps_val: "60"
+            value: "120"
+          - dps_val: "180"
+            value: "180"
+
+  - entity: lock
+    translation_key: child_lock
+    category: config
+    dps:
+      - id: 7
+        type: boolean
+        name: lock
+
+  - entity: select
+    translation_key: timer
+    category: config
+    dps:
+      - id: 19
+        type: string
+        name: option
+        mapping:
+          - dps_val: cancel
+            value: cancel
+          - dps_val: "1h"
+            value: "1h"
+          - dps_val: "2h"
+            value: "2h"
+          - dps_val: "3h"
+            value: "3h"
+          - dps_val: "4h"
+            value: "4h"
+          - dps_val: "5h"
+            value: "5h"
+          - dps_val: "6h"
+            value: "6h"
+          - dps_val: "7h"
+            value: "7h"
+
+  - entity: sensor
+    translation_key: time_remaining
+    class: duration
+    category: diagnostic
+    dps:
+      - id: 20
+        type: integer
+        name: sensor
+        unit: min
+
+  - entity: sensor
+    translation_key: filter_life
+    class: duration
+    category: diagnostic
+    dps:
+      - id: 102
+        type: integer
+        name: sensor
+        unit: min
+
+  - entity: binary_sensor
+    class: problem
+    category: diagnostic
+    dps:
+      - id: 23
+        type: bitfield
+        name: sensor
+        mapping:
+          - dps_val: 0
+            value: false
+          - value: true
+      - id: 23
+        type: bitfield
+        name: fault_code