Use constants and update ordering (#3266)
parent
44f5a66b66
commit
911231afc1
|
@ -8,20 +8,19 @@ import logging
|
||||||
|
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
import homeassistant.components.mqtt as mqtt
|
from homeassistant.components.mqtt import CONF_STATE_TOPIC, CONF_QOS
|
||||||
from homeassistant.const import (
|
from homeassistant.const import (
|
||||||
CONF_NAME, CONF_VALUE_TEMPLATE, STATE_UNKNOWN, CONF_UNIT_OF_MEASUREMENT)
|
CONF_NAME, CONF_VALUE_TEMPLATE, STATE_UNKNOWN, CONF_UNIT_OF_MEASUREMENT)
|
||||||
from homeassistant.components.mqtt import CONF_STATE_TOPIC, CONF_QOS
|
|
||||||
import homeassistant.helpers.config_validation as cv
|
|
||||||
from homeassistant.helpers.entity import Entity
|
|
||||||
from homeassistant.helpers import template
|
from homeassistant.helpers import template
|
||||||
|
from homeassistant.helpers.entity import Entity
|
||||||
|
import homeassistant.components.mqtt as mqtt
|
||||||
|
import homeassistant.helpers.config_validation as cv
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
DEFAULT_NAME = 'MQTT Sensor'
|
||||||
DEPENDENCIES = ['mqtt']
|
DEPENDENCIES = ['mqtt']
|
||||||
|
|
||||||
DEFAULT_NAME = "MQTT Sensor"
|
|
||||||
|
|
||||||
PLATFORM_SCHEMA = mqtt.MQTT_RO_PLATFORM_SCHEMA.extend({
|
PLATFORM_SCHEMA = mqtt.MQTT_RO_PLATFORM_SCHEMA.extend({
|
||||||
vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string,
|
vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string,
|
||||||
vol.Optional(CONF_UNIT_OF_MEASUREMENT): cv.string,
|
vol.Optional(CONF_UNIT_OF_MEASUREMENT): cv.string,
|
||||||
|
@ -33,9 +32,9 @@ def setup_platform(hass, config, add_devices, discovery_info=None):
|
||||||
"""Setup MQTT Sensor."""
|
"""Setup MQTT Sensor."""
|
||||||
add_devices([MqttSensor(
|
add_devices([MqttSensor(
|
||||||
hass,
|
hass,
|
||||||
config[CONF_NAME],
|
config.get(CONF_NAME),
|
||||||
config[CONF_STATE_TOPIC],
|
config.get(CONF_STATE_TOPIC),
|
||||||
config[CONF_QOS],
|
config.get(CONF_QOS),
|
||||||
config.get(CONF_UNIT_OF_MEASUREMENT),
|
config.get(CONF_UNIT_OF_MEASUREMENT),
|
||||||
config.get(CONF_VALUE_TEMPLATE),
|
config.get(CONF_VALUE_TEMPLATE),
|
||||||
)])
|
)])
|
||||||
|
|
|
@ -11,7 +11,8 @@ import voluptuous as vol
|
||||||
|
|
||||||
import homeassistant.components.mqtt as mqtt
|
import homeassistant.components.mqtt as mqtt
|
||||||
from homeassistant.components.sensor import PLATFORM_SCHEMA
|
from homeassistant.components.sensor import PLATFORM_SCHEMA
|
||||||
from homeassistant.const import CONF_NAME, STATE_UNKNOWN
|
from homeassistant.const import (
|
||||||
|
CONF_NAME, STATE_UNKNOWN, CONF_TIMEOUT)
|
||||||
from homeassistant.components.mqtt import CONF_STATE_TOPIC
|
from homeassistant.components.mqtt import CONF_STATE_TOPIC
|
||||||
import homeassistant.helpers.config_validation as cv
|
import homeassistant.helpers.config_validation as cv
|
||||||
from homeassistant.helpers.entity import Entity
|
from homeassistant.helpers.entity import Entity
|
||||||
|
@ -21,12 +22,18 @@ _LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
DEPENDENCIES = ['mqtt']
|
DEPENDENCIES = ['mqtt']
|
||||||
|
|
||||||
CONF_DEVICE_ID = 'device_id'
|
ATTR_DEVICE_ID = 'device_id'
|
||||||
CONF_TIMEOUT = 'timeout'
|
ATTR_DISTANCE = 'distance'
|
||||||
|
ATTR_ID = 'id'
|
||||||
|
ATTR_ROOM = 'room'
|
||||||
|
|
||||||
|
CONF_DEVICE_ID = 'device_id'
|
||||||
|
CONF_ROOM = 'room'
|
||||||
|
|
||||||
DEFAULT_TOPIC = 'room_presence'
|
|
||||||
DEFAULT_TIMEOUT = 5
|
|
||||||
DEFAULT_NAME = 'Room Sensor'
|
DEFAULT_NAME = 'Room Sensor'
|
||||||
|
DEFAULT_TIMEOUT = 5
|
||||||
|
DEFAULT_TOPIC = 'room_presence'
|
||||||
|
DEPENDENCIES = ['mqtt']
|
||||||
|
|
||||||
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
|
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
|
||||||
vol.Required(CONF_DEVICE_ID): cv.string,
|
vol.Required(CONF_DEVICE_ID): cv.string,
|
||||||
|
@ -36,15 +43,15 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
|
||||||
})
|
})
|
||||||
|
|
||||||
MQTT_PAYLOAD = vol.Schema(vol.All(json.loads, vol.Schema({
|
MQTT_PAYLOAD = vol.Schema(vol.All(json.loads, vol.Schema({
|
||||||
vol.Required('id'): cv.string,
|
vol.Required(ATTR_ID): cv.string,
|
||||||
vol.Required('distance'): vol.Coerce(float)
|
vol.Required(ATTR_DISTANCE): vol.Coerce(float),
|
||||||
}, extra=vol.ALLOW_EXTRA)))
|
}, extra=vol.ALLOW_EXTRA)))
|
||||||
|
|
||||||
|
|
||||||
# pylint: disable=unused-argument
|
# pylint: disable=unused-argument
|
||||||
def setup_platform(hass, config, add_devices_callback, discovery_info=None):
|
def setup_platform(hass, config, add_devices, discovery_info=None):
|
||||||
"""Setup MQTT Sensor."""
|
"""Setup MQTT Sensor."""
|
||||||
add_devices_callback([MQTTRoomSensor(
|
add_devices([MQTTRoomSensor(
|
||||||
hass,
|
hass,
|
||||||
config.get(CONF_NAME),
|
config.get(CONF_NAME),
|
||||||
config.get(CONF_STATE_TOPIC),
|
config.get(CONF_STATE_TOPIC),
|
||||||
|
@ -62,7 +69,7 @@ class MQTTRoomSensor(Entity):
|
||||||
self._state = STATE_UNKNOWN
|
self._state = STATE_UNKNOWN
|
||||||
self._hass = hass
|
self._hass = hass
|
||||||
self._name = name
|
self._name = name
|
||||||
self._state_topic = state_topic + '/+'
|
self._state_topic = '{}{}'.format(state_topic, '/+')
|
||||||
self._device_id = slugify(device_id).upper()
|
self._device_id = slugify(device_id).upper()
|
||||||
self._timeout = timeout
|
self._timeout = timeout
|
||||||
self._distance = None
|
self._distance = None
|
||||||
|
@ -86,7 +93,7 @@ class MQTTRoomSensor(Entity):
|
||||||
return
|
return
|
||||||
|
|
||||||
device = _parse_update_data(topic, data)
|
device = _parse_update_data(topic, data)
|
||||||
if device.get('device_id') == self._device_id:
|
if device.get(CONF_DEVICE_ID) == self._device_id:
|
||||||
if self._distance is None or self._updated is None:
|
if self._distance is None or self._updated is None:
|
||||||
update_state(**device)
|
update_state(**device)
|
||||||
else:
|
else:
|
||||||
|
@ -95,8 +102,8 @@ class MQTTRoomSensor(Entity):
|
||||||
# device is closer to another room OR
|
# device is closer to another room OR
|
||||||
# last update from other room was too long ago
|
# last update from other room was too long ago
|
||||||
timediff = dt.utcnow() - self._updated
|
timediff = dt.utcnow() - self._updated
|
||||||
if device.get('room') == self._state \
|
if device.get(ATTR_ROOM) == self._state \
|
||||||
or device.get('distance') < self._distance \
|
or device.get(ATTR_DISTANCE) < self._distance \
|
||||||
or timediff.seconds >= self._timeout:
|
or timediff.seconds >= self._timeout:
|
||||||
update_state(**device)
|
update_state(**device)
|
||||||
|
|
||||||
|
@ -116,7 +123,7 @@ class MQTTRoomSensor(Entity):
|
||||||
def device_state_attributes(self):
|
def device_state_attributes(self):
|
||||||
"""Return the state attributes."""
|
"""Return the state attributes."""
|
||||||
return {
|
return {
|
||||||
'distance': self._distance
|
ATTR_DISTANCE: self._distance
|
||||||
}
|
}
|
||||||
|
|
||||||
@property
|
@property
|
||||||
|
@ -129,11 +136,11 @@ def _parse_update_data(topic, data):
|
||||||
"""Parse the room presence update."""
|
"""Parse the room presence update."""
|
||||||
parts = topic.split('/')
|
parts = topic.split('/')
|
||||||
room = parts[-1]
|
room = parts[-1]
|
||||||
device_id = slugify(data.get('id')).upper()
|
device_id = slugify(data.get(ATTR_ID)).upper()
|
||||||
distance = data.get('distance')
|
distance = data.get('distance')
|
||||||
parsed_data = {
|
parsed_data = {
|
||||||
'device_id': device_id,
|
ATTR_DEVICE_ID: device_id,
|
||||||
'room': room,
|
ATTR_ROOM: room,
|
||||||
'distance': distance
|
ATTR_DISTANCE: distance
|
||||||
}
|
}
|
||||||
return parsed_data
|
return parsed_data
|
||||||
|
|
|
@ -61,6 +61,7 @@ CONF_AUTHENTICATION = 'authentication'
|
||||||
CONF_BEFORE = 'before'
|
CONF_BEFORE = 'before'
|
||||||
CONF_BELOW = 'below'
|
CONF_BELOW = 'below'
|
||||||
CONF_BLACKLIST = 'blacklist'
|
CONF_BLACKLIST = 'blacklist'
|
||||||
|
CONF_BRIGHTNESS = 'brightness'
|
||||||
CONF_CODE = 'code'
|
CONF_CODE = 'code'
|
||||||
CONF_COMMAND = 'command'
|
CONF_COMMAND = 'command'
|
||||||
CONF_COMMAND_CLOSE = 'command_close'
|
CONF_COMMAND_CLOSE = 'command_close'
|
||||||
|
@ -110,6 +111,7 @@ CONF_PREFIX = 'prefix'
|
||||||
CONF_RECIPIENT = 'recipient'
|
CONF_RECIPIENT = 'recipient'
|
||||||
CONF_RESOURCE = 'resource'
|
CONF_RESOURCE = 'resource'
|
||||||
CONF_RESOURCES = 'resources'
|
CONF_RESOURCES = 'resources'
|
||||||
|
CONF_RGB = 'rgb'
|
||||||
CONF_SCAN_INTERVAL = 'scan_interval'
|
CONF_SCAN_INTERVAL = 'scan_interval'
|
||||||
CONF_SENDER = 'sender'
|
CONF_SENDER = 'sender'
|
||||||
CONF_SENSOR_CLASS = 'sensor_class'
|
CONF_SENSOR_CLASS = 'sensor_class'
|
||||||
|
@ -120,6 +122,7 @@ CONF_STRUCTURE = 'structure'
|
||||||
CONF_SWITCHES = 'switches'
|
CONF_SWITCHES = 'switches'
|
||||||
CONF_TEMPERATURE_UNIT = 'temperature_unit'
|
CONF_TEMPERATURE_UNIT = 'temperature_unit'
|
||||||
CONF_TIME_ZONE = 'time_zone'
|
CONF_TIME_ZONE = 'time_zone'
|
||||||
|
CONF_TIMEOUT = 'timeout'
|
||||||
CONF_TOKEN = 'token'
|
CONF_TOKEN = 'token'
|
||||||
CONF_TRIGGER_TIME = 'trigger_time'
|
CONF_TRIGGER_TIME = 'trigger_time'
|
||||||
CONF_UNIT_OF_MEASUREMENT = 'unit_of_measurement'
|
CONF_UNIT_OF_MEASUREMENT = 'unit_of_measurement'
|
||||||
|
|
Loading…
Reference in New Issue