Explorar o código

Changes to SmartMCB meter based on actual data returned.

- phaseA/B/C encoded instantaneous readings are not included in the local data despite being allocated dp_ids in the cloud docs.
- energy_reset is a boolean, not a single item enum reporting as empty string as in the cloud API.
- charge_energy is not available (may depend on device settings)
- 4 additional integer and 2 boolean attributes are available with ids above 100 (custom ids).
Jason Rumney %!s(int64=4) %!d(string=hai) anos
pai
achega
50b244a9c8

+ 21 - 30
custom_components/tuya_local/devices/smartmcb_smt006_energymeter.yaml

@@ -4,21 +4,30 @@ products:
 primary_entity:
   entity: switch
   dps:
-    - id: 6
-      type: string
-      name: phase_a
-    - id: 7
-      type: string
-      name: phase_b
-    - id: 8
-      type: string
-      name: phase_c
     - id: 16
       type: boolean
       name: switch
     - id: 19
       type: string
       name: breaker_number
+    - id: 101
+      type: integer
+      name: unknown_101
+    - id: 102
+      type: integer
+      name: unknown_102
+    - id: 103
+      type: integer
+      name: unknown_103
+    - id: 104
+      type: integer
+      name: unknown_104
+    - id: 105
+      type: boolean
+      name: unknown_105
+    - id: 106
+      type: boolean
+      name: unknown_106
 secondary_entities:
   - entity: sensor
     name: energy
@@ -243,19 +252,14 @@ secondary_entities:
       - id: 11
         type: boolean
         name: switch
-  - entity: select
+  - entity: switch
     name: Energy Reset
     category: config
     icon: "mdi:cog-refresh"
     dps:
       - id: 12
-        type: string
-        name: option
-        mapping:
-          - dps_val: ""
-            value: ""
-          - dps_val: empty
-            value: Reset
+        type: boolean
+        name: switch
   - entity: sensor
     name: Balance Energy
     category: diagnostic
@@ -269,16 +273,3 @@ secondary_entities:
         class: total
         mapping:
           - scale: 100
-  - entity: number
-    name: Charge Energy
-    category: config
-    icon: "mdi:home-lightning-bolt"
-    dps:
-      - id: 14
-        type: integer
-        name: value
-        range:
-          min: 0
-          max: 999999
-        mapping:
-          - scale: 100

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

@@ -70,7 +70,6 @@
                     "number_calibration_swing": "Include calibration swing as a number entity",
                     "number_calibration_swing_external": "Include calibration swing for external sensor as a number entity",
                     "number_calibration_swing_internal": "Include calibration swing for internal sensor as a number entity",
-		    "number_charge_energy": "Include charge energy as a number entity",
                     "number_continuous_heat_hours": "Include Continuous Heating Time as a number entity",
                     "number_fan_runtime": "Include fan run time as a number entity",
                     "number_high_temperature_limit": "Include High Temperature Limit as a number entity",
@@ -87,7 +86,6 @@
                     "number_timer_3": "Include timer 3 as a number entity",
                     "number_usb_timer": "Include timer USB as a number entity",
                     "select_configuration": "Include configuration as a select entity",
-		    "select_energy_reset": "Include energy reset as a select entity",
                     "select_initial_state": "Include initial state as a select entity",
                     "select_installation": "Include installation as a select entity",
                     "select_schedule": "Include schedule as a select entity",
@@ -124,6 +122,7 @@
                     "switch_adaptive": "Include adaptive as a switch entity",
                     "switch_air_clean": "Include air clean as a switch entity",
                     "switch_anti_frost": "Include anti-frost as a switch entity",
+		    "switch_energy_reset": "Include energy reset as a switch entity",
 		    "switch_factory_reset": "Include factory reset as a switch entity",
                     "switch_filter_reset": "Include filter reset as a switch entity",
                     "switch_ionizer": "Include ionizer as a switch entity",
@@ -207,7 +206,6 @@
                     "number_calibration_swing": "Include calibration swing as a number entity",
                     "number_calibration_swing_external": "Include calibration swing for external sensor as a number entity",
                     "number_calibration_swing_internal": "Include calibration swing for internal sensor as a number entity",
-		    "number_charge_energy": "Include charge energy as a number entity",
                     "number_continuous_heat_hours": "Include Continuous Heating Time as a number entity",
                     "number_fan_runtime": "Include fan run time as a number entity",
                     "number_high_temperature_limit": "Include High Temperature Limit as a number entity",
@@ -224,7 +222,6 @@
                     "number_timer_3": "Include timer 3 as a number entity",
                     "number_usb_timer": "Include timer USB as a number entity",
                     "select_configuration": "Include configuration as a select entity",
-		    "select_energy_reset": "Include energy reset as a select entity",
                     "select_initial_state": "Include initial state as a select entity",
                     "select_installation": "Include installation as a select entity",
                     "select_schedule": "Include schedule as a select entity",
@@ -261,6 +258,7 @@
                     "switch_adaptive": "Include adaptive as a switch entity",
                     "switch_air_clean": "Include air clean as a switch entity",
                     "switch_anti_frost": "Include anti-frost as a switch entity",
+		    "switch_energy_reset": "Include energy reset as a switch entity",
 		    "switch_factory_reset": "Include factory reset as a switch entity",
                     "switch_filter_reset": "Include filter reset as a switch entity",
                     "switch_ionizer": "Include ionizer as a switch entity",

+ 12 - 6
tests/const.py

@@ -877,15 +877,21 @@ NASHONE_MTS700WB_THERMOSTAT_PAYLOAD = {
 }
 
 SMARTMCB_SMT006_METER_PAYLOAD = {
-    "1": 139470,
-    "6": "CHoAQgQADlwAAA==",
-    "7": "AAAAAAAAAAAAAA==",
-    "8": "AAAAAAAAAAAAAA==",
+    "1": 141630,
+    #    "6": "CHoAQgQADlwAAA==",
+    #    "7": "AAAAAAAAAAAAAA==",
+    #    "8": "AAAAAAAAAAAAAA==",
     "9": 0,
     "11": False,
-    "12": "",
+    "12": False,
     "13": 0,
-    "14": 0,
+    #    "14": 0,
     "16": True,
     "19": "FSE-F723C46A04FC6C",
+    "101": 275,
+    "102": 170,
+    "103": 40,
+    "104": 30,
+    "105": False,
+    "106": False,
 }

+ 23 - 31
tests/devices/test_smartmcb_smt006_energymeter.py

@@ -19,29 +19,27 @@ from homeassistant.const import (
 
 from ..const import SMARTMCB_SMT006_METER_PAYLOAD
 from ..mixins.binary_sensor import MultiBinarySensorTests
-from ..mixins.number import BasicNumberTests
-from ..mixins.select import BasicSelectTests
 from ..mixins.sensor import MultiSensorTests
 from ..mixins.switch import MultiSwitchTests
 from .base_device_tests import TuyaDeviceTestCase
 
 TOTALENERGY_DPS = "1"
-PHASEA_DPS = "6"
-PHASEB_DPS = "7"
-PHASEC_DPS = "8"
 ERROR_DPS = "9"
 PREPAY_DPS = "11"
 RESET_DPS = "12"
 BALANCE_DPS = "13"
-CHARGE_DPS = "14"
 SWITCH_DPS = "16"
 SERIAL_DPS = "19"
+UNKNOWN101_DPS = "101"
+UNKNOWN102_DPS = "102"
+UNKNOWN103_DPS = "103"
+UNKNOWN104_DPS = "104"
+UNKNOWN105_DPS = "105"
+UNKNOWN106_DPS = "106"
 
 
 class TestSmartMcbSMT006EnergyMeter(
     MultiBinarySensorTests,
-    BasicNumberTests,
-    BasicSelectTests,
     MultiSensorTests,
     MultiSwitchTests,
     TuyaDeviceTestCase,
@@ -64,6 +62,10 @@ class TestSmartMcbSMT006EnergyMeter(
                     "name": "switch_prepay",
                     "dps": PREPAY_DPS,
                 },
+                {
+                    "name": "switch_energy_reset",
+                    "dps": RESET_DPS,
+                },
             ],
         )
         self.setUpMultiSensors(
@@ -193,21 +195,6 @@ class TestSmartMcbSMT006EnergyMeter(
                 },
             ],
         )
-        self.setUpBasicNumber(
-            CHARGE_DPS,
-            self.entities.get("number_charge_energy"),
-            max=9999.99,
-            scale=100,
-            step=0.01,
-        )
-        self.setUpBasicSelect(
-            RESET_DPS,
-            self.entities.get("select_energy_reset"),
-            {
-                "": "",
-                "empty": "Reset",
-            },
-        )
         self.mark_secondary(
             [
                 "binary_sensor_credit",
@@ -227,26 +214,31 @@ class TestSmartMcbSMT006EnergyMeter(
                 "binary_sensor_surge",
                 "binary_sensor_unbalanced",
                 "binary_sensor_undervoltage",
-                "number_charge_energy",
-                "select_energy_reset",
                 "sensor_balance_energy",
+                "switch_energy_reset",
                 "switch_prepay",
             ]
         )
 
     def test_multi_switch_state_attributes(self):
-        self.dps[PHASEA_DPS] = "Phase A"
-        self.dps[PHASEB_DPS] = "Phase B"
-        self.dps[PHASEC_DPS] = "Phase C"
         self.dps[SERIAL_DPS] = "Breaker Number"
+        self.dps[UNKNOWN101_DPS] = 101
+        self.dps[UNKNOWN102_DPS] = 102
+        self.dps[UNKNOWN103_DPS] = 103
+        self.dps[UNKNOWN104_DPS] = 104
+        self.dps[UNKNOWN105_DPS] = True
+        self.dps[UNKNOWN106_DPS] = False
 
         self.assertDictEqual(
             self.multiSwitch["switch"].extra_state_attributes,
             {
-                "phase_a": "Phase A",
-                "phase_b": "Phase B",
-                "phase_c": "Phase C",
                 "breaker_number": "Breaker Number",
+                "unknown_101": 101,
+                "unknown_102": 102,
+                "unknown_103": 103,
+                "unknown_104": 104,
+                "unknown_105": True,
+                "unknown_106": False,
             },
         )