Bladeren bron

Add tests for Himox H06 Purifier

Make some tweaks to the config as recommended on PR #128 and some more detected
while running tests and reviewing the info on the device that I could find.
Jason Rumney 4 jaren geleden
bovenliggende
commit
0365135b98
3 gewijzigde bestanden met toevoegingen van 148 en 21 verwijderingen
  1. 21 21
      custom_components/tuya_local/devices/himox_h06_purifier.yaml
  2. 12 0
      tests/const.py
  3. 115 0
      tests/devices/test_himox_h06_purifier.py

+ 21 - 21
custom_components/tuya_local/devices/himox_h06_purifier.yaml

@@ -1,6 +1,4 @@
-name: himox h06
-products:
- - id: 80256465f4cfa2c5ec84
+name: Himox H06 Air Purifier
 primary_entity:
   entity: fan
   dps:
@@ -12,41 +10,43 @@ primary_entity:
       name: speed
       mapping:
         - dps_val: "low"
-          value: 33.34
+          value: 33
         - dps_val: "mid"
-          value: 66.67
+          value: 67
         - dps_val: "high"
           value: 100
 secondary_entities:
   - entity: sensor
-    name: active_filter_life
-#   icon: mdi:filter
+    name: Active Filter Life
+    icon: "mdi:air-filter"
+    category: diagnostic
     dps:
       - id: 5
         type: integer
         name: sensor
         readonly: true
         unit: "%"
-        class: measurement
         range:
           min: 0
           max: 100
         scale: 0
         step: 1
   - entity: light
-    name: aq_indicator
+    name: AQ Indicator
+    category: config
     dps:
       - id: 8
         type: boolean
         name: switch
   - entity: switch
-    name: filter_reset
+    name: Filter Reset
+    category: config
     dps:
       - id: 11
         type: boolean
         name: switch
   - entity: select
-    name: timer
+    name: Timer
     icon: "mdi:timer"
     category: config
     dps:
@@ -61,37 +61,37 @@ secondary_entities:
           - dps_val: 8h
             value: "8 hours"
   - entity: sensor
-    name: countdown_left
+    name: Timer
+    icon: "mdi:timer"
+    category: diagnostic
     dps:
       - id: 19
         type: integer
         name: sensor
         readonly: true
         unit: "min"
-        class: measurement
         range:
           min: 0
           max: 480
         scale: 0
         step: 1
   - entity: sensor
-    name: aq_indicator
+    name: Air Quality
     dps:
       - id: 22
         type: string
         name: sensor
         readonly: true
   - entity: select
-    name: air_debugger
-    category: diagnostic
+    name: Configuration
     dps:
       - id: 101
         name: option
         type: string
         mapping:
           - dps_val: calcle
-            value: "great"
-          - dps_val: 1
-            value: "medium"
-          - dps_val: 2
-            value: "severe"
+            value: "Auto"
+          - dps_val: "1"
+            value: "Medium"
+          - dps_val: "2"
+            value: "Severe"

+ 12 - 0
tests/const.py

@@ -1007,3 +1007,15 @@ KYVOL_E30_VACUUM_PAYLOAD = {
     "104": "standby",
     "107": 1,
 }
+
+HIMOX_H06_PURIFIER_PAYLOAD = {
+    "1": True,
+    "4": "low",
+    "5": 50,
+    "8": True,
+    "11": False,
+    "18": "cancel",
+    "19": 0,
+    "22": "medium",
+    "101": "calcle",
+}

+ 115 - 0
tests/devices/test_himox_h06_purifier.py

@@ -0,0 +1,115 @@
+from homeassistant.components.fan import SUPPORT_SET_SPEED
+from homeassistant.const import (
+    PERCENTAGE,
+    TIME_MINUTES,
+)
+
+from ..const import HIMOX_H06_PURIFIER_PAYLOAD
+from ..helpers import assert_device_properties_set
+from ..mixins.light import BasicLightTests
+from ..mixins.select import MultiSelectTests
+from ..mixins.sensor import MultiSensorTests
+from ..mixins.switch import BasicSwitchTests, SwitchableTests
+from .base_device_tests import TuyaDeviceTestCase
+
+SWITCH_DPS = "1"
+SPEED_DPS = "4"
+FILTER_DPS = "5"
+LIGHT_DPS = "8"
+RESET_DPS = "11"
+TIMER_DPS = "18"
+COUNTDOWN_DPS = "19"
+AQI_DPS = "22"
+MODE_DPS = "101"
+
+
+class TestHimoxH06Purifier(
+    BasicLightTests,
+    BasicSwitchTests,
+    MultiSelectTests,
+    MultiSensorTests,
+    SwitchableTests,
+    TuyaDeviceTestCase,
+):
+    __test__ = True
+
+    def setUp(self):
+        self.setUpForConfig("himox_h06_purifier.yaml", HIMOX_H06_PURIFIER_PAYLOAD)
+        self.subject = self.entities["fan"]
+        self.setUpSwitchable(SWITCH_DPS, self.subject)
+        self.setUpBasicLight(LIGHT_DPS, self.entities.get("light_aq_indicator"))
+        self.setUpMultiSelect(
+            [
+                {
+                    "dps": TIMER_DPS,
+                    "name": "select_timer",
+                    "options": {
+                        "cancel": "Off",
+                        "4h": "4 hours",
+                        "8h": "8 hours",
+                    },
+                },
+                {
+                    "dps": MODE_DPS,
+                    "name": "select_configuration",
+                    "options": {
+                        "calcle": "Auto",
+                        "1": "Medium",
+                        "2": "Severe",
+                    },
+                },
+            ]
+        )
+        self.setUpBasicSwitch(RESET_DPS, self.entities.get("switch_filter_reset"))
+        self.setUpMultiSensors(
+            [
+                {
+                    "dps": FILTER_DPS,
+                    "name": "sensor_active_filter_life",
+                    "unit": PERCENTAGE,
+                },
+                {
+                    "dps": COUNTDOWN_DPS,
+                    "name": "sensor_timer",
+                    "unit": TIME_MINUTES,
+                },
+                {
+                    "dps": AQI_DPS,
+                    "name": "sensor_air_quality",
+                },
+            ]
+        )
+        self.mark_secondary(
+            [
+                "light_aq_indicator",
+                "switch_filter_reset",
+                "sensor_active_filter_life",
+                "select_timer",
+                "sensor_timer",
+            ]
+        )
+
+    def test_supported_features(self):
+        self.assertEqual(
+            self.subject.supported_features,
+            SUPPORT_SET_SPEED,
+        )
+
+    def test_speed(self):
+        self.dps[SPEED_DPS] = "low"
+        self.assertEqual(self.subject.percentage, 33)
+
+    def test_speed_step(self):
+        self.assertAlmostEqual(self.subject.percentage_step, 33, 0)
+
+    async def test_set_speed(self):
+        async with assert_device_properties_set(
+            self.subject._device, {SPEED_DPS: "mid"}
+        ):
+            await self.subject.async_set_percentage(67)
+
+    async def test_set_speed_snaps(self):
+        async with assert_device_properties_set(
+            self.subject._device, {SPEED_DPS: "high"}
+        ):
+            await self.subject.async_set_percentage(90)