Ver código fonte

IPS, GardenPAC, Madimack pool heatpumps: Add error, error_2 and defrosting DPS

These seem to share a DPS mapping, so use the info from issue #159 to fill in some unknowns.
Jason Rumney 3 anos atrás
pai
commit
49aac5cb73

+ 23 - 8
custom_components/tuya_local/devices/gardenpac_heatpump.yaml

@@ -26,10 +26,6 @@ primary_entity:
           value: F
         - dps_val: true
           value: C
-    - id: 104
-      name: power_level
-      type: integer
-      readonly: true
     - id: 105
       name: hvac_action
       type: string
@@ -62,11 +58,18 @@ primary_entity:
       type: integer
       name: max_temperature
     - id: 115
-      type: integer
-      name: unknown_115
+      type: bitfield
+      name: error
+      mapping:
+        - dps_val: 0
+          value: OK
+        - dps_val: 4
+          value: Water Flow Protection
+          icon: "mdi:water-pump-off"
+          icon_priority: 2
     - id: 116
-      type: integer
-      name: unknown_116
+      type: bitfield
+      name: error_2
     - id: 117
       name: preset_mode
       type: boolean
@@ -88,3 +91,15 @@ secondary_entities:
         unit: "%"
         class: measurement
         readonly: true
+  - entity: binary_sensor
+    name: Water Flow
+    class: problem
+    category: diagnostic
+    dps:
+      - id: 115
+        type: bitfield
+        name: sensor
+        mapping:
+          - dps_val: 4
+            value: true
+          - value: false

+ 25 - 5
custom_components/tuya_local/devices/ips_pro_heatpump.yaml

@@ -9,9 +9,11 @@ primary_entity:
         - dps_val: false
           value: "off"
           icon: "mdi:hvac-off"
+          icon_priority: 1
         - dps_val: true
           value: "heat"
           icon: "mdi:hot-tub"
+          icon_priority: 3
     - id: 2
       name: preset_mode
       type: string
@@ -70,11 +72,18 @@ primary_entity:
       type: integer
       name: max_temperature
     - id: 115
-      type: integer
-      name: unknown_115
+      type: bitfield
+      name: error
+      mapping:
+        - dps_val: 0
+          value: OK
+        - dps_val: 4
+          value: Water Flow Protection
+          icon: "mdi:water-pump-off"
+          icon_priority: 2
     - id: 116
-      type: integer
-      name: unknown_116
+      type: bitfield
+      name: error_2
 secondary_entities:
   - entity: sensor
     name: Power Level
@@ -88,4 +97,15 @@ secondary_entities:
         unit: "%"
         class: measurement
         readonly: true
-
+  - entity: binary_sensor
+    name: Water Flow
+    class: problem
+    category: diagnostic
+    dps:
+      - id: 115
+        type: bitfield
+        name: sensor
+        mapping:
+          - dps_val: 4
+            value: true
+          - value: false

+ 20 - 4
custom_components/tuya_local/devices/madimack_heatpump.yaml

@@ -13,7 +13,7 @@ primary_entity:
         - dps_val: true
           value: "heat"
           icon: "mdi:hot-tub"
-          icon_priority: 3
+          icon_priority: 4
     - id: 102
       name: current_temperature
       type: integer
@@ -72,9 +72,11 @@ primary_entity:
           value: OK
         - dps_val: 4
           value: Water Flow Protection
+          icon: "mdi:water-pump-off"
+          icon_priority: 2
     - id: 116
-      type: integer
-      name: unknown_116
+      type: bitfield
+      name: error_2
     - id: 117
       name: preset_mode
       type: boolean
@@ -90,8 +92,13 @@ primary_entity:
       name: unknown_126
       type: integer
     - id: 130
-      name: unknown_130
+      name: defrosting
       type: boolean
+      hidden: true
+      mapping:
+        - dps_val: true
+          icon: "mdi:snowflake-melt"
+          icon_priority: 3
     - id: 134
       name: unknown_134
       type: boolean
@@ -147,6 +154,14 @@ secondary_entities:
           - dps_val: 4
             value: true
           - value: false
+  - entity: binary_sensor
+    name: Defrosting
+    class: cold
+    category: diagnostic
+    dps:
+      - id: 130
+        type: boolean
+        name: sensor
   - entity: sensor
     category: diagnostic
     class: temperature
@@ -218,3 +233,4 @@ secondary_entities:
       - id: 129
         name: sensor
         type: integer
+

+ 20 - 9
tests/devices/test_gardenpac_heatpump.py

@@ -1,3 +1,4 @@
+from homeassistant.components.binary_sensor import BinarySensorDeviceClass
 from homeassistant.components.climate.const import (
     ClimateEntityFeature,
     HVACAction,
@@ -12,6 +13,7 @@ from homeassistant.const import (
 
 from ..const import GARDENPAC_HEATPUMP_PAYLOAD
 from ..helpers import assert_device_properties_set
+from ..mixins.binary_sensor import BasicBinarySensorTests
 from ..mixins.climate import TargetTemperatureTests
 from ..mixins.sensor import BasicSensorTests
 from .base_device_tests import TuyaDeviceTestCase
@@ -24,12 +26,13 @@ OPMODE_DPS = "105"
 TEMPERATURE_DPS = "106"
 MINTEMP_DPS = "107"
 MAXTEMP_DPS = "108"
-UNKNOWN115_DPS = "115"
-UNKNOWN116_DPS = "116"
+ERROR_DPS = "115"
+ERROR2_DPS = "116"
 PRESET_DPS = "117"
 
 
 class TestGardenPACPoolHeatpump(
+    BasicBinarySensorTests,
     BasicSensorTests,
     TargetTemperatureTests,
     TuyaDeviceTestCase,
@@ -52,7 +55,13 @@ class TestGardenPACPoolHeatpump(
             device_class=SensorDeviceClass.POWER_FACTOR,
             state_class="measurement",
         )
-        self.mark_secondary(["sensor_power_level"])
+        self.setUpBasicBinarySensor(
+            ERROR_DPS,
+            self.entities.get("binary_sensor_water_flow"),
+            device_class=BinarySensorDeviceClass.PROBLEM,
+            testdata=(4, 0),
+        )
+        self.mark_secondary(["sensor_power_level", "binary_sensor_water_flow"])
 
     def test_supported_features(self):
         self.assertEqual(
@@ -64,9 +73,13 @@ class TestGardenPACPoolHeatpump(
         )
 
     def test_icon(self):
+        self.dps[ERROR_DPS] = 0
         self.dps[HVACMODE_DPS] = True
         self.assertEqual(self.subject.icon, "mdi:hot-tub")
 
+        self.dps[ERROR_DPS] = 4
+        self.assertEqual(self.subject.icon, "mdi:water-pump-off")
+
         self.dps[HVACMODE_DPS] = False
         self.assertEqual(self.subject.icon, "mdi:hvac-off")
 
@@ -149,14 +162,12 @@ class TestGardenPACPoolHeatpump(
         self.assertEqual(self.subject.hvac_action, HVACAction.OFF)
 
     def test_extra_state_attributes(self):
-        self.dps[POWERLEVEL_DPS] = 50
-        self.dps[UNKNOWN115_DPS] = 3
-        self.dps[UNKNOWN116_DPS] = 4
+        self.dps[ERROR_DPS] = 3
+        self.dps[ERROR2_DPS] = 4
         self.assertDictEqual(
             self.subject.extra_state_attributes,
             {
-                "power_level": 50,
-                "unknown_115": 3,
-                "unknown_116": 4,
+                "error": 3,
+                "error_2": 4,
             },
         )

+ 17 - 8
tests/devices/test_ips_pro_heatpump.py

@@ -1,3 +1,4 @@
+from homeassistant.components.binary_sensor import BinarySensorDeviceClass
 from homeassistant.components.climate.const import (
     ClimateEntityFeature,
     HVACAction,
@@ -12,6 +13,7 @@ from homeassistant.const import (
 
 from ..const import IPS_HEATPUMP_PAYLOAD
 from ..helpers import assert_device_properties_set
+from ..mixins.binary_sensor import BasicBinarySensorTests
 from ..mixins.climate import TargetTemperatureTests
 from ..mixins.sensor import BasicSensorTests
 from .base_device_tests import TuyaDeviceTestCase
@@ -24,12 +26,13 @@ OPMODE_DPS = "105"
 TEMPERATURE_DPS = "106"
 MINTEMP_DPS = "107"
 MAXTEMP_DPS = "108"
-UNKNOWN115_DPS = "115"
-UNKNOWN116_DPS = "116"
+ERROR_DPS = "115"
+ERROR2_DPS = "116"
 PRESET_DPS = "2"
 
 
 class TestIpsProHeatpump(
+    BasicBinarySensorTests,
     BasicSensorTests,
     TargetTemperatureTests,
     TuyaDeviceTestCase,
@@ -52,7 +55,13 @@ class TestIpsProHeatpump(
             device_class=SensorDeviceClass.POWER_FACTOR,
             state_class="measurement",
         )
-        self.mark_secondary(["sensor_power_level"])
+        self.setUpBasicBinarySensor(
+            ERROR_DPS,
+            self.entities.get("binary_sensor_water_flow"),
+            device_class=BinarySensorDeviceClass.PROBLEM,
+            testdata=(4, 0),
+        )
+        self.mark_secondary(["sensor_power_level", "binary_sensor_water_flow"])
 
     def test_supported_features(self):
         self.assertEqual(
@@ -139,7 +148,7 @@ class TestIpsProHeatpump(
         ):
             await self.subject.async_set_preset_mode("smart")
 
-    async def test_set_preset_mode_to_smart(self):
+    async def test_set_preset_mode_to_turbo(self):
         async with assert_device_properties_set(
             self.subject._device,
             {PRESET_DPS: "turbo"},
@@ -156,12 +165,12 @@ class TestIpsProHeatpump(
         self.assertEqual(self.subject.hvac_action, HVACAction.OFF)
 
     def test_extra_state_attributes(self):
-        self.dps[UNKNOWN115_DPS] = 3
-        self.dps[UNKNOWN116_DPS] = 4
+        self.dps[ERROR_DPS] = 3
+        self.dps[ERROR2_DPS] = 4
         self.assertDictEqual(
             self.subject.extra_state_attributes,
             {
-                "unknown_115": 3,
-                "unknown_116": 4,
+                "error": 3,
+                "error_2": 4,
             },
         )

+ 4 - 5
tests/devices/test_jiahong_et72w_thermostat.py

@@ -3,12 +3,11 @@ from homeassistant.components.climate.const import (
     HVACMode,
 )
 from homeassistant.components.sensor import (
+    SensorDeviceClass,
     STATE_CLASS_MEASUREMENT,
     STATE_CLASS_TOTAL_INCREASING,
 )
 from homeassistant.const import (
-    DEVICE_CLASS_ENERGY,
-    DEVICE_CLASS_TEMPERATURE,
     ENERGY_KILO_WATT_HOUR,
     TEMP_CELSIUS,
     TEMP_FAHRENHEIT,
@@ -111,7 +110,7 @@ class TestJiahongEt72wThermostat(
                 {
                     "dps": CURRENTTEMP_DPS,
                     "name": "sensor_room_temperature",
-                    "device_class": DEVICE_CLASS_TEMPERATURE,
+                    "device_class": SensorDeviceClass.TEMPERATURE,
                     "state_class": STATE_CLASS_MEASUREMENT,
                     "unit": TEMP_CELSIUS,
                     "testdata": (195, 19.5),
@@ -119,7 +118,7 @@ class TestJiahongEt72wThermostat(
                 {
                     "dps": FLOORTEMP_DPS,
                     "name": "sensor_floor_temperature",
-                    "device_class": DEVICE_CLASS_TEMPERATURE,
+                    "device_class": SensorDeviceClass.TEMPERATURE,
                     "state_class": STATE_CLASS_MEASUREMENT,
                     "unit": TEMP_CELSIUS,
                     "testdata": (214, 21.4),
@@ -127,7 +126,7 @@ class TestJiahongEt72wThermostat(
                 {
                     "dps": ENERGY_DPS,
                     "name": "sensor_energy",
-                    "device_class": DEVICE_CLASS_ENERGY,
+                    "device_class": SensorDeviceClass.ENERGY,
                     "state_class": STATE_CLASS_TOTAL_INCREASING,
                     "unit": ENERGY_KILO_WATT_HOUR,
                     "testdata": (1234, 123.4),

+ 31 - 15
tests/devices/test_madimack_heatpump.py

@@ -1,4 +1,4 @@
-from homeassistant.components.binary_sensor import DEVICE_CLASS_PROBLEM
+from homeassistant.components.binary_sensor import BinarySensorDeviceClass
 from homeassistant.components.climate.const import (
     ClimateEntityFeature,
     HVACAction,
@@ -13,7 +13,7 @@ from homeassistant.const import (
 
 from ..const import MADIMACK_HEATPUMP_PAYLOAD
 from ..helpers import assert_device_properties_set
-from ..mixins.binary_sensor import BasicBinarySensorTests
+from ..mixins.binary_sensor import MultiBinarySensorTests
 from ..mixins.climate import TargetTemperatureTests
 from ..mixins.sensor import MultiSensorTests
 from .base_device_tests import TuyaDeviceTestCase
@@ -27,7 +27,8 @@ TEMPERATURE_DPS = "106"
 MINTEMP_DPS = "107"
 MAXTEMP_DPS = "108"
 ERROR_DPS = "115"
-UNKNOWN116_DPS = "116"
+FAULT2_DPS = "116"
+PRESET_DPS = "117"
 UNKNOWN118_DPS = "118"
 COIL_DPS = "120"
 EXHAUST_DPS = "122"
@@ -37,17 +38,16 @@ UNKNOWN126_DPS = "126"
 COOLINGPLATE_DPS = "127"
 EEV_DPS = "128"
 FANSPEED_DPS = "129"
-UNKNOWN130_DPS = "130"
+DEFROST_DPS = "130"
 UNKNOWN134_DPS = "134"
 UNKNOWN135_DPS = "135"
 UNKNOWN136_DPS = "136"
 UNKNOWN139_DPS = "139"
 UNKNOWN140_DPS = "140"
-PRESET_DPS = "117"
 
 
 class TestMadimackPoolHeatpump(
-    BasicBinarySensorTests,
+    MultiBinarySensorTests,
     MultiSensorTests,
     TargetTemperatureTests,
     TuyaDeviceTestCase,
@@ -63,11 +63,20 @@ class TestMadimackPoolHeatpump(
             min=18,
             max=45,
         )
-        self.setUpBasicBinarySensor(
-            ERROR_DPS,
-            self.entities.get("binary_sensor_water_flow"),
-            device_class=DEVICE_CLASS_PROBLEM,
-            testdata=(4, 0),
+        self.setUpMultiBinarySensors(
+            [
+                {
+                    "dps": ERROR_DPS,
+                    "name": "binary_sensor_water_flow",
+                    "device_class": BinarySensorDeviceClass.PROBLEM,
+                    "testdata": (4, 0),
+                },
+                {
+                    "dps": DEFROST_DPS,
+                    "name": "binary_sensor_defrosting",
+                    "device_class": BinarySensorDeviceClass.COLD,
+                },
+            ]
         )
         self.setUpMultiSensors(
             [
@@ -128,6 +137,7 @@ class TestMadimackPoolHeatpump(
                 "sensor_exhaust_gas_temperature",
                 "sensor_fan_speed",
                 "binary_sensor_water_flow",
+                "binary_sensor_defrosting",
             ]
         )
 
@@ -141,9 +151,17 @@ class TestMadimackPoolHeatpump(
         )
 
     def test_icon(self):
+        self.dps[ERROR_DPS] = 0
+        self.dps[DEFROST_DPS] = False
         self.dps[HVACMODE_DPS] = True
         self.assertEqual(self.subject.icon, "mdi:hot-tub")
 
+        self.dps[DEFROST_DPS] = True
+        self.assertEqual(self.subject.icon, "mdi:snowflake-melt")
+
+        self.dps[ERROR_DPS] = 4
+        self.assertEqual(self.subject.icon, "mdi:water-pump-off")
+
         self.dps[HVACMODE_DPS] = False
         self.assertEqual(self.subject.icon, "mdi:hvac-off")
 
@@ -227,10 +245,9 @@ class TestMadimackPoolHeatpump(
 
     def test_extra_state_attributes(self):
         self.dps[ERROR_DPS] = 4
-        self.dps[UNKNOWN116_DPS] = 4
+        self.dps[FAULT2_DPS] = 4
         self.dps[UNKNOWN118_DPS] = 5
         self.dps[UNKNOWN126_DPS] = 10
-        self.dps[UNKNOWN130_DPS] = True
         self.dps[UNKNOWN134_DPS] = False
         self.dps[UNKNOWN135_DPS] = True
         self.dps[UNKNOWN136_DPS] = False
@@ -240,10 +257,9 @@ class TestMadimackPoolHeatpump(
             self.subject.extra_state_attributes,
             {
                 "error": "Water Flow Protection",
-                "unknown_116": 4,
+                "error_2": 4,
                 "unknown_118": 5,
                 "unknown_126": 10,
-                "unknown_130": True,
                 "unknown_134": False,
                 "unknown_135": True,
                 "unknown_136": False,