Fix Shelly RPC RSSI sensor removal (#111035)

pull/111054/head
Shay Levy 2024-02-21 05:05:59 +02:00 committed by GitHub
parent 2f2cdedddd
commit c690a9df83
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 44 additions and 5 deletions

View File

@ -51,7 +51,11 @@ from .entity import (
async_setup_entry_rest,
async_setup_entry_rpc,
)
from .utils import get_device_entry_gen, get_device_uptime
from .utils import (
get_device_entry_gen,
get_device_uptime,
is_rpc_wifi_stations_disabled,
)
@dataclass(frozen=True)
@ -905,9 +909,7 @@ RPC_SENSORS: Final = {
device_class=SensorDeviceClass.SIGNAL_STRENGTH,
state_class=SensorStateClass.MEASUREMENT,
entity_registry_enabled_default=False,
removal_condition=lambda config, _status, key: (
config[key]["sta"]["enable"] is False
),
removal_condition=is_rpc_wifi_stations_disabled,
entity_category=EntityCategory.DIAGNOSTIC,
use_polling_coordinator=True,
),

View File

@ -452,3 +452,13 @@ def async_create_issue_unsupported_firmware(
"ip_address": entry.data["host"],
},
)
def is_rpc_wifi_stations_disabled(
config: dict[str, Any], _status: dict[str, Any], key: str
) -> bool:
"""Return true if rpc all WiFi stations are disabled."""
if config[key]["sta"]["enable"] is True or config[key]["sta1"]["enable"] is True:
return False
return True

View File

@ -179,7 +179,7 @@ MOCK_CONFIG = {
"ui_data": {},
"device": {"name": "Test name"},
},
"wifi": {"sta": {"enable": True}},
"wifi": {"sta": {"enable": True}, "sta1": {"enable": False}},
}
MOCK_SHELLY_COAP = {

View File

@ -31,6 +31,7 @@ from homeassistant.helpers.entity_registry import EntityRegistry, async_get
from homeassistant.setup import async_setup_component
from . import (
get_entity_state,
init_integration,
mock_polling_rpc_update,
mock_rest_update,
@ -353,6 +354,32 @@ async def test_rpc_sensor(
assert hass.states.get(entity_id).state == STATE_UNKNOWN
async def test_rpc_rssi_sensor_removal(
hass: HomeAssistant,
mock_rpc_device: Mock,
monkeypatch: pytest.MonkeyPatch,
entity_registry_enabled_by_default: None,
) -> None:
"""Test RPC RSSI sensor removal if no WiFi stations enabled."""
entity_id = f"{SENSOR_DOMAIN}.test_name_rssi"
entry = await init_integration(hass, 2)
# WiFi1 enabled, do not remove sensor
assert get_entity_state(hass, entity_id) == "-63"
# WiFi1 & WiFi2 disabled - remove sensor
monkeypatch.setitem(mock_rpc_device.config["wifi"]["sta"], "enable", False)
await hass.config_entries.async_reload(entry.entry_id)
await hass.async_block_till_done()
assert hass.states.get(entity_id) is None
# WiFi2 enabled, do not remove sensor
monkeypatch.setitem(mock_rpc_device.config["wifi"]["sta1"], "enable", True)
await hass.config_entries.async_reload(entry.entry_id)
await hass.async_block_till_done()
assert get_entity_state(hass, entity_id) == "-63"
async def test_rpc_illuminance_sensor(
hass: HomeAssistant, mock_rpc_device: Mock, entity_registry: EntityRegistry
) -> None: