core/homeassistant/components/sensor/vera.py

126 lines
4.1 KiB
Python
Raw Normal View History

2015-03-02 10:09:00 +00:00
""" Support for Vera lights. """
import logging
import requests
import time
import json
from homeassistant.helpers import Device
import homeassistant.external.vera.vera as veraApi
2015-03-02 10:09:00 +00:00
from homeassistant.const import (STATE_OPEN, STATE_CLOSED, ATTR_FRIENDLY_NAME)
_LOGGER = logging.getLogger('Vera_Sensor')
vera_controller = None
vera_sensors = []
def get_devices(hass, config):
""" Find and return Vera Sensors. """
try:
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
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)
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)))
except Exception as inst:
_LOGGER.error("Could not find Vera sensors: %s", inst)
return vera_sensors
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:
return item
return None
def get_sensors():
return vera_sensors
class VeraSensor(Device):
""" Represents a Vera Sensor """
extra_data = None
current_value = ''
def __init__(self, vera_device, extra_data=None):
self.vera_device = vera_device
self.extra_data = extra_data
def __str__(self):
return "%s %s %s" % (self.name(), self.deviceId(), self.state())
@property
def state(self):
return self.current_value
def updateState(self):
return self.state()
@property
def unique_id(self):
""" Returns the id of this switch """
return "{}.{}".format(
self.__class__, self.info.get('uniqueid', self.name))
2015-03-02 10:09:00 +00:00
@property
def name(self):
""" Get the mame of the switch. """
if self.extra_data and self.extra_data.get('name'):
return self.extra_data.get('name')
return self.vera_device.name
@property
def state_attributes(self):
attr = super().state_attributes
if self.vera_device.has_battery:
attr['Battery'] = self.vera_device.battery_level + '%'
if self.vera_device.is_armable:
armed = self.vera_device.refresh_value('Armed')
attr['Armed'] = 'True' if armed == '1' else 'False'
if self.vera_device.is_trippable:
lastTripped = self.vera_device.refresh_value('LastTrip')
tripTimeStr = time.strftime("%Y-%m-%d %H:%M", time.localtime(int(lastTripped)))
attr['Last Tripped'] = tripTimeStr
tripped = self.vera_device.refresh_value('Tripped')
attr['Tripped'] = 'True' if tripped == '1' else 'False'
attr['Vera Device Id'] = self.vera_device.vera_device_id
return attr
def update(self):
if self.vera_device.category == "Temperature Sensor":
self.vera_device.refresh_value('CurrentTemperature')
self.current_value = self.vera_device.get_value('CurrentTemperature') + '°' + self.vera_device.veraController.temperature_units
elif self.vera_device.category == "Light Sensor":
self.vera_device.refresh_value('CurrentLevel')
self.current_value = self.vera_device.get_value('CurrentLevel')
elif self.vera_device.category == "Sensor":
tripped = self.vera_device.refresh_value('Tripped')
self.current_value = 'Tripped' if tripped == '1' else 'Not Tripped'
else:
self.current_value = 'Unknown'