137 lines
3.6 KiB
Python
137 lines
3.6 KiB
Python
"""Support for Proliphix NT10e Thermostats."""
|
|
import proliphix
|
|
import voluptuous as vol
|
|
|
|
from homeassistant.components.climate import PLATFORM_SCHEMA, ClimateEntity
|
|
from homeassistant.components.climate.const import (
|
|
CURRENT_HVAC_COOL,
|
|
CURRENT_HVAC_HEAT,
|
|
CURRENT_HVAC_IDLE,
|
|
CURRENT_HVAC_OFF,
|
|
HVAC_MODE_COOL,
|
|
HVAC_MODE_HEAT,
|
|
HVAC_MODE_OFF,
|
|
SUPPORT_TARGET_TEMPERATURE,
|
|
)
|
|
from homeassistant.const import (
|
|
ATTR_TEMPERATURE,
|
|
CONF_HOST,
|
|
CONF_PASSWORD,
|
|
CONF_USERNAME,
|
|
PRECISION_TENTHS,
|
|
TEMP_FAHRENHEIT,
|
|
)
|
|
import homeassistant.helpers.config_validation as cv
|
|
|
|
ATTR_FAN = "fan"
|
|
|
|
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(
|
|
{
|
|
vol.Required(CONF_HOST): cv.string,
|
|
vol.Required(CONF_USERNAME): cv.string,
|
|
vol.Required(CONF_PASSWORD): cv.string,
|
|
}
|
|
)
|
|
|
|
|
|
def setup_platform(hass, config, add_entities, discovery_info=None):
|
|
"""Set up the Proliphix thermostats."""
|
|
username = config.get(CONF_USERNAME)
|
|
password = config.get(CONF_PASSWORD)
|
|
host = config.get(CONF_HOST)
|
|
|
|
pdp = proliphix.PDP(host, username, password)
|
|
pdp.update()
|
|
|
|
add_entities([ProliphixThermostat(pdp)], True)
|
|
|
|
|
|
class ProliphixThermostat(ClimateEntity):
|
|
"""Representation a Proliphix thermostat."""
|
|
|
|
def __init__(self, pdp):
|
|
"""Initialize the thermostat."""
|
|
self._pdp = pdp
|
|
self._name = None
|
|
|
|
@property
|
|
def supported_features(self):
|
|
"""Return the list of supported features."""
|
|
return SUPPORT_TARGET_TEMPERATURE
|
|
|
|
@property
|
|
def should_poll(self):
|
|
"""Set up polling needed for thermostat."""
|
|
return True
|
|
|
|
def update(self):
|
|
"""Update the data from the thermostat."""
|
|
self._pdp.update()
|
|
self._name = self._pdp.name
|
|
|
|
@property
|
|
def name(self):
|
|
"""Return the name of the thermostat."""
|
|
return self._name
|
|
|
|
@property
|
|
def precision(self):
|
|
"""Return the precision of the system.
|
|
|
|
Proliphix temperature values are passed back and forth in the
|
|
API as tenths of degrees F (i.e. 690 for 69 degrees).
|
|
"""
|
|
return PRECISION_TENTHS
|
|
|
|
@property
|
|
def extra_state_attributes(self):
|
|
"""Return the device specific state attributes."""
|
|
return {ATTR_FAN: self._pdp.fan_state}
|
|
|
|
@property
|
|
def temperature_unit(self):
|
|
"""Return the unit of measurement."""
|
|
return TEMP_FAHRENHEIT
|
|
|
|
@property
|
|
def current_temperature(self):
|
|
"""Return the current temperature."""
|
|
return self._pdp.cur_temp
|
|
|
|
@property
|
|
def target_temperature(self):
|
|
"""Return the temperature we try to reach."""
|
|
return self._pdp.setback
|
|
|
|
@property
|
|
def hvac_action(self):
|
|
"""Return the current state of the thermostat."""
|
|
state = self._pdp.hvac_state
|
|
if state == 1:
|
|
return CURRENT_HVAC_OFF
|
|
if state in (3, 4, 5):
|
|
return CURRENT_HVAC_HEAT
|
|
if state in (6, 7):
|
|
return CURRENT_HVAC_COOL
|
|
return CURRENT_HVAC_IDLE
|
|
|
|
@property
|
|
def hvac_mode(self):
|
|
"""Return the current state of the thermostat."""
|
|
if self._pdp.is_heating:
|
|
return HVAC_MODE_HEAT
|
|
if self._pdp.is_cooling:
|
|
return HVAC_MODE_COOL
|
|
return HVAC_MODE_OFF
|
|
|
|
@property
|
|
def hvac_modes(self):
|
|
"""Return available HVAC modes."""
|
|
return []
|
|
|
|
def set_temperature(self, **kwargs):
|
|
"""Set new target temperature."""
|
|
if (temperature := kwargs.get(ATTR_TEMPERATURE)) is None:
|
|
return
|
|
self._pdp.setback = temperature
|