* Preparing for transition to config flow Added multiple gateway support Reworked parameter flow to platforms to enable multiple controllers Breaking change to config, now a list of gateways is expected instead of a single config * Updated coveragerc Added new location of fibaro component * Fixes based on code review and extended logging Addressed issues raised by code review Added extended debug logging to get better reports from users if the device type mapping is not perfect * Changhes based on code review Changes to how configuration is read and schemas Fix to device type mapping logic * simplified reading config * oops oops * grr grr * change based on code review * changes based on code review changes based on code review
82 lines
2.7 KiB
Python
82 lines
2.7 KiB
Python
"""
|
|
Support for Fibaro binary sensors.
|
|
|
|
For more details about this platform, please refer to the documentation at
|
|
https://home-assistant.io/components/binary_sensor.fibaro/
|
|
"""
|
|
import logging
|
|
|
|
from homeassistant.components.binary_sensor import (
|
|
BinarySensorDevice, ENTITY_ID_FORMAT)
|
|
from homeassistant.components.fibaro import (
|
|
FIBARO_DEVICES, FibaroDevice)
|
|
from homeassistant.const import (CONF_DEVICE_CLASS, CONF_ICON)
|
|
|
|
DEPENDENCIES = ['fibaro']
|
|
|
|
_LOGGER = logging.getLogger(__name__)
|
|
|
|
SENSOR_TYPES = {
|
|
'com.fibaro.floodSensor': ['Flood', 'mdi:water', 'flood'],
|
|
'com.fibaro.motionSensor': ['Motion', 'mdi:run', 'motion'],
|
|
'com.fibaro.doorSensor': ['Door', 'mdi:window-open', 'door'],
|
|
'com.fibaro.windowSensor': ['Window', 'mdi:window-open', 'window'],
|
|
'com.fibaro.smokeSensor': ['Smoke', 'mdi:smoking', 'smoke'],
|
|
'com.fibaro.FGMS001': ['Motion', 'mdi:run', 'motion'],
|
|
'com.fibaro.heatDetector': ['Heat', 'mdi:fire', 'heat'],
|
|
}
|
|
|
|
|
|
def setup_platform(hass, config, add_entities, discovery_info=None):
|
|
"""Perform the setup for Fibaro controller devices."""
|
|
if discovery_info is None:
|
|
return
|
|
|
|
add_entities(
|
|
[FibaroBinarySensor(device)
|
|
for device in hass.data[FIBARO_DEVICES]['binary_sensor']], True)
|
|
|
|
|
|
class FibaroBinarySensor(FibaroDevice, BinarySensorDevice):
|
|
"""Representation of a Fibaro Binary Sensor."""
|
|
|
|
def __init__(self, fibaro_device):
|
|
"""Initialize the binary_sensor."""
|
|
self._state = None
|
|
super().__init__(fibaro_device)
|
|
self.entity_id = ENTITY_ID_FORMAT.format(self.ha_id)
|
|
stype = None
|
|
devconf = fibaro_device.device_config
|
|
if fibaro_device.type in SENSOR_TYPES:
|
|
stype = fibaro_device.type
|
|
elif fibaro_device.baseType in SENSOR_TYPES:
|
|
stype = fibaro_device.baseType
|
|
if stype:
|
|
self._device_class = SENSOR_TYPES[stype][2]
|
|
self._icon = SENSOR_TYPES[stype][1]
|
|
else:
|
|
self._device_class = None
|
|
self._icon = None
|
|
# device_config overrides:
|
|
self._device_class = devconf.get(CONF_DEVICE_CLASS,
|
|
self._device_class)
|
|
self._icon = devconf.get(CONF_ICON, self._icon)
|
|
|
|
@property
|
|
def icon(self):
|
|
"""Icon to use in the frontend, if any."""
|
|
return self._icon
|
|
|
|
@property
|
|
def device_class(self):
|
|
"""Return the device class of the sensor."""
|
|
return self._device_class
|
|
|
|
@property
|
|
def is_on(self):
|
|
"""Return true if sensor is on."""
|
|
return self._state
|
|
|
|
def update(self):
|
|
"""Get the latest data and update the state."""
|
|
self._state = self.current_binary_state
|