Axis - Code improvements (#35592)

* Adapt library improvements
Clean up integration and tests and make them more like latest changes in UniFi integration

* Bump dependency to v26
This commit is contained in:
Robert Svensson
2020-05-14 10:49:27 +02:00
committed by GitHub
parent cf50ccb919
commit e6c58c9795
16 changed files with 323 additions and 307 deletions

View File

@@ -5,7 +5,6 @@ from datetime import timedelta
from axis.event_stream import CLASS_INPUT, CLASS_OUTPUT
from homeassistant.components.binary_sensor import BinarySensorEntity
from homeassistant.const import CONF_TRIGGER_TIME
from homeassistant.core import callback
from homeassistant.helpers.dispatcher import async_dispatcher_connect
from homeassistant.helpers.event import async_track_point_in_utc_time
@@ -22,13 +21,13 @@ async def async_setup_entry(hass, config_entry, async_add_entities):
@callback
def async_add_sensor(event_id):
"""Add binary sensor from Axis device."""
event = device.api.event.events[event_id]
event = device.api.event[event_id]
if event.CLASS != CLASS_OUTPUT:
async_add_entities([AxisBinarySensor(event, device)], True)
device.listeners.append(
async_dispatcher_connect(hass, device.event_new_sensor, async_add_sensor)
async_dispatcher_connect(hass, device.signal_new_event, async_add_sensor)
)
@@ -38,7 +37,7 @@ class AxisBinarySensor(AxisEventBase, BinarySensorEntity):
def __init__(self, event, device):
"""Initialize the Axis binary sensor."""
super().__init__(event, device)
self.remove_timer = None
self.cancel_scheduled_update = None
@callback
def update_callback(self, no_delay=False):
@@ -46,24 +45,25 @@ class AxisBinarySensor(AxisEventBase, BinarySensorEntity):
Parameter no_delay is True when device_event_reachable is sent.
"""
delay = self.device.config_entry.options[CONF_TRIGGER_TIME]
if self.remove_timer is not None:
self.remove_timer()
self.remove_timer = None
@callback
def scheduled_update(now):
"""Timer callback for sensor update."""
self.cancel_scheduled_update = None
self.async_write_ha_state()
if self.is_on or delay == 0 or no_delay:
if self.cancel_scheduled_update is not None:
self.cancel_scheduled_update()
self.cancel_scheduled_update = None
if self.is_on or self.device.option_trigger_time == 0 or no_delay:
self.async_write_ha_state()
return
@callback
def _delay_update(now):
"""Timer callback for sensor update."""
self.async_write_ha_state()
self.remove_timer = None
self.remove_timer = async_track_point_in_utc_time(
self.hass, _delay_update, utcnow() + timedelta(seconds=delay)
self.cancel_scheduled_update = async_track_point_in_utc_time(
self.hass,
scheduled_update,
utcnow() + timedelta(seconds=self.device.option_trigger_time),
)
@property