Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 26 additions & 13 deletions homeassistant/components/light/rflink.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,16 @@
from homeassistant.components.light import (
ATTR_BRIGHTNESS, SUPPORT_BRIGHTNESS, Light)
from homeassistant.components.rflink import (
CONF_ALIASSES, CONF_AUTOMATIC_ADD, CONF_DEVICE_DEFAULTS, CONF_DEVICES,
CONF_FIRE_EVENT, CONF_GROUP, CONF_GROUP_ALIASSES, CONF_IGNORE_DEVICES,
CONF_ALIASES, CONF_ALIASSES, CONF_AUTOMATIC_ADD, CONF_DEVICE_DEFAULTS,
CONF_DEVICES, CONF_FIRE_EVENT, CONF_GROUP, CONF_GROUP_ALIASES,
CONF_GROUP_ALIASSES, CONF_IGNORE_DEVICES, CONF_NOGROUP_ALIASES,
CONF_NOGROUP_ALIASSES, CONF_SIGNAL_REPETITIONS, DATA_DEVICE_REGISTER,
DATA_ENTITY_GROUP_LOOKUP, DATA_ENTITY_LOOKUP, DEVICE_DEFAULTS_SCHEMA,
DOMAIN, EVENT_KEY_COMMAND, EVENT_KEY_ID, SwitchableRflinkDevice, cv, vol)
DOMAIN, EVENT_KEY_COMMAND, EVENT_KEY_ID, SwitchableRflinkDevice, cv,
remove_deprecated, vol)
from homeassistant.const import (
CONF_NAME, CONF_PLATFORM, CONF_TYPE, STATE_UNKNOWN)
from homeassistant.helpers.deprecation import get_deprecated

DEPENDENCIES = ['rflink']

Expand All @@ -39,15 +42,22 @@
vol.Optional(CONF_TYPE):
vol.Any(TYPE_DIMMABLE, TYPE_SWITCHABLE,
TYPE_HYBRID, TYPE_TOGGLE),
vol.Optional(CONF_ALIASSES, default=[]):
vol.Optional(CONF_ALIASES, default=[]):
vol.All(cv.ensure_list, [cv.string]),
vol.Optional(CONF_GROUP_ALIASSES, default=[]):
vol.Optional(CONF_GROUP_ALIASES, default=[]):
vol.All(cv.ensure_list, [cv.string]),
vol.Optional(CONF_NOGROUP_ALIASSES, default=[]):
vol.Optional(CONF_NOGROUP_ALIASES, default=[]):
vol.All(cv.ensure_list, [cv.string]),
vol.Optional(CONF_FIRE_EVENT, default=False): cv.boolean,
vol.Optional(CONF_SIGNAL_REPETITIONS): vol.Coerce(int),
vol.Optional(CONF_GROUP, default=True): cv.boolean,
# deprecated config options
vol.Optional(CONF_ALIASSES):
vol.All(cv.ensure_list, [cv.string]),
vol.Optional(CONF_GROUP_ALIASSES):
vol.All(cv.ensure_list, [cv.string]),
vol.Optional(CONF_NOGROUP_ALIASSES):
vol.All(cv.ensure_list, [cv.string]),
},
}),
})
Expand Down Expand Up @@ -103,6 +113,7 @@ def devices_from_config(domain_config, hass=None):
entity_class = entity_class_for_type(entity_type)

device_config = dict(domain_config[CONF_DEVICE_DEFAULTS], **config)
remove_deprecated(device_config)

is_hybrid = entity_class is HybridRflinkLight

Expand All @@ -117,25 +128,27 @@ def devices_from_config(domain_config, hass=None):
device = entity_class(device_id, hass, **device_config)
devices.append(device)

# Register entity (and aliasses) to listen to incoming rflink events
# Register entity (and aliases) to listen to incoming rflink events

# Device id and normal aliasses respond to normal and group command
# Device id and normal aliases respond to normal and group command
hass.data[DATA_ENTITY_LOOKUP][
EVENT_KEY_COMMAND][device_id].append(device)
if config[CONF_GROUP]:
hass.data[DATA_ENTITY_GROUP_LOOKUP][
EVENT_KEY_COMMAND][device_id].append(device)
for _id in config[CONF_ALIASSES]:
for _id in get_deprecated(config, CONF_ALIASES, CONF_ALIASSES):
hass.data[DATA_ENTITY_LOOKUP][
EVENT_KEY_COMMAND][_id].append(device)
hass.data[DATA_ENTITY_GROUP_LOOKUP][
EVENT_KEY_COMMAND][_id].append(device)
# group_aliasses only respond to group commands
for _id in config[CONF_GROUP_ALIASSES]:
# group_aliases only respond to group commands
for _id in get_deprecated(
config, CONF_GROUP_ALIASES, CONF_GROUP_ALIASSES):
hass.data[DATA_ENTITY_GROUP_LOOKUP][
EVENT_KEY_COMMAND][_id].append(device)
# nogroup_aliasses only respond to normal commands
for _id in config[CONF_NOGROUP_ALIASSES]:
# nogroup_aliases only respond to normal commands
for _id in get_deprecated(
config, CONF_NOGROUP_ALIASES, CONF_NOGROUP_ALIASSES):
hass.data[DATA_ENTITY_LOOKUP][
EVENT_KEY_COMMAND][_id].append(device)

Expand Down
32 changes: 28 additions & 4 deletions homeassistant/components/rflink.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,15 @@
import logging

import async_timeout
import voluptuous as vol
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

According to PEP8 this position is ok.


from homeassistant.const import (
ATTR_ENTITY_ID, CONF_HOST, CONF_PORT, EVENT_HOMEASSISTANT_STOP,
STATE_UNKNOWN)
from homeassistant.core import CoreState, callback
from homeassistant.exceptions import HomeAssistantError
import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.deprecation import get_deprecated
from homeassistant.helpers.entity import Entity
import voluptuous as vol

REQUIREMENTS = ['rflink==0.0.34']

Expand All @@ -27,9 +27,12 @@
ATTR_EVENT = 'event'
ATTR_STATE = 'state'

CONF_ALIASES = 'aliases'
CONF_ALIASSES = 'aliasses'
CONF_GROUP_ALIASES = 'group_aliases'
CONF_GROUP_ALIASSES = 'group_aliasses'
CONF_GROUP = 'group'
CONF_NOGROUP_ALIASES = 'nogroup_aliases'
CONF_NOGROUP_ALIASSES = 'nogroup_aliasses'
CONF_DEVICE_DEFAULTS = 'device_defaults'
CONF_DEVICES = 'devices'
Expand Down Expand Up @@ -220,8 +223,8 @@ class RflinkDevice(Entity):
platform = None
_state = STATE_UNKNOWN

def __init__(self, device_id, hass, name=None, aliasses=None, group=True,
group_aliasses=None, nogroup_aliasses=None, fire_event=False,
def __init__(self, device_id, hass, name=None, aliases=None, group=True,
group_aliases=None, nogroup_aliases=None, fire_event=False,
signal_repetitions=DEFAULT_SIGNAL_REPETITIONS):
"""Initialize the device."""
self.hass = hass
Expand Down Expand Up @@ -399,3 +402,24 @@ def async_turn_on(self, **kwargs):
def async_turn_off(self, **kwargs):
"""Turn the device off."""
return self._async_handle_command("turn_off")


DEPRECATED_CONFIG_OPTIONS = [
CONF_ALIASSES,
CONF_GROUP_ALIASSES,
CONF_NOGROUP_ALIASSES]
REPLACEMENT_CONFIG_OPTIONS = [
CONF_ALIASES,
CONF_GROUP_ALIASES,
CONF_NOGROUP_ALIASES]


def remove_deprecated(config):
"""Remove deprecated config options from device config."""
for index, deprecated_option in enumerate(DEPRECATED_CONFIG_OPTIONS):
if deprecated_option in config:
replacement_option = REPLACEMENT_CONFIG_OPTIONS[index]
# generate deprecation warning
get_deprecated(config, replacement_option, deprecated_option)
# remove old config value replacing new one
config[replacement_option] = config.pop(deprecated_option)
12 changes: 8 additions & 4 deletions homeassistant/components/sensor/rflink.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,9 @@
import logging

from homeassistant.components.rflink import (
CONF_ALIASSES, CONF_AUTOMATIC_ADD, CONF_DEVICES, DATA_DEVICE_REGISTER,
DATA_ENTITY_LOOKUP, DOMAIN, EVENT_KEY_ID, EVENT_KEY_SENSOR, EVENT_KEY_UNIT,
RflinkDevice, cv, vol)
CONF_ALIASES, CONF_ALIASSES, CONF_AUTOMATIC_ADD, CONF_DEVICES,
DATA_DEVICE_REGISTER, DATA_ENTITY_LOOKUP, DOMAIN, EVENT_KEY_ID,
EVENT_KEY_SENSOR, EVENT_KEY_UNIT, RflinkDevice, cv, remove_deprecated, vol)
from homeassistant.const import (
ATTR_UNIT_OF_MEASUREMENT, CONF_NAME, CONF_PLATFORM,
CONF_UNIT_OF_MEASUREMENT)
Expand All @@ -36,7 +36,10 @@
vol.Optional(CONF_NAME): cv.string,
vol.Required(CONF_SENSOR_TYPE): cv.string,
vol.Optional(CONF_UNIT_OF_MEASUREMENT, default=None): cv.string,
vol.Optional(CONF_ALIASSES, default=[]):
vol.Optional(CONF_ALIASES, default=[]):
vol.All(cv.ensure_list, [cv.string]),
# deprecated config options
vol.Optional(CONF_ALIASSES):
vol.All(cv.ensure_list, [cv.string]),
},
}),
Expand All @@ -61,6 +64,7 @@ def devices_from_config(domain_config, hass=None):
if not config[ATTR_UNIT_OF_MEASUREMENT]:
config[ATTR_UNIT_OF_MEASUREMENT] = lookup_unit_for_sensor_type(
config[CONF_SENSOR_TYPE])
remove_deprecated(config)
device = RflinkSensor(device_id, hass, **config)
devices.append(device)

Expand Down
42 changes: 27 additions & 15 deletions homeassistant/components/switch/rflink.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,15 @@
import logging

from homeassistant.components.rflink import (
CONF_ALIASSES, CONF_DEVICE_DEFAULTS, CONF_DEVICES, CONF_FIRE_EVENT,
CONF_GROUP, CONF_GROUP_ALIASSES, CONF_NOGROUP_ALIASSES,
CONF_SIGNAL_REPETITIONS, DATA_ENTITY_GROUP_LOOKUP, DATA_ENTITY_LOOKUP,
DEVICE_DEFAULTS_SCHEMA, DOMAIN, EVENT_KEY_COMMAND, SwitchableRflinkDevice,
cv, vol)
CONF_ALIASES, CONF_ALIASSES, CONF_DEVICE_DEFAULTS, CONF_DEVICES,
CONF_FIRE_EVENT, CONF_GROUP, CONF_GROUP_ALIASES, CONF_GROUP_ALIASSES,
CONF_NOGROUP_ALIASES, CONF_NOGROUP_ALIASSES, CONF_SIGNAL_REPETITIONS,
DATA_ENTITY_GROUP_LOOKUP, DATA_ENTITY_LOOKUP, DEVICE_DEFAULTS_SCHEMA,
DOMAIN, EVENT_KEY_COMMAND, SwitchableRflinkDevice, cv, remove_deprecated,
vol)
from homeassistant.components.switch import SwitchDevice
from homeassistant.const import CONF_NAME, CONF_PLATFORM
from homeassistant.helpers.deprecation import get_deprecated

DEPENDENCIES = ['rflink']

Expand All @@ -27,15 +29,22 @@
vol.Optional(CONF_DEVICES, default={}): vol.Schema({
cv.string: {
vol.Optional(CONF_NAME): cv.string,
vol.Optional(CONF_ALIASSES, default=[]):
vol.Optional(CONF_ALIASES, default=[]):
vol.All(cv.ensure_list, [cv.string]),
vol.Optional(CONF_GROUP_ALIASSES, default=[]):
vol.Optional(CONF_GROUP_ALIASES, default=[]):
vol.All(cv.ensure_list, [cv.string]),
vol.Optional(CONF_NOGROUP_ALIASSES, default=[]):
vol.Optional(CONF_NOGROUP_ALIASES, default=[]):
vol.All(cv.ensure_list, [cv.string]),
vol.Optional(CONF_FIRE_EVENT, default=False): cv.boolean,
vol.Optional(CONF_SIGNAL_REPETITIONS): vol.Coerce(int),
vol.Optional(CONF_GROUP, default=True): cv.boolean,
# deprecated config options
vol.Optional(CONF_ALIASSES):
vol.All(cv.ensure_list, [cv.string]),
vol.Optional(CONF_GROUP_ALIASSES):
vol.All(cv.ensure_list, [cv.string]),
vol.Optional(CONF_NOGROUP_ALIASSES):
vol.All(cv.ensure_list, [cv.string]),
},
}),
})
Expand All @@ -46,27 +55,30 @@ def devices_from_config(domain_config, hass=None):
devices = []
for device_id, config in domain_config[CONF_DEVICES].items():
device_config = dict(domain_config[CONF_DEVICE_DEFAULTS], **config)
remove_deprecated(device_config)
device = RflinkSwitch(device_id, hass, **device_config)
devices.append(device)

# Register entity (and aliasses) to listen to incoming rflink events
# Device id and normal aliasses respond to normal and group command
# Register entity (and aliases) to listen to incoming rflink events
# Device id and normal aliases respond to normal and group command
hass.data[DATA_ENTITY_LOOKUP][
EVENT_KEY_COMMAND][device_id].append(device)
if config[CONF_GROUP]:
hass.data[DATA_ENTITY_GROUP_LOOKUP][
EVENT_KEY_COMMAND][device_id].append(device)
for _id in config[CONF_ALIASSES]:
for _id in get_deprecated(config, CONF_ALIASES, CONF_ALIASSES):
hass.data[DATA_ENTITY_LOOKUP][
EVENT_KEY_COMMAND][_id].append(device)
hass.data[DATA_ENTITY_GROUP_LOOKUP][
EVENT_KEY_COMMAND][_id].append(device)
# group_aliasses only respond to group commands
for _id in config[CONF_GROUP_ALIASSES]:
# group_aliases only respond to group commands
for _id in get_deprecated(
config, CONF_GROUP_ALIASES, CONF_GROUP_ALIASSES):
hass.data[DATA_ENTITY_GROUP_LOOKUP][
EVENT_KEY_COMMAND][_id].append(device)
# nogroup_aliasses only respond to normal commands
for _id in config[CONF_NOGROUP_ALIASSES]:
# nogroup_aliases only respond to normal commands
for _id in get_deprecated(
config, CONF_NOGROUP_ALIASES, CONF_NOGROUP_ALIASSES):
hass.data[DATA_ENTITY_LOOKUP][
EVENT_KEY_COMMAND][_id].append(device)

Expand Down
12 changes: 6 additions & 6 deletions tests/components/light/test_rflink.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
'devices': {
'protocol_0_0': {
'name': 'test',
'aliasses': ['test_alias_0_0'],
'aliases': ['test_alias_0_0'],
},
'dimmable_0_0': {
'name': 'dim_test',
Expand Down Expand Up @@ -58,7 +58,7 @@ def test_default_setup(hass, monkeypatch):
assert light_initial.attributes['assumed_state']

# light should follow state of the hardware device by interpreting
# incoming events for its name and aliasses
# incoming events for its name and aliases

# mock incoming command event for this device
event_callback({
Expand Down Expand Up @@ -100,7 +100,7 @@ def test_default_setup(hass, monkeypatch):

assert hass.states.get(DOMAIN + '.test').state == 'off'

# test following aliasses
# test following aliases
# mock incoming command event for this device alias
event_callback({
'id': 'test_alias_0_0',
Expand Down Expand Up @@ -185,7 +185,7 @@ def test_firing_bus_event(hass, monkeypatch):
'devices': {
'protocol_0_0': {
'name': 'test',
'aliasses': ['test_alias_0_0'],
'aliases': ['test_alias_0_0'],
'fire_event': True,
},
},
Expand Down Expand Up @@ -418,7 +418,7 @@ def test_group_alias(hass, monkeypatch):
'devices': {
'protocol_0_0': {
'name': 'test',
'group_aliasses': ['test_group_0_0'],
'group_aliases': ['test_group_0_0'],
},
},
},
Expand Down Expand Up @@ -461,7 +461,7 @@ def test_nogroup_alias(hass, monkeypatch):
'devices': {
'protocol_0_0': {
'name': 'test',
'nogroup_aliasses': ['test_nogroup_0_0'],
'nogroup_aliases': ['test_nogroup_0_0'],
},
},
},
Expand Down
10 changes: 5 additions & 5 deletions tests/components/switch/test_rflink.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
'devices': {
'protocol_0_0': {
'name': 'test',
'aliasses': ['test_alias_0_0'],
'aliases': ['test_alias_0_0'],
},
},
},
Expand All @@ -47,7 +47,7 @@ def test_default_setup(hass, monkeypatch):
assert switch_initial.attributes['assumed_state']

# switch should follow state of the hardware device by interpreting
# incoming events for its name and aliasses
# incoming events for its name and aliases

# mock incoming command event for this device
event_callback({
Expand All @@ -70,7 +70,7 @@ def test_default_setup(hass, monkeypatch):

assert hass.states.get('switch.test').state == 'off'

# test following aliasses
# test following aliases
# mock incoming command event for this device alias
event_callback({
'id': 'test_alias_0_0',
Expand Down Expand Up @@ -112,7 +112,7 @@ def test_group_alias(hass, monkeypatch):
'devices': {
'protocol_0_0': {
'name': 'test',
'group_aliasses': ['test_group_0_0'],
'group_aliases': ['test_group_0_0'],
},
},
},
Expand Down Expand Up @@ -155,7 +155,7 @@ def test_nogroup_alias(hass, monkeypatch):
'devices': {
'protocol_0_0': {
'name': 'test',
'nogroup_aliasses': ['test_nogroup_0_0'],
'nogroup_aliases': ['test_nogroup_0_0'],
},
},
},
Expand Down
4 changes: 2 additions & 2 deletions tests/components/test_rflink.py
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ def test_send_no_wait(hass, monkeypatch):
'devices': {
'protocol_0_0': {
'name': 'test',
'aliasses': ['test_alias_0_0'],
'aliases': ['test_alias_0_0'],
},
},
},
Expand Down Expand Up @@ -192,7 +192,7 @@ def test_error_when_not_connected(hass, monkeypatch):
'devices': {
'protocol_0_0': {
'name': 'test',
'aliasses': ['test_alias_0_0'],
'aliases': ['test_alias_0_0'],
},
},
},
Expand Down