Skip to content
Snippets Groups Projects
Commit d59b98ee authored by Dean's avatar Dean
Browse files

Added Insteon Support

parent 0acce865
No related branches found
No related tags found
No related merge requests found
......@@ -10,6 +10,9 @@ omit =
homeassistant/components/arduino.py
homeassistant/components/*/arduino.py
homeassistant/components/insteon.py
homeassistant/components/*/insteon.py
homeassistant/components/isy994.py
homeassistant/components/*/isy994.py
......
......@@ -72,3 +72,7 @@ nosetests.xml
# venv stuff
pyvenv.cfg
pip-selfcheck.json
# vimmy stuff
*.swp
*.swo
"""
homeassistant.components.light
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Support for Insteon Hub.
"""
import logging
import homeassistant.bootstrap as bootstrap
from homeassistant.helpers import validate_config
from homeassistant.loader import get_component
from homeassistant.helpers.entity import ToggleEntity
from homeassistant.const import (
CONF_USERNAME, CONF_PASSWORD, ATTR_DISCOVERED,
ATTR_SERVICE, EVENT_PLATFORM_DISCOVERED)
# The domain of your component. Should be equal to the name of your component
DOMAIN = "insteon"
# List of component names (string) your component depends upon
REQUIREMENTS = [
'insteon_hub==0.4.5'
]
API_KEY = "3eb14d15-a486-4d9e-99af-179d0e9417c11444718937.80636061"
INSTEON = None
DISCOVER_LIGHTS = "insteon.lights"
_LOGGER = logging.getLogger(__name__)
def setup(hass, config):
"""
Setup Insteon Hub component.
This will automatically import associated lights.
"""
if not validate_config(
config,
{DOMAIN: [CONF_USERNAME, CONF_PASSWORD]},
_LOGGER):
return False
import insteon
username = config[DOMAIN][CONF_USERNAME]
password = config[DOMAIN][CONF_PASSWORD]
global INSTEON
INSTEON = insteon.Insteon(username, password, API_KEY)
comp_name = 'light'
discovery = DISCOVER_LIGHTS
component = get_component(comp_name)
bootstrap.setup_component(hass, component.DOMAIN, config)
hass.bus.fire(
EVENT_PLATFORM_DISCOVERED,
{ATTR_SERVICE: discovery, ATTR_DISCOVERED: {}})
return True
class InsteonToggleDevice(ToggleEntity):
""" Abstract Class for an Insteon node. """
def __init__(self, node):
self.node = node
self._value = 0
@property
def name(self):
""" Returns the name of the node. """
return self.node.DeviceName
@property
def unique_id(self):
""" Returns the id of this insteon node. """
return self.node.DeviceID
def update(self):
""" Update state of the sensor. """
resp = self.node.send_command('get_status', wait=True)
try:
self._value = resp['response']['level']
except KeyError:
pass
@property
def is_on(self):
""" Returns boolean response if the node is on. """
return self._value != 0
def turn_on(self, **kwargs):
self.node.send_command('on')
def turn_off(self, **kwargs):
self.node.send_command('off')
......@@ -10,7 +10,8 @@ import logging
import os
import csv
from homeassistant.components import group, discovery, wink, isy994, zwave
from homeassistant.components import (
group, discovery, wink, isy994, zwave, insteon)
from homeassistant.config import load_yaml_config_file
from homeassistant.const import (
STATE_ON, SERVICE_TURN_ON, SERVICE_TURN_OFF, SERVICE_TOGGLE,
......@@ -59,6 +60,7 @@ LIGHT_PROFILES_FILE = "light_profiles.csv"
# Maps discovered services to their platforms
DISCOVERY_PLATFORMS = {
wink.DISCOVER_LIGHTS: 'wink',
insteon.DISCOVER_LIGHTS: 'insteon',
isy994.DISCOVER_LIGHTS: 'isy994',
discovery.SERVICE_HUE: 'hue',
zwave.DISCOVER_LIGHTS: 'zwave',
......
"""
homeassistant.components.light.insteon
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Support for Insteon Hub lights.
"""
from homeassistant.components.insteon import (INSTEON, InsteonToggleDevice)
def setup_platform(hass, config, add_devices, discovery_info=None):
""" Sets up the Insteon Hub light platform. """
devs = []
for device in INSTEON.devices:
if device.DeviceCategory == "Switched Lighting Control":
devs.append(InsteonToggleDevice(device))
add_devices(devs)
......@@ -39,6 +39,9 @@ pyfttt==0.3
# homeassistant.components.influxdb
influxdb==2.10.0
# homeassistant.components.insteon
insteon_hub==0.4.5
# homeassistant.components.isy994
PyISY==1.0.5
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment