Changed vera components over to new config file format

This commit is contained in:
jamespcole 2015-03-08 23:52:50 +11:00
parent a30d1dcfef
commit dc8147c46d
3 changed files with 141 additions and 52 deletions

View File

@ -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):

View File

@ -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

View File

@ -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