core/homeassistant/components/ads/binary_sensor.py

64 lines
2.0 KiB
Python
Raw Normal View History

"""Support for ADS binary sensors."""
from __future__ import annotations
import pyads
Add ADS component (#10142) * 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 7da420f82385a4a5c66a929af7025c00ed197e86. * 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
2017-12-05 08:44:22 +00:00
import voluptuous as vol
from homeassistant.components.binary_sensor import (
2019-07-31 19:25:30 +00:00
DEVICE_CLASSES_SCHEMA,
PLATFORM_SCHEMA,
BinarySensorDeviceClass,
BinarySensorEntity,
2019-07-31 19:25:30 +00:00
)
from homeassistant.const import CONF_DEVICE_CLASS, CONF_NAME
from homeassistant.core import HomeAssistant
import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType
Add ADS component (#10142) * 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 7da420f82385a4a5c66a929af7025c00ed197e86. * 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
2017-12-05 08:44:22 +00:00
from . import CONF_ADS_VAR, DATA_ADS, STATE_KEY_STATE, AdsEntity
2019-07-31 19:25:30 +00:00
DEFAULT_NAME = "ADS binary sensor"
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(
{
vol.Required(CONF_ADS_VAR): cv.string,
vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string,
vol.Optional(CONF_DEVICE_CLASS): DEVICE_CLASSES_SCHEMA,
}
)
Add ADS component (#10142) * 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 7da420f82385a4a5c66a929af7025c00ed197e86. * 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
2017-12-05 08:44:22 +00:00
def setup_platform(
hass: HomeAssistant,
config: ConfigType,
add_entities: AddEntitiesCallback,
discovery_info: DiscoveryInfoType | None = None,
) -> None:
Add ADS component (#10142) * 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 7da420f82385a4a5c66a929af7025c00ed197e86. * 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
2017-12-05 08:44:22 +00:00
"""Set up the Binary Sensor platform for ADS."""
ads_hub = hass.data.get(DATA_ADS)
ads_var = config[CONF_ADS_VAR]
name = config[CONF_NAME]
Add ADS component (#10142) * 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 7da420f82385a4a5c66a929af7025c00ed197e86. * 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
2017-12-05 08:44:22 +00:00
device_class = config.get(CONF_DEVICE_CLASS)
ads_sensor = AdsBinarySensor(ads_hub, name, ads_var, device_class)
add_entities([ads_sensor])
Add ADS component (#10142) * 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 7da420f82385a4a5c66a929af7025c00ed197e86. * 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
2017-12-05 08:44:22 +00:00
class AdsBinarySensor(AdsEntity, BinarySensorEntity):
Add ADS component (#10142) * 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 7da420f82385a4a5c66a929af7025c00ed197e86. * 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
2017-12-05 08:44:22 +00:00
"""Representation of ADS binary sensors."""
def __init__(self, ads_hub, name, ads_var, device_class):
"""Initialize ADS binary sensor."""
super().__init__(ads_hub, name, ads_var)
self._attr_device_class = device_class or BinarySensorDeviceClass.MOVING
Add ADS component (#10142) * 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 7da420f82385a4a5c66a929af7025c00ed197e86. * 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
2017-12-05 08:44:22 +00:00
2022-08-18 13:56:52 +00:00
async def async_added_to_hass(self) -> None:
Add ADS component (#10142) * 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 7da420f82385a4a5c66a929af7025c00ed197e86. * 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
2017-12-05 08:44:22 +00:00
"""Register device notification."""
await self.async_initialize_device(self._ads_var, pyads.PLCTYPE_BOOL)
Add ADS component (#10142) * 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 7da420f82385a4a5c66a929af7025c00ed197e86. * 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
2017-12-05 08:44:22 +00:00
@property
def is_on(self) -> bool:
"""Return True if the entity is on."""
return self._state_dict[STATE_KEY_STATE]