Migrate to voluptuous (#3234)
parent
165871d48a
commit
6a837f3aad
|
@ -4,18 +4,27 @@ Contains functionality to use a ZigBee device as a binary sensor.
|
||||||
For more details about this platform, please refer to the documentation at
|
For more details about this platform, please refer to the documentation at
|
||||||
https://home-assistant.io/components/binary_sensor.zigbee/
|
https://home-assistant.io/components/binary_sensor.zigbee/
|
||||||
"""
|
"""
|
||||||
|
import voluptuous as vol
|
||||||
|
|
||||||
from homeassistant.components.binary_sensor import BinarySensorDevice
|
from homeassistant.components.binary_sensor import BinarySensorDevice
|
||||||
from homeassistant.components.zigbee import (
|
from homeassistant.components.zigbee import (
|
||||||
ZigBeeDigitalIn, ZigBeeDigitalInConfig)
|
ZigBeeDigitalIn, ZigBeeDigitalInConfig, PLATFORM_SCHEMA)
|
||||||
|
|
||||||
DEPENDENCIES = ["zigbee"]
|
CONF_ON_STATE = 'on_state'
|
||||||
|
|
||||||
|
DEFAULT_ON_STATE = 'high'
|
||||||
|
DEPENDENCIES = ['zigbee']
|
||||||
|
|
||||||
|
STATES = ['high', 'low']
|
||||||
|
|
||||||
|
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
|
||||||
|
vol.Optional(CONF_ON_STATE): vol.In(STATES),
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
def setup_platform(hass, config, add_entities, discovery_info=None):
|
def setup_platform(hass, config, add_devices, discovery_info=None):
|
||||||
"""Setup the ZigBee binary sensor platform."""
|
"""Setup the ZigBee binary sensor platform."""
|
||||||
add_entities([
|
add_devices([ZigBeeBinarySensor(hass, ZigBeeDigitalInConfig(config))])
|
||||||
ZigBeeBinarySensor(hass, ZigBeeDigitalInConfig(config))
|
|
||||||
])
|
|
||||||
|
|
||||||
|
|
||||||
class ZigBeeBinarySensor(ZigBeeDigitalIn, BinarySensorDevice):
|
class ZigBeeBinarySensor(ZigBeeDigitalIn, BinarySensorDevice):
|
||||||
|
|
|
@ -4,18 +4,27 @@ Functionality to use a ZigBee device as a light.
|
||||||
For more details about this platform, please refer to the documentation at
|
For more details about this platform, please refer to the documentation at
|
||||||
https://home-assistant.io/components/light.zigbee/
|
https://home-assistant.io/components/light.zigbee/
|
||||||
"""
|
"""
|
||||||
|
import voluptuous as vol
|
||||||
|
|
||||||
from homeassistant.components.light import Light
|
from homeassistant.components.light import Light
|
||||||
from homeassistant.components.zigbee import (
|
from homeassistant.components.zigbee import (
|
||||||
ZigBeeDigitalOut, ZigBeeDigitalOutConfig)
|
ZigBeeDigitalOut, ZigBeeDigitalOutConfig, PLATFORM_SCHEMA)
|
||||||
|
|
||||||
DEPENDENCIES = ["zigbee"]
|
CONF_ON_STATE = 'on_state'
|
||||||
|
|
||||||
|
DEFAULT_ON_STATE = 'high'
|
||||||
|
DEPENDENCIES = ['zigbee']
|
||||||
|
|
||||||
|
STATES = ['high', 'low']
|
||||||
|
|
||||||
|
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
|
||||||
|
vol.Optional(CONF_ON_STATE, default=DEFAULT_ON_STATE): vol.In(STATES),
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
def setup_platform(hass, config, add_entities, discovery_info=None):
|
def setup_platform(hass, config, add_devices, discovery_info=None):
|
||||||
"""Create and add an entity based on the configuration."""
|
"""Create and add an entity based on the configuration."""
|
||||||
add_entities([
|
add_devices([ZigBeeLight(hass, ZigBeeDigitalOutConfig(config))])
|
||||||
ZigBeeLight(hass, ZigBeeDigitalOutConfig(config))
|
|
||||||
])
|
|
||||||
|
|
||||||
|
|
||||||
class ZigBeeLight(ZigBeeDigitalOut, Light):
|
class ZigBeeLight(ZigBeeDigitalOut, Light):
|
||||||
|
|
|
@ -7,32 +7,45 @@ https://home-assistant.io/components/sensor.zigbee/
|
||||||
import logging
|
import logging
|
||||||
from binascii import hexlify
|
from binascii import hexlify
|
||||||
|
|
||||||
|
import voluptuous as vol
|
||||||
|
|
||||||
from homeassistant.components import zigbee
|
from homeassistant.components import zigbee
|
||||||
|
from homeassistant.components.zigbee import PLATFORM_SCHEMA
|
||||||
from homeassistant.const import TEMP_CELSIUS
|
from homeassistant.const import TEMP_CELSIUS
|
||||||
from homeassistant.core import JobPriority
|
from homeassistant.core import JobPriority
|
||||||
from homeassistant.helpers.entity import Entity
|
from homeassistant.helpers.entity import Entity
|
||||||
|
|
||||||
DEPENDENCIES = ["zigbee"]
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
CONF_TYPE = 'type'
|
||||||
|
CONF_MAX_VOLTS = 'max_volts'
|
||||||
|
|
||||||
def setup_platform(hass, config, add_entities, discovery_info=None):
|
DEFAULT_VOLTS = 1.2
|
||||||
"""Setup the Z-Wave platform.
|
DEPENDENCIES = ['zigbee']
|
||||||
|
|
||||||
|
TYPES = ['analog', 'temperature']
|
||||||
|
|
||||||
|
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
|
||||||
|
vol.Required(CONF_TYPE): vol.In(TYPES),
|
||||||
|
vol.Optional(CONF_MAX_VOLTS, default=DEFAULT_VOLTS): vol.Coerce(float),
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
def setup_platform(hass, config, add_devices, discovery_info=None):
|
||||||
|
"""Setup the ZigBee platform.
|
||||||
|
|
||||||
Uses the 'type' config value to work out which type of ZigBee sensor we're
|
Uses the 'type' config value to work out which type of ZigBee sensor we're
|
||||||
dealing with and instantiates the relevant classes to handle it.
|
dealing with and instantiates the relevant classes to handle it.
|
||||||
"""
|
"""
|
||||||
typ = config.get("type", "").lower()
|
typ = config.get(CONF_TYPE)
|
||||||
if not typ:
|
|
||||||
_LOGGER.exception(
|
|
||||||
"Must include 'type' when configuring a ZigBee sensor.")
|
|
||||||
return
|
|
||||||
try:
|
try:
|
||||||
sensor_class, config_class = TYPE_CLASSES[typ]
|
sensor_class, config_class = TYPE_CLASSES[typ]
|
||||||
except KeyError:
|
except KeyError:
|
||||||
_LOGGER.exception("Unknown ZigBee sensor type: %s", typ)
|
_LOGGER.exception("Unknown ZigBee sensor type: %s", typ)
|
||||||
return
|
return
|
||||||
add_entities([sensor_class(hass, config_class(config))])
|
|
||||||
|
add_devices([sensor_class(hass, config_class(config))])
|
||||||
|
|
||||||
|
|
||||||
class ZigBeeTemperatureSensor(Entity):
|
class ZigBeeTemperatureSensor(Entity):
|
||||||
|
|
|
@ -4,18 +4,29 @@ Contains functionality to use a ZigBee device as a switch.
|
||||||
For more details about this platform, please refer to the documentation at
|
For more details about this platform, please refer to the documentation at
|
||||||
https://home-assistant.io/components/switch.zigbee/
|
https://home-assistant.io/components/switch.zigbee/
|
||||||
"""
|
"""
|
||||||
|
import voluptuous as vol
|
||||||
|
|
||||||
from homeassistant.components.switch import SwitchDevice
|
from homeassistant.components.switch import SwitchDevice
|
||||||
from homeassistant.components.zigbee import (
|
from homeassistant.components.zigbee import (
|
||||||
ZigBeeDigitalOut, ZigBeeDigitalOutConfig)
|
ZigBeeDigitalOut, ZigBeeDigitalOutConfig, PLATFORM_SCHEMA)
|
||||||
|
|
||||||
DEPENDENCIES = ["zigbee"]
|
DEPENDENCIES = ['zigbee']
|
||||||
|
|
||||||
|
CONF_ON_STATE = 'on_state'
|
||||||
|
|
||||||
|
DEFAULT_ON_STATE = 'high'
|
||||||
|
DEPENDENCIES = ['zigbee']
|
||||||
|
|
||||||
|
STATES = ['high', 'low']
|
||||||
|
|
||||||
|
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
|
||||||
|
vol.Optional(CONF_ON_STATE): vol.In(STATES),
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
def setup_platform(hass, config, add_entities, discovery_info=None):
|
def setup_platform(hass, config, add_devices, discovery_info=None):
|
||||||
"""Setup the ZigBee switch platform."""
|
"""Setup the ZigBee switch platform."""
|
||||||
add_entities([
|
add_devices([ZigBeeSwitch(hass, ZigBeeDigitalOutConfig(config))])
|
||||||
ZigBeeSwitch(hass, ZigBeeDigitalOutConfig(config))
|
|
||||||
])
|
|
||||||
|
|
||||||
|
|
||||||
class ZigBeeSwitch(ZigBeeDigitalOut, SwitchDevice):
|
class ZigBeeSwitch(ZigBeeDigitalOut, SwitchDevice):
|
||||||
|
|
|
@ -9,19 +9,26 @@ import pickle
|
||||||
from binascii import hexlify, unhexlify
|
from binascii import hexlify, unhexlify
|
||||||
from base64 import b64encode, b64decode
|
from base64 import b64encode, b64decode
|
||||||
|
|
||||||
from homeassistant.const import EVENT_HOMEASSISTANT_STOP
|
import voluptuous as vol
|
||||||
|
|
||||||
|
from homeassistant.const import (
|
||||||
|
EVENT_HOMEASSISTANT_STOP, CONF_DEVICE, CONF_NAME, CONF_PIN)
|
||||||
from homeassistant.core import JobPriority
|
from homeassistant.core import JobPriority
|
||||||
from homeassistant.helpers.entity import Entity
|
from homeassistant.helpers.entity import Entity
|
||||||
|
from homeassistant.helpers import config_validation as cv
|
||||||
|
|
||||||
DOMAIN = "zigbee"
|
REQUIREMENTS = ['xbee-helper==0.0.7']
|
||||||
REQUIREMENTS = ("xbee-helper==0.0.7",)
|
|
||||||
|
|
||||||
EVENT_ZIGBEE_FRAME_RECEIVED = "zigbee_frame_received"
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
CONF_DEVICE = "device"
|
DOMAIN = 'zigbee'
|
||||||
CONF_BAUD = "baud"
|
|
||||||
|
|
||||||
DEFAULT_DEVICE = "/dev/ttyUSB0"
|
EVENT_ZIGBEE_FRAME_RECEIVED = 'zigbee_frame_received'
|
||||||
|
|
||||||
|
CONF_ADDRESS = 'address'
|
||||||
|
CONF_BAUD = 'baud'
|
||||||
|
|
||||||
|
DEFAULT_DEVICE = '/dev/ttyUSB0'
|
||||||
DEFAULT_BAUD = 9600
|
DEFAULT_BAUD = 9600
|
||||||
DEFAULT_ADC_MAX_VOLTS = 1.2
|
DEFAULT_ADC_MAX_VOLTS = 1.2
|
||||||
|
|
||||||
|
@ -35,11 +42,22 @@ CONVERT_ADC = None
|
||||||
ZIGBEE_EXCEPTION = None
|
ZIGBEE_EXCEPTION = None
|
||||||
ZIGBEE_TX_FAILURE = None
|
ZIGBEE_TX_FAILURE = None
|
||||||
|
|
||||||
ATTR_FRAME = "frame"
|
ATTR_FRAME = 'frame'
|
||||||
|
|
||||||
DEVICE = None
|
DEVICE = None
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
CONFIG_SCHEMA = vol.Schema({
|
||||||
|
DOMAIN: vol.Schema({
|
||||||
|
vol.Optional(CONF_BAUD, default=DEFAULT_BAUD): cv.string,
|
||||||
|
vol.Optional(CONF_DEVICE, default=DEFAULT_DEVICE): cv.string,
|
||||||
|
}),
|
||||||
|
}, extra=vol.ALLOW_EXTRA)
|
||||||
|
|
||||||
|
PLATFORM_SCHEMA = vol.Schema({
|
||||||
|
vol.Required(CONF_NAME): cv.string,
|
||||||
|
vol.Required(CONF_PIN): cv.positive_int,
|
||||||
|
vol.Optional(CONF_ADDRESS): cv.string,
|
||||||
|
}, extra=vol.ALLOW_EXTRA)
|
||||||
|
|
||||||
|
|
||||||
def setup(hass, config):
|
def setup(hass, config):
|
||||||
|
@ -101,9 +119,9 @@ def close_serial_port(*args):
|
||||||
|
|
||||||
def frame_is_relevant(entity, frame):
|
def frame_is_relevant(entity, frame):
|
||||||
"""Test whether the frame is relevant to the entity."""
|
"""Test whether the frame is relevant to the entity."""
|
||||||
if frame.get("source_addr_long") != entity.config.address:
|
if frame.get('source_addr_long') != entity.config.address:
|
||||||
return False
|
return False
|
||||||
if "samples" not in frame:
|
if 'samples' not in frame:
|
||||||
return False
|
return False
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
@ -279,7 +297,7 @@ class ZigBeeDigitalIn(Entity):
|
||||||
"""
|
"""
|
||||||
if not frame_is_relevant(self, frame):
|
if not frame_is_relevant(self, frame):
|
||||||
return
|
return
|
||||||
sample = frame["samples"].pop()
|
sample = frame['samples'].pop()
|
||||||
pin_name = DIGITAL_PINS[self._config.pin]
|
pin_name = DIGITAL_PINS[self._config.pin]
|
||||||
if pin_name not in sample:
|
if pin_name not in sample:
|
||||||
# Doesn't contain information about our pin
|
# Doesn't contain information about our pin
|
||||||
|
@ -402,7 +420,7 @@ class ZigBeeAnalogIn(Entity):
|
||||||
"""
|
"""
|
||||||
if not frame_is_relevant(self, frame):
|
if not frame_is_relevant(self, frame):
|
||||||
return
|
return
|
||||||
sample = frame["samples"].pop()
|
sample = frame['samples'].pop()
|
||||||
pin_name = ANALOG_PINS[self._config.pin]
|
pin_name = ANALOG_PINS[self._config.pin]
|
||||||
if pin_name not in sample:
|
if pin_name not in sample:
|
||||||
# Doesn't contain information about our pin
|
# Doesn't contain information about our pin
|
||||||
|
|
Loading…
Reference in New Issue