* add ads hub, light and switch
* add binary sensor prototype
* switch: use adsvar for connection
* fix some issues with binary sensor
* fix binary sensor
* fix all platforms
* use latest pyads
* fixed error with multiple binary sensors
* add sensor
* add ads sensor
* clean up after shutdown
* ads component with platforms switch, binary_sensor, light, sensor
add locking
poll sensors at startup
update state of ads switch and light
update ads requirements
remove update() from constructors on ads platforms
omit ads coverage
ads catch read error when polling
* add ads service
* add default settings for use_notify and poll_interval
* fix too long line
* Fix style issues
* no pydocstyle errors
* Send and receive native brightness data to ADS device to prevent issues with math.floor reducing brightness -1 at every switch
* Enable non dimmable lights
* remove setting of self._state in switch
* remove polling
* Revert "remove polling"
This reverts commit 7da420f823
.
* add service schema, add links to documentation
* fix naming, cleanup
* re-remove polling
* use async_added_to_hass for setup of callbacks
* fix comment.
* add callbacks for changed values
* use async_add_job for creating device notifications
* set should_poll to False for all platforms
* change should_poll to property
* add service description to services.yaml
* add for brigthness not being None
* put ads component in package
* Remove whitespace
* omit ads package
103 lines
3.1 KiB
Python
103 lines
3.1 KiB
Python
"""
|
|
Support for ADS sensors.
|
|
|
|
For more details about this platform, please refer to the documentation.
|
|
https://home-assistant.io/components/sensor.ads/
|
|
|
|
"""
|
|
import asyncio
|
|
import logging
|
|
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.components import ads
|
|
from homeassistant.components.ads import CONF_ADS_VAR, CONF_ADS_TYPE, \
|
|
CONF_ADS_FACTOR
|
|
|
|
|
|
_LOGGER = logging.getLogger(__name__)
|
|
|
|
DEFAULT_NAME = 'ADS sensor'
|
|
DEPENDENCIES = ['ads']
|
|
|
|
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
|
|
vol.Required(CONF_ADS_VAR): cv.string,
|
|
vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string,
|
|
vol.Optional(CONF_UNIT_OF_MEASUREMENT, default=''): cv.string,
|
|
vol.Optional(CONF_ADS_TYPE, default=ads.ADSTYPE_INT): vol.In(
|
|
[ads.ADSTYPE_INT, ads.ADSTYPE_UINT, ads.ADSTYPE_BYTE]
|
|
),
|
|
vol.Optional(CONF_ADS_FACTOR): cv.positive_int,
|
|
})
|
|
|
|
|
|
def setup_platform(hass, config, add_devices, discovery_info=None):
|
|
"""Set up an ADS sensor device."""
|
|
ads_hub = hass.data.get(ads.DATA_ADS)
|
|
|
|
ads_var = config.get(CONF_ADS_VAR)
|
|
ads_type = config.get(CONF_ADS_TYPE)
|
|
name = config.get(CONF_NAME)
|
|
unit_of_measurement = config.get(CONF_UNIT_OF_MEASUREMENT)
|
|
factor = config.get(CONF_ADS_FACTOR)
|
|
|
|
entity = AdsSensor(ads_hub, ads_var, ads_type, name,
|
|
unit_of_measurement, factor)
|
|
|
|
add_devices([entity])
|
|
|
|
|
|
class AdsSensor(Entity):
|
|
"""Representation of an ADS sensor entity."""
|
|
|
|
def __init__(self, ads_hub, ads_var, ads_type, name, unit_of_measurement,
|
|
factor):
|
|
"""Initialize AdsSensor entity."""
|
|
self._ads_hub = ads_hub
|
|
self._name = name
|
|
self._value = None
|
|
self._unit_of_measurement = unit_of_measurement
|
|
self.ads_var = ads_var
|
|
self.ads_type = ads_type
|
|
self.factor = factor
|
|
|
|
@asyncio.coroutine
|
|
def async_added_to_hass(self):
|
|
"""Register device notification."""
|
|
def update(name, value):
|
|
"""Handle device notifications."""
|
|
_LOGGER.debug('Variable %s changed its value to %d', name, value)
|
|
|
|
# if factor is set use it otherwise not
|
|
if self.factor is None:
|
|
self._value = value
|
|
else:
|
|
self._value = value / self.factor
|
|
self.schedule_update_ha_state()
|
|
|
|
self.hass.async_add_job(
|
|
self._ads_hub.add_device_notification,
|
|
self.ads_var, self._ads_hub.ADS_TYPEMAP[self.ads_type], update
|
|
)
|
|
|
|
@property
|
|
def name(self):
|
|
"""Return the name of the entity."""
|
|
return self._name
|
|
|
|
@property
|
|
def state(self):
|
|
"""Return the state of the device."""
|
|
return self._value
|
|
|
|
@property
|
|
def unit_of_measurement(self):
|
|
"""Return the unit of measurement."""
|
|
return self._unit_of_measurement
|
|
|
|
@property
|
|
def should_poll(self):
|
|
"""Return False because entity pushes its state to HA."""
|
|
return False
|