Skip to content

Commit 9b6f659

Browse files
authored
Support RSSI channel 3 (Long Range) (#1254)
1 parent 576ed1e commit 9b6f659

File tree

2 files changed

+56
-4
lines changed

2 files changed

+56
-4
lines changed

test/model/test_controller.py

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1617,6 +1617,7 @@ async def test_statistics_updated(controller):
16171617
assert event_stats.background_rssi.channel_1.average == -93
16181618
assert event_stats.background_rssi.channel_1.current == -94
16191619
assert event_stats.background_rssi.channel_2 is None
1620+
assert event_stats.background_rssi.channel_3 is None
16201621

16211622
statistics_data = {
16221623
"messagesTX": 1,
@@ -1663,6 +1664,52 @@ async def test_statistics_updated(controller):
16631664
assert event_stats.background_rssi.channel_1.current == -84
16641665
assert event_stats.background_rssi.channel_2.average == -85
16651666
assert event_stats.background_rssi.channel_2.current == -86
1667+
assert event_stats.background_rssi.channel_3 is None
1668+
1669+
statistics_data = {
1670+
"messagesTX": 1,
1671+
"messagesRX": 1,
1672+
"messagesDroppedRX": 1,
1673+
"NAK": 1,
1674+
"CAN": 1,
1675+
"timeoutACK": 1,
1676+
"timeoutResponse": 1,
1677+
"timeoutCallback": 1,
1678+
"messagesDroppedTX": 1,
1679+
"backgroundRSSI": {
1680+
"timestamp": 1234567890,
1681+
"channel0": {
1682+
"average": -81,
1683+
"current": -82,
1684+
},
1685+
"channel1": {
1686+
"average": -83,
1687+
"current": -84,
1688+
},
1689+
"channel2": {
1690+
"average": -85,
1691+
"current": -86,
1692+
},
1693+
"channel3": {
1694+
"average": -87,
1695+
"current": -88,
1696+
},
1697+
},
1698+
}
1699+
event = Event(
1700+
"statistics updated",
1701+
{
1702+
"source": "controller",
1703+
"event": "statistics updated",
1704+
"statistics": statistics_data,
1705+
},
1706+
)
1707+
controller.receive_event(event)
1708+
event_stats = event.data["statistics_updated"]
1709+
assert isinstance(event_stats, ControllerStatistics)
1710+
assert event_stats.background_rssi
1711+
assert event_stats.background_rssi.channel_3.average == -87
1712+
assert event_stats.background_rssi.channel_3.current == -88
16661713

16671714

16681715
async def test_grant_security_classes(controller, uuid4, mock_command) -> None:

zwave_js_server/model/controller/statistics.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ class BackgroundRSSIDataType(TypedDict, total=False):
5353
channel0: ChannelRSSIDataType # required
5454
channel1: ChannelRSSIDataType # required
5555
channel2: ChannelRSSIDataType
56+
channel3: ChannelRSSIDataType
5657

5758

5859
class ControllerStatisticsDataType(TypedDict, total=False):
@@ -94,16 +95,20 @@ class BackgroundRSSI:
9495
channel_0: ChannelRSSI = field(init=False)
9596
channel_1: ChannelRSSI = field(init=False)
9697
channel_2: ChannelRSSI | None = field(init=False)
98+
channel_3: ChannelRSSI | None = field(init=False)
9799

98100
def __post_init__(self) -> None:
99101
"""Post initialize."""
100102
self.timestamp = self.data["timestamp"]
101103
self.channel_0 = ChannelRSSI(self.data["channel0"])
102104
self.channel_1 = ChannelRSSI(self.data["channel1"])
103-
if not (channel_2 := self.data.get("channel2")):
104-
self.channel_2 = None
105-
return
106-
self.channel_2 = ChannelRSSI(channel_2)
105+
# Channels 2 and 3 may not be present, but 3 requires 2 to be present
106+
self.channel_2 = None
107+
self.channel_3 = None
108+
if channel_2 := self.data.get("channel2"):
109+
self.channel_2 = ChannelRSSI(channel_2)
110+
if channel_3 := self.data.get("channel3"):
111+
self.channel_3 = ChannelRSSI(channel_3)
107112

108113

109114
@dataclass

0 commit comments

Comments
 (0)