如果 互联网/设备/服务不可用,记录一次不可用信息和一次重新连接时的信息
理由
当设备或服务无法连接时,实体通常会变为不可用。 为了让用户了解发生了什么,集成应该在这种情况发生时记录日志。 要确保总共只记录一次,以避免日志信息过多。
当设备或服务再次可用时,集成也应该记录这一点。 这对于使用日志找出设备或服务何时不可用以及何时重新上线非常有用。
info
日志记录应处于 info
级别。
示例实现
由于可以有多种不同的实现方式,我们将仅提供使用协调器的集成和通过 async_update
更新的实体的示例。
使用协调器的集成示例
在这个示例中,我们有一个使用协调器获取数据的集成。
协调器内置了只记录一次的逻辑。
您只需在协调器中在设备或 服务不可用时引发 UpdateFailed
。
coordinator.py
class MyCoordinator(DataUpdateCoordinator[MyData]):
"""用于管理获取数据的类。"""
def __init__(self, hass: HomeAssistant, client: MyClient) -> None:
"""初始化协调器。"""
super().__init__(
hass,
logger=LOGGER,
name=DOMAIN,
update_interval=timedelta(minutes=1),
)
self.client = client
async def _async_update_data(self) -> MyData:
try:
return await self.client.get_data()
except MyException as ex:
raise UpdateFailed(f"设备不可用: {ex}")
通过 async_update
更新的实体示例
在这个示例中,我们有一个通过 async_update
更新其值的传感器。
示例将记录传感器不可用时的信息,并记录传感器重新上线时的信息。
请注意,使用实例属性来跟踪是否已记录该消息,以避免日志信息过多。
sensor.py
class MySensor(SensorEntity):
_unavailable_logged: bool = False
async def async_update(self) -> None:
try:
data = await self.client.get_data()
except MyException as ex:
self._attr_available = False
if not self._unavailable_logged:
_LOGGER.info("传感器不可用: %s", ex)
self._unavailable_logged = True
else:
self._attr_available = True
self._attr_native_value = data.value
if self._unavailable_logged:
_LOGGER.info("传感器已重新上线")
self._unavailable_logged = False
其他资源
有关管理集成状态的更多信息,请参阅 文档
例外情况
此规则没有例外情况。
相关规则
- entity-unavailable: 如果合适则标记实体为不可用