mirror of
https://github.com/home-assistant/core.git
synced 2025-07-23 05:07:41 +00:00
Merge pull request #1351 from tpatja/zwave_binary_sensor
ZWave binary sensor support
This commit is contained in:
commit
92be572374
@ -12,7 +12,7 @@ import logging
|
|||||||
from homeassistant.helpers.entity_component import EntityComponent
|
from homeassistant.helpers.entity_component import EntityComponent
|
||||||
from homeassistant.helpers.entity import Entity
|
from homeassistant.helpers.entity import Entity
|
||||||
from homeassistant.const import (STATE_ON, STATE_OFF)
|
from homeassistant.const import (STATE_ON, STATE_OFF)
|
||||||
from homeassistant.components import (bloomsky, mysensors)
|
from homeassistant.components import (bloomsky, mysensors, zwave)
|
||||||
|
|
||||||
DOMAIN = 'binary_sensor'
|
DOMAIN = 'binary_sensor'
|
||||||
SCAN_INTERVAL = 30
|
SCAN_INTERVAL = 30
|
||||||
@ -34,6 +34,7 @@ SENSOR_CLASSES = [
|
|||||||
DISCOVERY_PLATFORMS = {
|
DISCOVERY_PLATFORMS = {
|
||||||
bloomsky.DISCOVER_BINARY_SENSORS: 'bloomsky',
|
bloomsky.DISCOVER_BINARY_SENSORS: 'bloomsky',
|
||||||
mysensors.DISCOVER_BINARY_SENSORS: 'mysensors',
|
mysensors.DISCOVER_BINARY_SENSORS: 'mysensors',
|
||||||
|
zwave.DISCOVER_BINARY_SENSORS: 'zwave',
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
70
homeassistant/components/binary_sensor/zwave.py
Normal file
70
homeassistant/components/binary_sensor/zwave.py
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
"""
|
||||||
|
homeassistant.components.binary_sensor.zwave
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
Interfaces with Z-Wave sensors.
|
||||||
|
|
||||||
|
For more details about this platform, please refer to the documentation
|
||||||
|
at https://home-assistant.io/components/zwave/
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
import logging
|
||||||
|
|
||||||
|
from homeassistant.components.zwave import (
|
||||||
|
ATTR_NODE_ID, ATTR_VALUE_ID,
|
||||||
|
COMMAND_CLASS_SENSOR_BINARY, NETWORK,
|
||||||
|
ZWaveDeviceEntity)
|
||||||
|
from homeassistant.components.binary_sensor import (
|
||||||
|
DOMAIN,
|
||||||
|
BinarySensorDevice)
|
||||||
|
|
||||||
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
DEPENDENCIES = []
|
||||||
|
|
||||||
|
|
||||||
|
def setup_platform(hass, config, add_devices, discovery_info=None):
|
||||||
|
"""Setup the mysensors platform for sensors."""
|
||||||
|
|
||||||
|
if discovery_info is None or NETWORK is None:
|
||||||
|
return
|
||||||
|
|
||||||
|
node = NETWORK.nodes[discovery_info[ATTR_NODE_ID]]
|
||||||
|
value = node.values[discovery_info[ATTR_VALUE_ID]]
|
||||||
|
|
||||||
|
value.set_change_verified(False)
|
||||||
|
if value.command_class == COMMAND_CLASS_SENSOR_BINARY:
|
||||||
|
add_devices([ZWaveBinarySensor(value, "opening")])
|
||||||
|
|
||||||
|
|
||||||
|
class ZWaveBinarySensor(BinarySensorDevice, ZWaveDeviceEntity):
|
||||||
|
""" Represents a binary sensor within Z-Wave. """
|
||||||
|
|
||||||
|
def __init__(self, value, sensor_class):
|
||||||
|
self._sensor_type = sensor_class
|
||||||
|
# pylint: disable=import-error
|
||||||
|
from openzwave.network import ZWaveNetwork
|
||||||
|
from pydispatch import dispatcher
|
||||||
|
|
||||||
|
ZWaveDeviceEntity.__init__(self, value, DOMAIN)
|
||||||
|
|
||||||
|
dispatcher.connect(
|
||||||
|
self.value_changed, ZWaveNetwork.SIGNAL_VALUE_CHANGED)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def is_on(self):
|
||||||
|
"""Return True if the binary sensor is on."""
|
||||||
|
return self._value.data
|
||||||
|
|
||||||
|
@property
|
||||||
|
def sensor_class(self):
|
||||||
|
"""Return the class of this sensor, from SENSOR_CLASSES."""
|
||||||
|
return self._sensor_type
|
||||||
|
|
||||||
|
@property
|
||||||
|
def should_poll(self):
|
||||||
|
return False
|
||||||
|
|
||||||
|
def value_changed(self, value):
|
||||||
|
""" Called when a value has changed on the network. """
|
||||||
|
if self._value.value_id == value.value_id:
|
||||||
|
self.update_ha_state()
|
@ -14,7 +14,7 @@ import homeassistant.util.dt as dt_util
|
|||||||
from homeassistant.components.sensor import DOMAIN
|
from homeassistant.components.sensor import DOMAIN
|
||||||
from homeassistant.components.zwave import (
|
from homeassistant.components.zwave import (
|
||||||
ATTR_NODE_ID, ATTR_VALUE_ID, COMMAND_CLASS_ALARM, COMMAND_CLASS_METER,
|
ATTR_NODE_ID, ATTR_VALUE_ID, COMMAND_CLASS_ALARM, COMMAND_CLASS_METER,
|
||||||
COMMAND_CLASS_SENSOR_BINARY, COMMAND_CLASS_SENSOR_MULTILEVEL, NETWORK,
|
COMMAND_CLASS_SENSOR_MULTILEVEL, NETWORK,
|
||||||
TYPE_DECIMAL, ZWaveDeviceEntity, get_config_value)
|
TYPE_DECIMAL, ZWaveDeviceEntity, get_config_value)
|
||||||
from homeassistant.const import (
|
from homeassistant.const import (
|
||||||
STATE_OFF, STATE_ON, TEMP_CELCIUS, TEMP_FAHRENHEIT)
|
STATE_OFF, STATE_ON, TEMP_CELCIUS, TEMP_FAHRENHEIT)
|
||||||
@ -79,9 +79,6 @@ def setup_platform(hass, config, add_devices, discovery_info=None):
|
|||||||
return
|
return
|
||||||
|
|
||||||
# generic Device mappings
|
# generic Device mappings
|
||||||
elif value.command_class == COMMAND_CLASS_SENSOR_BINARY:
|
|
||||||
add_devices([ZWaveBinarySensor(value)])
|
|
||||||
|
|
||||||
elif value.command_class == COMMAND_CLASS_SENSOR_MULTILEVEL:
|
elif value.command_class == COMMAND_CLASS_SENSOR_MULTILEVEL:
|
||||||
add_devices([ZWaveMultilevelSensor(value)])
|
add_devices([ZWaveMultilevelSensor(value)])
|
||||||
|
|
||||||
@ -120,16 +117,6 @@ class ZWaveSensor(ZWaveDeviceEntity, Entity):
|
|||||||
self.update_ha_state()
|
self.update_ha_state()
|
||||||
|
|
||||||
|
|
||||||
# pylint: disable=too-few-public-methods
|
|
||||||
class ZWaveBinarySensor(ZWaveSensor):
|
|
||||||
""" Represents a binary sensor within Z-Wave. """
|
|
||||||
|
|
||||||
@property
|
|
||||||
def state(self):
|
|
||||||
""" Returns the state of the sensor. """
|
|
||||||
return STATE_ON if self._value.data else STATE_OFF
|
|
||||||
|
|
||||||
|
|
||||||
class ZWaveTriggerSensor(ZWaveSensor):
|
class ZWaveTriggerSensor(ZWaveSensor):
|
||||||
"""
|
"""
|
||||||
Represents a stateless sensor which
|
Represents a stateless sensor which
|
||||||
|
@ -34,6 +34,7 @@ SERVICE_REMOVE_NODE = "remove_node"
|
|||||||
DISCOVER_SENSORS = "zwave.sensors"
|
DISCOVER_SENSORS = "zwave.sensors"
|
||||||
DISCOVER_SWITCHES = "zwave.switch"
|
DISCOVER_SWITCHES = "zwave.switch"
|
||||||
DISCOVER_LIGHTS = "zwave.light"
|
DISCOVER_LIGHTS = "zwave.light"
|
||||||
|
DISCOVER_BINARY_SENSORS = 'zwave.binary_sensor'
|
||||||
|
|
||||||
EVENT_SCENE_ACTIVATED = "zwave.scene_activated"
|
EVENT_SCENE_ACTIVATED = "zwave.scene_activated"
|
||||||
|
|
||||||
@ -54,13 +55,13 @@ TYPE_BYTE = "Byte"
|
|||||||
TYPE_BOOL = "Bool"
|
TYPE_BOOL = "Bool"
|
||||||
TYPE_DECIMAL = "Decimal"
|
TYPE_DECIMAL = "Decimal"
|
||||||
|
|
||||||
|
|
||||||
# list of tuple (DOMAIN, discovered service, supported command
|
# list of tuple (DOMAIN, discovered service, supported command
|
||||||
# classes, value type)
|
# classes, value type)
|
||||||
DISCOVERY_COMPONENTS = [
|
DISCOVERY_COMPONENTS = [
|
||||||
('sensor',
|
('sensor',
|
||||||
DISCOVER_SENSORS,
|
DISCOVER_SENSORS,
|
||||||
[COMMAND_CLASS_SENSOR_BINARY,
|
[COMMAND_CLASS_SENSOR_MULTILEVEL,
|
||||||
COMMAND_CLASS_SENSOR_MULTILEVEL,
|
|
||||||
COMMAND_CLASS_METER,
|
COMMAND_CLASS_METER,
|
||||||
COMMAND_CLASS_ALARM],
|
COMMAND_CLASS_ALARM],
|
||||||
TYPE_WHATEVER,
|
TYPE_WHATEVER,
|
||||||
@ -75,8 +76,14 @@ DISCOVERY_COMPONENTS = [
|
|||||||
[COMMAND_CLASS_SWITCH_BINARY],
|
[COMMAND_CLASS_SWITCH_BINARY],
|
||||||
TYPE_BOOL,
|
TYPE_BOOL,
|
||||||
GENRE_USER),
|
GENRE_USER),
|
||||||
|
('binary_sensor',
|
||||||
|
DISCOVER_BINARY_SENSORS,
|
||||||
|
[COMMAND_CLASS_SENSOR_BINARY],
|
||||||
|
TYPE_BOOL,
|
||||||
|
GENRE_USER)
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
ATTR_NODE_ID = "node_id"
|
ATTR_NODE_ID = "node_id"
|
||||||
ATTR_VALUE_ID = "value_id"
|
ATTR_VALUE_ID = "value_id"
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user