From 3c08a5ee6ebff7f8fee61cc559065864e301a1b0 Mon Sep 17 00:00:00 2001 From: Rohit Kabadi Date: Sat, 1 Aug 2015 12:20:29 -0700 Subject: [PATCH 1/5] Added support for temper temperature sensors --- homeassistant/components/sensor/temper.py | 50 +++++++++++++++++++++++ requirements.txt | 3 ++ 2 files changed, 53 insertions(+) create mode 100644 homeassistant/components/sensor/temper.py diff --git a/homeassistant/components/sensor/temper.py b/homeassistant/components/sensor/temper.py new file mode 100644 index 00000000000..1888ba05d3c --- /dev/null +++ b/homeassistant/components/sensor/temper.py @@ -0,0 +1,50 @@ +""" +homeassistant.components.sensor.temper +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Support for getting temperature from TEMPer devices +""" + +import logging +from homeassistant.helpers.entity import Entity + +_LOGGER = logging.getLogger(__name__) + + +# pylint: disable=unused-argument +def setup_platform(hass, config, add_devices_callback, discovery_info=None): + """ Find and return Temper sensors. """ + try: + # pylint: disable=no-name-in-module, import-error + from temperusb.temper import TemperHandler + except ImportError: + _LOGGER.error('Failed to import temperusb') + return False + + temp_unit = hass.config.temperature_unit + temper_devices = TemperHandler().get_devices() + add_devices_callback([TemperSensor(dev, temp_unit) for dev in temper_devices]) + + +class TemperSensor(Entity): + def __init__(self, temper_device, temp_unit): + self.temper_device = temper_device + self.temp_unit = temp_unit + self.current_value = None + + @property + def state(self): + """ Returns the state of the entity. """ + return self.current_value + + @property + def unit_of_measurement(self): + """ Unit of measurement of this entity, if any. """ + return self.temp_unit + + def update(self): + """ Retrieve latest state. """ + try: + self.current_value = self.temper_device.get_temperature() + except Exception: + _LOGGER.error('Failed to get temperature due to insufficient permissions') diff --git a/requirements.txt b/requirements.txt index c7a569fad33..a16eadeaeb9 100644 --- a/requirements.txt +++ b/requirements.txt @@ -79,3 +79,6 @@ PyMata==2.07a # Mysensors serial gateway pyserial>=2.7 + +# Temper sensors +https://github.com/rkabadi/temper-python/archive/master.zip From 0e153183d4b760d1124aaf2f4361130388d9ad15 Mon Sep 17 00:00:00 2001 From: Rohit Kabadi Date: Sat, 1 Aug 2015 12:46:28 -0700 Subject: [PATCH 2/5] Added name for temper, added to coveragerc, --- .coveragerc | 1 + homeassistant/components/sensor/temper.py | 16 +++++++++++++--- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/.coveragerc b/.coveragerc index 39a3dee22bf..ac312bad8c2 100644 --- a/.coveragerc +++ b/.coveragerc @@ -51,6 +51,7 @@ omit = homeassistant/components/sensor/sabnzbd.py homeassistant/components/sensor/swiss_public_transport.py homeassistant/components/sensor/systemmonitor.py + homeassistant/components/sensor/temper.py homeassistant/components/sensor/time_date.py homeassistant/components/sensor/transmission.py homeassistant/components/switch/hikvisioncam.py diff --git a/homeassistant/components/sensor/temper.py b/homeassistant/components/sensor/temper.py index 1888ba05d3c..b99ee407400 100644 --- a/homeassistant/components/sensor/temper.py +++ b/homeassistant/components/sensor/temper.py @@ -7,6 +7,7 @@ Support for getting temperature from TEMPer devices import logging from homeassistant.helpers.entity import Entity +from homeassistant.const import CONF_NAME, DEVICE_DEFAULT_NAME _LOGGER = logging.getLogger(__name__) @@ -22,15 +23,23 @@ def setup_platform(hass, config, add_devices_callback, discovery_info=None): return False temp_unit = hass.config.temperature_unit + name = config.get(CONF_NAME, DEVICE_DEFAULT_NAME) temper_devices = TemperHandler().get_devices() - add_devices_callback([TemperSensor(dev, temp_unit) for dev in temper_devices]) + add_devices_callback([TemperSensor(dev, temp_unit, name + '_' + str(idx)) + for idx, dev in enumerate(temper_devices)]) class TemperSensor(Entity): - def __init__(self, temper_device, temp_unit): + def __init__(self, temper_device, temp_unit, name): self.temper_device = temper_device self.temp_unit = temp_unit self.current_value = None + self._name = name + + @property + def name(self): + """ Returns the name of the temperature sensor. """ + return self._name @property def state(self): @@ -47,4 +56,5 @@ class TemperSensor(Entity): try: self.current_value = self.temper_device.get_temperature() except Exception: - _LOGGER.error('Failed to get temperature due to insufficient permissions') + _LOGGER.error('Failed to get temperature due to insufficient ' + 'permissions. Try running with "sudo"') From e6aabb9706fde49dd5f6417c522c0bdf728e763c Mon Sep 17 00:00:00 2001 From: Rohit Kabadi Date: Sun, 2 Aug 2015 18:51:13 -0700 Subject: [PATCH 3/5] Fixed flake8 violations --- homeassistant/components/sensor/temper.py | 3 ++- requirements.txt | 3 +++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/sensor/temper.py b/homeassistant/components/sensor/temper.py index b99ee407400..ab95ab70793 100644 --- a/homeassistant/components/sensor/temper.py +++ b/homeassistant/components/sensor/temper.py @@ -30,6 +30,7 @@ def setup_platform(hass, config, add_devices_callback, discovery_info=None): class TemperSensor(Entity): + """ Represents an Temper temperature sensor within Home Assistant. """ def __init__(self, temper_device, temp_unit, name): self.temper_device = temper_device self.temp_unit = temp_unit @@ -55,6 +56,6 @@ class TemperSensor(Entity): """ Retrieve latest state. """ try: self.current_value = self.temper_device.get_temperature() - except Exception: + except IOError: _LOGGER.error('Failed to get temperature due to insufficient ' 'permissions. Try running with "sudo"') diff --git a/requirements.txt b/requirements.txt index f0f49e5a248..7d8e7839d68 100644 --- a/requirements.txt +++ b/requirements.txt @@ -91,3 +91,6 @@ pywemo>=0.1 # Wink (*.wink) https://github.com/balloob/python-wink/archive/master.zip#pywink>=0.1 + +# Temper sensors +https://github.com/rkabadi/temper-python/archive/master.zip \ No newline at end of file From 6c6ae9cb1af9c49375ee8df751fa52f7a654d88e Mon Sep 17 00:00:00 2001 From: Rohit Kabadi Date: Sun, 2 Aug 2015 18:55:30 -0700 Subject: [PATCH 4/5] Added REQUIREMENTS list to temper.py --- homeassistant/components/sensor/temper.py | 1 + 1 file changed, 1 insertion(+) diff --git a/homeassistant/components/sensor/temper.py b/homeassistant/components/sensor/temper.py index ab95ab70793..c881ce801ce 100644 --- a/homeassistant/components/sensor/temper.py +++ b/homeassistant/components/sensor/temper.py @@ -11,6 +11,7 @@ from homeassistant.const import CONF_NAME, DEVICE_DEFAULT_NAME _LOGGER = logging.getLogger(__name__) +REQUIREMENTS = ['https://github.com/rkabadi/temper-python/archive/master.zip'] # pylint: disable=unused-argument def setup_platform(hass, config, add_devices_callback, discovery_info=None): From 65d32c742559cf9b52eed3989fa12af2d42a154f Mon Sep 17 00:00:00 2001 From: Rohit Kabadi Date: Sun, 2 Aug 2015 18:58:30 -0700 Subject: [PATCH 5/5] Added blank line to temper.py --- homeassistant/components/sensor/temper.py | 1 + 1 file changed, 1 insertion(+) diff --git a/homeassistant/components/sensor/temper.py b/homeassistant/components/sensor/temper.py index c881ce801ce..d52164fd0e1 100644 --- a/homeassistant/components/sensor/temper.py +++ b/homeassistant/components/sensor/temper.py @@ -13,6 +13,7 @@ _LOGGER = logging.getLogger(__name__) REQUIREMENTS = ['https://github.com/rkabadi/temper-python/archive/master.zip'] + # pylint: disable=unused-argument def setup_platform(hass, config, add_devices_callback, discovery_info=None): """ Find and return Temper sensors. """