增加在离线状态
This commit is contained in:
@@ -264,6 +264,7 @@ class JackeryDataCoordinator:
|
|||||||
self._sensors = {} # {sensor_id: entity}
|
self._sensors = {} # {sensor_id: entity}
|
||||||
self._data_task = None
|
self._data_task = None
|
||||||
self._subscribed = False
|
self._subscribed = False
|
||||||
|
self._last_update_time = time.time()
|
||||||
|
|
||||||
self._known_plugs = set() # Set of known plug SNs
|
self._known_plugs = set() # Set of known plug SNs
|
||||||
self.add_entities_callback = None # Callback to add new entities
|
self.add_entities_callback = None # Callback to add new entities
|
||||||
@@ -331,6 +332,7 @@ class JackeryDataCoordinator:
|
|||||||
|
|
||||||
def _handle_message(self, msg) -> None:
|
def _handle_message(self, msg) -> None:
|
||||||
"""处理接收到的 MQTT 消息."""
|
"""处理接收到的 MQTT 消息."""
|
||||||
|
self._last_update_time = time.time()
|
||||||
try:
|
try:
|
||||||
topic = msg.topic
|
topic = msg.topic
|
||||||
payload = msg.payload
|
payload = msg.payload
|
||||||
@@ -685,6 +687,13 @@ class JackeryDataCoordinator:
|
|||||||
for sensor_id, entity in self._sensors.items():
|
for sensor_id, entity in self._sensors.items():
|
||||||
entity._update_from_coordinator(data)
|
entity._update_from_coordinator(data)
|
||||||
|
|
||||||
|
def _mark_all_offline(self) -> None:
|
||||||
|
"""Mark all entities as unavailable."""
|
||||||
|
for entity in self._sensors.values():
|
||||||
|
if entity.available:
|
||||||
|
entity._attr_available = False
|
||||||
|
entity.async_write_ha_state()
|
||||||
|
|
||||||
async def _periodic_data_request(self) -> None:
|
async def _periodic_data_request(self) -> None:
|
||||||
"""定期发送 'type: 25' 和 'type: 100' 指令."""
|
"""定期发送 'type: 25' 和 'type: 100' 指令."""
|
||||||
_LOGGER.info(f"Starting periodic data polling for {self._device_sn} via {self._mqtt_host}...")
|
_LOGGER.info(f"Starting periodic data polling for {self._device_sn} via {self._mqtt_host}...")
|
||||||
@@ -692,6 +701,9 @@ class JackeryDataCoordinator:
|
|||||||
|
|
||||||
while True:
|
while True:
|
||||||
try:
|
try:
|
||||||
|
if time.time() - self._last_update_time > 60:
|
||||||
|
self._mark_all_offline()
|
||||||
|
|
||||||
if not self._device_sn:
|
if not self._device_sn:
|
||||||
_LOGGER.debug("Waiting for device SN discovery...")
|
_LOGGER.debug("Waiting for device SN discovery...")
|
||||||
await asyncio.sleep(5)
|
await asyncio.sleep(5)
|
||||||
|
|||||||
Reference in New Issue
Block a user