Skip to content

Commit f85519d

Browse files
Correct the light level for blind tilt (#342)
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
1 parent a68a60b commit f85519d

File tree

2 files changed

+87
-1
lines changed

2 files changed

+87
-1
lines changed

switchbot/adv_parsers/blind_tilt.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ def process_woblindtilt(
1414

1515
_tilt = max(min(device_data[2] & 0b01111111, 100), 0)
1616
_in_motion = bool(device_data[2] & 0b10000000)
17-
_light_level = (device_data[1] >> 4) & 0b00001111
17+
_light_level = (device_data[3] >> 4) & 0b00001111
1818
_calibrated = bool(device_data[1] & 0b00000001)
1919

2020
return {

tests/test_adv_parser.py

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3001,3 +3001,89 @@ def test_lock_with_empty_data(test_case: AdvTestCase) -> None:
30013001
rssi=-97,
30023002
active=True,
30033003
)
3004+
3005+
3006+
def test_blind_tilt_active() -> None:
3007+
"""Test parsing blind tilt with active data."""
3008+
ble_device = generate_ble_device("aa:bb:cc:dd:ee:ff", "any")
3009+
adv_data = generate_advertisement_data(
3010+
manufacturer_data={2409: b"\xfc(\\6l\x7f\x0b'\x00\xa1\x84"},
3011+
service_data={"0000fd3d-0000-1000-8000-00805f9b34fb": b"x\x00H"},
3012+
rssi=-97,
3013+
)
3014+
result = parse_advertisement_data(ble_device, adv_data)
3015+
assert result == SwitchBotAdvertisement(
3016+
address="aa:bb:cc:dd:ee:ff",
3017+
data={
3018+
"rawAdvData": b"x\x00H",
3019+
"data": {
3020+
"sequence_number": 11,
3021+
"battery": 72,
3022+
"tilt": 0,
3023+
"inMotion": False,
3024+
"calibration": True,
3025+
"lightLevel": 10,
3026+
},
3027+
"isEncrypted": False,
3028+
"model": "x",
3029+
"modelFriendlyName": "Blind Tilt",
3030+
"modelName": SwitchbotModel.BLIND_TILT,
3031+
},
3032+
device=ble_device,
3033+
rssi=-97,
3034+
active=True,
3035+
)
3036+
3037+
3038+
def test_blind_tilt_passive() -> None:
3039+
"""Test parsing blind tilt with passive data."""
3040+
ble_device = generate_ble_device("aa:bb:cc:dd:ee:ff", "any")
3041+
adv_data = generate_advertisement_data(
3042+
manufacturer_data={2409: b"\xfc(\\6l\x7f\x0b'\x00\xa1\x84"},
3043+
rssi=-97,
3044+
)
3045+
result = parse_advertisement_data(ble_device, adv_data, SwitchbotModel.BLIND_TILT)
3046+
assert result == SwitchBotAdvertisement(
3047+
address="aa:bb:cc:dd:ee:ff",
3048+
data={
3049+
"rawAdvData": None,
3050+
"data": {
3051+
"sequence_number": 11,
3052+
"battery": None,
3053+
"tilt": 0,
3054+
"inMotion": False,
3055+
"calibration": True,
3056+
"lightLevel": 10,
3057+
},
3058+
"isEncrypted": False,
3059+
"model": "x",
3060+
"modelFriendlyName": "Blind Tilt",
3061+
"modelName": SwitchbotModel.BLIND_TILT,
3062+
},
3063+
device=ble_device,
3064+
rssi=-97,
3065+
active=False,
3066+
)
3067+
3068+
3069+
def test_blind_tilt_with_empty_data() -> None:
3070+
"""Test parsing blind tilt with empty data."""
3071+
ble_device = generate_ble_device("aa:bb:cc:dd:ee:ff", "any")
3072+
adv_data = generate_advertisement_data(
3073+
manufacturer_data={2409: None},
3074+
service_data={"0000fd3d-0000-1000-8000-00805f9b34fb": b"x\x00H"},
3075+
rssi=-97,
3076+
)
3077+
result = parse_advertisement_data(ble_device, adv_data)
3078+
assert result == SwitchBotAdvertisement(
3079+
address="aa:bb:cc:dd:ee:ff",
3080+
data={
3081+
"rawAdvData": b"x\x00H",
3082+
"data": {},
3083+
"isEncrypted": False,
3084+
"model": "x",
3085+
},
3086+
device=ble_device,
3087+
rssi=-97,
3088+
active=True,
3089+
)

0 commit comments

Comments
 (0)