mirror of
https://github.com/home-assistant/core.git
synced 2025-08-07 06:35:10 +02:00
Merge remote-tracking branch 'upstream/dev' into nest_sensor
# Conflicts: # .coveragerc # requirements_all.txt
This commit is contained in:
@@ -5,6 +5,8 @@ omit =
|
|||||||
homeassistant/__main__.py
|
homeassistant/__main__.py
|
||||||
|
|
||||||
# omit pieces of code that rely on external devices being present
|
# omit pieces of code that rely on external devices being present
|
||||||
|
homeassistant/components/alarm_control_panel/alarmdotcom.py
|
||||||
|
|
||||||
homeassistant/components/arduino.py
|
homeassistant/components/arduino.py
|
||||||
homeassistant/components/*/arduino.py
|
homeassistant/components/*/arduino.py
|
||||||
|
|
||||||
@@ -124,6 +126,7 @@ omit =
|
|||||||
homeassistant/components/thermostat/heatmiser.py
|
homeassistant/components/thermostat/heatmiser.py
|
||||||
homeassistant/components/thermostat/homematic.py
|
homeassistant/components/thermostat/homematic.py
|
||||||
homeassistant/components/thermostat/honeywell.py
|
homeassistant/components/thermostat/honeywell.py
|
||||||
|
homeassistant/components/thermostat/proliphix.py
|
||||||
homeassistant/components/thermostat/radiotherm.py
|
homeassistant/components/thermostat/radiotherm.py
|
||||||
|
|
||||||
|
|
||||||
|
107
homeassistant/components/alarm_control_panel/alarmdotcom.py
Normal file
107
homeassistant/components/alarm_control_panel/alarmdotcom.py
Normal file
@@ -0,0 +1,107 @@
|
|||||||
|
"""
|
||||||
|
homeassistant.components.alarm_control_panel.alarmdotcom
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
Interfaces with Verisure alarm control panel.
|
||||||
|
|
||||||
|
For more details about this platform, please refer to the documentation at
|
||||||
|
https://home-assistant.io/components/alarm_control_panel.alarmdotcom/
|
||||||
|
"""
|
||||||
|
import logging
|
||||||
|
|
||||||
|
import homeassistant.components.alarm_control_panel as alarm
|
||||||
|
from homeassistant.const import CONF_USERNAME, CONF_PASSWORD
|
||||||
|
|
||||||
|
from homeassistant.const import (
|
||||||
|
STATE_UNKNOWN,
|
||||||
|
STATE_ALARM_DISARMED, STATE_ALARM_ARMED_HOME, STATE_ALARM_ARMED_AWAY)
|
||||||
|
|
||||||
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
REQUIREMENTS = ['https://github.com/Xorso/pyalarmdotcom'
|
||||||
|
'/archive/0.0.7.zip'
|
||||||
|
'#pyalarmdotcom==0.0.7']
|
||||||
|
DEFAULT_NAME = 'Alarm.com'
|
||||||
|
|
||||||
|
|
||||||
|
def setup_platform(hass, config, add_devices, discovery_info=None):
|
||||||
|
""" Setup an Alarm.com control panel. """
|
||||||
|
|
||||||
|
username = config.get(CONF_USERNAME)
|
||||||
|
password = config.get(CONF_PASSWORD)
|
||||||
|
|
||||||
|
if username is None or password is None:
|
||||||
|
_LOGGER.error('Must specify username and password!')
|
||||||
|
return False
|
||||||
|
|
||||||
|
add_devices([AlarmDotCom(hass,
|
||||||
|
config.get('name', DEFAULT_NAME),
|
||||||
|
config.get('code'),
|
||||||
|
username,
|
||||||
|
password)])
|
||||||
|
|
||||||
|
|
||||||
|
# pylint: disable=too-many-arguments, too-many-instance-attributes
|
||||||
|
# pylint: disable=abstract-method
|
||||||
|
class AlarmDotCom(alarm.AlarmControlPanel):
|
||||||
|
""" Represents a Alarm.com status. """
|
||||||
|
|
||||||
|
def __init__(self, hass, name, code, username, password):
|
||||||
|
from pyalarmdotcom.pyalarmdotcom import Alarmdotcom
|
||||||
|
self._alarm = Alarmdotcom(username, password, timeout=10)
|
||||||
|
self._hass = hass
|
||||||
|
self._name = name
|
||||||
|
self._code = str(code) if code else None
|
||||||
|
|
||||||
|
@property
|
||||||
|
def should_poll(self):
|
||||||
|
return True
|
||||||
|
|
||||||
|
@property
|
||||||
|
def name(self):
|
||||||
|
return self._name
|
||||||
|
|
||||||
|
@property
|
||||||
|
def code_format(self):
|
||||||
|
""" One or more characters if code is defined. """
|
||||||
|
return None if self._code is None else '.+'
|
||||||
|
|
||||||
|
@property
|
||||||
|
def state(self):
|
||||||
|
""" Returns the state of the device. """
|
||||||
|
if self._alarm.state == 'Disarmed':
|
||||||
|
return STATE_ALARM_DISARMED
|
||||||
|
elif self._alarm.state == 'Armed Stay':
|
||||||
|
return STATE_ALARM_ARMED_HOME
|
||||||
|
elif self._alarm.state == 'Armed Away':
|
||||||
|
return STATE_ALARM_ARMED_AWAY
|
||||||
|
else:
|
||||||
|
return STATE_UNKNOWN
|
||||||
|
|
||||||
|
def alarm_disarm(self, code=None):
|
||||||
|
""" Send disarm command. """
|
||||||
|
if not self._validate_code(code, 'arming home'):
|
||||||
|
return
|
||||||
|
self._alarm.disarm()
|
||||||
|
self.update_ha_state()
|
||||||
|
|
||||||
|
def alarm_arm_home(self, code=None):
|
||||||
|
""" Send arm home command. """
|
||||||
|
if not self._validate_code(code, 'arming home'):
|
||||||
|
return
|
||||||
|
self._alarm.arm_stay()
|
||||||
|
self.update_ha_state()
|
||||||
|
|
||||||
|
def alarm_arm_away(self, code=None):
|
||||||
|
""" Send arm away command. """
|
||||||
|
if not self._validate_code(code, 'arming home'):
|
||||||
|
return
|
||||||
|
self._alarm.arm_away()
|
||||||
|
self.update_ha_state()
|
||||||
|
|
||||||
|
def _validate_code(self, code, state):
|
||||||
|
""" Validate given code. """
|
||||||
|
check = self._code is None or code == self._code
|
||||||
|
if not check:
|
||||||
|
_LOGGER.warning('Wrong code entered for %s', state)
|
||||||
|
return check
|
@@ -1,2 +1,2 @@
|
|||||||
""" DO NOT MODIFY. Auto-generated by build_frontend script """
|
""" DO NOT MODIFY. Auto-generated by build_frontend script """
|
||||||
VERSION = "fe71771b9b24b0fb72a56e775c3e1112"
|
VERSION = "1003c31441ec44b3db84b49980f736a7"
|
||||||
|
File diff suppressed because one or more lines are too long
@@ -12,7 +12,7 @@ from homeassistant.components.light import ATTR_BRIGHTNESS
|
|||||||
from homeassistant.components.wink import WinkToggleDevice
|
from homeassistant.components.wink import WinkToggleDevice
|
||||||
from homeassistant.const import CONF_ACCESS_TOKEN
|
from homeassistant.const import CONF_ACCESS_TOKEN
|
||||||
|
|
||||||
REQUIREMENTS = ['python-wink==0.3.1']
|
REQUIREMENTS = ['python-wink==0.4.1']
|
||||||
|
|
||||||
|
|
||||||
def setup_platform(hass, config, add_devices_callback, discovery_info=None):
|
def setup_platform(hass, config, add_devices_callback, discovery_info=None):
|
||||||
|
@@ -11,7 +11,7 @@ import logging
|
|||||||
from homeassistant.components.lock import LockDevice
|
from homeassistant.components.lock import LockDevice
|
||||||
from homeassistant.const import CONF_ACCESS_TOKEN
|
from homeassistant.const import CONF_ACCESS_TOKEN
|
||||||
|
|
||||||
REQUIREMENTS = ['python-wink==0.3.1']
|
REQUIREMENTS = ['python-wink==0.4.1']
|
||||||
|
|
||||||
|
|
||||||
def setup_platform(hass, config, add_devices, discovery_info=None):
|
def setup_platform(hass, config, add_devices, discovery_info=None):
|
||||||
|
@@ -11,7 +11,7 @@ import logging
|
|||||||
from homeassistant.helpers.entity import Entity
|
from homeassistant.helpers.entity import Entity
|
||||||
from homeassistant.const import CONF_ACCESS_TOKEN, STATE_OPEN, STATE_CLOSED
|
from homeassistant.const import CONF_ACCESS_TOKEN, STATE_OPEN, STATE_CLOSED
|
||||||
|
|
||||||
REQUIREMENTS = ['python-wink==0.3.1']
|
REQUIREMENTS = ['python-wink==0.4.1']
|
||||||
|
|
||||||
|
|
||||||
def setup_platform(hass, config, add_devices, discovery_info=None):
|
def setup_platform(hass, config, add_devices, discovery_info=None):
|
||||||
|
@@ -11,7 +11,7 @@ import logging
|
|||||||
from homeassistant.components.wink import WinkToggleDevice
|
from homeassistant.components.wink import WinkToggleDevice
|
||||||
from homeassistant.const import CONF_ACCESS_TOKEN
|
from homeassistant.const import CONF_ACCESS_TOKEN
|
||||||
|
|
||||||
REQUIREMENTS = ['python-wink==0.3.1']
|
REQUIREMENTS = ['python-wink==0.4.1']
|
||||||
|
|
||||||
|
|
||||||
def setup_platform(hass, config, add_devices, discovery_info=None):
|
def setup_platform(hass, config, add_devices, discovery_info=None):
|
||||||
@@ -30,3 +30,5 @@ def setup_platform(hass, config, add_devices, discovery_info=None):
|
|||||||
pywink.set_bearer_token(token)
|
pywink.set_bearer_token(token)
|
||||||
|
|
||||||
add_devices(WinkToggleDevice(switch) for switch in pywink.get_switches())
|
add_devices(WinkToggleDevice(switch) for switch in pywink.get_switches())
|
||||||
|
add_devices(WinkToggleDevice(switch) for switch in
|
||||||
|
pywink.get_powerstrip_outlets())
|
||||||
|
90
homeassistant/components/thermostat/proliphix.py
Normal file
90
homeassistant/components/thermostat/proliphix.py
Normal file
@@ -0,0 +1,90 @@
|
|||||||
|
"""
|
||||||
|
homeassistant.components.thermostat.proliphix
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
The Proliphix NT10e Thermostat is an ethernet connected thermostat.
|
||||||
|
|
||||||
|
For more details about this platform, please refer to the documentation at
|
||||||
|
https://home-assistant.io/components/thermostat.proliphix/
|
||||||
|
"""
|
||||||
|
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):
|
||||||
|
""" Polling needed for thermostat.. """
|
||||||
|
return True
|
||||||
|
|
||||||
|
def update(self):
|
||||||
|
""" Update the data from the thermostat. """
|
||||||
|
self._pdp.update()
|
||||||
|
|
||||||
|
@property
|
||||||
|
def name(self):
|
||||||
|
""" Returns the name of the thermostat. """
|
||||||
|
return self._name
|
||||||
|
|
||||||
|
@property
|
||||||
|
def device_state_attributes(self):
|
||||||
|
""" Returns device specific state attributes. """
|
||||||
|
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):
|
||||||
|
""" Returns the current state of the thermostat. """
|
||||||
|
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
|
@@ -16,7 +16,7 @@ from homeassistant.const import (
|
|||||||
ATTR_SERVICE, ATTR_DISCOVERED, ATTR_FRIENDLY_NAME)
|
ATTR_SERVICE, ATTR_DISCOVERED, ATTR_FRIENDLY_NAME)
|
||||||
|
|
||||||
DOMAIN = "wink"
|
DOMAIN = "wink"
|
||||||
REQUIREMENTS = ['python-wink==0.3.1']
|
REQUIREMENTS = ['python-wink==0.4.1']
|
||||||
|
|
||||||
DISCOVER_LIGHTS = "wink.lights"
|
DISCOVER_LIGHTS = "wink.lights"
|
||||||
DISCOVER_SWITCHES = "wink.switches"
|
DISCOVER_SWITCHES = "wink.switches"
|
||||||
@@ -37,9 +37,10 @@ def setup(hass, config):
|
|||||||
# Load components for the devices in the Wink that we support
|
# Load components for the devices in the Wink that we support
|
||||||
for component_name, func_exists, discovery_type in (
|
for component_name, func_exists, discovery_type in (
|
||||||
('light', pywink.get_bulbs, DISCOVER_LIGHTS),
|
('light', pywink.get_bulbs, DISCOVER_LIGHTS),
|
||||||
('switch', pywink.get_switches, DISCOVER_SWITCHES),
|
('switch', lambda: pywink.get_switches or
|
||||||
('sensor', lambda: pywink.get_sensors or pywink.get_eggtrays,
|
pywink.get_powerstrip_outlets, DISCOVER_SWITCHES),
|
||||||
DISCOVER_SENSORS),
|
('sensor', lambda: pywink.get_sensors or
|
||||||
|
pywink.get_eggtrays, DISCOVER_SENSORS),
|
||||||
('lock', pywink.get_locks, DISCOVER_LOCKS)):
|
('lock', pywink.get_locks, DISCOVER_LOCKS)):
|
||||||
|
|
||||||
if func_exists():
|
if func_exists():
|
||||||
|
@@ -6,6 +6,9 @@ pip>=7.0.0
|
|||||||
vincenty==0.1.3
|
vincenty==0.1.3
|
||||||
jinja2>=2.8
|
jinja2>=2.8
|
||||||
|
|
||||||
|
# homeassistant.components.alarm_control_panel.alarmdotcom
|
||||||
|
https://github.com/Xorso/pyalarmdotcom/archive/0.0.7.zip#pyalarmdotcom==0.0.7
|
||||||
|
|
||||||
# homeassistant.components.arduino
|
# homeassistant.components.arduino
|
||||||
PyMata==2.07a
|
PyMata==2.07a
|
||||||
|
|
||||||
@@ -66,7 +69,7 @@ pyvera==0.2.3
|
|||||||
# homeassistant.components.lock.wink
|
# homeassistant.components.lock.wink
|
||||||
# homeassistant.components.sensor.wink
|
# homeassistant.components.sensor.wink
|
||||||
# homeassistant.components.switch.wink
|
# homeassistant.components.switch.wink
|
||||||
python-wink==0.3.1
|
python-wink==0.4.1
|
||||||
|
|
||||||
# homeassistant.components.media_player.cast
|
# homeassistant.components.media_player.cast
|
||||||
pychromecast==0.6.14
|
pychromecast==0.6.14
|
||||||
@@ -193,6 +196,9 @@ heatmiserV3==0.9.1
|
|||||||
# homeassistant.components.thermostat.honeywell
|
# homeassistant.components.thermostat.honeywell
|
||||||
evohomeclient==0.2.4
|
evohomeclient==0.2.4
|
||||||
|
|
||||||
|
# homeassistant.components.thermostat.proliphix
|
||||||
|
proliphix==0.1.0
|
||||||
|
|
||||||
# homeassistant.components.thermostat.radiotherm
|
# homeassistant.components.thermostat.radiotherm
|
||||||
radiotherm==1.2
|
radiotherm==1.2
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user