Handle stale switchbot advertisement data while connected (#77956)

This commit is contained in:
J. Nick Koston 2022-09-07 09:54:21 -05:00 committed by GitHub
parent 645f5e5ac1
commit 2cfdc15c38
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 13 additions and 9 deletions

View File

@ -4,6 +4,8 @@ from __future__ import annotations
import logging import logging
from typing import Any from typing import Any
import switchbot
from homeassistant.components.cover import ( from homeassistant.components.cover import (
ATTR_CURRENT_POSITION, ATTR_CURRENT_POSITION,
ATTR_POSITION, ATTR_POSITION,
@ -36,6 +38,7 @@ async def async_setup_entry(
class SwitchBotCurtainEntity(SwitchbotEntity, CoverEntity, RestoreEntity): class SwitchBotCurtainEntity(SwitchbotEntity, CoverEntity, RestoreEntity):
"""Representation of a Switchbot.""" """Representation of a Switchbot."""
_device: switchbot.SwitchbotCurtain
_attr_device_class = CoverDeviceClass.CURTAIN _attr_device_class = CoverDeviceClass.CURTAIN
_attr_supported_features = ( _attr_supported_features = (
CoverEntityFeature.OPEN CoverEntityFeature.OPEN

View File

@ -2,7 +2,7 @@
"domain": "switchbot", "domain": "switchbot",
"name": "SwitchBot", "name": "SwitchBot",
"documentation": "https://www.home-assistant.io/integrations/switchbot", "documentation": "https://www.home-assistant.io/integrations/switchbot",
"requirements": ["PySwitchbot==0.18.25"], "requirements": ["PySwitchbot==0.18.27"],
"config_flow": true, "config_flow": true,
"dependencies": ["bluetooth"], "dependencies": ["bluetooth"],
"codeowners": [ "codeowners": [

View File

@ -4,6 +4,8 @@ from __future__ import annotations
import logging import logging
from typing import Any from typing import Any
import switchbot
from homeassistant.components.switch import SwitchDeviceClass, SwitchEntity from homeassistant.components.switch import SwitchDeviceClass, SwitchEntity
from homeassistant.config_entries import ConfigEntry from homeassistant.config_entries import ConfigEntry
from homeassistant.const import STATE_ON from homeassistant.const import STATE_ON
@ -34,6 +36,7 @@ class SwitchBotSwitch(SwitchbotEntity, SwitchEntity, RestoreEntity):
"""Representation of a Switchbot switch.""" """Representation of a Switchbot switch."""
_attr_device_class = SwitchDeviceClass.SWITCH _attr_device_class = SwitchDeviceClass.SWITCH
_device: switchbot.Switchbot
def __init__(self, coordinator: SwitchbotDataUpdateCoordinator) -> None: def __init__(self, coordinator: SwitchbotDataUpdateCoordinator) -> None:
"""Initialize the Switchbot.""" """Initialize the Switchbot."""
@ -69,21 +72,19 @@ class SwitchBotSwitch(SwitchbotEntity, SwitchEntity, RestoreEntity):
@property @property
def assumed_state(self) -> bool: def assumed_state(self) -> bool:
"""Return true if unable to access real state of entity.""" """Return true if unable to access real state of entity."""
if not self.data["data"]["switchMode"]: return not self._device.switch_mode()
return True
return False
@property @property
def is_on(self) -> bool | None: def is_on(self) -> bool | None:
"""Return true if device is on.""" """Return true if device is on."""
if not self.data["data"]["switchMode"]: if not self._device.switch_mode():
return self._attr_is_on return self._attr_is_on
return self.data["data"]["isOn"] return self._device.is_on()
@property @property
def extra_state_attributes(self) -> dict: def extra_state_attributes(self) -> dict:
"""Return the state attributes.""" """Return the state attributes."""
return { return {
**super().extra_state_attributes, **super().extra_state_attributes,
"switch_mode": self.data["data"]["switchMode"], "switch_mode": self._device.switch_mode(),
} }

View File

@ -37,7 +37,7 @@ PyRMVtransport==0.3.3
PySocks==1.7.1 PySocks==1.7.1
# homeassistant.components.switchbot # homeassistant.components.switchbot
PySwitchbot==0.18.25 PySwitchbot==0.18.27
# homeassistant.components.transport_nsw # homeassistant.components.transport_nsw
PyTransportNSW==0.1.1 PyTransportNSW==0.1.1

View File

@ -33,7 +33,7 @@ PyRMVtransport==0.3.3
PySocks==1.7.1 PySocks==1.7.1
# homeassistant.components.switchbot # homeassistant.components.switchbot
PySwitchbot==0.18.25 PySwitchbot==0.18.27
# homeassistant.components.transport_nsw # homeassistant.components.transport_nsw
PyTransportNSW==0.1.1 PyTransportNSW==0.1.1