homematic: Add homematic.put_paramset service (#16024)

Service to call putParamset method of XML-RPC API
This commit is contained in:
Dan Klaffenbach 2018-08-22 00:20:26 +02:00 committed by Daniel Perna
parent 7ed8ed83e3
commit b9733d0d99
2 changed files with 60 additions and 0 deletions

View File

@ -48,6 +48,8 @@ ATTR_MESSAGE = 'message'
ATTR_MODE = 'mode'
ATTR_TIME = 'time'
ATTR_UNIQUE_ID = 'unique_id'
ATTR_PARAMSET_KEY = 'paramset_key'
ATTR_PARAMSET = 'paramset'
EVENT_KEYPRESS = 'homematic.keypress'
EVENT_IMPULSE = 'homematic.impulse'
@ -58,6 +60,7 @@ SERVICE_RECONNECT = 'reconnect'
SERVICE_SET_VARIABLE_VALUE = 'set_variable_value'
SERVICE_SET_DEVICE_VALUE = 'set_device_value'
SERVICE_SET_INSTALL_MODE = 'set_install_mode'
SERVICE_PUT_PARAMSET = 'put_paramset'
HM_DEVICE_TYPES = {
DISCOVER_SWITCHES: [
@ -232,6 +235,13 @@ SCHEMA_SERVICE_SET_INSTALL_MODE = vol.Schema({
vol.Optional(ATTR_ADDRESS): vol.All(cv.string, vol.Upper),
})
SCHEMA_SERVICE_PUT_PARAMSET = vol.Schema({
vol.Required(ATTR_INTERFACE): cv.string,
vol.Required(ATTR_ADDRESS): vol.All(cv.string, vol.Upper),
vol.Required(ATTR_PARAMSET_KEY): vol.All(cv.string, vol.Upper),
vol.Required(ATTR_PARAMSET): dict,
})
@bind_hass
def virtualkey(hass, address, channel, param, interface=None):
@ -271,6 +281,19 @@ def set_device_value(hass, address, channel, param, value, interface=None):
hass.services.call(DOMAIN, SERVICE_SET_DEVICE_VALUE, data)
@bind_hass
def put_paramset(hass, interface, address, paramset_key, paramset):
"""Call putParamset XML-RPC method of supplied interface."""
data = {
ATTR_INTERFACE: interface,
ATTR_ADDRESS: address,
ATTR_PARAMSET_KEY: paramset_key,
ATTR_PARAMSET: paramset,
}
hass.services.call(DOMAIN, SERVICE_PUT_PARAMSET, data)
@bind_hass
def set_install_mode(hass, interface, mode=None, time=None, address=None):
"""Call setInstallMode XML-RPC method of supplied interface."""
@ -439,6 +462,26 @@ def setup(hass, config):
DOMAIN, SERVICE_SET_INSTALL_MODE, _service_handle_install_mode,
schema=SCHEMA_SERVICE_SET_INSTALL_MODE)
def _service_put_paramset(service):
"""Service to call the putParamset method on a HomeMatic connection."""
interface = service.data.get(ATTR_INTERFACE)
address = service.data.get(ATTR_ADDRESS)
paramset_key = service.data.get(ATTR_PARAMSET_KEY)
# When passing in the paramset from a YAML file we get an OrderedDict
# here instead of a dict, so add this explicit cast.
# The service schema makes sure that this cast works.
paramset = dict(service.data.get(ATTR_PARAMSET))
_LOGGER.debug(
"Calling putParamset: %s, %s, %s, %s",
interface, address, paramset_key, paramset
)
homematic.putParamset(interface, address, paramset_key, paramset)
hass.services.register(
DOMAIN, SERVICE_PUT_PARAMSET, _service_put_paramset,
schema=SCHEMA_SERVICE_PUT_PARAMSET)
return True

View File

@ -66,3 +66,20 @@ set_install_mode:
address:
description: (Optional) Address of homematic device or BidCoS-RF to learn
example: LEQ3948571
put_paramset:
description: Call to putParamset in the RPC XML interface
fields:
interface:
description: The interfaces name from the config
example: wireless
address:
description: Address of Homematic device
example: LEQ3948571
paramset_key:
description: The paramset_key argument to putParamset
example: MASTER
paramset:
description: A paramset dictionary
example: '{"WEEK_PROGRAM_POINTER": 1}'