81 lines
2.6 KiB
Python
81 lines
2.6 KiB
Python
"""
|
|
Support for Powerview scenes from a Powerview hub.
|
|
|
|
For more details about this component, please refer to the documentation at
|
|
https://home-assistant.io/components/scene.hunterdouglas_powerview/
|
|
"""
|
|
import logging
|
|
|
|
from homeassistant.components.scene import Scene, DOMAIN
|
|
from homeassistant.helpers.entity import generate_entity_id
|
|
|
|
_LOGGER = logging.getLogger(__name__)
|
|
REQUIREMENTS = [
|
|
'https://github.com/sander76/powerviewApi/archive'
|
|
'/246e782d60d5c0addcc98d7899a0186f9d5640b0.zip#powerviewApi==0.3.15'
|
|
]
|
|
|
|
HUB_ADDRESS = 'address'
|
|
|
|
|
|
# pylint: disable=unused-argument
|
|
def setup_platform(hass, config, add_devices, discovery_info=None):
|
|
"""Setup the powerview scenes stored in a Powerview hub."""
|
|
from powerview_api import powerview
|
|
|
|
hub_address = config.get(HUB_ADDRESS)
|
|
|
|
_pv = powerview.PowerView(hub_address)
|
|
try:
|
|
_scenes = _pv.get_scenes()
|
|
_rooms = _pv.get_rooms()
|
|
except ConnectionError:
|
|
_LOGGER.exception("error connecting to powerview "
|
|
"hub with ip address: %s", hub_address)
|
|
return False
|
|
add_devices(PowerViewScene(hass, scene, _rooms, _pv)
|
|
for scene in _scenes['sceneData'])
|
|
|
|
return True
|
|
|
|
|
|
class PowerViewScene(Scene):
|
|
"""Representation of a Powerview scene."""
|
|
|
|
def __init__(self, hass, scene_data, room_data, pv_instance):
|
|
"""Initialize the scene."""
|
|
self.pv_instance = pv_instance
|
|
self.hass = hass
|
|
self.scene_data = scene_data
|
|
self._sync_room_data(room_data)
|
|
self.entity_id_format = DOMAIN + '.{}'
|
|
self.entity_id = generate_entity_id(self.entity_id_format,
|
|
str(self.scene_data["id"]),
|
|
hass=hass)
|
|
|
|
def _sync_room_data(self, room_data):
|
|
"""Sync the room data."""
|
|
room = next((room for room in room_data["roomData"]
|
|
if room["id"] == self.scene_data["roomId"]), None)
|
|
if room is not None:
|
|
self.scene_data["roomName"] = room["name"]
|
|
|
|
@property
|
|
def name(self):
|
|
"""Return the name of the scene."""
|
|
return str(self.scene_data["name"])
|
|
|
|
@property
|
|
def device_state_attributes(self):
|
|
"""Return the state attributes."""
|
|
return {"roomName": self.scene_data["roomName"]}
|
|
|
|
@property
|
|
def icon(self):
|
|
"""Icon to use in the frontend."""
|
|
return 'mdi:blinds'
|
|
|
|
def activate(self):
|
|
"""Activate the scene. Tries to get entities into requested state."""
|
|
self.pv_instance.activate_scene(self.scene_data["id"])
|