Skip to content

Commit 645ff8f

Browse files
zerzhangpre-commit-ci[bot]bdraco
authored
fix: add power adv parser for 1pm (#380)
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: J. Nick Koston <[email protected]>
1 parent 14100b5 commit 645ff8f

File tree

3 files changed

+27
-1
lines changed

3 files changed

+27
-1
lines changed

switchbot/adv_parser.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
from .adv_parsers.plug import process_woplugmini
3737
from .adv_parsers.relay_switch import (
3838
process_garage_door_opener,
39+
process_relay_switch_1pm,
3940
process_relay_switch_2pm,
4041
process_relay_switch_common_data,
4142
)
@@ -213,7 +214,7 @@ class SwitchbotSupportedType(TypedDict):
213214
"<": {
214215
"modelName": SwitchbotModel.RELAY_SWITCH_1PM,
215216
"modelFriendlyName": "Relay Switch 1PM",
216-
"func": process_relay_switch_common_data,
217+
"func": process_relay_switch_1pm,
217218
"manufacturer_id": 2409,
218219
},
219220
";": {

switchbot/adv_parsers/relay_switch.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44

55
from typing import Any
66

7+
from ..helpers import parse_power_data
8+
79

810
def process_relay_switch_common_data(
911
data: bytes | None, mfr_data: bytes | None
@@ -18,6 +20,18 @@ def process_relay_switch_common_data(
1820
}
1921

2022

23+
def process_relay_switch_1pm(
24+
data: bytes | None, mfr_data: bytes | None
25+
) -> dict[str, Any]:
26+
"""Process Relay Switch 1PM services data."""
27+
if mfr_data is None:
28+
return {}
29+
30+
common_data = process_relay_switch_common_data(data, mfr_data)
31+
common_data["power"] = parse_power_data(mfr_data, 10)
32+
return common_data
33+
34+
2135
def process_garage_door_opener(
2236
data: bytes | None, mfr_data: bytes | None
2337
) -> dict[str, Any]:
@@ -39,10 +53,13 @@ def process_relay_switch_2pm(
3953
return {
4054
1: {
4155
**process_relay_switch_common_data(data, mfr_data),
56+
"power": parse_power_data(mfr_data, 10),
4257
},
4358
2: {
4459
"switchMode": True, # for compatibility, useless
4560
"sequence_number": mfr_data[6],
4661
"isOn": bool(mfr_data[7] & 0b01000000),
62+
"power": parse_power_data(mfr_data, 12),
4763
},
64+
"sequence_number": mfr_data[6],
4865
}

tests/test_adv_parser.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3236,12 +3236,15 @@ def test_humidifer_with_empty_data() -> None:
32363236
"isOn": True,
32373237
"sequence_number": 138,
32383238
"switchMode": True,
3239+
"power": 0.0,
32393240
},
32403241
2: {
32413242
"isOn": True,
32423243
"sequence_number": 138,
32433244
"switchMode": True,
3245+
"power": 70.0,
32443246
},
3247+
"sequence_number": 138,
32453248
},
32463249
"=",
32473250
"Relay Switch 2PM",
@@ -3266,6 +3269,7 @@ def test_humidifer_with_empty_data() -> None:
32663269
"isOn": True,
32673270
"sequence_number": 71,
32683271
"switchMode": True,
3272+
"power": 49.0,
32693273
},
32703274
"<",
32713275
"Relay Switch 1PM",
@@ -3400,12 +3404,15 @@ def test_adv_active(test_case: AdvTestCase) -> None:
34003404
"isOn": True,
34013405
"sequence_number": 138,
34023406
"switchMode": True,
3407+
"power": 0.0,
34033408
},
34043409
2: {
34053410
"isOn": True,
34063411
"sequence_number": 138,
34073412
"switchMode": True,
3413+
"power": 70.0,
34083414
},
3415+
"sequence_number": 138,
34093416
},
34103417
"=",
34113418
"Relay Switch 2PM",
@@ -3430,6 +3437,7 @@ def test_adv_active(test_case: AdvTestCase) -> None:
34303437
"isOn": True,
34313438
"sequence_number": 71,
34323439
"switchMode": True,
3440+
"power": 49.0,
34333441
},
34343442
"<",
34353443
"Relay Switch 1PM",

0 commit comments

Comments
 (0)