@@ -1045,6 +1045,183 @@ async def test_last_seen_statistics_sensors(
1045
1045
assert state .state == "2024-01-01T12:00:00+00:00"
1046
1046
1047
1047
1048
+ async def test_rssi_sensor_error (
1049
+ hass : HomeAssistant ,
1050
+ zp3111 : Node ,
1051
+ integration : MockConfigEntry ,
1052
+ entity_registry : er .EntityRegistry ,
1053
+ ) -> None :
1054
+ """Test rssi sensor error."""
1055
+ entity_id = "sensor.4_in_1_sensor_signal_strength"
1056
+
1057
+ entity_registry .async_update_entity (entity_id , disabled_by = None )
1058
+
1059
+ # reload integration and check if entity is correctly there
1060
+ await hass .config_entries .async_reload (integration .entry_id )
1061
+ await hass .async_block_till_done ()
1062
+
1063
+ state = hass .states .get (entity_id )
1064
+ assert state
1065
+ assert state .state == "unknown"
1066
+
1067
+ # Fire statistics updated event for node
1068
+ event = Event (
1069
+ "statistics updated" ,
1070
+ {
1071
+ "source" : "node" ,
1072
+ "event" : "statistics updated" ,
1073
+ "nodeId" : zp3111 .node_id ,
1074
+ "statistics" : {
1075
+ "commandsTX" : 1 ,
1076
+ "commandsRX" : 2 ,
1077
+ "commandsDroppedTX" : 3 ,
1078
+ "commandsDroppedRX" : 4 ,
1079
+ "timeoutResponse" : 5 ,
1080
+ "rtt" : 6 ,
1081
+ "rssi" : 7 , # baseline
1082
+ "lwr" : {
1083
+ "protocolDataRate" : 1 ,
1084
+ "rssi" : 1 ,
1085
+ "repeaters" : [],
1086
+ "repeaterRSSI" : [],
1087
+ "routeFailedBetween" : [],
1088
+ },
1089
+ "nlwr" : {
1090
+ "protocolDataRate" : 2 ,
1091
+ "rssi" : 2 ,
1092
+ "repeaters" : [],
1093
+ "repeaterRSSI" : [],
1094
+ "routeFailedBetween" : [],
1095
+ },
1096
+ "lastSeen" : "2024-01-01T00:00:00+0000" ,
1097
+ },
1098
+ },
1099
+ )
1100
+ zp3111 .receive_event (event )
1101
+ await hass .async_block_till_done ()
1102
+
1103
+ state = hass .states .get (entity_id )
1104
+ assert state
1105
+ assert state .state == "7"
1106
+
1107
+ event = Event (
1108
+ "statistics updated" ,
1109
+ {
1110
+ "source" : "node" ,
1111
+ "event" : "statistics updated" ,
1112
+ "nodeId" : zp3111 .node_id ,
1113
+ "statistics" : {
1114
+ "commandsTX" : 1 ,
1115
+ "commandsRX" : 2 ,
1116
+ "commandsDroppedTX" : 3 ,
1117
+ "commandsDroppedRX" : 4 ,
1118
+ "timeoutResponse" : 5 ,
1119
+ "rtt" : 6 ,
1120
+ "rssi" : 125 , # no signal detected
1121
+ "lwr" : {
1122
+ "protocolDataRate" : 1 ,
1123
+ "rssi" : 1 ,
1124
+ "repeaters" : [],
1125
+ "repeaterRSSI" : [],
1126
+ "routeFailedBetween" : [],
1127
+ },
1128
+ "nlwr" : {
1129
+ "protocolDataRate" : 2 ,
1130
+ "rssi" : 2 ,
1131
+ "repeaters" : [],
1132
+ "repeaterRSSI" : [],
1133
+ "routeFailedBetween" : [],
1134
+ },
1135
+ "lastSeen" : "2024-01-01T00:00:00+0000" ,
1136
+ },
1137
+ },
1138
+ )
1139
+ zp3111 .receive_event (event )
1140
+ await hass .async_block_till_done ()
1141
+
1142
+ state = hass .states .get (entity_id )
1143
+ assert state
1144
+ assert state .state == "unknown"
1145
+
1146
+ event = Event (
1147
+ "statistics updated" ,
1148
+ {
1149
+ "source" : "node" ,
1150
+ "event" : "statistics updated" ,
1151
+ "nodeId" : zp3111 .node_id ,
1152
+ "statistics" : {
1153
+ "commandsTX" : 1 ,
1154
+ "commandsRX" : 2 ,
1155
+ "commandsDroppedTX" : 3 ,
1156
+ "commandsDroppedRX" : 4 ,
1157
+ "timeoutResponse" : 5 ,
1158
+ "rtt" : 6 ,
1159
+ "rssi" : 127 , # not available
1160
+ "lwr" : {
1161
+ "protocolDataRate" : 1 ,
1162
+ "rssi" : 1 ,
1163
+ "repeaters" : [],
1164
+ "repeaterRSSI" : [],
1165
+ "routeFailedBetween" : [],
1166
+ },
1167
+ "nlwr" : {
1168
+ "protocolDataRate" : 2 ,
1169
+ "rssi" : 2 ,
1170
+ "repeaters" : [],
1171
+ "repeaterRSSI" : [],
1172
+ "routeFailedBetween" : [],
1173
+ },
1174
+ "lastSeen" : "2024-01-01T00:00:00+0000" ,
1175
+ },
1176
+ },
1177
+ )
1178
+ zp3111 .receive_event (event )
1179
+ await hass .async_block_till_done ()
1180
+
1181
+ state = hass .states .get (entity_id )
1182
+ assert state
1183
+ assert state .state == "unavailable"
1184
+
1185
+ event = Event (
1186
+ "statistics updated" ,
1187
+ {
1188
+ "source" : "node" ,
1189
+ "event" : "statistics updated" ,
1190
+ "nodeId" : zp3111 .node_id ,
1191
+ "statistics" : {
1192
+ "commandsTX" : 1 ,
1193
+ "commandsRX" : 2 ,
1194
+ "commandsDroppedTX" : 3 ,
1195
+ "commandsDroppedRX" : 4 ,
1196
+ "timeoutResponse" : 5 ,
1197
+ "rtt" : 6 ,
1198
+ "rssi" : 126 , # receiver saturated
1199
+ "lwr" : {
1200
+ "protocolDataRate" : 1 ,
1201
+ "rssi" : 1 ,
1202
+ "repeaters" : [],
1203
+ "repeaterRSSI" : [],
1204
+ "routeFailedBetween" : [],
1205
+ },
1206
+ "nlwr" : {
1207
+ "protocolDataRate" : 2 ,
1208
+ "rssi" : 2 ,
1209
+ "repeaters" : [],
1210
+ "repeaterRSSI" : [],
1211
+ "routeFailedBetween" : [],
1212
+ },
1213
+ "lastSeen" : "2024-01-01T00:00:00+0000" ,
1214
+ },
1215
+ },
1216
+ )
1217
+ zp3111 .receive_event (event )
1218
+ await hass .async_block_till_done ()
1219
+
1220
+ state = hass .states .get (entity_id )
1221
+ assert state
1222
+ assert state .state == "unknown"
1223
+
1224
+
1048
1225
ENERGY_PRODUCTION_ENTITY_MAP = {
1049
1226
"energy_production_power" : {
1050
1227
"state" : 1.23 ,
0 commit comments