Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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