Create an issue if Shelly TRV is not calibrated (#96952)
* Create issue if Shelly Valve is not calibrated * Add test * Improve test * Improve issue description * Restart -> reboot
This commit is contained in:
parent
878a4f1bb9
commit
2e156e56bf
4 changed files with 77 additions and 2 deletions
|
@ -20,6 +20,7 @@ from homeassistant.config_entries import ConfigEntry
|
||||||
from homeassistant.const import ATTR_TEMPERATURE, UnitOfTemperature
|
from homeassistant.const import ATTR_TEMPERATURE, UnitOfTemperature
|
||||||
from homeassistant.core import HomeAssistant, State, callback
|
from homeassistant.core import HomeAssistant, State, callback
|
||||||
from homeassistant.exceptions import HomeAssistantError
|
from homeassistant.exceptions import HomeAssistantError
|
||||||
|
from homeassistant.helpers import issue_registry as ir
|
||||||
from homeassistant.helpers.device_registry import CONNECTION_NETWORK_MAC
|
from homeassistant.helpers.device_registry import CONNECTION_NETWORK_MAC
|
||||||
from homeassistant.helpers.entity import DeviceInfo
|
from homeassistant.helpers.entity import DeviceInfo
|
||||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||||
|
@ -33,7 +34,12 @@ from homeassistant.helpers.update_coordinator import CoordinatorEntity
|
||||||
from homeassistant.util.unit_conversion import TemperatureConverter
|
from homeassistant.util.unit_conversion import TemperatureConverter
|
||||||
from homeassistant.util.unit_system import US_CUSTOMARY_SYSTEM
|
from homeassistant.util.unit_system import US_CUSTOMARY_SYSTEM
|
||||||
|
|
||||||
from .const import LOGGER, SHTRV_01_TEMPERATURE_SETTINGS
|
from .const import (
|
||||||
|
DOMAIN,
|
||||||
|
LOGGER,
|
||||||
|
NOT_CALIBRATED_ISSUE_ID,
|
||||||
|
SHTRV_01_TEMPERATURE_SETTINGS,
|
||||||
|
)
|
||||||
from .coordinator import ShellyBlockCoordinator, get_entry_data
|
from .coordinator import ShellyBlockCoordinator, get_entry_data
|
||||||
|
|
||||||
|
|
||||||
|
@ -339,6 +345,27 @@ class BlockSleepingClimate(
|
||||||
self.async_write_ha_state()
|
self.async_write_ha_state()
|
||||||
return
|
return
|
||||||
|
|
||||||
|
if self.coordinator.device.status.get("calibrated") is False:
|
||||||
|
ir.async_create_issue(
|
||||||
|
self.hass,
|
||||||
|
DOMAIN,
|
||||||
|
NOT_CALIBRATED_ISSUE_ID.format(unique=self.coordinator.mac),
|
||||||
|
is_fixable=False,
|
||||||
|
is_persistent=False,
|
||||||
|
severity=ir.IssueSeverity.ERROR,
|
||||||
|
translation_key="device_not_calibrated",
|
||||||
|
translation_placeholders={
|
||||||
|
"device_name": self.name,
|
||||||
|
"ip_address": self.coordinator.device.ip_address,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
ir.async_delete_issue(
|
||||||
|
self.hass,
|
||||||
|
DOMAIN,
|
||||||
|
NOT_CALIBRATED_ISSUE_ID.format(unique=self.coordinator.mac),
|
||||||
|
)
|
||||||
|
|
||||||
assert self.coordinator.device.blocks
|
assert self.coordinator.device.blocks
|
||||||
|
|
||||||
for block in self.coordinator.device.blocks:
|
for block in self.coordinator.device.blocks:
|
||||||
|
|
|
@ -178,3 +178,5 @@ class BLEScannerMode(StrEnum):
|
||||||
|
|
||||||
MAX_PUSH_UPDATE_FAILURES = 5
|
MAX_PUSH_UPDATE_FAILURES = 5
|
||||||
PUSH_UPDATE_ISSUE_ID = "push_update_{unique}"
|
PUSH_UPDATE_ISSUE_ID = "push_update_{unique}"
|
||||||
|
|
||||||
|
NOT_CALIBRATED_ISSUE_ID = "not_calibrated_{unique}"
|
||||||
|
|
|
@ -120,6 +120,10 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"issues": {
|
"issues": {
|
||||||
|
"device_not_calibrated": {
|
||||||
|
"title": "Shelly device {device_name} is not calibrated",
|
||||||
|
"description": "Shelly device {device_name} with IP address {ip_address} requires calibration. To calibrate the device, it must be rebooted after proper installation on the valve. You can reboot the device in its web panel, go to 'Settings' > 'Device Reboot'."
|
||||||
|
},
|
||||||
"push_update_failure": {
|
"push_update_failure": {
|
||||||
"title": "Shelly device {device_name} push update failure",
|
"title": "Shelly device {device_name} push update failure",
|
||||||
"description": "Home Assistant is not receiving push updates from the Shelly device {device_name} with IP address {ip_address}. Check the CoIoT configuration in the web panel of the device and your network configuration."
|
"description": "Home Assistant is not receiving push updates from the Shelly device {device_name} with IP address {ip_address}. Check the CoIoT configuration in the web panel of the device and your network configuration."
|
||||||
|
|
|
@ -21,9 +21,11 @@ from homeassistant.config_entries import SOURCE_REAUTH, ConfigEntryState
|
||||||
from homeassistant.const import ATTR_ENTITY_ID, ATTR_TEMPERATURE, STATE_UNAVAILABLE
|
from homeassistant.const import ATTR_ENTITY_ID, ATTR_TEMPERATURE, STATE_UNAVAILABLE
|
||||||
from homeassistant.core import HomeAssistant, State
|
from homeassistant.core import HomeAssistant, State
|
||||||
from homeassistant.exceptions import HomeAssistantError
|
from homeassistant.exceptions import HomeAssistantError
|
||||||
|
import homeassistant.helpers.issue_registry as ir
|
||||||
from homeassistant.util.unit_system import US_CUSTOMARY_SYSTEM
|
from homeassistant.util.unit_system import US_CUSTOMARY_SYSTEM
|
||||||
|
|
||||||
from . import init_integration, register_device, register_entity
|
from . import MOCK_MAC, init_integration, register_device, register_entity
|
||||||
|
from .conftest import MOCK_STATUS_COAP
|
||||||
|
|
||||||
from tests.common import mock_restore_cache, mock_restore_cache_with_extra_data
|
from tests.common import mock_restore_cache, mock_restore_cache_with_extra_data
|
||||||
|
|
||||||
|
@ -486,3 +488,43 @@ async def test_block_restored_climate_auth_error(
|
||||||
assert "context" in flow
|
assert "context" in flow
|
||||||
assert flow["context"].get("source") == SOURCE_REAUTH
|
assert flow["context"].get("source") == SOURCE_REAUTH
|
||||||
assert flow["context"].get("entry_id") == entry.entry_id
|
assert flow["context"].get("entry_id") == entry.entry_id
|
||||||
|
|
||||||
|
|
||||||
|
async def test_device_not_calibrated(
|
||||||
|
hass: HomeAssistant, mock_block_device, monkeypatch
|
||||||
|
) -> None:
|
||||||
|
"""Test to create an issue when the device is not calibrated."""
|
||||||
|
issue_registry: ir.IssueRegistry = ir.async_get(hass)
|
||||||
|
|
||||||
|
await init_integration(hass, 1, sleep_period=1000, model="SHTRV-01")
|
||||||
|
|
||||||
|
# Make device online
|
||||||
|
mock_block_device.mock_update()
|
||||||
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
|
mock_status = MOCK_STATUS_COAP.copy()
|
||||||
|
mock_status["calibrated"] = False
|
||||||
|
monkeypatch.setattr(
|
||||||
|
mock_block_device,
|
||||||
|
"status",
|
||||||
|
mock_status,
|
||||||
|
)
|
||||||
|
mock_block_device.mock_update()
|
||||||
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
|
assert issue_registry.async_get_issue(
|
||||||
|
domain=DOMAIN, issue_id=f"not_calibrated_{MOCK_MAC}"
|
||||||
|
)
|
||||||
|
|
||||||
|
# The device has been calibrated
|
||||||
|
monkeypatch.setattr(
|
||||||
|
mock_block_device,
|
||||||
|
"status",
|
||||||
|
MOCK_STATUS_COAP,
|
||||||
|
)
|
||||||
|
mock_block_device.mock_update()
|
||||||
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
|
assert not issue_registry.async_get_issue(
|
||||||
|
domain=DOMAIN, issue_id=f"not_calibrated_{MOCK_MAC}"
|
||||||
|
)
|
||||||
|
|
Loading…
Add table
Reference in a new issue