DEFAULT_NAME = "Generic Thermostat" CONF_HEATER = "heater" CONF_SENSOR = "target_sensor" CONF_MIN_TEMP = "min_temp" CONF_MAX_TEMP = "max_temp" CONF_TARGET_TEMP = "target_temp" CONF_AC_MODE = "ac_mode" CONF_MIN_DUR = "min_cycle_duration" PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( { vol.Required(CONF_HEATER): cv.entity_id, vol.Required(CONF_SENSOR): cv.entity_id, vol.Optional(CONF_AC_MODE): cv.boolean, vol.Optional(CONF_MAX_TEMP): vol.Coerce(float), vol.Optional(CONF_MIN_DUR): vol.All(cv.time_period, cv.positive_timedelta), vol.Optional(CONF_MIN_TEMP): vol.Coerce(float), vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, vol.Optional(CONF_TARGET_TEMP): vol.Coerce(float), } ) def setup_platform(hass, config, add_devices, discovery_info=None): """Setup the generic thermostat.""" name = config.get(CONF_NAME) heater_entity_id = config.get(CONF_HEATER) sensor_entity_id = config.get(CONF_SENSOR) min_temp = config.get(CONF_MIN_TEMP) max_temp = config.get(CONF_MAX_TEMP) target_temp = config.get(CONF_TARGET_TEMP)
CM_TO_HA_STATE = { 'heat': STATE_HEAT, 'cool': STATE_COOL, 'auto': STATE_AUTO, 'dry': STATE_DRY, 'fan': STATE_FAN_ONLY, } HA_STATE_TO_CM = {value: key for key, value in CM_TO_HA_STATE.items()} FAN_MODES = ['low', 'med', 'high', 'auto'] CONF_SUPPORTED_MODES = 'supported_modes' PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Required(CONF_HOST): cv.string, vol.Optional(CONF_PORT, default=DEFAULT_PORT): cv.port, vol.Optional(CONF_SUPPORTED_MODES, default=AVAILABLE_MODES): vol.All(cv.ensure_list, [vol.In(AVAILABLE_MODES)]), }) _LOGGER = logging.getLogger(__name__) def _build_entity(device, supported_modes): _LOGGER.debug("Found device %s", device.uid) return CoolmasterClimate(device, supported_modes) def setup_platform(hass, config, add_entities, discovery_info=None): """Set up the CoolMasterNet climate platform.""" from pycoolmasternet import CoolMasterNet
_LOGGER = logging.getLogger(__name__) CONF_RELAY = 'relay' CONF_THERMOSTAT = 'thermostat' DEFAULT_AWAY_TEMPERATURE = 14 # # The default offset is 2 hours (when you use the thermostat itself) DEFAULT_TIME_OFFSET = 7200 # # Return cached results if last scan was less then this time ago # # NetAtmo Data is uploaded to server every hour MIN_TIME_BETWEEN_UPDATES = timedelta(seconds=300) PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Optional(CONF_RELAY): cv.string, vol.Optional(CONF_THERMOSTAT, default=[]): vol.All(cv.ensure_list, [cv.string]), }) SUPPORT_FLAGS = (SUPPORT_TARGET_TEMPERATURE | SUPPORT_OPERATION_MODE | SUPPORT_AWAY_MODE) def setup_platform(hass, config, add_devices, discovery_info=None): """Set up the NetAtmo Thermostat.""" netatmo = hass.components.netatmo device = config.get(CONF_RELAY) import lnetatmo try: data = ThermostatData(netatmo.NETATMO_AUTH, device)
from homeassistant.components.climate import ( ClimateDevice, PLATFORM_SCHEMA, STATE_HEAT, STATE_IDLE, ATTR_TEMPERATURE) from homeassistant.const import (CONF_HOST, CONF_USERNAME, CONF_PASSWORD, CONF_PORT, TEMP_CELSIUS, CONF_NAME) import homeassistant.helpers.config_validation as cv REQUIREMENTS = ['oemthermostat==1.1'] _LOGGER = logging.getLogger(__name__) CONF_AWAY_TEMP = 'away_temp' PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Required(CONF_HOST): cv.string, vol.Optional(CONF_NAME, default="Thermostat"): cv.string, vol.Optional(CONF_PORT, default=80): cv.port, vol.Inclusive(CONF_USERNAME, 'authentication'): cv.string, vol.Inclusive(CONF_PASSWORD, 'authentication'): cv.string, vol.Optional(CONF_AWAY_TEMP, default=14): vol.Coerce(float) }) def setup_platform(hass, config, add_devices, discovery_info=None): """Set up the oemthermostat platform.""" from oemthermostat import Thermostat name = config.get(CONF_NAME) host = config.get(CONF_HOST) port = config.get(CONF_PORT) username = config.get(CONF_USERNAME) password = config.get(CONF_PASSWORD) away_temp = config.get(CONF_AWAY_TEMP)
from homeassistant.components.knx import (KNXConfig, KNXMultiAddressDevice) from homeassistant.const import (CONF_NAME, TEMP_CELSIUS, ATTR_TEMPERATURE) import homeassistant.helpers.config_validation as cv _LOGGER = logging.getLogger(__name__) CONF_ADDRESS = 'address' CONF_SETPOINT_ADDRESS = 'setpoint_address' CONF_TEMPERATURE_ADDRESS = 'temperature_address' DEFAULT_NAME = 'KNX Thermostat' DEPENDENCIES = ['knx'] PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Required(CONF_ADDRESS): cv.string, vol.Required(CONF_SETPOINT_ADDRESS): cv.string, vol.Required(CONF_TEMPERATURE_ADDRESS): cv.string, vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, }) def setup_platform(hass, config, add_devices, discovery_info=None): """Create and add an entity based on the configuration.""" add_devices([KNXThermostat(hass, KNXConfig(config))]) class KNXThermostat(KNXMultiAddressDevice, ClimateDevice): """Representation of a KNX thermostat. A KNX thermostat will has the following parameters: - temperature (current temperature) - setpoint (target temperature in HASS terms)
DEFAULT_SETPOINT_SHIFT_STEP = 0.5 DEFAULT_SETPOINT_SHIFT_MAX = 6 DEFAULT_SETPOINT_SHIFT_MIN = -6 DEPENDENCIES = ['knx'] PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, vol.Required(CONF_TEMPERATURE_ADDRESS): cv.string, vol.Required(CONF_TARGET_TEMPERATURE_ADDRESS): cv.string, vol.Optional(CONF_SETPOINT_SHIFT_ADDRESS): cv.string, vol.Optional(CONF_SETPOINT_SHIFT_STATE_ADDRESS): cv.string, vol.Optional(CONF_SETPOINT_SHIFT_STEP, default=DEFAULT_SETPOINT_SHIFT_STEP): vol.All( float, vol.Range(min=0, max=2)), vol.Optional(CONF_SETPOINT_SHIFT_MAX, default=DEFAULT_SETPOINT_SHIFT_MAX): vol.All(int, vol.Range(min=-32, max=0)), vol.Optional(CONF_SETPOINT_SHIFT_MIN, default=DEFAULT_SETPOINT_SHIFT_MIN): vol.All(int, vol.Range(min=0, max=32)), vol.Optional(CONF_OPERATION_MODE_ADDRESS): cv.string, vol.Optional(CONF_OPERATION_MODE_STATE_ADDRESS): cv.string, vol.Optional(CONF_CONTROLLER_STATUS_ADDRESS): cv.string, vol.Optional(CONF_CONTROLLER_STATUS_STATE_ADDRESS): cv.string, vol.Optional(CONF_OPERATION_MODE_FROST_PROTECTION_ADDRESS): cv.string, vol.Optional(CONF_OPERATION_MODE_NIGHT_ADDRESS): cv.string, vol.Optional(CONF_OPERATION_MODE_COMFORT_ADDRESS): cv.string, }) @asyncio.coroutine def async_setup_platform(hass, config, async_add_devices, discovery_info=None):
SUPPORT_ON_OFF) from homeassistant.const import CONF_USERNAME, CONF_PASSWORD, TEMP_CELSIUS, TEMP_FAHRENHEIT, ATTR_TEMPERATURE REQUIREMENTS = ['midea==0.1.7', 'pycryptodome==3.7.0'] VERSION = '0.1.7' _LOGGER = logging.getLogger(__name__) CONF_APP_KEY = 'app_key' CONF_TEMP_STEP = 'temp_step' CONF_INCLUDE_OFF_AS_STATE = 'include_off_as_state' PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Required(CONF_APP_KEY): cv.string, vol.Required(CONF_USERNAME): cv.string, vol.Required(CONF_PASSWORD): cv.string, vol.Optional(CONF_TEMP_STEP, default=1.0): vol.Coerce(float), vol.Optional(CONF_INCLUDE_OFF_AS_STATE, default=True): vol.Coerce(bool) }) SUPPORT_FLAGS = SUPPORT_TARGET_TEMPERATURE | SUPPORT_AWAY_MODE | SUPPORT_FAN_MODE | SUPPORT_OPERATION_MODE | SUPPORT_SWING_MODE | SUPPORT_TARGET_TEMPERATURE_HIGH | SUPPORT_TARGET_TEMPERATURE_LOW async def async_setup_platform(hass, config, async_add_entities, discovery_info=None): """Set up the Midea cloud service and query appliances.""" from midea.client import client as midea_client app_key = config.get(CONF_APP_KEY) username = config.get(CONF_USERNAME) password = config.get(CONF_PASSWORD)
import logging import requests import urllib import voluptuous as vol from homeassistant.components.climate import ClimateDevice, PLATFORM_SCHEMA from homeassistant.const import ( TEMP_CELSIUS, ATTR_TEMPERATURE, CONF_PORT, CONF_NAME, CONF_ID) import homeassistant.helpers.config_validation as cv _LOGGER = logging.getLogger(__name__) CONF_IPADDRESS = 'ipaddress' PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Required(CONF_IPADDRESS): cv.string, }) def setup_platform(hass, config, add_devices, discovery_info=None): add_devices([ DaikinClimate(config.get(CONF_IPADDRESS)), ]) class DaikinClimate(ClimateDevice): """Representation of a demo climate device.""" def __init__(self, ipaddress): """Initialize the climate device.""" self.daikin = DaikinAPI(ipaddress);
# noinspection PyUnresolvedReferences from ..pybuspro.devices.climate import ControlFloorHeatingStatus # noinspection PyUnresolvedReferences from ..pybuspro.helpers.enums import OnOffStatus _LOGGER = logging.getLogger(__name__) CONF_SUPPORTS_OPERATION_MODE = "supports_operation_mode" CONF_RELAY_ADDRESS = "relay_address" PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Required(CONF_DEVICES): vol.All(cv.ensure_list, [ vol.All({ vol.Required(CONF_ADDRESS): cv.string, vol.Required(CONF_NAME): cv.string, vol.Optional(CONF_SUPPORTS_OPERATION_MODE, default=True): cv.boolean, vol.Optional(CONF_RELAY_ADDRESS, default=''): cv.string, }) ]) }) # noinspection PyUnusedLocal async def async_setup_platform(hass, config, async_add_entites, discovery_info=None): """Set up Buspro switch devices.""" # noinspection PyUnresolvedReferences from ..pybuspro.devices import Climate
CONF_SENSOR = 'target_sensor' CONF_DEFAULT_OPERATION = 'default_operation' CONF_TARGET_TEMP = 'target_temp' devtype = 0x2712 SUPPORT_FLAGS = (SUPPORT_TARGET_TEMPERATURE | SUPPORT_TARGET_HUMIDITY | SUPPORT_FAN_MODE) PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Required(CONF_HOST): cv.string, vol.Required(CONF_MAC): cv.string, vol.Optional(CONF_TIMEOUT, default=DEFAULT_TIMEOUT): cv.positive_int, vol.Required(CONF_SENSOR): cv.entity_id, vol.Optional(CONF_DEFAULT_OPERATION): cv.entity_id, vol.Optional(CONF_TARGET_TEMP): vol.Coerce(float) }) @asyncio.coroutine def async_setup_platform(hass, config, async_add_devices, discovery_info=None): """Set up the generic thermostat platform.""" import broadlink ip_addr = config.get(CONF_HOST) mac_addr = binascii.unhexlify( config.get(CONF_MAC).encode().replace(b':', b''))
CONF_CURRENT_TEMPERATURE_TEMPLATE = 'current_temperature_template' CONF_CURRENT_TEMPERATURE_TOPIC = 'current_temperature_topic' CONF_PAYLOAD_ON = 'payload_on' CONF_PAYLOAD_OFF = 'payload_off' CONF_FAN_MODE_LIST = 'fan_modes' CONF_MODE_LIST = 'modes' CONF_SWING_MODE_LIST = 'swing_modes' CONF_INITIAL = 'initial' CONF_SEND_IF_OFF = 'send_if_off' CONF_MIN_TEMP = 'min_temp' CONF_MAX_TEMP = 'max_temp' SCHEMA_BASE = CLIMATE_PLATFORM_SCHEMA.extend(MQTT_BASE_PLATFORM_SCHEMA.schema) PLATFORM_SCHEMA = SCHEMA_BASE.extend({ vol.Optional(CONF_POWER_COMMAND_TOPIC): mqtt.valid_publish_topic, vol.Optional(CONF_MODE_COMMAND_TOPIC): mqtt.valid_publish_topic, vol.Optional(CONF_TEMPERATURE_COMMAND_TOPIC): mqtt.valid_publish_topic, vol.Optional(CONF_FAN_MODE_COMMAND_TOPIC): mqtt.valid_publish_topic, vol.Optional(CONF_SWING_MODE_COMMAND_TOPIC): mqtt.valid_publish_topic, vol.Optional(CONF_AWAY_MODE_COMMAND_TOPIC): mqtt.valid_publish_topic, vol.Optional(CONF_HOLD_COMMAND_TOPIC): mqtt.valid_publish_topic,
STATE_OFF, STATE_HEAT, STATE_COOL, STATE_AUTO ] SYSTEM_STATES = [ STATE_IDLE, STATE_HEAT, STATE_COOL ] TEMP_UNITS = [ TEMP_FAHRENHEIT, TEMP_CELSIUS ] PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Required(CONF_USERNAME): cv.string, vol.Required(CONF_PASSWORD): cv.string, vol.Required('name'): cv.string, vol.Optional('system', default=0): cv.positive_int, vol.Optional('zone', default=0): cv.positive_int, vol.Optional('min_temp'): vol.Coerce(float), vol.Optional('max_temp'): vol.Coerce(float), }) def setup_platform(hass, config, add_entities, discovery_info=None): """Set up the climate platform.""" from myicomfort.api import Tstat username = config.get(CONF_USERNAME) password = config.get(CONF_PASSWORD) system = config.get('system') zone = config.get('zone') name = config.get('name')
REQUIREMENTS = ['zhong_hong_hvac==1.0.9'] _LOGGER = logging.getLogger(__name__) CONF_GATEWAY_ADDRRESS = 'gateway_address' DEFAULT_PORT = 9999 DEFAULT_GATEWAY_ADDRRESS = 1 SIGNAL_DEVICE_ADDED = 'zhong_hong_device_added' SIGNAL_ZHONG_HONG_HUB_START = 'zhong_hong_hub_start' PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Required(CONF_HOST): cv.string, vol.Optional(CONF_PORT, default=DEFAULT_PORT): cv.port, vol.Optional(CONF_GATEWAY_ADDRRESS, default=DEFAULT_GATEWAY_ADDRRESS): cv.positive_int, }) def setup_platform(hass, config, add_entities, discovery_info=None): """Set up the ZhongHong HVAC platform.""" from zhong_hong_hvac.hub import ZhongHongGateway host = config.get(CONF_HOST) port = config.get(CONF_PORT) gw_addr = config.get(CONF_GATEWAY_ADDRRESS) hub = ZhongHongGateway(host, port, gw_addr) devices = [ ZhongHongClimate(hub, addr_out, addr_in) for (addr_out, addr_in) in hub.discovery_ac() ]
CONF_HEAT_AWAY_TEMPERATURE = 'away_heat_temperature' DEFAULT_AWAY_TEMPERATURE = 16 DEFAULT_COOL_AWAY_TEMPERATURE = 30 DEFAULT_HEAT_AWAY_TEMPERATURE = 16 DEFAULT_REGION = 'eu' REGIONS = ['eu', 'us'] PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Required(CONF_USERNAME): cv.string, vol.Required(CONF_PASSWORD): cv.string, vol.Optional(CONF_AWAY_TEMPERATURE, default=DEFAULT_AWAY_TEMPERATURE): vol.Coerce(float), vol.Optional(CONF_COOL_AWAY_TEMPERATURE, default=DEFAULT_COOL_AWAY_TEMPERATURE): vol.Coerce(float), vol.Optional(CONF_HEAT_AWAY_TEMPERATURE, default=DEFAULT_HEAT_AWAY_TEMPERATURE): vol.Coerce(float), vol.Optional(CONF_REGION, default=DEFAULT_REGION): vol.In(REGIONS), }) def setup_platform(hass, config, add_entities, discovery_info=None): """Set up the Honeywell thermostat.""" username = config.get(CONF_USERNAME) password = config.get(CONF_PASSWORD) region = config.get(CONF_REGION)
DEFAULT_AUTH = False DEFAULT_USERNAME = '******' DEFAULT_PASSWORD = '******' CONF_NAME = 'name' CONF_HOST = 'host' CONF_AUTH = 'auth' CONF_USERNAME = '******' CONF_PASSWORD = '******' PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Required(CONF_HOST): cv.string, vol.Required(CONF_NAME): cv.string, vol.Optional(CONF_AUTH, default=DEFAULT_AUTH): cv.boolean, vol.Optional(CONF_USERNAME, default=DEFAULT_USERNAME): cv.string, vol.Optional(CONF_PASSWORD, default=DEFAULT_PASSWORD): cv.string, }) def _lsbmsb(lsb, msb): temp = (lsb + msb * 256) / 100.0 if temp == 327.67: return 5 else: return temp
DEFAULT_OPERATION = 'idle' DEFAULT_FAN_MODE = 'auto' CUSTOMIZE_SCHEMA = vol.Schema({ vol.Optional(CONF_OPERATIONS): vol.All(cv.ensure_list, [cv.string]), vol.Optional(CONF_FAN_MODES): vol.All(cv.ensure_list, [cv.string]) }) PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, vol.Required(CONF_HOST): cv.string, vol.Required(CONF_MAC): cv.string, vol.Required(CONF_IRCODES_INI): cv.string, vol.Optional(CONF_TIMEOUT, default=DEFAULT_TIMEOUT): cv.positive_int, vol.Optional(CONF_MIN_TEMP, default=DEFAULT_MIN_TEMP): cv.positive_int, vol.Optional(CONF_MAX_TEMP, default=DEFAULT_MAX_TEMP): cv.positive_int, vol.Optional(CONF_TARGET_TEMP, default=DEFAULT_TARGET_TEMP): cv.positive_int, vol.Optional(CONF_TEMP_SENSOR, default=None): cv.entity_id, vol.Optional(CONF_CUSTOMIZE, default={}): CUSTOMIZE_SCHEMA, vol.Optional(CONF_DEFAULT_OPERATION, default=DEFAULT_OPERATION): cv.string, vol.Optional(CONF_DEFAULT_FAN_MODE, default=DEFAULT_FAN_MODE): cv.string, vol.Optional(CONF_DEFAULT_OPERATION_FROM_IDLE, default=None): cv.string }) @asyncio.coroutine def async_setup_platform(hass, config, async_add_devices, discovery_info=None): """Set up the Broadlink IR Climate platform.""" name = config.get(CONF_NAME) ip_addr = config.get(CONF_HOST) mac_addr = binascii.unhexlify(config.get(CONF_MAC).encode().replace(b':', b''))
from homeassistant.const import DEVICE_DEFAULT_NAME import homeassistant.helpers.config_validation as cv import socket import json from .neohub import NeoHub, NeoPlug _LOGGER = logging.getLogger(__name__) CONF_HOST = 'host' CONF_PORT = 'port' PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Required(CONF_HOST): cv.string, vol.Required(CONF_PORT): cv.port, }) async def async_setup_platform(hass, config, async_add_devices, discovery_info=None): """ Query neohub, create a hass ClimateDevice for each """ host = config.get(CONF_HOST, "10.0.0.197") port = config.get("CONF_PORT", 4242) hub = NeoHub(host, port) await hub.async_setup() plugs = hub.neoplugs() stats = hub.neostats()
CONF_COUNT = 'data_count' CONF_PRECISION = 'precision' DATA_TYPE_INT = 'int' DATA_TYPE_UINT = 'uint' DATA_TYPE_FLOAT = 'float' DEPENDENCIES = ['modbus'] SUPPORT_FLAGS = SUPPORT_TARGET_TEMPERATURE PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Required(CONF_CURRENT_TEMP): cv.positive_int, vol.Required(CONF_NAME): cv.string, vol.Required(CONF_SLAVE): cv.positive_int, vol.Required(CONF_TARGET_TEMP): cv.positive_int, vol.Optional(CONF_COUNT, default=2): cv.positive_int, vol.Optional(CONF_DATA_TYPE, default=DATA_TYPE_FLOAT): vol.In([DATA_TYPE_INT, DATA_TYPE_UINT, DATA_TYPE_FLOAT]), vol.Optional(CONF_HUB, default=DEFAULT_HUB): cv.string, vol.Optional(CONF_PRECISION, default=1): cv.positive_int, }) def setup_platform(hass, config, add_entities, discovery_info=None): """Set up the Modbus Thermostat Platform.""" name = config.get(CONF_NAME) modbus_slave = config.get(CONF_SLAVE) target_temp_register = config.get(CONF_TARGET_TEMP) current_temp_register = config.get(CONF_CURRENT_TEMP) data_type = config.get(CONF_DATA_TYPE) count = config.get(CONF_COUNT)
SUPPORT_FLAGS = (SUPPORT_ON_OFF | SUPPORT_TARGET_TEMPERATURE | SUPPORT_FAN_MODE | SUPPORT_OPERATION_MODE | SUPPORT_SWING_MODE) CONF_SENSOR = 'target_sensor' CONF_MIN_TEMP = 'min_temp' CONF_MAX_TEMP = 'max_temp' SCAN_INTERVAL = timedelta(seconds=15) PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Required(CONF_HOST): cv.string, vol.Required(CONF_TOKEN): vol.All(cv.string, vol.Length(min=32, max=32)), vol.Required(CONF_SENSOR): cv.entity_id, vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, vol.Optional(CONF_MIN_TEMP, default=16): vol.Coerce(int), vol.Optional(CONF_MAX_TEMP, default=30): vol.Coerce(int), }) # pylint: disable=unused-argument @asyncio.coroutine def async_setup_platform(hass, config, async_add_devices, discovery_info=None): """Set up the air conditioning companion from config.""" from miio import AirConditioningCompanion, DeviceException host = config.get(CONF_HOST) name = config.get(CONF_NAME) token = config.get(CONF_TOKEN) min_temp = config.get(CONF_MIN_TEMP)
STATE_COOL, SUPPORT_TARGET_TEMPERATURE) from homeassistant.const import (ATTR_TEMPERATURE, CONF_DEVICE, CONF_NAME, PRECISION_HALVES, PRECISION_TENTHS, TEMP_CELSIUS, PRECISION_WHOLE) import homeassistant.helpers.config_validation as cv REQUIREMENTS = ['pyotgw==0.1b0'] CONF_FLOOR_TEMP = "floor_temperature" CONF_PRECISION = 'precision' PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Required(CONF_DEVICE): cv.string, vol.Optional(CONF_NAME, default="OpenTherm Gateway"): cv.string, vol.Optional(CONF_PRECISION): vol.In([PRECISION_TENTHS, PRECISION_HALVES, PRECISION_WHOLE]), vol.Optional(CONF_FLOOR_TEMP, default=False): cv.boolean, }) SUPPORT_FLAGS = (SUPPORT_TARGET_TEMPERATURE) _LOGGER = logging.getLogger(__name__) async def async_setup_platform(hass, config, async_add_entities, discovery_info=None): """Set up the opentherm_gw device.""" gateway = OpenThermGateway(config) async_add_entities([gateway])
ATTR_HOMEGW_DEV = 'dev' ATTR_HOMEGW_TEMPERATURE = 'temp' ATTR_HOMEGW_HUMIDITY = 'hum' ATTR_HOMEGW_ID = 'id' ATTR_HOMEGW_CHANNEL = 'ch' ATTR_HOMEGW_BATTERY = 'batt' DEFAULT_NAME = "HomeGW thermostat" VALUE_HOMEGW_DEV_DIGOO = 'digoo' PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Required(CONF_SERIAL_ENTITY): cv.entity_id, vol.Required(CONF_DEV_CHANNEL): cv.positive_int, vol.Optional(CONF_HEATING_ENTITY): cv.entity_id, vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, vol.Optional(CONF_TARGET_TEMP): vol.Coerce(float), }) @asyncio.coroutine def async_setup_platform(hass, config, async_add_devices, discovery_info=None): """Set up homeGW climate devices.""" serial_sensor = config[CONF_SERIAL_ENTITY] dev_channel = config[CONF_DEV_CHANNEL] heating_sensor = config.get(CONF_HEATING_ENTITY) name = config.get(CONF_NAME, DEFAULT_NAME) target_temp = config.get(CONF_TARGET_TEMP) async_add_devices([
REQUIREMENTS = ['heatmiserV3==0.9.1'] _LOGGER = logging.getLogger(__name__) CONF_IPADDRESS = 'ipaddress' CONF_TSTATS = 'tstats' TSTATS_SCHEMA = vol.Schema({ vol.Required(CONF_ID): cv.string, vol.Required(CONF_NAME): cv.string, }) PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Required(CONF_IPADDRESS): cv.string, vol.Required(CONF_PORT): cv.port, vol.Required(CONF_TSTATS, default={}): vol.Schema({cv.string: TSTATS_SCHEMA}), }) def setup_platform(hass, config, add_entities, discovery_info=None): """Set up the heatmiser thermostat.""" from heatmiserV3 import heatmiser, connection ipaddress = config.get(CONF_IPADDRESS) port = str(config.get(CONF_PORT)) tstats = config.get(CONF_TSTATS) serport = connection.connection(ipaddress, port) serport.open()
DEFAULT_MAX_TEMP = 30 # HVAC modes HVAC_MODES_1 = [HVAC_MODE_HEAT, HVAC_MODE_AUTO] HVAC_MODES_2 = [HVAC_MODE_HEAT_COOL, HVAC_MODE_AUTO] # Read platform configuration PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, vol.Required(CONF_PASSWORD): cv.string, vol.Required(CONF_HOST): cv.string, vol.Optional(CONF_LEGACY, default=False): cv.boolean, vol.Optional(CONF_PORT, default=DEFAULT_PORT): cv.port, vol.Optional(CONF_USERNAME, default=DEFAULT_USERNAME): cv.string, vol.Optional(CONF_MIN_TEMP, default=DEFAULT_MIN_TEMP): cv.positive_int, vol.Optional(CONF_MAX_TEMP, default=DEFAULT_MAX_TEMP): cv.positive_int, }) def setup_platform(hass, config, add_entities, discovery_info=None): """Add the Plugwise (Anna) Thermostat.""" api = haanna.Haanna( config[CONF_USERNAME], config[CONF_PASSWORD],
ATTR_CURRENT_TEMPERATURE, ATTR_FAN_MODE, ATTR_OPERATION_MODE, ATTR_SWING_MODE, PLATFORM_SCHEMA, STATE_AUTO, STATE_COOL, STATE_DRY, STATE_FAN_ONLY, STATE_HEAT, STATE_OFF, SUPPORT_FAN_MODE, SUPPORT_OPERATION_MODE, SUPPORT_SWING_MODE, SUPPORT_TARGET_TEMPERATURE, ClimateDevice) from homeassistant.components.daikin import DOMAIN as DAIKIN_DOMAIN from homeassistant.components.daikin.const import ( ATTR_INSIDE_TEMPERATURE, ATTR_OUTSIDE_TEMPERATURE, ATTR_TARGET_TEMPERATURE) from homeassistant.const import ( ATTR_TEMPERATURE, CONF_HOST, CONF_NAME, TEMP_CELSIUS) import homeassistant.helpers.config_validation as cv _LOGGER = logging.getLogger(__name__) PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Required(CONF_HOST): cv.string, vol.Optional(CONF_NAME): cv.string, }) HA_STATE_TO_DAIKIN = { STATE_FAN_ONLY: 'fan', STATE_DRY: 'dry', STATE_COOL: 'cool', STATE_HEAT: 'hot', STATE_AUTO: 'auto', STATE_OFF: 'off', } DAIKIN_TO_HA_STATE = { 'fan': STATE_FAN_ONLY, 'dry': STATE_DRY, 'cool': STATE_COOL,
ATTR_TEMPERATURE, CONF_PASSWORD, CONF_USERNAME, TEMP_CELSIUS, ) import homeassistant.helpers.config_validation as cv _LOGGER = logging.getLogger(__name__) # Return cached results if last scan was less then this time ago SCAN_INTERVAL = timedelta(seconds=120) OPERATION_LIST = [HVAC_MODE_HEAT_COOL, HVAC_MODE_HEAT, HVAC_MODE_OFF] PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( {vol.Required(CONF_USERNAME): cv.string, vol.Required(CONF_PASSWORD): cv.string} ) EPH_TO_HA_STATE = { "AUTO": HVAC_MODE_HEAT_COOL, "ON": HVAC_MODE_HEAT, "OFF": HVAC_MODE_OFF, } HA_STATE_TO_EPH = {value: key for key, value in EPH_TO_HA_STATE.items()} def setup_platform(hass, config, add_entities, discovery_info=None): """Set up the ephember thermostat.""" username = config.get(CONF_USERNAME) password = config.get(CONF_PASSWORD)
from homeassistant.util.temperature import convert import homeassistant.helpers.config_validation as cv REQUIREMENTS = ['bluepy_devices==0.2.0'] _LOGGER = logging.getLogger(__name__) ATTR_MODE = 'mode' ATTR_MODE_READABLE = 'mode_readable' DEVICE_SCHEMA = vol.Schema({ vol.Required(CONF_MAC): cv.string, }) PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Required(CONF_DEVICES): vol.Schema({cv.string: DEVICE_SCHEMA}), }) def setup_platform(hass, config, add_devices, discovery_info=None): """Setup the eQ-3 BLE thermostats.""" devices = [] for name, device_cfg in config[CONF_DEVICES].items(): mac = device_cfg[CONF_MAC] devices.append(EQ3BTSmartThermostat(mac, name)) add_devices(devices) # pylint: disable=too-many-instance-attributes, import-error, abstract-method
"0180666661": { "des": "aux_1", "main": "0180666661pomowiswtt12" }, "0180777771": { "des": "chigo_1", "main": "0180777771pomowiswtt12" } } PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Required(CONF_HOST): cv.string, vol.Optional(CONF_TIMEOUT, default=DEFAULT_TIMEOUT): cv.positive_int, vol.Required(CONF_SENSOR, default=None): cv.entity_id, vol.Optional(CONF_CUSTOMIZE, default={}): dict, vol.Optional(CONF_SYNC, default=15): cv.positive_int }) def setup_platform(hass, config, add_devices_callback, discovery_info=None): """Set up the smart mi acpartner platform.""" host = config.get(CONF_HOST) name = config.get(CONF_NAME) or DEFAULT_NAME token = config.get(CONF_TOKEN) sensor_entity_id = config.get(CONF_SENSOR) # target_temp = config.get(CONF_TARGET_TEMP) sync = config.get(CONF_SYNC)
DEPENDENCIES = ['netatmo'] _LOGGER = logging.getLogger(__name__) CONF_HOMES = 'homes' CONF_ROOMS = 'rooms' MIN_TIME_BETWEEN_UPDATES = timedelta(seconds=10) HOME_CONFIG_SCHEMA = vol.Schema({ vol.Required(CONF_NAME): cv.string, vol.Optional(CONF_ROOMS, default=[]): vol.All(cv.ensure_list, [cv.string]) }) PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Optional(CONF_HOMES): vol.All(cv.ensure_list, [HOME_CONFIG_SCHEMA]) }) STATE_NETATMO_SCHEDULE = 'schedule' STATE_NETATMO_HG = 'hg' STATE_NETATMO_MAX = 'max' STATE_NETATMO_AWAY = 'away' STATE_NETATMO_OFF = STATE_OFF STATE_NETATMO_MANUAL = STATE_MANUAL DICT_NETATMO_TO_HA = { STATE_NETATMO_SCHEDULE: STATE_AUTO, STATE_NETATMO_HG: STATE_COOL, STATE_NETATMO_MAX: STATE_HEAT, STATE_NETATMO_AWAY: STATE_ECO, STATE_NETATMO_OFF: STATE_OFF,
AUTH_URL = "http://api.scinan.com/oauth2/authorize?client_id=100002" \ "&passwd=%s&redirect_uri=http%%3A//localhost.com%%3A8080" \ "/testCallBack.action&response_type=token&userId=%s" LIST_URL = "http://api.scinan.com/v1.0/devices/list?format=json" CTRL_URL = "http://api.scinan.com/v1.0/sensors/control?" \ "control_data=%%7B%%22value%%22%%3A%%22%s%%22%%7D&device_id=%s" \ "&format=json&sensor_id=%s&sensor_type=1" DEFAULT_NAME = 'Saswell' ATTR_AVAILABLE = 'available' PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Required(CONF_USERNAME): cv.string, vol.Required(CONF_PASSWORD): cv.string, vol.Optional(CONF_SCAN_INTERVAL, default=timedelta(seconds=300)): (vol.All(cv.time_period, cv.positive_timedelta)), }) async def async_setup_platform(hass, config, async_add_entities, discovery_info=None): """Set up the Saswell climate devices.""" username = config.get(CONF_USERNAME) password = config.get(CONF_PASSWORD) scan_interval = config.get(CONF_SCAN_INTERVAL) saswell = SaswellData(hass, username, password)
PLATFORM_SCHEMA) from homeassistant.const import CONF_HOST, TEMP_FAHRENHEIT, ATTR_TEMPERATURE import homeassistant.helpers.config_validation as cv REQUIREMENTS = ['radiotherm==1.2'] _LOGGER = logging.getLogger(__name__) ATTR_FAN = 'fan' ATTR_MODE = 'mode' CONF_HOLD_TEMP = 'hold_temp' PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Optional(CONF_HOST): vol.All(cv.ensure_list, [cv.string]), vol.Optional(CONF_HOLD_TEMP, default=False): cv.boolean, }) def setup_platform(hass, config, add_devices, discovery_info=None): """Setup the Radio Thermostat.""" import radiotherm hosts = [] if CONF_HOST in config: hosts = config[CONF_HOST] else: hosts.append(radiotherm.discover.discover_address()) if hosts is None:
"Pro 2": { "mode": 0, "program": 2 }, "Pro 3": { "mode": 0, "program": 3 }, } TOUCHLINE_HA_PRESETS = {(settings["mode"], settings["program"]): preset for preset, settings in PRESET_MODES.items()} SUPPORT_FLAGS = SUPPORT_TARGET_TEMPERATURE | SUPPORT_PRESET_MODE PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({vol.Required(CONF_HOST): cv.string}) def setup_platform(hass, config, add_entities, discovery_info=None): """Set up the Touchline devices.""" host = config[CONF_HOST] py_touchline = PyTouchline() number_of_devices = int(py_touchline.get_number_of_devices(host)) devices = [] for device_id in range(0, number_of_devices): devices.append(Touchline(PyTouchline(device_id))) add_entities(devices, True) class Touchline(ClimateEntity):
HVAC_MODE_FAN_ONLY, ) from homeassistant.const import ( CONF_NAME, TEMP_FAHRENHEIT, ) MIN_TEMP = 60 MAX_TEMP = 86 CONF_DEVICE = "device" PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Required(CONF_DEVICE, default="/dev/ttyACM0"): cv.string, vol.Required(CONF_NAME, default="Air Conditioner"): cv.string, }) _LOGGER = logging.getLogger(__name__) def setup_platform(hass, config, add_entities, discovery_info=None): tty_dev = config[CONF_DEVICE] name = config[CONF_NAME] add_entities([FriedrichIR(name, tty_dev)]) class FriedrichIR(ClimateDevice): _fan_mode_map = {
_LOGGER = logging.getLogger(__name__) STATE_BOOST = 'boost' ATTR_STATE_WINDOW_OPEN = 'window_open' ATTR_STATE_VALVE = 'valve' ATTR_STATE_LOCKED = 'is_locked' ATTR_STATE_LOW_BAT = 'low_battery' ATTR_STATE_AWAY_END = 'away_end' DEVICE_SCHEMA = vol.Schema({ vol.Required(CONF_MAC): cv.string, }) PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Required(CONF_DEVICES): vol.Schema({cv.string: DEVICE_SCHEMA}), }) SUPPORT_FLAGS = (SUPPORT_TARGET_TEMPERATURE | SUPPORT_OPERATION_MODE | SUPPORT_AWAY_MODE | SUPPORT_ON_OFF) def setup_platform(hass, config, add_entities, discovery_info=None): """Set up the eQ-3 BLE thermostats.""" devices = [] for name, device_cfg in config[CONF_DEVICES].items(): mac = device_cfg[CONF_MAC] devices.append(EQ3BTSmartThermostat(mac, name)) add_entities(devices)
STATE_AUTO, STATE_COOL, STATE_HEAT, STATE_IDLE, STATE_OFF, ClimateDevice, PLATFORM_SCHEMA) from homeassistant.const import CONF_HOST, TEMP_FAHRENHEIT, ATTR_TEMPERATURE import homeassistant.helpers.config_validation as cv REQUIREMENTS = ['radiotherm==1.2'] _LOGGER = logging.getLogger(__name__) ATTR_FAN = 'fan' ATTR_MODE = 'mode' CONF_HOLD_TEMP = 'hold_temp' PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Optional(CONF_HOST): vol.All(cv.ensure_list, [cv.string]), vol.Optional(CONF_HOLD_TEMP, default=False): cv.boolean, }) def setup_platform(hass, config, add_devices, discovery_info=None): """Setup the Radio Thermostat.""" import radiotherm hosts = [] if CONF_HOST in config: hosts = config[CONF_HOST] else: hosts.append(radiotherm.discover.discover_address()) if hosts is None: _LOGGER.error("No Radiotherm Thermostats detected")
CONF_DEVICE_CODE = 'device_code' CONF_CONTROLLER_DATA = "controller_data" CONF_TEMPERATURE_SENSOR = 'temperature_sensor' CONF_HUMIDITY_SENSOR = 'humidity_sensor' CONF_POWER_SENSOR = 'power_sensor' SUPPORT_FLAGS = (SUPPORT_TARGET_TEMPERATURE | SUPPORT_FAN_MODE) PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Optional(CONF_UNIQUE_ID): cv.string, vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, vol.Required(CONF_DEVICE_CODE): cv.positive_int, vol.Required(CONF_CONTROLLER_DATA): cv.string, vol.Optional(CONF_TEMPERATURE_SENSOR): cv.entity_id, vol.Optional(CONF_HUMIDITY_SENSOR): cv.entity_id, vol.Optional(CONF_POWER_SENSOR): cv.entity_id }) async def async_setup_platform(hass, config, async_add_entities, discovery_info=None): """Set up the IR Climate platform.""" device_code = config.get(CONF_DEVICE_CODE)
from homeassistant.components.climate import ClimateDevice, PLATFORM_SCHEMA from homeassistant.const import ( TEMP_CELSIUS, TEMP_FAHRENHEIT, ATTR_TEMPERATURE, CONF_PORT, CONF_NAME) import homeassistant.helpers.config_validation as cv import socket import json _LOGGER = logging.getLogger(__name__) CONF_HOST = 'host' CONF_PORT = 'port' PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Required(CONF_HOST): cv.string, vol.Required(CONF_PORT): cv.port, }) def setup_platform(hass, config, add_devices, discovery_info=None): """ Sets up a Heatmiser Neo-Hub And Returns Neostats""" host = config.get(CONF_HOST, None) port = config.get("CONF_PORT", 4242) thermostats = [] NeoHubJson = HeatmiserNeostat(TEMP_CELSIUS, False, host, port).json_request({"INFO": "0"}) _LOGGER.debug(NeoHubJson) for device in NeoHubJson['devices']: name = device['device']
'heat': STATE_HEAT, 'cool': STATE_COOL, 'auto': STATE_AUTO, 'dry': STATE_DRY, 'fan': STATE_FAN_ONLY, } HA_STATE_TO_CM = {value: key for key, value in CM_TO_HA_STATE.items()} FAN_MODES = ['low', 'med', 'high', 'auto'] CONF_SUPPORTED_MODES = 'supported_modes' PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Required(CONF_HOST): cv.string, vol.Optional(CONF_PORT, default=DEFAULT_PORT): cv.port, vol.Optional(CONF_SUPPORTED_MODES, default=AVAILABLE_MODES): vol.All(cv.ensure_list, [vol.In(AVAILABLE_MODES)]), }) _LOGGER = logging.getLogger(__name__) def _build_entity(device, supported_modes): _LOGGER.debug("Found device %s", device.uid) return CoolmasterClimate(device, supported_modes) def setup_platform(hass, config, add_entities, discovery_info=None): """Set up the CoolMasterNet climate platform.""" from pycoolmasternet import CoolMasterNet
import homeassistant.helpers.config_validation as cv from homeassistant.helpers.dispatcher import (async_dispatcher_connect, async_dispatcher_send) _LOGGER = logging.getLogger(__name__) CONF_GATEWAY_ADDRRESS = 'gateway_address' REQUIREMENTS = ['zhong_hong_hvac==1.0.9'] SIGNAL_DEVICE_ADDED = 'zhong_hong_device_added' SIGNAL_ZHONG_HONG_HUB_START = 'zhong_hong_hub_start' PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Required(CONF_HOST): cv.string, vol.Optional(CONF_PORT, default=9999): vol.Coerce(int), vol.Optional(CONF_GATEWAY_ADDRRESS, default=1): vol.Coerce(int), }) def setup_platform(hass, config, add_entities, discovery_info=None): """Set up the ZhongHong HVAC platform.""" from zhong_hong_hvac.hub import ZhongHongGateway host = config.get(CONF_HOST) port = config.get(CONF_PORT) gw_addr = config.get(CONF_GATEWAY_ADDRRESS) hub = ZhongHongGateway(host, port, gw_addr) devices = [ ZhongHongClimate(hub, addr_out, addr_in) for (addr_out, addr_in) in hub.discovery_ac()
DOMAIN as NEST_DOMAIN) from homeassistant.components.climate import ( STATE_AUTO, STATE_COOL, STATE_HEAT, STATE_ECO, ClimateDevice, PLATFORM_SCHEMA, ATTR_TARGET_TEMP_HIGH, ATTR_TARGET_TEMP_LOW, ATTR_TEMPERATURE, SUPPORT_TARGET_TEMPERATURE, SUPPORT_TARGET_TEMPERATURE_HIGH, SUPPORT_TARGET_TEMPERATURE_LOW, SUPPORT_OPERATION_MODE, SUPPORT_AWAY_MODE, SUPPORT_FAN_MODE) from homeassistant.const import (TEMP_CELSIUS, TEMP_FAHRENHEIT, CONF_SCAN_INTERVAL, STATE_ON, STATE_OFF) from homeassistant.helpers.dispatcher import async_dispatcher_connect DEPENDENCIES = ['nest'] _LOGGER = logging.getLogger(__name__) PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Optional(CONF_SCAN_INTERVAL): vol.All(vol.Coerce(int), vol.Range(min=1)), }) NEST_MODE_HEAT_COOL = 'heat-cool' def setup_platform(hass, config, add_entities, discovery_info=None): """Set up the Nest thermostat. No longer in use. """ async def async_setup_entry(hass, entry, async_add_entities): """Set up the Nest climate device based on a config entry.""" temp_unit = hass.config.units.temperature_unit
import voluptuous as vol from homeassistant.const import ( CONF_NAME, CONF_SLAVE, TEMP_CELSIUS, ATTR_TEMPERATURE, DEVICE_DEFAULT_NAME) from homeassistant.components.climate import ( ClimateDevice, PLATFORM_SCHEMA, SUPPORT_TARGET_TEMPERATURE, SUPPORT_FAN_MODE) import homeassistant.components.modbus as modbus import homeassistant.helpers.config_validation as cv REQUIREMENTS = ['pyflexit==0.3'] DEPENDENCIES = ['modbus'] PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Required(CONF_SLAVE): vol.All(int, vol.Range(min=0, max=32)), vol.Optional(CONF_NAME, default=DEVICE_DEFAULT_NAME): cv.string }) _LOGGER = logging.getLogger(__name__) SUPPORT_FLAGS = SUPPORT_TARGET_TEMPERATURE | SUPPORT_FAN_MODE def setup_platform(hass, config, add_devices, discovery_info=None): """Set up the Flexit Platform.""" modbus_slave = config.get(CONF_SLAVE, None) name = config.get(CONF_NAME, None) add_devices([Flexit(modbus_slave, name)], True) class Flexit(ClimateDevice):
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Required(CONF_CURRENT_TEMP): cv.positive_int, vol.Required(CONF_NAME): cv.string, vol.Required(CONF_SLAVE): cv.positive_int, vol.Required(CONF_TARGET_TEMP): cv.positive_int, vol.Optional(CONF_COUNT, default=2): cv.positive_int, vol.Optional(CONF_CURRENT_TEMP_REGISTER_TYPE, default=DEFAULT_REGISTER_TYPE_HOLDING): vol.In([DEFAULT_REGISTER_TYPE_HOLDING, DEFAULT_REGISTER_TYPE_INPUT]), vol.Optional(CONF_DATA_TYPE, default=DATA_TYPE_FLOAT): vol.In([DATA_TYPE_INT, DATA_TYPE_UINT, DATA_TYPE_FLOAT]), vol.Optional(CONF_HUB, default=DEFAULT_HUB): cv.string, vol.Optional(CONF_PRECISION, default=1): cv.positive_int, vol.Optional(CONF_SCALE, default=1): vol.Coerce(float), vol.Optional(CONF_OFFSET, default=0): vol.Coerce(float), vol.Optional(CONF_MAX_TEMP, default=35): cv.positive_int, vol.Optional(CONF_MIN_TEMP, default=5): cv.positive_int, vol.Optional(CONF_STEP, default=0.5): vol.Coerce(float), vol.Optional(CONF_UNIT, default="C"): cv.string, })
def round_temp(temperature): """Round a temperature to the resolution of the thermostat. RadioThermostats can handle 0.5 degree temps so the input temperature is rounded to that value and returned. """ return round(temperature * 2.0) / 2.0 PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Optional(CONF_HOST): vol.All(cv.ensure_list, [cv.string]), vol.Optional(CONF_HOLD_TEMP, default=False): cv.boolean, vol.Optional(CONF_AWAY_TEMPERATURE_HEAT, default=DEFAULT_AWAY_TEMPERATURE_HEAT): vol.All(vol.Coerce(float), round_temp), vol.Optional(CONF_AWAY_TEMPERATURE_COOL, default=DEFAULT_AWAY_TEMPERATURE_COOL): vol.All(vol.Coerce(float), round_temp), }) SUPPORT_FLAGS = (SUPPORT_TARGET_TEMPERATURE | SUPPORT_OPERATION_MODE | SUPPORT_FAN_MODE | SUPPORT_AWAY_MODE) def setup_platform(hass, config, add_entities, discovery_info=None): """Set up the Radio Thermostat.""" import radiotherm hosts = [] if CONF_HOST in config:
CURRENT_HVAC_MAP_NETATMO = {True: CURRENT_HVAC_HEAT, False: CURRENT_HVAC_IDLE} CONF_HOMES = "homes" CONF_ROOMS = "rooms" MIN_TIME_BETWEEN_UPDATES = timedelta(seconds=300) HOME_CONFIG_SCHEMA = vol.Schema({ vol.Required(CONF_NAME): cv.string, vol.Optional(CONF_ROOMS, default=[]): vol.All(cv.ensure_list, [cv.string]), }) PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( {vol.Optional(CONF_HOMES): vol.All(cv.ensure_list, [HOME_CONFIG_SCHEMA])}) DEFAULT_MAX_TEMP = 30 NA_THERM = "NATherm1" NA_VALVE = "NRV" def setup_platform(hass, config, add_entities, discovery_info=None): """Set up the NetAtmo Thermostat.""" homes_conf = config.get(CONF_HOMES) auth = hass.data[DATA_NETATMO_AUTH] home_data = HomeData(auth) try:
CONF_AWAY_TEMP = 'away_temp' CONF_PRECISION = 'precision' SUPPORT_FLAGS = (SUPPORT_TARGET_TEMPERATURE | SUPPORT_OPERATION_MODE) PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Required(CONF_HEATER): cv.entity_id, vol.Required(CONF_SENSOR): cv.entity_id, vol.Optional(CONF_AC_MODE): cv.boolean, vol.Optional(CONF_MAX_TEMP): vol.Coerce(float), vol.Optional(CONF_MIN_DUR): vol.All(cv.time_period, cv.positive_timedelta), vol.Optional(CONF_MIN_TEMP): vol.Coerce(float), vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, vol.Optional(CONF_COLD_TOLERANCE, default=DEFAULT_TOLERANCE): vol.Coerce( float), vol.Optional(CONF_HOT_TOLERANCE, default=DEFAULT_TOLERANCE): vol.Coerce( float), vol.Optional(CONF_TARGET_TEMP): vol.Coerce(float), vol.Optional(CONF_KEEP_ALIVE): vol.All( cv.time_period, cv.positive_timedelta), vol.Optional(CONF_INITIAL_OPERATION_MODE): vol.In([STATE_AUTO, STATE_OFF]), vol.Optional(CONF_AWAY_TEMP): vol.Coerce(float), vol.Optional(CONF_PRECISION): vol.In( [PRECISION_TENTHS, PRECISION_HALVES, PRECISION_WHOLE]), }) async def async_setup_platform(hass, config, async_add_entities, discovery_info=None): """Set up the generic thermostat platform."""
CONF_INITIAL_HVAC_MODE = "initial_hvac_mode" CONF_AWAY_TEMP = "away_temp" CONF_PRECISION = "precision" SUPPORT_FLAGS = SUPPORT_TARGET_TEMPERATURE PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( { vol.Required(CONF_HEATER): cv.entity_id, vol.Required(CONF_SENSOR): cv.entity_id, vol.Optional(CONF_AC_MODE): cv.boolean, vol.Optional(CONF_MAX_TEMP): vol.Coerce(float), vol.Optional(CONF_MIN_DUR): vol.All(cv.time_period, cv.positive_timedelta), vol.Optional(CONF_MIN_TEMP): vol.Coerce(float), vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, vol.Optional(CONF_COLD_TOLERANCE, default=DEFAULT_TOLERANCE): vol.Coerce(float), vol.Optional(CONF_HOT_TOLERANCE, default=DEFAULT_TOLERANCE): vol.Coerce(float), vol.Optional(CONF_TARGET_TEMP): vol.Coerce(float), vol.Optional(CONF_KEEP_ALIVE): vol.All(cv.time_period, cv.positive_timedelta), vol.Optional(CONF_INITIAL_HVAC_MODE): vol.In( [HVAC_MODE_COOL, HVAC_MODE_HEAT, HVAC_MODE_OFF] ), vol.Optional(CONF_AWAY_TEMP): vol.Coerce(float), vol.Optional(CONF_PRECISION): vol.In( [PRECISION_TENTHS, PRECISION_HALVES, PRECISION_WHOLE] ), } ) async def async_setup_platform(hass, config, async_add_entities, discovery_info=None): """Set up the generic thermostat platform.""" name = config.get(CONF_NAME)
PLATFORM_SCHEMA = CLIMATE_PLATFORM_SCHEMA.extend({ vol.Optional(CONF_POWER_COMMAND_TOPIC): mqtt.valid_publish_topic, vol.Optional(CONF_MODE_COMMAND_TOPIC): mqtt.valid_publish_topic, vol.Optional(CONF_TEMPERATURE_COMMAND_TOPIC): mqtt.valid_publish_topic, vol.Optional(CONF_FAN_MODE_COMMAND_TOPIC): mqtt.valid_publish_topic, vol.Optional(CONF_SWING_MODE_COMMAND_TOPIC): mqtt.valid_publish_topic, vol.Optional(CONF_AWAY_MODE_COMMAND_TOPIC): mqtt.valid_publish_topic, vol.Optional(CONF_HOLD_COMMAND_TOPIC): mqtt.valid_publish_topic, vol.Optional(CONF_AUX_COMMAND_TOPIC): mqtt.valid_publish_topic, vol.Optional(CONF_POWER_STATE_TOPIC): mqtt.valid_subscribe_topic, vol.Optional(CONF_MODE_STATE_TOPIC): mqtt.valid_subscribe_topic, vol.Optional(CONF_TEMPERATURE_STATE_TOPIC): mqtt.valid_subscribe_topic, vol.Optional(CONF_FAN_MODE_STATE_TOPIC): mqtt.valid_subscribe_topic, vol.Optional(CONF_SWING_MODE_STATE_TOPIC): mqtt.valid_subscribe_topic, vol.Optional(CONF_AWAY_MODE_STATE_TOPIC): mqtt.valid_subscribe_topic, vol.Optional(CONF_HOLD_STATE_TOPIC): mqtt.valid_subscribe_topic, vol.Optional(CONF_AUX_STATE_TOPIC): mqtt.valid_subscribe_topic, vol.Optional(CONF_CURRENT_TEMPERATURE_TOPIC): mqtt.valid_subscribe_topic, vol.Optional(CONF_FAN_MODE_LIST, default=[STATE_AUTO, SPEED_LOW, SPEED_MEDIUM, SPEED_HIGH]): cv.ensure_list, vol.Optional(CONF_SWING_MODE_LIST, default=[STATE_ON, STATE_OFF]): cv.ensure_list, vol.Optional(CONF_MODE_LIST, default=[STATE_AUTO, STATE_OFF, STATE_COOL, STATE_HEAT, STATE_DRY, STATE_FAN_ONLY]): cv.ensure_list, vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, vol.Optional(CONF_INITIAL, default=21): cv.positive_int, vol.Optional(CONF_SEND_IF_OFF, default=True): cv.boolean, vol.Optional(CONF_PAYLOAD_ON, default="ON"): cv.string, vol.Optional(CONF_PAYLOAD_OFF, default="OFF"): cv.string, })
CONF_DATA_TYPE = 'data_type' CONF_COUNT = 'data_count' CONF_PRECISION = 'precision' DATA_TYPE_INT = 'int' DATA_TYPE_UINT = 'uint' DATA_TYPE_FLOAT = 'float' PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Required(CONF_NAME): cv.string, vol.Required(CONF_SLAVE): cv.positive_int, vol.Required(CONF_TARGET_TEMP): cv.positive_int, vol.Required(CONF_CURRENT_TEMP): cv.positive_int, vol.Optional(CONF_DATA_TYPE, default=DATA_TYPE_FLOAT): vol.In([DATA_TYPE_INT, DATA_TYPE_UINT, DATA_TYPE_FLOAT]), vol.Optional(CONF_COUNT, default=2): cv.positive_int, vol.Optional(CONF_PRECISION, default=1): cv.positive_int }) _LOGGER = logging.getLogger(__name__) SUPPORT_FLAGS = SUPPORT_TARGET_TEMPERATURE def setup_platform(hass, config, add_devices, discovery_info=None): """Set up the Modbus Thermostat Platform."""
CONF_COOL_AWAY_TEMPERATURE = 'away_cool_temperature' CONF_HEAT_AWAY_TEMPERATURE = 'away_heat_temperature' CONF_REGION = 'region' DEFAULT_AWAY_TEMPERATURE = 16 DEFAULT_COOL_AWAY_TEMPERATURE = 30 DEFAULT_HEAT_AWAY_TEMPERATURE = 16 DEFAULT_REGION = 'eu' REGIONS = ['eu', 'us'] PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Required(CONF_USERNAME): cv.string, vol.Required(CONF_PASSWORD): cv.string, vol.Optional(CONF_AWAY_TEMPERATURE, default=DEFAULT_AWAY_TEMPERATURE): vol.Coerce(float), vol.Optional(CONF_COOL_AWAY_TEMPERATURE, default=DEFAULT_COOL_AWAY_TEMPERATURE): vol.Coerce(float), vol.Optional(CONF_HEAT_AWAY_TEMPERATURE, default=DEFAULT_HEAT_AWAY_TEMPERATURE): vol.Coerce(float), vol.Optional(CONF_REGION, default=DEFAULT_REGION): vol.In(REGIONS), }) def setup_platform(hass, config, add_devices, discovery_info=None): """Set up the Honeywell thermostat.""" username = config.get(CONF_USERNAME) password = config.get(CONF_PASSWORD) region = config.get(CONF_REGION) if region == 'us': return _setup_us(username, password, config, add_devices)
_LOGGER = logging.getLogger(__name__) DEFAULT_NAME = 'Atag One Thermostat' DEFAULT_TIMEOUT = 30 BASE_URL = 'http://{0}:{1}{2}' MAC_ADDRESS = '01:23:45:67:89:01' DEFAULT_MIN_TEMP = 4 DEFAULT_MAX_TEMP = 27 SUPPORT_FLAGS = (SUPPORT_TARGET_TEMPERATURE) PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Optional(CONF_NAME, default=DEFAULT_NAME): config_validation.string, vol.Optional(CONF_HOST): config_validation.string, vol.Optional(CONF_PORT, default=10000): config_validation.positive_int, }) HA_PRESET_TO_ATAG = {PRESET_AWAY: 3, PRESET_ECO: 2, PRESET_HOME: 1} ATAG_PRESET_TO_HA = {v: k for k, v in HA_PRESET_TO_ATAG.items()} # jsonPayload data templates # update payload need to be in exact order. So, using string instead of json.dumps UPDATE_MODE = '''{{ "update_message":{{ "seqnr":0, "account_auth":{{ "user_account":"", "mac_address":"{0}"
CONF_CURRENT_TEMPERATURE_TEMPLATE = 'current_temperature_template' CONF_CURRENT_TEMPERATURE_TOPIC = 'current_temperature_topic' CONF_PAYLOAD_ON = 'payload_on' CONF_PAYLOAD_OFF = 'payload_off' CONF_FAN_MODE_LIST = 'fan_modes' CONF_MODE_LIST = 'modes' CONF_SWING_MODE_LIST = 'swing_modes' CONF_INITIAL = 'initial' CONF_SEND_IF_OFF = 'send_if_off' CONF_MIN_TEMP = 'min_temp' CONF_MAX_TEMP = 'max_temp' SCHEMA_BASE = CLIMATE_PLATFORM_SCHEMA.extend(MQTT_BASE_PLATFORM_SCHEMA.schema) PLATFORM_SCHEMA = SCHEMA_BASE.extend({ vol.Optional(CONF_POWER_COMMAND_TOPIC): mqtt.valid_publish_topic, vol.Optional(CONF_MODE_COMMAND_TOPIC): mqtt.valid_publish_topic, vol.Optional(CONF_TEMPERATURE_COMMAND_TOPIC): mqtt.valid_publish_topic, vol.Optional(CONF_FAN_MODE_COMMAND_TOPIC): mqtt.valid_publish_topic, vol.Optional(CONF_SWING_MODE_COMMAND_TOPIC): mqtt.valid_publish_topic, vol.Optional(CONF_AWAY_MODE_COMMAND_TOPIC): mqtt.valid_publish_topic, vol.Optional(CONF_HOLD_COMMAND_TOPIC): mqtt.valid_publish_topic, vol.Optional(CONF_AUX_COMMAND_TOPIC): mqtt.valid_publish_topic, vol.Optional(CONF_POWER_STATE_TOPIC): mqtt.valid_subscribe_topic, vol.Optional(CONF_MODE_STATE_TOPIC): mqtt.valid_subscribe_topic, vol.Optional(CONF_TEMPERATURE_STATE_TOPIC): mqtt.valid_subscribe_topic, vol.Optional(CONF_FAN_MODE_STATE_TOPIC): mqtt.valid_subscribe_topic, vol.Optional(CONF_SWING_MODE_STATE_TOPIC): mqtt.valid_subscribe_topic,
SUPPORT_FLAGS = (SUPPORT_TARGET_TEMPERATURE | SUPPORT_OPERATION_MODE) PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Required(CONF_HEATER): cv.entity_id, vol.Required(CONF_SENSOR): cv.entity_id, vol.Optional(CONF_AC_MODE): cv.boolean, vol.Optional(CONF_MAX_TEMP): vol.Coerce(float), vol.Optional(CONF_MIN_DUR): vol.All(cv.time_period, cv.positive_timedelta), vol.Optional(CONF_MIN_TEMP): vol.Coerce(float), vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, vol.Optional(CONF_COLD_TOLERANCE, default=DEFAULT_TOLERANCE): vol.Coerce(float), vol.Optional(CONF_HOT_TOLERANCE, default=DEFAULT_TOLERANCE): vol.Coerce(float), vol.Optional(CONF_TARGET_TEMP): vol.Coerce(float), vol.Optional(CONF_KEEP_ALIVE): vol.All(cv.time_period, cv.positive_timedelta), vol.Optional(CONF_INITIAL_OPERATION_MODE): vol.In([STATE_AUTO, STATE_OFF]), vol.Optional(CONF_AWAY_TEMP): vol.Coerce(float) })
from homeassistant.exceptions import PlatformNotReady from homeassistant.helpers import config_validation as cv from homeassistant.helpers.aiohttp_client import async_get_clientsession from homeassistant.util.temperature import convert as convert_temperature REQUIREMENTS = ['pysensibo==1.0.2'] _LOGGER = logging.getLogger(__name__) ALL = ['all'] TIMEOUT = 10 SERVICE_ASSUME_STATE = 'sensibo_assume_state' PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Required(CONF_API_KEY): cv.string, vol.Optional(CONF_ID, default=ALL): vol.All(cv.ensure_list, [cv.string]), }) ASSUME_STATE_SCHEMA = vol.Schema({ vol.Optional(ATTR_ENTITY_ID): cv.entity_ids, vol.Required(ATTR_STATE): cv.string, }) _FETCH_FIELDS = ','.join([ 'room{name}', 'measurements', 'remoteCapabilities', 'acState', 'connectionStatus{isAlive}', 'temperatureUnit']) _INITIAL_FETCH_FIELDS = 'id,' + _FETCH_FIELDS FIELD_TO_FLAG = { 'fanLevel': SUPPORT_FAN_MODE, 'mode': SUPPORT_OPERATION_MODE,
from homeassistant.helpers import config_validation as cv from homeassistant.helpers.aiohttp_client import async_get_clientsession from homeassistant.util.temperature import convert as convert_temperature from .const import DOMAIN as SENSIBO_DOMAIN _LOGGER = logging.getLogger(__name__) ALL = ["all"] TIMEOUT = 8 SERVICE_ASSUME_STATE = "assume_state" PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Required(CONF_API_KEY): cv.string, vol.Optional(CONF_ID, default=ALL): vol.All(cv.ensure_list, [cv.string]), }) ASSUME_STATE_SCHEMA = vol.Schema({ vol.Optional(ATTR_ENTITY_ID): cv.entity_ids, vol.Required(ATTR_STATE): cv.string }) _FETCH_FIELDS = ",".join([ "room{name}", "measurements", "remoteCapabilities", "acState", "connectionStatus{isAlive}", "temperatureUnit",
import voluptuous as vol from homeassistant.components.climate import ( PRECISION_TENTHS, STATE_COOL, STATE_HEAT, STATE_IDLE, ClimateDevice, PLATFORM_SCHEMA) from homeassistant.const import ( CONF_HOST, CONF_PASSWORD, CONF_USERNAME, TEMP_FAHRENHEIT, ATTR_TEMPERATURE) import homeassistant.helpers.config_validation as cv REQUIREMENTS = ['proliphix==0.4.1'] 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_devices, discovery_info=None): """Set 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)])
CONF_MAX_TEMP = 'max_temp' CONF_TARGET_TEMP = 'target_temp' CONF_AC_MODE = 'ac_mode' CONF_MIN_DUR = 'min_cycle_duration' CONF_TOLERANCE = 'tolerance' PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Required(CONF_HEATER): cv.entity_id, vol.Required(CONF_SENSOR): cv.entity_id, vol.Optional(CONF_AC_MODE): cv.boolean, vol.Optional(CONF_MAX_TEMP): vol.Coerce(float), vol.Optional(CONF_MIN_DUR): vol.All(cv.time_period, cv.positive_timedelta), vol.Optional(CONF_MIN_TEMP): vol.Coerce(float), vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, vol.Optional(CONF_TOLERANCE, default=DEFAULT_TOLERANCE): vol.Coerce(float), vol.Optional(CONF_TARGET_TEMP): vol.Coerce(float), }) def setup_platform(hass, config, add_devices, discovery_info=None): """Setup the generic thermostat.""" name = config.get(CONF_NAME) heater_entity_id = config.get(CONF_HEATER)
CONF_HUMIDIFIER = 'humidifier' DEFAULT_SSL = False VALID_FAN_STATES = [STATE_ON, STATE_AUTO] VALID_THERMOSTAT_MODES = [STATE_HEAT, STATE_COOL, STATE_OFF, STATE_AUTO] HOLD_MODE_OFF = 'off' HOLD_MODE_TEMPERATURE = 'temperature' PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Required(CONF_HOST): cv.string, vol.Optional(CONF_PASSWORD): cv.string, vol.Optional(CONF_HUMIDIFIER, default=True): cv.boolean, vol.Optional(CONF_SSL, default=DEFAULT_SSL): cv.boolean, vol.Optional(CONF_TIMEOUT, default=5): vol.All(vol.Coerce(int), vol.Range(min=1)), vol.Optional(CONF_USERNAME): cv.string, }) def setup_platform(hass, config, add_devices, discovery_info=None): """Set up the Venstar thermostat.""" import venstarcolortouch username = config.get(CONF_USERNAME) password = config.get(CONF_PASSWORD) host = config.get(CONF_HOST) timeout = config.get(CONF_TIMEOUT) humidifier = config.get(CONF_HUMIDIFIER)
_LOGGER = logging.getLogger(__name__) CONF_GATEWAY_ADDRRESS = "gateway_address" DEFAULT_PORT = 9999 DEFAULT_GATEWAY_ADDRRESS = 1 SIGNAL_DEVICE_ADDED = "zhong_hong_device_added" SIGNAL_ZHONG_HONG_HUB_START = "zhong_hong_hub_start" PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( { vol.Required(CONF_HOST): cv.string, vol.Optional(CONF_PORT, default=DEFAULT_PORT): cv.port, vol.Optional( CONF_GATEWAY_ADDRRESS, default=DEFAULT_GATEWAY_ADDRRESS ): cv.positive_int, } ) SUPPORT_HVAC = [ HVAC_MODE_COOL, HVAC_MODE_HEAT, HVAC_MODE_DRY, HVAC_MODE_FAN_ONLY, HVAC_MODE_OFF, ] ZHONG_HONG_MODE_COOL = "cool" ZHONG_HONG_MODE_HEAT = "heat"
ATTR_TARGET_TEMP_HIGH, ATTR_TARGET_TEMP_LOW, STATE_AUTO, STATE_COOL, STATE_ECO, STATE_HEAT, SUPPORT_AWAY_MODE, SUPPORT_FAN_MODE, SUPPORT_OPERATION_MODE, SUPPORT_TARGET_TEMPERATURE, SUPPORT_TARGET_TEMPERATURE_HIGH, SUPPORT_TARGET_TEMPERATURE_LOW) from homeassistant.const import ( ATTR_TEMPERATURE, CONF_SCAN_INTERVAL, STATE_OFF, STATE_ON, TEMP_CELSIUS, TEMP_FAHRENHEIT) from homeassistant.helpers.dispatcher import async_dispatcher_connect from . import DATA_NEST, DOMAIN as NEST_DOMAIN, SIGNAL_NEST_UPDATE DEPENDENCIES = ['nest'] _LOGGER = logging.getLogger(__name__) PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Optional(CONF_SCAN_INTERVAL): vol.All(vol.Coerce(int), vol.Range(min=1)), }) NEST_MODE_HEAT_COOL = 'heat-cool' def setup_platform(hass, config, add_entities, discovery_info=None): """Set up the Nest thermostat. No longer in use. """ async def async_setup_entry(hass, entry, async_add_entities): """Set up the Nest climate device based on a config entry.""" temp_unit = hass.config.units.temperature_unit
CONF_CONTROLLER_STATUS_STATE_ADDRESS = 'controller_status_state_address' CONF_OPERATION_MODE_FROST_PROTECTION_ADDRESS = \ 'operation_mode_frost_protection_address' CONF_OPERATION_MODE_NIGHT_ADDRESS = 'operation_mode_night_address' CONF_OPERATION_MODE_COMFORT_ADDRESS = 'operation_mode_comfort_address' DEFAULT_NAME = 'KNX Climate' DEPENDENCIES = ['knx'] PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, vol.Required(CONF_SETPOINT_ADDRESS): cv.string, vol.Required(CONF_TEMPERATURE_ADDRESS): cv.string, vol.Required(CONF_TARGET_TEMPERATURE_ADDRESS): cv.string, vol.Optional(CONF_OPERATION_MODE_ADDRESS): cv.string, vol.Optional(CONF_OPERATION_MODE_STATE_ADDRESS): cv.string, vol.Optional(CONF_CONTROLLER_STATUS_ADDRESS): cv.string, vol.Optional(CONF_CONTROLLER_STATUS_STATE_ADDRESS): cv.string, vol.Optional(CONF_OPERATION_MODE_FROST_PROTECTION_ADDRESS): cv.string, vol.Optional(CONF_OPERATION_MODE_NIGHT_ADDRESS): cv.string, vol.Optional(CONF_OPERATION_MODE_COMFORT_ADDRESS): cv.string, }) @asyncio.coroutine def async_setup_platform(hass, config, async_add_devices, discovery_info=None): """Set up climate(s) for KNX platform.""" if DATA_KNX not in hass.data \ or not hass.data[DATA_KNX].initialized: return False