Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 18 additions & 3 deletions homeassistant/components/binary_sensor/zha.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@

from homeassistant.components.binary_sensor import DOMAIN, BinarySensorDevice
from homeassistant.components import zha
from homeassistant.const import STATE_ON
from homeassistant.helpers.restore_state import async_get_last_state

_LOGGER = logging.getLogger(__name__)

Expand Down Expand Up @@ -203,8 +205,8 @@ def zdo_command(self, *args, **kwargs):
def __init__(self, **kwargs):
"""Initialize Switch."""
super().__init__(**kwargs)
self._state = False
self._level = 0
self._state = None
self._level = None
from zigpy.zcl.clusters import general
self._out_listeners = {
general.OnOff.cluster_id: self.OnOffListener(self),
Expand Down Expand Up @@ -246,10 +248,23 @@ def set_level(self, level):
def set_state(self, state):
"""Set the state."""
self._state = state
if self._level == 0:
if state and (self._level == 0 or self._level is None):
self._level = 255
self.async_schedule_update_ha_state()

async def async_added_to_hass(self):
"""Run when about to be added to hass"""
await super().async_added_to_hass()
# get the old state if we have one
old_state = await async_get_last_state(self.hass, self.entity_id)
if old_state is not None:
if self._level is None:
self._level = old_state.attributes.get('level', self._level)
if self._state is None and old_state.state == STATE_ON:
self.set_state(True)
else:
self.set_state(False)

async def async_update(self):
"""Retrieve latest state."""
from zigpy.zcl.clusters.general import OnOff
Expand Down