From 93e3596e5a2fbb47e416c5451f6c048795aabf26 Mon Sep 17 00:00:00 2001 From: Glenn Waters Date: Wed, 10 Oct 2018 13:05:19 -0400 Subject: [PATCH] Add Elk-M1 switch and scene platforms (#17256) * Add Elk-M1 switch platform. * Fix travis error. * Fix very annoying lint error. * Fix PR comments. * Fix comment. * Fix lint errors. * Fix PR comments. * Fix PR Apologize. Going too fast. You should not have to find those. --- .../components/alarm_control_panel/elkm1.py | 2 +- homeassistant/components/elkm1/__init__.py | 6 +-- homeassistant/components/light/elkm1.py | 2 +- homeassistant/components/scene/elkm1.py | 31 ++++++++++++++ homeassistant/components/switch/elkm1.py | 40 +++++++++++++++++++ 5 files changed, 76 insertions(+), 5 deletions(-) create mode 100644 homeassistant/components/scene/elkm1.py create mode 100644 homeassistant/components/switch/elkm1.py diff --git a/homeassistant/components/alarm_control_panel/elkm1.py b/homeassistant/components/alarm_control_panel/elkm1.py index a01898ac959..7b8d2e4ac42 100644 --- a/homeassistant/components/alarm_control_panel/elkm1.py +++ b/homeassistant/components/alarm_control_panel/elkm1.py @@ -89,7 +89,7 @@ class ElkArea(ElkEntity, alarm.AlarmControlPanel): def __init__(self, element, elk, elk_data): """Initialize Area as Alarm Control Panel.""" - super().__init__('alarm_control_panel', element, elk, elk_data) + super().__init__(element, elk, elk_data) self._changed_by_entity_id = '' self._state = None diff --git a/homeassistant/components/elkm1/__init__.py b/homeassistant/components/elkm1/__init__.py index 2dd85e02215..da322232bdf 100644 --- a/homeassistant/components/elkm1/__init__.py +++ b/homeassistant/components/elkm1/__init__.py @@ -35,7 +35,7 @@ CONF_ENABLED = 'enabled' _LOGGER = logging.getLogger(__name__) -SUPPORTED_DOMAINS = ['alarm_control_panel', 'light'] +SUPPORTED_DOMAINS = ['alarm_control_panel', 'light', 'scene', 'switch'] def _host_validator(config): @@ -157,7 +157,7 @@ def create_elk_entities(hass, elk_elements, element_type, class_, entities): class ElkEntity(Entity): """Base class for all Elk entities.""" - def __init__(self, platform, element, elk, elk_data): + def __init__(self, element, elk, elk_data): """Initialize the base of all Elk devices.""" self._elk = elk self._element = element @@ -197,7 +197,7 @@ class ElkEntity(Entity): return attrs def _element_changed(self, element, changeset): - raise NotImplementedError() + pass @callback def _element_callback(self, element, changeset): diff --git a/homeassistant/components/light/elkm1.py b/homeassistant/components/light/elkm1.py index c6cb138877b..707aedbb161 100644 --- a/homeassistant/components/light/elkm1.py +++ b/homeassistant/components/light/elkm1.py @@ -28,7 +28,7 @@ class ElkLight(ElkEntity, Light): def __init__(self, element, elk, elk_data): """Initialize light.""" - super().__init__('light', element, elk, elk_data) + super().__init__(element, elk, elk_data) self._brightness = self._element.status @property diff --git a/homeassistant/components/scene/elkm1.py b/homeassistant/components/scene/elkm1.py new file mode 100644 index 00000000000..47dd17a56ae --- /dev/null +++ b/homeassistant/components/scene/elkm1.py @@ -0,0 +1,31 @@ +""" +Support for control of ElkM1 tasks ("macros"). + +For more details about this platform, please refer to the documentation at +https://home-assistant.io/components/scene.elkm1/ +""" + + +from homeassistant.components.elkm1 import ( + DOMAIN as ELK_DOMAIN, ElkEntity, create_elk_entities) +from homeassistant.components.scene import Scene + +DEPENDENCIES = [ELK_DOMAIN] + + +async def async_setup_platform(hass, config, async_add_entities, + discovery_info=None): + """Create the Elk-M1 scene platform.""" + if discovery_info is None: + return + elk = hass.data[ELK_DOMAIN]['elk'] + entities = create_elk_entities(hass, elk.tasks, 'task', ElkTask, []) + async_add_entities(entities, True) + + +class ElkTask(ElkEntity, Scene): + """Elk-M1 task as scene.""" + + async def async_activate(self): + """Activate the task.""" + self._element.activate() diff --git a/homeassistant/components/switch/elkm1.py b/homeassistant/components/switch/elkm1.py new file mode 100644 index 00000000000..a838e1b948e --- /dev/null +++ b/homeassistant/components/switch/elkm1.py @@ -0,0 +1,40 @@ +""" +Support for control of ElkM1 outputs (relays). + +For more details about this platform, please refer to the documentation at +https://home-assistant.io/components/switch.elkm1/ +""" + + +from homeassistant.components.elkm1 import ( + DOMAIN as ELK_DOMAIN, ElkEntity, create_elk_entities) +from homeassistant.components.switch import SwitchDevice + +DEPENDENCIES = [ELK_DOMAIN] + + +async def async_setup_platform(hass, config, async_add_entities, + discovery_info=None): + """Create the Elk-M1 switch platform.""" + if discovery_info is None: + return + elk = hass.data[ELK_DOMAIN]['elk'] + entities = create_elk_entities(hass, elk.outputs, 'output', ElkOutput, []) + async_add_entities(entities, True) + + +class ElkOutput(ElkEntity, SwitchDevice): + """Elk output as switch.""" + + @property + def is_on(self) -> bool: + """Get the current output status.""" + return self._element.output_on + + async def async_turn_on(self, **kwargs): + """Turn on the output.""" + self._element.turn_on(0) + + async def async_turn_off(self, **kwargs): + """Turn off the output.""" + self._element.turn_off()