diff --git a/.coveragerc b/.coveragerc index 7c21d3a6ed5..4e912e9bb36 100644 --- a/.coveragerc +++ b/.coveragerc @@ -52,6 +52,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 new file mode 100644 index 00000000000..d52164fd0e1 --- /dev/null +++ b/homeassistant/components/sensor/temper.py @@ -0,0 +1,63 @@ +""" +homeassistant.components.sensor.temper +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +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__) + +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. """ + 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 + name = config.get(CONF_NAME, DEVICE_DEFAULT_NAME) + temper_devices = TemperHandler().get_devices() + add_devices_callback([TemperSensor(dev, temp_unit, name + '_' + str(idx)) + for idx, dev in enumerate(temper_devices)]) + + +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 + 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): + """ 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 IOError: + _LOGGER.error('Failed to get temperature due to insufficient ' + 'permissions. Try running with "sudo"') diff --git a/requirements.txt b/requirements.txt index 763db9c2539..54c0f5a29f4 100644 --- a/requirements.txt +++ b/requirements.txt @@ -93,4 +93,7 @@ pywemo>=0.1 https://github.com/balloob/python-wink/archive/master.zip#pywink>=0.1 # Slack notifier -slacker>=0.6.8 \ No newline at end of file +slacker>=0.6.8 + +# Temper sensors +https://github.com/rkabadi/temper-python/archive/master.zip