From d867366be135c1d31040ebdd6175ac48fd9716bc Mon Sep 17 00:00:00 2001 From: Sean Dague Date: Tue, 12 Jan 2016 21:15:14 -0500 Subject: [PATCH] add proliphix thermostat support The proliphix nt10e is an early network thermostat that supports an HTTP interface. This adds basic support for it to home-assistant (get / set heating setback). --- .coveragerc | 1 + .../components/thermostat/proliphix.py | 88 +++++++++++++++++++ requirements_all.txt | 3 + 3 files changed, 92 insertions(+) create mode 100644 homeassistant/components/thermostat/proliphix.py diff --git a/.coveragerc b/.coveragerc index 272ace975c44..f37af10f295b 100644 --- a/.coveragerc +++ b/.coveragerc @@ -121,6 +121,7 @@ omit = homeassistant/components/thermostat/homematic.py homeassistant/components/thermostat/honeywell.py homeassistant/components/thermostat/nest.py + homeassistant/components/thermostat/proliphix.py homeassistant/components/thermostat/radiotherm.py diff --git a/homeassistant/components/thermostat/proliphix.py b/homeassistant/components/thermostat/proliphix.py new file mode 100644 index 000000000000..d9e9dbabdeb2 --- /dev/null +++ b/homeassistant/components/thermostat/proliphix.py @@ -0,0 +1,88 @@ +"""homeassistant.components.thermostat.proliphix +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The Proliphix NT10e Thermostat is an ethernet connected thermostat. It +has a local HTTP interface that is based on get/set of OID values. A +complete collection of the API is available in this API doc: + +https://github.com/sdague/thermostat.rb/blob/master/docs/PDP_API_R1_11.pdf +""" + +from homeassistant.components.thermostat import (ThermostatDevice, STATE_COOL, + STATE_IDLE, STATE_HEAT) +from homeassistant.const import (CONF_USERNAME, CONF_PASSWORD, + CONF_HOST, TEMP_FAHRENHEIT) + +REQUIREMENTS = ['proliphix==0.1.0'] + + +def setup_platform(hass, config, add_devices, discovery_info=None): + """ Sets up the proliphix thermostats. """ + username = config.get(CONF_USERNAME) + password = config.get(CONF_PASSWORD) + host = config.get(CONF_HOST) + + import proliphix + + pdp = proliphix.PDP(host, username, password) + + add_devices([ + ProliphixThermostat(pdp) + ]) + + +class ProliphixThermostat(ThermostatDevice): + """ Represents a Proliphix thermostat. """ + + def __init__(self, pdp): + self._pdp = pdp + # initial data + self._pdp.update() + self._name = self._pdp.name + + @property + def should_poll(self): + return True + + def update(self): + self._pdp.update() + + @property + def name(self): + """ Returns the name. """ + return self._name + + @property + def device_state_attributes(self): + return { + "fan": self._pdp.fan_state + } + + @property + def unit_of_measurement(self): + """ Returns the unit of measurement. """ + return TEMP_FAHRENHEIT + + @property + def current_temperature(self): + """ Returns the current temperature. """ + return self._pdp.cur_temp + + @property + def target_temperature(self): + """ Returns the temperature we try to reach. """ + return self._pdp.setback_heat + + @property + def operation(self): + state = self._pdp.hvac_state + if state in (1, 2): + return STATE_IDLE + elif state == 3: + return STATE_HEAT + elif state == 6: + return STATE_COOL + + def set_temperature(self, temperature): + """ Set new target temperature. """ + self._pdp.setback_heat = temperature diff --git a/requirements_all.txt b/requirements_all.txt index 1bc00b4c46df..92350b3bd9e4 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -190,6 +190,9 @@ evohomeclient==0.2.4 # homeassistant.components.thermostat.nest python-nest==2.6.0 +# homeassistant.components.thermostat.proliphix +proliphix==0.1.0 + # homeassistant.components.thermostat.radiotherm radiotherm==1.2