Explorar o código

Handle non-existing values that are masked.

Issue #631
Jason Rumney %!s(int64=2) %!d(string=hai) anos
pai
achega
367723010e

+ 5 - 5
custom_components/tuya_local/helpers/device_config.py

@@ -359,8 +359,8 @@ class TuyaDpsConfig:
     def get_value(self, device):
         """Return the value of the dps from the given device."""
         mask = self.mask(device)
-        if mask:
-            bytevalue = self.decoded_value(device)
+        bytevalue = self.decoded_value(device)
+        if mask and isinstance(bytevalue, bytes):
             value = int.from_bytes(bytevalue, "big")
             scale = mask & (1 + ~mask)
             map_scale = self.scale(device)
@@ -380,9 +380,9 @@ class TuyaDpsConfig:
                     v,
                     self.name,
                 )
-                return None
+                return v
 
-        elif self.rawtype == "base64":
+        elif self.rawtype == "base64" and isinstance(v, str):
             try:
                 return b64decode(v)
             except ValueError:
@@ -392,7 +392,7 @@ class TuyaDpsConfig:
                     v,
                     self.name,
                 )
-                return None
+                return v
         else:
             return v
 

+ 1 - 1
custom_components/tuya_local/manifest.json

@@ -9,5 +9,5 @@
     "iot_class": "local_push",
     "issue_tracker": "https://github.com/make-all/tuya-local/issues",
     "requirements": ["pycryptodome~=3.17","tinytuya==1.12.4"],
-    "version": "2022.4.1"
+    "version": "2022.4.2"
 }

+ 6 - 0
tests/devices/test_tompd63lw_breaker.py

@@ -76,3 +76,9 @@ class TestTOMPD63lw(MultiSensorTests, TuyaDeviceTestCase):
         self.assertEqual(self.multiSensor["sensor_voltage_a"].native_value, 224.0)
         self.assertEqual(self.multiSensor["sensor_current_a"].native_value, 4000)
         self.assertEqual(self.multiSensor["sensor_power_a"].native_value, 821.0)
+
+    def test_phasea_missing(self):
+        self.dps[PHASEA_DP] = None
+        self.assertIsNone(self.multiSensor["sensor_voltage_a"].native_value)
+        self.assertIsNone(self.multiSensor["sensor_current_a"].native_value)
+        self.assertIsNone(self.multiSensor["sensor_power_a"].native_value)