From 7da420f82385a4a5c66a929af7025c00ed197e86 Mon Sep 17 00:00:00 2001 From: Stefan Lehmann Date: Sat, 18 Nov 2017 11:55:57 +0100 Subject: [PATCH] remove polling --- homeassistant/components/ads.py | 14 +----- homeassistant/components/binary_sensor/ads.py | 45 ++--------------- homeassistant/components/light/ads.py | 3 -- homeassistant/components/sensor/ads.py | 49 ++----------------- 4 files changed, 12 insertions(+), 99 deletions(-) diff --git a/homeassistant/components/ads.py b/homeassistant/components/ads.py index 3528a2b0f76428..81225fa6887d08 100644 --- a/homeassistant/components/ads.py +++ b/homeassistant/components/ads.py @@ -34,8 +34,6 @@ # config variable names CONF_ADSVAR = 'adsvar' CONF_ADSTYPE = 'adstype' -CONF_ADS_USE_NOTIFY = 'use_notify' -CONF_ADS_POLL_INTERVAL = 'poll_interval' CONF_ADS_FACTOR = 'factor' CONFIG_SCHEMA = vol.Schema({ @@ -43,8 +41,6 @@ vol.Required(CONF_DEVICE): cv.string, vol.Required(CONF_PORT): cv.port, vol.Optional(CONF_IP_ADDRESS): cv.string, - vol.Optional(CONF_ADS_POLL_INTERVAL, default=1000): cv.positive_int, - vol.Optional(CONF_ADS_USE_NOTIFY, default=True): cv.boolean, }) }, extra=vol.ALLOW_EXTRA) @@ -58,8 +54,6 @@ def setup(hass, config): net_id = conf.get(CONF_DEVICE) ip_address = conf.get(CONF_IP_ADDRESS) port = conf.get(CONF_PORT) - poll_interval = conf.get(CONF_ADS_POLL_INTERVAL) - use_notify = conf.get(CONF_ADS_USE_NOTIFY) # create a new ads connection client = pyads.Connection(net_id, port, ip_address) @@ -80,8 +74,7 @@ def setup(hass, config): # connect to ads client and try to connect try: - ads = AdsHub(client, poll_interval=poll_interval, - use_notify=use_notify) + ads = AdsHub(client) except pyads.pyads.ADSError: _LOGGER.error( 'Could not connect to ADS host (netid=%s, port=%s)', net_id, port @@ -120,11 +113,8 @@ def handle_write_data_by_name(call): class AdsHub: """Representation of a PyADS connection.""" - def __init__(self, ads_client, poll_interval, use_notify): + def __init__(self, ads_client): """Initialize the ADS Hub.""" - self.poll_interval = poll_interval - self.use_notify = use_notify - self._client = ads_client self._client.open() diff --git a/homeassistant/components/binary_sensor/ads.py b/homeassistant/components/binary_sensor/ads.py index 4db78710dba290..00426263bb898e 100644 --- a/homeassistant/components/binary_sensor/ads.py +++ b/homeassistant/components/binary_sensor/ads.py @@ -1,16 +1,13 @@ """Support for ADS binary sensors.""" import logging -from datetime import timedelta import voluptuous as vol from homeassistant.components.binary_sensor import BinarySensorDevice, \ PLATFORM_SCHEMA, DEVICE_CLASSES_SCHEMA -from homeassistant.components.ads import DATA_ADS, CONF_ADSVAR, \ - CONF_ADS_USE_NOTIFY, CONF_ADS_POLL_INTERVAL +from homeassistant.components.ads import DATA_ADS, CONF_ADSVAR from homeassistant.const import CONF_NAME, CONF_DEVICE_CLASS -from homeassistant.helpers.event import async_track_time_interval import homeassistant.helpers.config_validation as cv @@ -24,8 +21,6 @@ vol.Required(CONF_ADSVAR): cv.string, vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, vol.Optional(CONF_DEVICE_CLASS): DEVICE_CLASSES_SCHEMA, - vol.Optional(CONF_ADS_USE_NOTIFY): cv.boolean, - vol.Optional(CONF_ADS_POLL_INTERVAL): cv.positive_int, }) @@ -38,38 +33,24 @@ def setup_platform(hass, config, add_devices, discovery_info=None): adsvar = config.get(CONF_ADSVAR) name = config.get(CONF_NAME) device_class = config.get(CONF_DEVICE_CLASS) - use_notify = config.get(CONF_ADS_USE_NOTIFY, ads_hub.use_notify) - poll_interval = config.get(CONF_ADS_POLL_INTERVAL, ads_hub.poll_interval) - ads_sensor = AdsBinarySensor(ads_hub, name, adsvar, device_class, - use_notify, poll_interval) + ads_sensor = AdsBinarySensor(ads_hub, name, adsvar, device_class) add_devices([ads_sensor], True) - if use_notify: - ads_hub.add_device_notification(adsvar, ads_hub.PLCTYPE_BOOL, - ads_sensor.callback) - else: - dtime = timedelta(0, 0, poll_interval * 1000) - async_track_time_interval(hass, ads_sensor.poll, dtime) + ads_hub.add_device_notification(adsvar, ads_hub.PLCTYPE_BOOL, + ads_sensor.callback) class AdsBinarySensor(BinarySensorDevice): """Representation of ADS binary sensors.""" - def __init__(self, ads_hub, name, adsvar, device_class, use_notify, - poll_interval): + def __init__(self, ads_hub, name, adsvar, device_class): """Initialize AdsBinarySensor entity.""" self._name = name self._state = False self._device_class = device_class or 'moving' self._ads_hub = ads_hub self.adsvar = adsvar - self.use_notify = use_notify - self.poll_interval = poll_interval - - # make first poll if notifications disabled - if not self.use_notify: - self.poll(None) @property def name(self): @@ -95,19 +76,3 @@ def callback(self, name, value): self.schedule_update_ha_state() except AttributeError: pass - - def poll(self, now): - """Handle polling.""" - try: - self._state = self._ads_hub.read_by_name( - self.adsvar, self._ads_hub.PLCTYPE_BOOL - ) - _LOGGER.debug('Polled value for bool variable %s: %d', - self.adsvar, self._state) - except self._ads_hub.ADSError as err: - _LOGGER.error(err) - - try: - self.schedule_update_ha_state() - except AttributeError: - pass diff --git a/homeassistant/components/light/ads.py b/homeassistant/components/light/ads.py index 40bdae6384378e..3a475c52ef6701 100644 --- a/homeassistant/components/light/ads.py +++ b/homeassistant/components/light/ads.py @@ -91,8 +91,6 @@ def turn_on(self, **kwargs): self._ads_hub.write_by_name(self.varname_brightness, bval, self._ads_hub.PLCTYPE_UINT) - self._on_state = True - def turn_off(self, **kwargs): """Turn the light off.""" brightness = kwargs.get(ATTR_BRIGHTNESS) @@ -104,7 +102,6 @@ def turn_off(self, **kwargs): if self.varname_brightness is not None: self._ads_hub.write_by_name(self.varname_brightness, bval, self._ads_hub.PLCTYPE_UINT) - self._on_state = False def value_changed(self, val): """Handle value change.""" diff --git a/homeassistant/components/sensor/ads.py b/homeassistant/components/sensor/ads.py index 38ba334091006e..0716183ebd108a 100644 --- a/homeassistant/components/sensor/ads.py +++ b/homeassistant/components/sensor/ads.py @@ -1,16 +1,14 @@ """Support for ADS sensors.""" import logging -from datetime import timedelta import voluptuous as vol from homeassistant.components.sensor import PLATFORM_SCHEMA from homeassistant.const import CONF_NAME, CONF_UNIT_OF_MEASUREMENT from homeassistant.helpers.entity import Entity import homeassistant.helpers.config_validation as cv -from homeassistant.helpers.event import async_track_time_interval from homeassistant.components import ads from homeassistant.components.ads import CONF_ADSVAR, CONF_ADSTYPE, \ - CONF_ADS_USE_NOTIFY, CONF_ADS_POLL_INTERVAL, CONF_ADS_FACTOR + CONF_ADS_FACTOR _LOGGER = logging.getLogger(__name__) @@ -24,8 +22,6 @@ vol.Optional(CONF_ADSTYPE, default=ads.ADSTYPE_INT): vol.In( [ads.ADSTYPE_INT, ads.ADSTYPE_UINT, ads.ADSTYPE_BYTE] ), - vol.Optional(CONF_ADS_USE_NOTIFY): cv.boolean, - vol.Optional(CONF_ADS_POLL_INTERVAL): cv.positive_int, vol.Optional(CONF_ADS_FACTOR): cv.positive_int, }) @@ -40,28 +36,22 @@ def setup_platform(hass, config, add_devices, discovery_info=None): adstype = config.get(CONF_ADSTYPE) name = config.get(CONF_NAME) unit_of_measurement = config.get(CONF_UNIT_OF_MEASUREMENT) - use_notify = config.get(CONF_ADS_USE_NOTIFY, ads_hub.use_notify) - poll_interval = config.get(CONF_ADS_POLL_INTERVAL, ads_hub.poll_interval) factor = config.get(CONF_ADS_FACTOR) entity = AdsSensor(ads_hub, adsvar, adstype, name, - unit_of_measurement, use_notify, poll_interval, factor) + unit_of_measurement, factor) add_devices([entity]) - if use_notify: - ads_hub.add_device_notification(adsvar, ads_hub.ADS_TYPEMAP[adstype], - entity.callback) - else: - dtime = timedelta(0, 0, poll_interval * 1000) - async_track_time_interval(hass, entity.poll, dtime) + ads_hub.add_device_notification(adsvar, ads_hub.ADS_TYPEMAP[adstype], + entity.callback) class AdsSensor(Entity): """Representation of an ADS sensor entity.""" def __init__(self, ads_hub, adsvar, adstype, devname, unit_of_measurement, - use_notify, poll_interval, factor): + factor): """Initialize AdsSensor entity.""" self._ads_hub = ads_hub self._name = devname @@ -69,14 +59,8 @@ def __init__(self, ads_hub, adsvar, adstype, devname, unit_of_measurement, self._unit_of_measurement = unit_of_measurement self.adsvar = adsvar self.adstype = adstype - self.use_notify = use_notify - self.poll_interval = poll_interval self.factor = factor - # make first poll if notifications disabled - if not self.use_notify: - self.poll(None) - @property def name(self): """Return the name of the entity.""" @@ -106,26 +90,3 @@ def callback(self, name, value): self.schedule_update_ha_state() except AttributeError: pass - - def poll(self, now): - """Poll value from ADS device.""" - try: - val = self._ads_hub.read_by_name( - self.adsvar, self._ads_hub.ADS_TYPEMAP[self.adstype] - ) - - if self.factor is None: - self._value = val - else: - self._value = val / self.factor - - _LOGGER.debug('Polled value for variable %s: %d', - self.adsvar, self._value) - - except self._ads_hub.ADSError as err: - _LOGGER.error(err) - - try: - self.schedule_update_ha_state() - except AttributeError: - pass