mirror of
https://github.com/home-assistant/core.git
synced 2025-07-23 13:17:32 +00:00
add move_postion support for HA rollershutter / CONFIG_SCHEMA (#2873)
This commit is contained in:
parent
c1653d2fca
commit
df4a9ea1da
@ -12,7 +12,7 @@ import voluptuous as vol
|
|||||||
|
|
||||||
import homeassistant.helpers.config_validation as cv
|
import homeassistant.helpers.config_validation as cv
|
||||||
from homeassistant.const import (EVENT_HOMEASSISTANT_STOP, STATE_UNKNOWN,
|
from homeassistant.const import (EVENT_HOMEASSISTANT_STOP, STATE_UNKNOWN,
|
||||||
CONF_USERNAME, CONF_PASSWORD)
|
CONF_USERNAME, CONF_PASSWORD, CONF_PLATFORM)
|
||||||
from homeassistant.helpers.entity import Entity
|
from homeassistant.helpers.entity import Entity
|
||||||
from homeassistant.helpers import discovery
|
from homeassistant.helpers import discovery
|
||||||
from homeassistant.config import load_yaml_config_file
|
from homeassistant.config import load_yaml_config_file
|
||||||
@ -67,7 +67,8 @@ HM_ATTRIBUTE_SUPPORT = {
|
|||||||
'CONTROL_MODE': ['Mode', {0: 'Auto', 1: 'Manual', 2: 'Away', 3: 'Boost'}],
|
'CONTROL_MODE': ['Mode', {0: 'Auto', 1: 'Manual', 2: 'Away', 3: 'Boost'}],
|
||||||
'POWER': ['Power', {}],
|
'POWER': ['Power', {}],
|
||||||
'CURRENT': ['Current', {}],
|
'CURRENT': ['Current', {}],
|
||||||
'VOLTAGE': ['Voltage', {}]
|
'VOLTAGE': ['Voltage', {}],
|
||||||
|
'WORKING': ['Working', {0: 'No', 1: 'Yes'}],
|
||||||
}
|
}
|
||||||
|
|
||||||
HM_PRESS_EVENTS = [
|
HM_PRESS_EVENTS = [
|
||||||
@ -97,18 +98,29 @@ CONF_REMOTE_PORT = 'remote_port'
|
|||||||
CONF_RESOLVENAMES = 'resolvenames'
|
CONF_RESOLVENAMES = 'resolvenames'
|
||||||
CONF_DELAY = 'delay'
|
CONF_DELAY = 'delay'
|
||||||
|
|
||||||
PLATFORM_SCHEMA = vol.Schema({
|
|
||||||
vol.Required(CONF_LOCAL_IP): cv.string,
|
DEVICE_SCHEMA = vol.Schema({
|
||||||
vol.Optional(CONF_LOCAL_PORT, default=8943): cv.port,
|
vol.Required(CONF_PLATFORM): "homematic",
|
||||||
vol.Required(CONF_REMOTE_IP): cv.string,
|
vol.Required(ATTR_NAME): cv.string,
|
||||||
vol.Optional(CONF_REMOTE_PORT, default=2001): cv.port,
|
vol.Required(ATTR_ADDRESS): cv.string,
|
||||||
vol.Optional(CONF_RESOLVENAMES, default=False):
|
vol.Optional(ATTR_CHANNEL, default=1): vol.Coerce(int),
|
||||||
vol.In(CONF_RESOLVENAMES_OPTIONS),
|
vol.Optional(ATTR_PARAM): cv.string,
|
||||||
vol.Optional(CONF_USERNAME, default="Admin"): cv.string,
|
|
||||||
vol.Optional(CONF_PASSWORD, default=""): cv.string,
|
|
||||||
vol.Optional(CONF_DELAY, default=0.5): cv.string,
|
|
||||||
})
|
})
|
||||||
|
|
||||||
|
CONFIG_SCHEMA = vol.Schema({
|
||||||
|
DOMAIN: vol.Schema({
|
||||||
|
vol.Required(CONF_LOCAL_IP): cv.string,
|
||||||
|
vol.Optional(CONF_LOCAL_PORT, default=8943): cv.port,
|
||||||
|
vol.Required(CONF_REMOTE_IP): cv.string,
|
||||||
|
vol.Optional(CONF_REMOTE_PORT, default=2001): cv.port,
|
||||||
|
vol.Optional(CONF_RESOLVENAMES, default=False):
|
||||||
|
vol.In(CONF_RESOLVENAMES_OPTIONS),
|
||||||
|
vol.Optional(CONF_USERNAME, default="Admin"): cv.string,
|
||||||
|
vol.Optional(CONF_PASSWORD, default=""): cv.string,
|
||||||
|
vol.Optional(CONF_DELAY, default=0.5): cv.string,
|
||||||
|
}),
|
||||||
|
}, extra=vol.ALLOW_EXTRA)
|
||||||
|
|
||||||
SCHEMA_SERVICE_VIRTUALKEY = vol.Schema({
|
SCHEMA_SERVICE_VIRTUALKEY = vol.Schema({
|
||||||
vol.Required(ATTR_ADDRESS): cv.string,
|
vol.Required(ATTR_ADDRESS): cv.string,
|
||||||
vol.Required(ATTR_CHANNEL): vol.Coerce(int),
|
vol.Required(ATTR_CHANNEL): vol.Coerce(int),
|
||||||
@ -123,14 +135,14 @@ def setup(hass, config):
|
|||||||
|
|
||||||
from pyhomematic import HMConnection
|
from pyhomematic import HMConnection
|
||||||
|
|
||||||
local_ip = config[DOMAIN][0].get(CONF_LOCAL_IP)
|
local_ip = config[DOMAIN].get(CONF_LOCAL_IP)
|
||||||
local_port = config[DOMAIN][0].get(CONF_LOCAL_PORT)
|
local_port = config[DOMAIN].get(CONF_LOCAL_PORT)
|
||||||
remote_ip = config[DOMAIN][0].get(CONF_REMOTE_IP)
|
remote_ip = config[DOMAIN].get(CONF_REMOTE_IP)
|
||||||
remote_port = config[DOMAIN][0].get(CONF_REMOTE_PORT)
|
remote_port = config[DOMAIN].get(CONF_REMOTE_PORT)
|
||||||
resolvenames = config[DOMAIN][0].get(CONF_RESOLVENAMES)
|
resolvenames = config[DOMAIN].get(CONF_RESOLVENAMES)
|
||||||
username = config[DOMAIN][0].get(CONF_USERNAME)
|
username = config[DOMAIN].get(CONF_USERNAME)
|
||||||
password = config[DOMAIN][0].get(CONF_PASSWORD)
|
password = config[DOMAIN].get(CONF_PASSWORD)
|
||||||
HOMEMATIC_LINK_DELAY = config[DOMAIN][0].get(CONF_DELAY)
|
HOMEMATIC_LINK_DELAY = config[DOMAIN].get(CONF_DELAY)
|
||||||
|
|
||||||
if remote_ip is None or local_ip is None:
|
if remote_ip is None or local_ip is None:
|
||||||
_LOGGER.error("Missing remote CCU/Homegear or local address")
|
_LOGGER.error("Missing remote CCU/Homegear or local address")
|
||||||
@ -217,8 +229,9 @@ def system_callback_handler(hass, config, src, *args):
|
|||||||
|
|
||||||
def _get_devices(device_type, keys):
|
def _get_devices(device_type, keys):
|
||||||
"""Get the Homematic devices."""
|
"""Get the Homematic devices."""
|
||||||
# run
|
|
||||||
device_arr = []
|
device_arr = []
|
||||||
|
|
||||||
|
# pylint: disable=too-many-nested-blocks
|
||||||
for key in keys:
|
for key in keys:
|
||||||
device = HOMEMATIC.devices[key]
|
device = HOMEMATIC.devices[key]
|
||||||
class_name = device.__class__.__name__
|
class_name = device.__class__.__name__
|
||||||
@ -244,15 +257,22 @@ def _get_devices(device_type, keys):
|
|||||||
name = _create_ha_name(name=device.NAME,
|
name = _create_ha_name(name=device.NAME,
|
||||||
channel=channel,
|
channel=channel,
|
||||||
param=param)
|
param=param)
|
||||||
device_dict = dict(platform="homematic",
|
device_dict = {
|
||||||
address=key,
|
CONF_PLATFORM: "homematic",
|
||||||
name=name,
|
ATTR_ADDRESS: key,
|
||||||
channel=channel)
|
ATTR_NAME: name,
|
||||||
|
ATTR_CHANNEL: channel
|
||||||
|
}
|
||||||
if param is not None:
|
if param is not None:
|
||||||
device_dict[ATTR_PARAM] = param
|
device_dict.update({ATTR_PARAM: param})
|
||||||
|
|
||||||
# Add new device
|
# Add new device
|
||||||
device_arr.append(device_dict)
|
try:
|
||||||
|
DEVICE_SCHEMA(device_dict)
|
||||||
|
device_arr.append(device_dict)
|
||||||
|
except vol.MultipleInvalid as err:
|
||||||
|
_LOGGER.error("Invalid device config: %s",
|
||||||
|
str(err))
|
||||||
else:
|
else:
|
||||||
_LOGGER.debug("Channel %i not in params", channel)
|
_LOGGER.debug("Channel %i not in params", channel)
|
||||||
else:
|
else:
|
||||||
|
@ -45,8 +45,8 @@ class HMRollershutter(homematic.HMDevice, RollershutterDevice):
|
|||||||
return int((1 - self._hm_get_state()) * 100)
|
return int((1 - self._hm_get_state()) * 100)
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def position(self, **kwargs):
|
def move_position(self, **kwargs):
|
||||||
"""Move to a defined position: 0 (closed) and 100 (open)."""
|
"""Move the roller shutter to a specific position."""
|
||||||
if self.available:
|
if self.available:
|
||||||
if ATTR_CURRENT_POSITION in kwargs:
|
if ATTR_CURRENT_POSITION in kwargs:
|
||||||
position = float(kwargs[ATTR_CURRENT_POSITION])
|
position = float(kwargs[ATTR_CURRENT_POSITION])
|
||||||
|
Loading…
x
Reference in New Issue
Block a user