From a3971d7ad163f20e087b5e50cf6e210840b1e6cf Mon Sep 17 00:00:00 2001 From: "Craig J. Ward" Date: Sun, 8 Jan 2017 17:33:35 -0600 Subject: [PATCH] Insteon local (#5088) * platform set-up begin components * lights seem to be getting set up properly, not sure why they aren't being added... * typo * Dependencies line * toggle working * toggle working * added the switch to insteon_local First commit hope to test tonight or in the morning * Update insteon_local.py * Update insteon_local.py * Update insteon_local.py * Update insteon_local.py * Update insteon_local.py * Update insteon_local.py * Update insteon_local.py * Update insteon_local.py * Update insteon_local.py * Update insteon_local.py * Update insteon_local.py * move dependency declaration before import? * Move dependencies in Switch * Update insteon_local.py * wait for response * switched the while to an if switched the while 'cmd2' not in resp: to an if 'cmd2' not in resp: this seems to have the updater working * Switched the while sleep loop to an if switched the wile cmd2 not ins resp to be if cmd2 not in resp seems to be working. * Update insteon_local.py * import statement Updated the import statement to import the instance of the insteon_local component not the hub Instance. * updated import and the device assignment update the import to import the instance of the insteon_local component not the hub. * more changes to support the import change * more changes to support the import change * change to hass.data and add loop logic * && * Update insteon_local.py * Update insteon_local.py * logic fixes and throttle * reduce polling time * brightness support * import util * hound fixes * requirements file * more hound fixes * newline * newline weirdness * lint fixes * more lint fixes * switch state * Update insteon_local.py * log cmd2 for debugging * assume success * remove check for none * fix comments * fix comments again * fix comments, add fixed version of lib, add support for timeout, add support for port, handle invalid login and connection problems * fix logging exception * fix hounceci-bot errors * fix hounceci-bot errors * requirements fix * unique-id changes * make dimmer off use saved ramp rate * configurator working for lights * configurator working for switches? * configurator working for switches? * include model names and fix lint errors * lint fix * fix exception order * lint fixes * fix lint errors * update to use insteon local 0.38 * fix device id * move status check to library * move status check to library * add SKU to setup * lint fixes * requirements * linting --- .coveragerc | 3 + .../www_static/images/config_insteon.png | Bin 0 -> 30851 bytes homeassistant/components/insteon_local.py | 74 +++++++ .../components/light/insteon_local.py | 191 ++++++++++++++++++ .../components/switch/insteon_local.py | 176 ++++++++++++++++ requirements_all.txt | 3 + 6 files changed, 447 insertions(+) create mode 100644 homeassistant/components/frontend/www_static/images/config_insteon.png create mode 100644 homeassistant/components/insteon_local.py create mode 100644 homeassistant/components/light/insteon_local.py create mode 100644 homeassistant/components/switch/insteon_local.py diff --git a/.coveragerc b/.coveragerc index 4957221dd94..f3c7d950965 100644 --- a/.coveragerc +++ b/.coveragerc @@ -37,6 +37,9 @@ omit = homeassistant/components/insteon_hub.py homeassistant/components/*/insteon_hub.py + homeassistant/components/insteon_local.py + homeassistant/components/*/insteon_local.py + homeassistant/components/ios.py homeassistant/components/*/ios.py diff --git a/homeassistant/components/frontend/www_static/images/config_insteon.png b/homeassistant/components/frontend/www_static/images/config_insteon.png new file mode 100644 index 0000000000000000000000000000000000000000..0039cf3d160f844e2ba2d5e2230d35997574cf3f GIT binary patch literal 30851 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 e4&C!I$o~gN^7>8zme)i80000 0 + + @property + def is_on(self): + """Return the boolean response if the node is on.""" + return self._state + + def turn_on(self, **kwargs): + """Turn device on.""" + self.node.on() + self._state = True + + def turn_off(self, **kwargs): + """Turn device off.""" + self.node.off() + self._state = False diff --git a/requirements_all.txt b/requirements_all.txt index e17c6b2c8a8..a2412504bdb 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -271,6 +271,9 @@ influxdb==3.0.0 # homeassistant.components.insteon_hub insteon_hub==0.4.5 +# homeassistant.components.insteon_local +insteonlocal==0.39 + # homeassistant.components.media_player.kodi jsonrpc-async==0.1