From dc8147c46db586c491b7a11b55ceae17647c2606 Mon Sep 17 00:00:00 2001 From: jamespcole Date: Sun, 8 Mar 2015 23:52:50 +1100 Subject: [PATCH] Changed vera components over to new config file format --- homeassistant/components/light/vera.py | 95 +++++++++++++++++-------- homeassistant/components/sensor/vera.py | 78 ++++++++++++++++---- homeassistant/components/switch/vera.py | 20 +++--- 3 files changed, 141 insertions(+), 52 deletions(-) diff --git a/homeassistant/components/light/vera.py b/homeassistant/components/light/vera.py index 5e7bad29d56..bb60c97624b 100644 --- a/homeassistant/components/light/vera.py +++ b/homeassistant/components/light/vera.py @@ -1,4 +1,59 @@ -""" Support for Vera lights. """ +""" +Support for Vera lights. + +Configuration: +This component is useful if you wish for switches connected to your Vera controller to appear as lights +in homeassistant. All switches will be added as a light unless you exclude them in the config. + +To use the Vera lights you will need to add something like the following to your config/configuration.yaml + +light: + platform: vera + vera_controller_url: http://YOUR_VERA_IP:3480/ + device_data: + - + vera_id: 12 + name: My awesome switch + exclude: true + - + vera_id: 13 + name: Another switch + +VARIABLES: + +vera_controller_url +*Required +This is the base URL of your vera controller including the port number if not running on 80 +Example: http://192.168.1.21:3480/ + + +device_data +*Optional +This contains an array additional device info for your Vera devices. It is not required and if +not specified all sensors configured in your Vera controller will be added with default values. + + +These are the variables for the device_data array: + +vera_id +*Required +The Vera device id you wish these configuration options to be applied to + + +name +*Optional +This parameter allows you to override the name of your Vera device in the HA interface, if not specified the +value configured for the device in your Vera will be used + + +exclude +*Optional +This parameter allows you to exclude the specified device from homeassistant, it should be set to "true" if +you want this device excluded + + + +""" import logging import requests import time @@ -7,7 +62,7 @@ import json from homeassistant.helpers import ToggleDevice import homeassistant.external.vera.vera as veraApi -_LOGGER = logging.getLogger('Vera_Light') +_LOGGER = logging.getLogger(__name__) def setup_platform(hass, config, add_devices_callback, discovery_info=None): @@ -18,46 +73,33 @@ def setup_platform(hass, config, add_devices_callback, discovery_info=None): _LOGGER.error("The required parameter 'vera_controller_url' was not found in config") return False - device_data_str = config.get('device_data') - device_data = None - if device_data_str: - try: - device_data = json.loads(device_data_str) - except Exception as json_ex: - _LOGGER.error('Vera lights error parsing device info, should be in the format [{"id" : 12, "name": "Lounge Light"}]: %s', json_ex) + device_data = config.get('device_data', None) controller = veraApi.VeraController(base_url) devices = controller.get_devices('Switch') lights = [] for device in devices: - if is_switch_a_light(device_data, device.deviceId): - lights.append(VeraLight(device, get_extra_device_data(device_data, device.deviceId))) + extra_data = get_extra_device_data(device_data, device.deviceId) + exclude = False + if extra_data: + exclude = extra_data.get('exclude', False) + + if exclude is not True: + lights.append(VeraLight(device, extra_data)) add_devices_callback(lights) except Exception as inst: _LOGGER.error("Could not find Vera lights: %s", inst) return False -# If you have z-wave switches that control lights you can configure them -# to be treated as lights using the "device_data" parameter in the config. -# If "device_data" is not set then all switches are treated as lights -def is_switch_a_light(device_data, device_id): - if not device_data: - return True - - for item in device_data: - if item.get('id') == device_id: - return True - - return False def get_extra_device_data(device_data, device_id): if not device_data: return None for item in device_data: - if item.get('id') == device_id: + if item.get('vera_id') == device_id: return item return None @@ -74,11 +116,6 @@ class VeraLight(ToggleDevice): self.vera_device = vera_device self.extra_data = extra_data - @property - def unique_id(self): - """ Returns the id of this light """ - return "{}.{}".format( - self.__class__, self.info.get('uniqueid', self.name)) @property def name(self): diff --git a/homeassistant/components/sensor/vera.py b/homeassistant/components/sensor/vera.py index 681799cc7e9..0f901123864 100644 --- a/homeassistant/components/sensor/vera.py +++ b/homeassistant/components/sensor/vera.py @@ -1,4 +1,56 @@ -""" Support for Vera lights. """ +""" +Support for Vera sensors. + +Configuration: +To use the Vera sensors you will need to add something like the following to your config/configuration.yaml + +sensor: + platform: vera + vera_controller_url: http://YOUR_VERA_IP:3480/ + device_data: + - + vera_id: 12 + name: My awesome sensor + exclude: true + - + vera_id: 13 + name: Another sensor + +VARIABLES: + +vera_controller_url +*Required +This is the base URL of your vera controller including the port number if not running on 80 +Example: http://192.168.1.21:3480/ + + +device_data +*Optional +This contains an array additional device info for your Vera devices. It is not required and if +not specified all sensors configured in your Vera controller will be added with default values. + + +These are the variables for the device_data array: + +vera_id +*Required +The Vera device id you wish these configuration options to be applied to + + +name +*Optional +This parameter allows you to override the name of your Vera device in the HA interface, if not specified the +value configured for the device in your Vera will be used + + +exclude +*Optional +This parameter allows you to exclude the specified device from homeassistant, it should be set to "true" if +you want this device excluded + + + +""" import logging import requests import time @@ -8,7 +60,7 @@ from homeassistant.helpers import Device import homeassistant.external.vera.vera as veraApi from homeassistant.const import (STATE_OPEN, STATE_CLOSED, ATTR_FRIENDLY_NAME) -_LOGGER = logging.getLogger('Vera_Sensor') +_LOGGER = logging.getLogger(__name__) vera_controller = None vera_sensors = [] @@ -19,22 +71,22 @@ def get_devices(hass, config): base_url = config.get('vera_controller_url') if not base_url: _LOGGER.error("The required parameter 'vera_controller_url' was not found in config") - #return False + return False - device_data_str = config.get('device_data') - device_data = None - if device_data_str: - try: - device_data = json.loads(device_data_str) - except Exception as json_ex: - _LOGGER.error('Vera sensors error parsing device info, should be in the format [{"id" : 12, "name": "Temperature"}]: %s', json_ex) + device_data = config.get('device_data', None) vera_controller = veraApi.VeraController(base_url) devices = vera_controller.get_devices(['Temperature Sensor', 'Light Sensor', 'Sensor']) vera_sensors = [] for device in devices: - vera_sensors.append(VeraSensor(device, get_extra_device_data(device_data, device.deviceId))) + extra_data = get_extra_device_data(device_data, device.deviceId) + exclude = False + if extra_data: + exclude = extra_data.get('exclude', False) + + if exclude is not True: + vera_sensors.append(VeraSensor(device, extra_data)) except Exception as inst: _LOGGER.error("Could not find Vera sensors: %s", inst) @@ -49,7 +101,7 @@ def get_extra_device_data(device_data, device_id): return None for item in device_data: - if item.get('id') == device_id: + if item.get('vera_id') == device_id: return item return None @@ -75,7 +127,7 @@ class VeraSensor(Device): @property def name(self): - """ Get the mame of the switch. """ + """ Get the mame of the sensor. """ if self.extra_data and self.extra_data.get('name'): return self.extra_data.get('name') return self.vera_device.name diff --git a/homeassistant/components/switch/vera.py b/homeassistant/components/switch/vera.py index 587fbfee708..8efb0a85b03 100644 --- a/homeassistant/components/switch/vera.py +++ b/homeassistant/components/switch/vera.py @@ -59,7 +59,7 @@ import json from homeassistant.helpers import ToggleDevice import homeassistant.external.vera.vera as veraApi -_LOGGER = logging.getLogger('Vera_Switch') +_LOGGER = logging.getLogger(__name__) vera_controller = None vera_switches = [] @@ -72,20 +72,20 @@ def get_devices(hass, config): _LOGGER.error("The required parameter 'vera_controller_url' was not found in config") return False - device_data_str = config.get('device_data') - device_data = None - if device_data_str: - try: - device_data = json.loads(device_data_str) - except Exception as json_ex: - _LOGGER.error('Vera switch error parsing device info, should be in the format [{"id" : 12, "name": "Lounge Light"}]: %s', json_ex) + device_data = config.get('device_data', None) vera_controller = veraApi.VeraController(base_url) devices = vera_controller.get_devices(['Switch', 'Armable Sensor']) vera_switches = [] for device in devices: - vera_switches.append(VeraSwitch(device, get_extra_device_data(device_data, device.deviceId))) + extra_data = get_extra_device_data(device_data, device.deviceId) + exclude = False + if extra_data: + exclude = extra_data.get('exclude', False) + + if exclude is not True: + vera_switches.append(VeraSwitch(device, extra_data)) except Exception as inst: _LOGGER.error("Could not find Vera switches: %s", inst) @@ -98,7 +98,7 @@ def get_extra_device_data(device_data, device_id): return None for item in device_data: - if item.get('id') == device_id: + if item.get('vera_id') == device_id: return item return None