mirror of
https://github.com/home-assistant/core.git
synced 2025-07-18 02:37:08 +00:00
Refactor motion sensor of the xiaomi_aqara platform (#19805)
* Refactor motion sensor * Improve debug output
This commit is contained in:
commit
a3d05328ec
@ -107,7 +107,7 @@ class XiaomiBinarySensor(XiaomiDevice, BinarySensorDevice):
|
|||||||
|
|
||||||
def update(self):
|
def update(self):
|
||||||
"""Update the sensor state."""
|
"""Update the sensor state."""
|
||||||
_LOGGER.debug('Updating xiaomi sensor by polling')
|
_LOGGER.debug('Updating xiaomi sensor (%s) by polling', self._sid)
|
||||||
self._get_from_hub(self._sid)
|
self._get_from_hub(self._sid)
|
||||||
|
|
||||||
|
|
||||||
@ -178,7 +178,28 @@ class XiaomiMotionSensor(XiaomiBinarySensor):
|
|||||||
self.async_schedule_update_ha_state()
|
self.async_schedule_update_ha_state()
|
||||||
|
|
||||||
def parse_data(self, data, raw_data):
|
def parse_data(self, data, raw_data):
|
||||||
"""Parse data sent by gateway."""
|
"""Parse data sent by gateway.
|
||||||
|
|
||||||
|
Polling (proto v1, firmware version 1.4.1_159.0143)
|
||||||
|
|
||||||
|
>> { "cmd":"read","sid":"158..."}
|
||||||
|
<< {'model': 'motion', 'sid': '158...', 'short_id': 26331,
|
||||||
|
'cmd': 'read_ack', 'data': '{"voltage":3005}'}
|
||||||
|
|
||||||
|
Multicast messages (proto v1, firmware version 1.4.1_159.0143)
|
||||||
|
|
||||||
|
<< {'model': 'motion', 'sid': '158...', 'short_id': 26331,
|
||||||
|
'cmd': 'report', 'data': '{"status":"motion"}'}
|
||||||
|
<< {'model': 'motion', 'sid': '158...', 'short_id': 26331,
|
||||||
|
'cmd': 'report', 'data': '{"no_motion":"120"}'}
|
||||||
|
<< {'model': 'motion', 'sid': '158...', 'short_id': 26331,
|
||||||
|
'cmd': 'report', 'data': '{"no_motion":"180"}'}
|
||||||
|
<< {'model': 'motion', 'sid': '158...', 'short_id': 26331,
|
||||||
|
'cmd': 'report', 'data': '{"no_motion":"300"}'}
|
||||||
|
<< {'model': 'motion', 'sid': '158...', 'short_id': 26331,
|
||||||
|
'cmd': 'heartbeat', 'data': '{"voltage":3005}'}
|
||||||
|
|
||||||
|
"""
|
||||||
if raw_data['cmd'] == 'heartbeat':
|
if raw_data['cmd'] == 'heartbeat':
|
||||||
_LOGGER.debug(
|
_LOGGER.debug(
|
||||||
'Skipping heartbeat of the motion sensor. '
|
'Skipping heartbeat of the motion sensor. '
|
||||||
@ -187,8 +208,7 @@ class XiaomiMotionSensor(XiaomiBinarySensor):
|
|||||||
'11631#issuecomment-357507744).')
|
'11631#issuecomment-357507744).')
|
||||||
return
|
return
|
||||||
|
|
||||||
self._should_poll = False
|
if NO_MOTION in data:
|
||||||
if NO_MOTION in data: # handle push from the hub
|
|
||||||
self._no_motion_since = data[NO_MOTION]
|
self._no_motion_since = data[NO_MOTION]
|
||||||
self._state = False
|
self._state = False
|
||||||
return True
|
return True
|
||||||
@ -203,11 +223,10 @@ class XiaomiMotionSensor(XiaomiBinarySensor):
|
|||||||
self._unsub_set_no_motion()
|
self._unsub_set_no_motion()
|
||||||
self._unsub_set_no_motion = async_call_later(
|
self._unsub_set_no_motion = async_call_later(
|
||||||
self._hass,
|
self._hass,
|
||||||
180,
|
120,
|
||||||
self._async_set_no_motion
|
self._async_set_no_motion
|
||||||
)
|
)
|
||||||
else:
|
|
||||||
self._should_poll = True
|
|
||||||
if self.entity_id is not None:
|
if self.entity_id is not None:
|
||||||
self._hass.bus.fire('xiaomi_aqara.motion', {
|
self._hass.bus.fire('xiaomi_aqara.motion', {
|
||||||
'entity_id': self.entity_id
|
'entity_id': self.entity_id
|
||||||
@ -218,11 +237,6 @@ class XiaomiMotionSensor(XiaomiBinarySensor):
|
|||||||
return False
|
return False
|
||||||
self._state = True
|
self._state = True
|
||||||
return True
|
return True
|
||||||
if value == NO_MOTION:
|
|
||||||
if not self._state:
|
|
||||||
return False
|
|
||||||
self._state = False
|
|
||||||
return True
|
|
||||||
|
|
||||||
|
|
||||||
class XiaomiDoorSensor(XiaomiBinarySensor):
|
class XiaomiDoorSensor(XiaomiBinarySensor):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user