소스 검색

add energy sensor to ha

zerzhang 4 주 전
부모
커밋
0f4e8bd640
2개의 변경된 파일7개의 추가작업 그리고 5개의 파일을 삭제
  1. 5 3
      switchbot/devices/relay_switch.py
  2. 2 2
      tests/test_relay_switch.py

+ 5 - 3
switchbot/devices/relay_switch.py

@@ -95,8 +95,8 @@ class SwitchbotRelaySwitch(SwitchbotSequenceDevice, SwitchbotEncryptedDevice):
     def _parse_user_data(self, raw_data: bytes) -> dict[str, Any]:
         """Parse user-specific data from raw bytes."""
         return {
-            "electricity": round(int.from_bytes(raw_data[1:4], "big") / 60000, 2),
-            "electricity usage yesterday": round(int.from_bytes(raw_data[4:7], "big") / 60000, 2),
+            "energy": round(int.from_bytes(raw_data[1:4], "big") / 60000, 2),
+            "energy usage yesterday": round(int.from_bytes(raw_data[4:7], "big") / 60000, 2),
             "use_time": round(int.from_bytes(raw_data[7:9], "big") / 60, 2),
             "voltage": int.from_bytes(raw_data[9:11], "big") / 10.0,
             "current": int.from_bytes(raw_data[11:13], "big"),
@@ -116,12 +116,14 @@ class SwitchbotRelaySwitch(SwitchbotSequenceDevice, SwitchbotEncryptedDevice):
                 adv_data["voltage"] = self._get_adv_value("voltage") or 0
                 adv_data["current"] = self._get_adv_value("current") or 0
                 adv_data["power"] = self._get_adv_value("power") or 0
+                adv_data["energy"] = self._get_adv_value("energy") or 0
             else:
                 for i in range(1, channel + 1):
                     adv_data[i] = adv_data.get(i, {})
                     adv_data[i]["voltage"] = self._get_adv_value("voltage", i) or 0
                     adv_data[i]["current"] = self._get_adv_value("current", i) or 0
                     adv_data[i]["power"] = self._get_adv_value("power", i) or 0
+                    adv_data[i]["energy"] = self._get_adv_value("energy", i) or 0
         super().update_from_advertisement(advertisement)
 
 
@@ -149,7 +151,7 @@ class SwitchbotRelaySwitch(SwitchbotSequenceDevice, SwitchbotEncryptedDevice):
         user_data = self._parse_user_data(_channel1_data)
 
         if self._model in (SwitchbotModel.RELAY_SWITCH_1, SwitchbotModel.GARAGE_DOOR_OPENER):
-            for key in ["voltage", "current", "power"]:
+            for key in ["voltage", "current", "power", "energy"]:
                 user_data.pop(key, None)
 
         if not common_data["isOn"]:

+ 2 - 2
tests/test_relay_switch.py

@@ -223,13 +223,13 @@ async def test_get_basic_info_2PM(common_parametrize_2pm, info_data, result):
     assert 2 in info
 
     assert info[1]["isOn"] == result[0]
-    assert info[1]["electricity"] == result[1]
+    assert info[1]["energy"] == result[1]
     assert info[1]["voltage"] == result[2]
     assert info[1]["current"] == result[3]
     assert info[1]["power"] == result[4]
 
     assert info[2]["isOn"] == result[5]
-    assert info[2]["electricity"] == result[6]
+    assert info[2]["energy"] == result[6]
     assert info[2]["voltage"] == result[7]
     assert info[2]["current"] == result[8]
     assert info[2]["power"] == result[9]