mirror of
https://github.com/home-assistant/core.git
synced 2025-07-13 08:17:08 +00:00
Report unavailability for yolink sensor and binary_sensor (#100743)
This commit is contained in:
parent
5106907571
commit
c4d85ac41f
@ -136,3 +136,8 @@ class YoLinkBinarySensorEntity(YoLinkEntity, BinarySensorEntity):
|
||||
state.get(self.entity_description.state_key)
|
||||
)
|
||||
self.async_write_ha_state()
|
||||
|
||||
@property
|
||||
def available(self) -> bool:
|
||||
"""Return true is device is available."""
|
||||
return super().available and self.coordinator.dev_online
|
||||
|
@ -8,3 +8,4 @@ ATTR_DEVICE_NAME = "name"
|
||||
ATTR_DEVICE_STATE = "state"
|
||||
ATTR_DEVICE_ID = "deviceId"
|
||||
YOLINK_EVENT = f"{DOMAIN}_event"
|
||||
YOLINK_OFFLINE_TIME = 32400
|
||||
|
@ -2,7 +2,7 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import asyncio
|
||||
from datetime import timedelta
|
||||
from datetime import UTC, datetime, timedelta
|
||||
import logging
|
||||
|
||||
from yolink.device import YoLinkDevice
|
||||
@ -12,7 +12,7 @@ from homeassistant.core import HomeAssistant
|
||||
from homeassistant.exceptions import ConfigEntryAuthFailed
|
||||
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed
|
||||
|
||||
from .const import ATTR_DEVICE_STATE, DOMAIN
|
||||
from .const import ATTR_DEVICE_STATE, DOMAIN, YOLINK_OFFLINE_TIME
|
||||
|
||||
_LOGGER = logging.getLogger(__name__)
|
||||
|
||||
@ -37,6 +37,7 @@ class YoLinkCoordinator(DataUpdateCoordinator[dict]):
|
||||
)
|
||||
self.device = device
|
||||
self.paired_device = paired_device
|
||||
self.dev_online = True
|
||||
|
||||
async def _async_update_data(self) -> dict:
|
||||
"""Fetch device state."""
|
||||
@ -44,6 +45,13 @@ class YoLinkCoordinator(DataUpdateCoordinator[dict]):
|
||||
async with asyncio.timeout(10):
|
||||
device_state_resp = await self.device.fetch_state()
|
||||
device_state = device_state_resp.data.get(ATTR_DEVICE_STATE)
|
||||
device_reporttime = device_state_resp.data.get("reportAt")
|
||||
if device_reporttime is not None:
|
||||
rpt_time_delta = (
|
||||
datetime.now(tz=UTC).replace(tzinfo=None)
|
||||
- datetime.strptime(device_reporttime, "%Y-%m-%dT%H:%M:%S.%fZ")
|
||||
).total_seconds()
|
||||
self.dev_online = rpt_time_delta < YOLINK_OFFLINE_TIME
|
||||
if self.paired_device is not None and device_state is not None:
|
||||
paried_device_state_resp = await self.paired_device.fetch_state()
|
||||
paried_device_state = paried_device_state_resp.data.get(
|
||||
|
@ -261,3 +261,8 @@ class YoLinkSensorEntity(YoLinkEntity, SensorEntity):
|
||||
return
|
||||
self._attr_native_value = attr_val
|
||||
self.async_write_ha_state()
|
||||
|
||||
@property
|
||||
def available(self) -> bool:
|
||||
"""Return true is device is available."""
|
||||
return super().available and self.coordinator.dev_online
|
||||
|
Loading…
x
Reference in New Issue
Block a user