Skip to content

Commit

Permalink
Add Tilt shade device type support (#178)
Browse files Browse the repository at this point in the history
* add Tilt shade support

* Add tests

* double newline after function
  • Loading branch information
eclair4151 authored Jan 6, 2025
1 parent efde230 commit 12ef302
Show file tree
Hide file tree
Showing 3 changed files with 61 additions and 2 deletions.
1 change: 1 addition & 0 deletions src/pylutron_caseta/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@
"QsWirelessWoodBlind",
"RightDrawDrape",
"Shade",
"Tilt",
"SerenaTiltOnlyWoodBlind",
"PalladiomWireFreeShade",
],
Expand Down
24 changes: 24 additions & 0 deletions tests/responses/devices.json
Original file line number Diff line number Diff line change
Expand Up @@ -275,6 +275,30 @@
"href": "/devicerule/125"
}],
"AddressedState": "Addressed"
},
{
"href": "/device/11",
"Name": "WoodBlinds",
"FullyQualifiedName": ["Living Room", "WoodBlinds"],
"Parent": {
"href": "/project"
},
"SerialNumber": 4569,
"ModelNumber": "TLT-EDU-B-J",
"DeviceType": "Tilt",
"LocalZones": [{
"href": "/zone/4"
}],
"AssociatedArea": {
"href": "/area/3"
},
"LinkNodes": [{
"href": "/device/11/linknode/19"
}],
"DeviceRules": [{
"href": "/devicerule/126"
}],
"AddressedState": "Addressed"
}
]
}
Expand Down
38 changes: 36 additions & 2 deletions tests/test_smartbridge.py
Original file line number Diff line number Diff line change
Expand Up @@ -280,7 +280,7 @@ async def _accept_connection(self, leap, wait):

# Check the zone status on each zone
requested_zones = []
for _ in range(0, 4):
for _ in range(0, 5):
request, response = await wait(leap.requests.get())
logging.info("Read %s", request)
assert request.communique_type == "ReadRequest"
Expand Down Expand Up @@ -308,6 +308,7 @@ async def _accept_connection(self, leap, wait):
"/zone/1/status",
"/zone/2/status",
"/zone/3/status",
"/zone/4/status",
"/zone/6/status",
]

Expand Down Expand Up @@ -838,6 +839,21 @@ async def test_device_list(bridge: Bridge):
"tilt": None,
"occupancy_sensors": None,
},
"11": {
"area": "3",
"device_id": "11",
"device_name": "WoodBlinds",
"name": "Living Room_WoodBlinds",
"type": "Tilt",
"zone": "4",
"model": "TLT-EDU-B-J",
"serial": 4569,
"current_state": -1,
"fan_speed": None,
"button_groups": None,
"tilt": None,
"occupancy_sensors": None,
},
}

assert devices == expected_devices
Expand Down Expand Up @@ -875,13 +891,28 @@ async def test_device_list(bridge: Bridge):
Body={"ZoneStatus": {"Tilt": 25, "Zone": {"href": "/zone/3"}}},
)
)

bridge.leap.send_unsolicited(
Response(
CommuniqueType="ReadResponse",
Header=ResponseHeader(
MessageBodyType="OneZoneStatus",
StatusCode=ResponseStatus(200, "OK"),
Url="/zone/4/status",
),
Body={"ZoneStatus": {"Tilt": 40, "Zone": {"href": "/zone/4"}}},
)
)

devices = bridge.target.get_devices()
assert devices["2"]["current_state"] == 100
assert devices["2"]["fan_speed"] is None
assert devices["3"]["current_state"] == -1
assert devices["3"]["fan_speed"] == FAN_MEDIUM
assert devices["10"]["current_state"] == -1
assert devices["10"]["tilt"] == 25
assert devices["11"]["current_state"] == -1
assert devices["11"]["tilt"] == 40

devices = bridge.target.get_devices_by_domain("light")
assert len(devices) == 1
Expand All @@ -906,11 +937,14 @@ async def test_device_list(bridge: Bridge):
assert devices[0]["device_id"] == "3"

devices = bridge.target.get_devices_by_domain("cover")
assert [device["device_id"] for device in devices] == ["7", "10"]
assert [device["device_id"] for device in devices] == ["7", "10", "11"]

devices = bridge.target.get_devices_by_type("SerenaTiltOnlyWoodBlind")
assert [device["device_id"] for device in devices] == ["10"]

devices = bridge.target.get_devices_by_type("Tilt")
assert [device["device_id"] for device in devices] == ["11"]


@pytest.mark.asyncio
async def test_lip_device_list(bridge: Bridge):
Expand Down

0 comments on commit 12ef302

Please sign in to comment.