@@ -1045,6 +1045,183 @@ async def test_last_seen_statistics_sensors(
10451045 assert state .state == "2024-01-01T12:00:00+00:00"
10461046
10471047
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+
10481225ENERGY_PRODUCTION_ENTITY_MAP = {
10491226 "energy_production_power" : {
10501227 "state" : 1.23 ,
0 commit comments