Skip to content

Commit

Permalink
Fix Shelly RPC RSSI sensor removal
Browse files Browse the repository at this point in the history
  • Loading branch information
thecode committed Feb 20, 2024
1 parent f295382 commit 2311660
Show file tree
Hide file tree
Showing 4 changed files with 44 additions and 5 deletions.
10 changes: 6 additions & 4 deletions homeassistant/components/shelly/sensor.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,11 @@
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)
Expand Down Expand Up @@ -905,9 +909,7 @@ class RestSensorDescription(RestEntityDescription, SensorEntityDescription):
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,
),
Expand Down
10 changes: 10 additions & 0 deletions homeassistant/components/shelly/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
2 changes: 1 addition & 1 deletion tests/components/shelly/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -179,7 +179,7 @@ def mock_white_light_set_state(
"ui_data": {},
"device": {"name": "Test name"},
},
"wifi": {"sta": {"enable": True}},
"wifi": {"sta": {"enable": True}, "sta1": {"enable": False}},
}

MOCK_SHELLY_COAP = {
Expand Down
27 changes: 27 additions & 0 deletions tests/components/shelly/test_sensor.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
from homeassistant.setup import async_setup_component

from . import (
get_entity_state,
init_integration,
mock_polling_rpc_update,
mock_rest_update,
Expand Down Expand Up @@ -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:
Expand Down

0 comments on commit 2311660

Please sign in to comment.