From 3fbf09e7d91620bf26200fbe1b13f308905441d0 Mon Sep 17 00:00:00 2001
From: Jesse Hills <jesserockz@gmail.com>
Date: Sun, 7 Jan 2018 09:52:31 +1300
Subject: [PATCH] Add new iGlo component (#11171)

* Add new iGlo component

* Missing comma
Add extra blank lines

* Dont change state in turn_on
Remove unused variables
Update before add

* Fixing some lint issues
---
 .coveragerc                            |   1 +
 homeassistant/components/light/iglo.py | 124 +++++++++++++++++++++++++
 requirements_all.txt                   |   3 +
 3 files changed, 128 insertions(+)
 create mode 100644 homeassistant/components/light/iglo.py

diff --git a/.coveragerc b/.coveragerc
index 93af851a736..c81186c3165 100644
--- a/.coveragerc
+++ b/.coveragerc
@@ -376,6 +376,7 @@ omit =
     homeassistant/components/light/greenwave.py
     homeassistant/components/light/hue.py
     homeassistant/components/light/hyperion.py
+    homeassistant/components/light/iglo.py
     homeassistant/components/light/lifx.py
     homeassistant/components/light/lifx_legacy.py
     homeassistant/components/light/limitlessled.py
diff --git a/homeassistant/components/light/iglo.py b/homeassistant/components/light/iglo.py
new file mode 100644
index 00000000000..eaf783b13ca
--- /dev/null
+++ b/homeassistant/components/light/iglo.py
@@ -0,0 +1,124 @@
+"""
+Support for lights under the iGlo brand.
+
+For more details about this platform, please refer to the documentation at
+https://home-assistant.io/components/light.iglo/
+"""
+import logging
+
+import voluptuous as vol
+
+from homeassistant.const import (CONF_HOST, CONF_NAME, CONF_PORT)
+from homeassistant.components.light import (
+    ATTR_BRIGHTNESS, ATTR_RGB_COLOR, ATTR_COLOR_TEMP,
+    SUPPORT_BRIGHTNESS, SUPPORT_COLOR_TEMP, SUPPORT_RGB_COLOR,
+    Light, PLATFORM_SCHEMA
+)
+
+import homeassistant.helpers.config_validation as cv
+
+REQUIREMENTS = ['iglo==1.0.0']
+
+_LOGGER = logging.getLogger(__name__)
+
+DEFAULT_NAME = 'iGlo Light'
+DEFAULT_PORT = 8080
+
+PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
+    vol.Required(CONF_HOST): cv.string,
+    vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string,
+    vol.Optional(CONF_PORT, default=DEFAULT_PORT): cv.string,
+})
+
+
+def setup_platform(hass, config, add_devices, discovery_info=None):
+    """Set up the iGlo lighs."""
+    host = config.get(CONF_HOST)
+    name = config.get(CONF_NAME)
+    port = config.get(CONF_PORT)
+    add_devices([IGloLamp(name, host, port)], True)
+
+
+class IGloLamp(Light):
+    """Representation of an iGlo light."""
+
+    def __init__(self, name, host, port):
+        """Initialize the light."""
+        from iglo import Lamp
+        self._name = name
+        self._lamp = Lamp(0, host, port)
+        self._on = True
+        self._brightness = 255
+        self._rgb = (0, 0, 0)
+        self._color_temp = 0
+
+    @property
+    def name(self):
+        """Return the name of the light."""
+        return self._name
+
+    @property
+    def brightness(self):
+        """Return the brightness of this light between 0..255."""
+        return int((self._brightness / 200.0) * 255)
+
+    @property
+    def color_temp(self):
+        """Return the color temperature."""
+        return self._color_temp
+
+    @property
+    def min_mireds(self):
+        """Return the coldest color_temp that this light supports."""
+        return 1
+
+    @property
+    def max_mireds(self):
+        """Return the warmest color_temp that this light supports."""
+        return 255
+
+    @property
+    def rgb_color(self):
+        """Return the RGB value."""
+        return self._rgb
+
+    @property
+    def supported_features(self):
+        """Flag supported features."""
+        return SUPPORT_BRIGHTNESS | SUPPORT_COLOR_TEMP | SUPPORT_RGB_COLOR
+
+    @property
+    def is_on(self):
+        """Return true if light is on."""
+        return self._on
+
+    def turn_on(self, **kwargs):
+        """Turn the light on."""
+        if not self._on:
+            self._lamp.switch(True)
+        if ATTR_BRIGHTNESS in kwargs:
+            brightness = int((kwargs[ATTR_BRIGHTNESS] / 255.0) * 200.0)
+            self._lamp.brightness(brightness)
+            return
+
+        if ATTR_RGB_COLOR in kwargs:
+            rgb = kwargs[ATTR_RGB_COLOR]
+            self._lamp.rgb(*rgb)
+            return
+
+        if ATTR_COLOR_TEMP in kwargs:
+            color_temp = 255 - kwargs[ATTR_COLOR_TEMP]
+            self._lamp.white(color_temp)
+            return
+
+    def turn_off(self, **kwargs):
+        """Turn the light off."""
+        self._lamp.switch(False)
+
+    def update(self):
+        """Update light status."""
+        state = self._lamp.state()
+        self._on = state['on']
+        self._brightness = state['brightness']
+        self._rgb = state['rgb']
+        self._color_temp = 255 - state['white']
diff --git a/requirements_all.txt b/requirements_all.txt
index 739d2a3cb24..748f8f21d28 100644
--- a/requirements_all.txt
+++ b/requirements_all.txt
@@ -392,6 +392,9 @@ https://github.com/wokar/pylgnetcast/archive/v0.2.0.zip#pylgnetcast==0.2.0
 # homeassistant.components.sensor.htu21d
 # i2csense==0.0.4
 
+# homeassistant.components.light.iglo
+iglo==1.0.0
+
 # homeassistant.components.influxdb
 # homeassistant.components.sensor.influxdb
 influxdb==4.1.1
-- 
GitLab