Add Reolink wifi signal sensor for IPC cams (#149200)

This commit is contained in:
starkillerOG 2025-07-21 21:35:28 +02:00 committed by GitHub
parent 941d3c2be4
commit b6014da121
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 19 additions and 4 deletions

View File

@ -24,6 +24,8 @@ async def async_get_config_entry_diagnostics(
IPC_cam[ch]["hardware version"] = api.camera_hardware_version(ch) IPC_cam[ch]["hardware version"] = api.camera_hardware_version(ch)
IPC_cam[ch]["firmware version"] = api.camera_sw_version(ch) IPC_cam[ch]["firmware version"] = api.camera_sw_version(ch)
IPC_cam[ch]["encoding main"] = await api.get_encoding(ch) IPC_cam[ch]["encoding main"] = await api.get_encoding(ch)
if (signal := api.wifi_signal(ch)) is not None:
IPC_cam[ch]["WiFi signal"] = signal
chimes: dict[int, dict[str, Any]] = {} chimes: dict[int, dict[str, Any]] = {}
for chime in api.chime_list: for chime in api.chime_list:

View File

@ -123,6 +123,18 @@ SENSORS = (
value=lambda api, ch: api.baichuan.day_night_state(ch), value=lambda api, ch: api.baichuan.day_night_state(ch),
supported=lambda api, ch: api.supported(ch, "day_night_state"), supported=lambda api, ch: api.supported(ch, "day_night_state"),
), ),
ReolinkSensorEntityDescription(
key="wifi_signal",
cmd_key="115",
translation_key="wifi_signal",
device_class=SensorDeviceClass.SIGNAL_STRENGTH,
state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC,
native_unit_of_measurement=SIGNAL_STRENGTH_DECIBELS_MILLIWATT,
entity_registry_enabled_default=False,
value=lambda api, ch: api.wifi_signal(ch),
supported=lambda api, ch: api.supported(ch, "wifi"),
),
) )
HOST_SENSORS = ( HOST_SENSORS = (

View File

@ -123,7 +123,7 @@ def _init_host_mock(host_mock: MagicMock) -> None:
host_mock.timeout = 60 host_mock.timeout = 60
host_mock.renewtimer.return_value = 600 host_mock.renewtimer.return_value = 600
host_mock.wifi_connection = False host_mock.wifi_connection = False
host_mock.wifi_signal.return_value = None host_mock.wifi_signal.return_value = -45
host_mock.whiteled_mode_list.return_value = [] host_mock.whiteled_mode_list.return_value = []
host_mock.zoom_range.return_value = { host_mock.zoom_range.return_value = {
"zoom": {"pos": {"min": 0, "max": 100}}, "zoom": {"pos": {"min": 0, "max": 100}},

View File

@ -28,6 +28,7 @@
'HTTPS': True, 'HTTPS': True,
'IPC cams': dict({ 'IPC cams': dict({
'0': dict({ '0': dict({
'WiFi signal': -45,
'encoding main': 'h264', 'encoding main': 'h264',
'firmware version': 'v1.1.0.0.0.0000', 'firmware version': 'v1.1.0.0.0.0000',
'hardware version': 'IPC_00001', 'hardware version': 'IPC_00001',
@ -38,7 +39,7 @@
'RTMP enabled': True, 'RTMP enabled': True,
'RTSP enabled': True, 'RTSP enabled': True,
'WiFi connection': False, 'WiFi connection': False,
'WiFi signal': None, 'WiFi signal': -45,
'abilities': dict({ 'abilities': dict({
'abilityChn': list([ 'abilityChn': list([
dict({ dict({

View File

@ -22,7 +22,7 @@ async def test_sensors(
"""Test sensor entities.""" """Test sensor entities."""
reolink_connect.ptz_pan_position.return_value = 1200 reolink_connect.ptz_pan_position.return_value = 1200
reolink_connect.wifi_connection = True reolink_connect.wifi_connection = True
reolink_connect.wifi_signal.return_value = 3 reolink_connect.wifi_signal.return_value = -55
reolink_connect.hdd_list = [0] reolink_connect.hdd_list = [0]
reolink_connect.hdd_storage.return_value = 95 reolink_connect.hdd_storage.return_value = 95
@ -35,7 +35,7 @@ async def test_sensors(
assert hass.states.get(entity_id).state == "1200" assert hass.states.get(entity_id).state == "1200"
entity_id = f"{Platform.SENSOR}.{TEST_NVR_NAME}_wi_fi_signal" entity_id = f"{Platform.SENSOR}.{TEST_NVR_NAME}_wi_fi_signal"
assert hass.states.get(entity_id).state == "3" assert hass.states.get(entity_id).state == "-55"
entity_id = f"{Platform.SENSOR}.{TEST_NVR_NAME}_sd_0_storage" entity_id = f"{Platform.SENSOR}.{TEST_NVR_NAME}_sd_0_storage"
assert hass.states.get(entity_id).state == "95" assert hass.states.get(entity_id).state == "95"