Skip to content

Commit

Permalink
Merge 1fffd67 into 258fe1f
Browse files Browse the repository at this point in the history
  • Loading branch information
fabaff committed Dec 19, 2018
2 parents 258fe1f + 1fffd67 commit 97af6f5
Show file tree
Hide file tree
Showing 4 changed files with 65 additions and 86 deletions.
110 changes: 45 additions & 65 deletions homeassistant/components/ihc/__init__.py
Expand Up @@ -9,33 +9,37 @@
import xml.etree.ElementTree

import voluptuous as vol
from homeassistant.components.binary_sensor import (
DEVICE_CLASSES_SCHEMA)

from homeassistant.components.binary_sensor import DEVICE_CLASSES_SCHEMA
from homeassistant.components.ihc.const import (
ATTR_IHC_ID, ATTR_VALUE, CONF_AUTOSETUP, CONF_BINARY_SENSOR, CONF_DIMMABLE,
CONF_INFO, CONF_INVERTING, CONF_LIGHT, CONF_NODE, CONF_NOTE, CONF_POSITION,
CONF_SENSOR, CONF_SWITCH, CONF_XPATH, SERVICE_SET_RUNTIME_VALUE_BOOL,
SERVICE_SET_RUNTIME_VALUE_FLOAT, SERVICE_SET_RUNTIME_VALUE_INT)
from homeassistant.config import load_yaml_config_file
from homeassistant.const import (
CONF_ID, CONF_NAME, CONF_PASSWORD,
CONF_TYPE, CONF_UNIT_OF_MEASUREMENT, CONF_URL,
CONF_USERNAME, TEMP_CELSIUS)
CONF_ID, CONF_NAME, CONF_PASSWORD, CONF_TYPE, CONF_UNIT_OF_MEASUREMENT,
CONF_URL, CONF_USERNAME, TEMP_CELSIUS)
from homeassistant.helpers import discovery
import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.typing import HomeAssistantType

REQUIREMENTS = ['ihcsdk==2.2.0']

_LOGGER = logging.getLogger(__name__)

AUTO_SETUP_YAML = 'ihc_auto_setup.yaml'

DOMAIN = 'ihc'
IHC_DATA = 'ihc{}'

IHC_CONTROLLER = 'controller'
IHC_DATA = 'ihc{}'
IHC_INFO = 'info'
AUTO_SETUP_YAML = 'ihc_auto_setup.yaml'
IHC_PLATFORMS = ('binary_sensor', 'light', 'sensor', 'switch')


def validate_name(config):
"""Validate device name."""
"""Validate the device name."""
if CONF_NAME in config:
return config
ihcid = config[CONF_ID]
Expand All @@ -47,123 +51,99 @@ def validate_name(config):
DEVICE_SCHEMA = vol.Schema({
vol.Required(CONF_ID): cv.positive_int,
vol.Optional(CONF_NAME): cv.string,
vol.Optional(CONF_NOTE): cv.string,
vol.Optional(CONF_POSITION): cv.string,
vol.Optional(CONF_NOTE): cv.string
})


SWITCH_SCHEMA = DEVICE_SCHEMA.extend({
})
SWITCH_SCHEMA = DEVICE_SCHEMA.extend({})

BINARY_SENSOR_SCHEMA = DEVICE_SCHEMA.extend({
vol.Optional(CONF_TYPE): DEVICE_CLASSES_SCHEMA,
vol.Optional(CONF_INVERTING, default=False): cv.boolean,
vol.Optional(CONF_TYPE): DEVICE_CLASSES_SCHEMA,
})

LIGHT_SCHEMA = DEVICE_SCHEMA.extend({
vol.Optional(CONF_DIMMABLE, default=False): cv.boolean,
})

SENSOR_SCHEMA = DEVICE_SCHEMA.extend({
vol.Optional(CONF_UNIT_OF_MEASUREMENT,
default=TEMP_CELSIUS): cv.string,
vol.Optional(CONF_UNIT_OF_MEASUREMENT, default=TEMP_CELSIUS): cv.string,
})

IHC_SCHEMA = vol.Schema({
vol.Required(CONF_PASSWORD): cv.string,
vol.Required(CONF_URL): cv.string,
vol.Required(CONF_USERNAME): cv.string,
vol.Required(CONF_PASSWORD): cv.string,
vol.Optional(CONF_AUTOSETUP, default=True): cv.boolean,
vol.Optional(CONF_INFO, default=True): cv.boolean,
vol.Optional(CONF_BINARY_SENSOR, default=[]):
vol.All(cv.ensure_list, [
vol.All(
BINARY_SENSOR_SCHEMA,
validate_name)
]),
vol.All(
cv.ensure_list, [vol.All(BINARY_SENSOR_SCHEMA, validate_name)]),
vol.Optional(CONF_INFO, default=True): cv.boolean,
vol.Optional(CONF_LIGHT, default=[]):
vol.All(cv.ensure_list, [
vol.All(
LIGHT_SCHEMA,
validate_name)
]),
vol.All(cv.ensure_list, [vol.All(LIGHT_SCHEMA, validate_name)]),
vol.Optional(CONF_SENSOR, default=[]):
vol.All(cv.ensure_list, [
vol.All(
SENSOR_SCHEMA,
validate_name)
]),
vol.All(cv.ensure_list, [vol.All(SENSOR_SCHEMA, validate_name)]),
vol.Optional(CONF_SWITCH, default=[]):
vol.All(cv.ensure_list, [
vol.All(
SWITCH_SCHEMA,
validate_name)
]),
vol.All(cv.ensure_list, [vol.All(SWITCH_SCHEMA, validate_name)]),
})

CONFIG_SCHEMA = vol.Schema({
DOMAIN: vol.Schema(vol.All(
cv.ensure_list,
[IHC_SCHEMA]
)),
DOMAIN: vol.Schema(vol.All(cv.ensure_list, [IHC_SCHEMA])),
}, extra=vol.ALLOW_EXTRA)


AUTO_SETUP_SCHEMA = vol.Schema({
vol.Optional(CONF_BINARY_SENSOR, default=[]):
vol.All(cv.ensure_list, [
vol.All({
vol.Required(CONF_XPATH): cv.string,
vol.Required(CONF_NODE): cv.string,
vol.Optional(CONF_TYPE): cv.string,
vol.Required(CONF_XPATH): cv.string,
vol.Optional(CONF_INVERTING, default=False): cv.boolean,
vol.Optional(CONF_TYPE): cv.string,
})
]),
vol.Optional(CONF_LIGHT, default=[]):
vol.All(cv.ensure_list, [
vol.All({
vol.Required(CONF_XPATH): cv.string,
vol.Required(CONF_NODE): cv.string,
vol.Required(CONF_XPATH): cv.string,
vol.Optional(CONF_DIMMABLE, default=False): cv.boolean,
})
]),
vol.Optional(CONF_SENSOR, default=[]):
vol.All(cv.ensure_list, [
vol.All({
vol.Required(CONF_XPATH): cv.string,
vol.Required(CONF_NODE): cv.string,
vol.Required(CONF_XPATH): cv.string,
vol.Optional(CONF_UNIT_OF_MEASUREMENT,
default=TEMP_CELSIUS): cv.string,
})
]),
vol.Optional(CONF_SWITCH, default=[]):
vol.All(cv.ensure_list, [
vol.All({
vol.Required(CONF_XPATH): cv.string,
vol.Required(CONF_NODE): cv.string,
vol.Required(CONF_XPATH): cv.string,
})
]),
})

SET_RUNTIME_VALUE_BOOL_SCHEMA = vol.Schema({
vol.Required(ATTR_IHC_ID): cv.positive_int,
vol.Required(ATTR_VALUE): cv.boolean
vol.Required(ATTR_VALUE): cv.boolean,
})

SET_RUNTIME_VALUE_INT_SCHEMA = vol.Schema({
vol.Required(ATTR_IHC_ID): cv.positive_int,
vol.Required(ATTR_VALUE): int
vol.Required(ATTR_VALUE): int,
})

SET_RUNTIME_VALUE_FLOAT_SCHEMA = vol.Schema({
vol.Required(ATTR_IHC_ID): cv.positive_int,
vol.Required(ATTR_VALUE): vol.Coerce(float)
vol.Required(ATTR_VALUE): vol.Coerce(float),
})

_LOGGER = logging.getLogger(__name__)

IHC_PLATFORMS = ('binary_sensor', 'light', 'sensor', 'switch')


def setup(hass, config):
"""Set up the IHC platform."""
Expand All @@ -189,13 +169,13 @@ def ihc_setup(hass, config, conf, controller_id):
return False

if (conf[CONF_AUTOSETUP] and
not autosetup_ihc_products(hass, config, ihc_controller,
controller_id)):
not autosetup_ihc_products(
hass, config, ihc_controller, controller_id)):
return False
# Manual configuration
get_manual_configuration(hass, config, conf, ihc_controller,
controller_id)
# Store controler configuration
get_manual_configuration(
hass, config, conf, ihc_controller, controller_id)
# Store controller configuration
ihc_key = IHC_DATA.format(controller_id)
hass.data[ihc_key] = {
IHC_CONTROLLER: ihc_controller,
Expand All @@ -204,8 +184,8 @@ def ihc_setup(hass, config, conf, controller_id):
return True


def get_manual_configuration(hass, config, conf, ihc_controller,
controller_id):
def get_manual_configuration(
hass, config, conf, ihc_controller, controller_id):
"""Get manual configuration for IHC devices."""
for component in IHC_PLATFORMS:
discovery_info = {}
Expand All @@ -230,8 +210,8 @@ def get_manual_configuration(hass, config, conf, ihc_controller,
}
discovery_info[name] = device
if discovery_info:
discovery.load_platform(hass, component, DOMAIN,
discovery_info, config)
discovery.load_platform(
hass, component, DOMAIN, discovery_info, config)


def autosetup_ihc_products(hass: HomeAssistantType, config, ihc_controller,
Expand All @@ -256,11 +236,11 @@ def autosetup_ihc_products(hass: HomeAssistantType, config, ihc_controller,
groups = project.findall('.//group')
for component in IHC_PLATFORMS:
component_setup = auto_setup_conf[component]
discovery_info = get_discovery_info(component_setup, groups,
controller_id)
discovery_info = get_discovery_info(
component_setup, groups, controller_id)
if discovery_info:
discovery.load_platform(hass, component, DOMAIN, discovery_info,
config)
discovery.load_platform(
hass, component, DOMAIN, discovery_info, config)
return True


Expand Down
20 changes: 10 additions & 10 deletions homeassistant/components/ihc/const.py
@@ -1,22 +1,22 @@
"""IHC component constants."""

CONF_AUTOSETUP = 'auto_setup'
CONF_BINARY_SENSOR = 'binary_sensor'
CONF_DIMMABLE = 'dimmable'
CONF_INFO = 'info'
CONF_XPATH = 'xpath'
CONF_NODE = 'node'
CONF_INVERTING = 'inverting'
CONF_DIMMABLE = 'dimmable'
CONF_BINARY_SENSOR = 'binary_sensor'
CONF_LIGHT = 'light'
CONF_SENSOR = 'sensor'
CONF_SWITCH = 'switch'
CONF_NAME = 'name'
CONF_POSITION = 'position'
CONF_NODE = 'node'
CONF_NOTE = 'note'
CONF_POSITION = 'position'
CONF_SENSOR = 'sensor'
CONF_SWITCH = 'switch'
CONF_XPATH = 'xpath'

ATTR_IHC_ID = 'ihc_id'
ATTR_VALUE = 'value'

SERVICE_SET_RUNTIME_VALUE_BOOL = "set_runtime_value_bool"
SERVICE_SET_RUNTIME_VALUE_INT = "set_runtime_value_int"
SERVICE_SET_RUNTIME_VALUE_FLOAT = "set_runtime_value_float"
SERVICE_SET_RUNTIME_VALUE_BOOL = 'set_runtime_value_bool'
SERVICE_SET_RUNTIME_VALUE_FLOAT = 'set_runtime_value_float'
SERVICE_SET_RUNTIME_VALUE_INT = 'set_runtime_value_int'
3 changes: 1 addition & 2 deletions homeassistant/components/ihc/ihcdevice.py
@@ -1,5 +1,4 @@
"""Implementation of a base class for all IHC devices."""

from homeassistant.helpers.entity import Entity


Expand Down Expand Up @@ -51,7 +50,7 @@ def device_state_attributes(self):
'ihc_id': self.ihc_id,
'ihc_name': self.ihc_name,
'ihc_note': self.ihc_note,
'ihc_position': self.ihc_position
'ihc_position': self.ihc_position,
}

def on_ihc_change(self, ihc_id, value):
Expand Down
18 changes: 9 additions & 9 deletions homeassistant/components/ihc/services.yaml
@@ -1,26 +1,26 @@
# Describes the format for available IHC services

set_runtime_value_bool:
description: Set a boolean runtime value on the IHC controller
description: Set a boolean runtime value on the IHC controller.
fields:
ihc_id:
description: The integer IHC resource id
description: The integer IHC resource ID.
value:
description: The boolean value to set
description: The boolean value to set.

set_runtime_value_int:
description: Set an integer runtime value on the IHC controller
description: Set an integer runtime value on the IHC controller.
fields:
ihc_id:
description: The integer IHC resource id
description: The integer IHC resource ID.
value:
description: The integer value to set
description: The integer value to set.

set_runtime_value_float:
description: Set a float runtime value on the IHC controller
description: Set a float runtime value on the IHC controller.
fields:
ihc_id:
description: The integer IHC resource id
description: The integer IHC resource ID.
value:
description: The float value to set
description: The float value to set.

0 comments on commit 97af6f5

Please sign in to comment.