From 16865b82d3a85f9464302534fb7b765620b7a06b Mon Sep 17 00:00:00 2001
From: infamy <alex@pixelfactor.ca>
Date: Mon, 15 Feb 2016 15:54:07 -0800
Subject: [PATCH] initial commit of the neurio_energy sensor

---
 .../components/sensor/neurio_energy.py        | 87 +++++++++++++++++++
 requirements_all.txt                          |  3 +
 2 files changed, 90 insertions(+)
 create mode 100644 homeassistant/components/sensor/neurio_energy.py

diff --git a/homeassistant/components/sensor/neurio_energy.py b/homeassistant/components/sensor/neurio_energy.py
new file mode 100644
index 00000000000..9a2b0652789
--- /dev/null
+++ b/homeassistant/components/sensor/neurio_energy.py
@@ -0,0 +1,87 @@
+"""
+homeassistant.components.sensor.neurio_energy
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+Monitors home energy use as measured by an neurio hub using its official API.
+For more details about this platform, please refer to the documentation at
+https://home-assistant.io/components/sensor.neurio_energy/
+"""
+import logging
+import requests.exceptions
+
+from homeassistant.helpers.entity import Entity
+
+REQUIREMENTS = ['neurio==0.2.10']
+
+_LOGGER = logging.getLogger(__name__)
+
+ICON = 'mdi:flash'
+
+
+def setup_platform(hass, config, add_devices, discovery_info=None):
+    """ Sets up the Neurio sensor. """
+    api_key = config.get("api_key")
+    api_secret = config.get("api_secret")
+    sensor_id = config.get("sensor_id")
+    if not api_key and not api_secret:
+        _LOGGER.error(
+            "Configuration Error"
+            "Please make sure you have configured your api key and api secret")
+        return None
+    if not sensor_id:
+        import neurio
+        neurio_tp = neurio.TokenProvider(key=api_key, secret=api_secret)
+        neurio_client = neurio.Client(token_provider=neurio_tp)
+        user_info = neurio_client.get_user_information()
+        _LOGGER.warning('Sensor ID auto-detected, set api_sensor_id: "%s"',
+                        user_info["locations"][0]["sensors"][0]["sensorId"])
+        sensor_id = user_info["locations"][0]["sensors"][0]["sensorId"]
+    dev = []
+    dev.append(NeurioEnergy(api_key, api_secret, sensor_id))
+    add_devices(dev)
+
+
+# pylint: disable=too-many-instance-attributes
+class NeurioEnergy(Entity):
+    """ Implements an Neurio energy. """
+
+    # pylint: disable=too-many-arguments
+    def __init__(self, api_key, api_secret, sensor_id):
+        self._name = "Energy Usage"
+        self.api_key = api_key
+        self.api_secret = api_secret
+        self.sensor_id = sensor_id
+        self._state = None
+        self._unit_of_measurement = "W"
+
+    @property
+    def name(self):
+        """ Returns the name. """
+        return self._name
+
+    @property
+    def state(self):
+        """ Returns the state of the device. """
+        return self._state
+
+    @property
+    def unit_of_measurement(self):
+        """ Unit of measurement of this entity, if any. """
+        return self._unit_of_measurement
+
+    @property
+    def icon(self):
+        """ Icon to use in the frontend, if any. """
+        return ICON
+
+    def update(self):
+        """ Gets the Neurio monitor data from the web service. """
+        import neurio
+        try:
+            neurio_tp = neurio.TokenProvider(key=self.api_key,
+                                             secret=self.api_secret)
+            neurio_client = neurio.Client(token_provider=neurio_tp)
+            sample = neurio_client.get_samples_live_last(
+                sensor_id=self.sensor_id)
+            self._state = sample['consumptionPower']
+        except (requests.exceptions.RequestException, ValueError):
+            _LOGGER.warning('Could not update status for %s', self.name)
diff --git a/requirements_all.txt b/requirements_all.txt
index e4299f3e80c..e5a73bf4760 100644
--- a/requirements_all.txt
+++ b/requirements_all.txt
@@ -115,6 +115,9 @@ mficlient==0.2.2
 # homeassistant.components.discovery
 netdisco==0.5.2
 
+# homeassistant.components.sensor.neurio_energy
+neurio==0.2.10
+
 # homeassistant.components.switch.orvibo
 orvibo==1.1.1
 
-- 
GitLab