Skip to content
Merged
Show file tree
Hide file tree
Changes from 6 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
67 changes: 47 additions & 20 deletions homeassistant/components/light/greenwave.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,27 +5,29 @@
https://home-assistant.io/components/light.greenwave/
"""
import logging
from datetime import timedelta

import voluptuous as vol

from homeassistant.components.light import (
ATTR_BRIGHTNESS, PLATFORM_SCHEMA, SUPPORT_BRIGHTNESS, Light)
from homeassistant.const import CONF_HOST
import homeassistant.helpers.config_validation as cv
from homeassistant.util import Throttle

REQUIREMENTS = ['greenwavereality==0.2.9']

REQUIREMENTS = ['greenwavereality==0.5.1']
_LOGGER = logging.getLogger(__name__)

CONF_VERSION = 'version'

SUPPORTED_FEATURES = (SUPPORT_BRIGHTNESS)
SUPPORTED_FEATURES = SUPPORT_BRIGHTNESS

PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
vol.Required(CONF_HOST): cv.string,
vol.Required(CONF_VERSION): cv.positive_int,
})

MIN_TIME_BETWEEN_UPDATES = timedelta(minutes=1)

def setup_platform(hass, config, add_devices, discovery_info=None):
"""Set up the Greenwave Reality Platform."""
Expand All @@ -39,29 +41,35 @@ def setup_platform(hass, config, add_devices, discovery_info=None):
token = tokenfile.read()
tokenfile.close()
else:
token = greenwave.grab_token(host, 'hass', 'homeassistant')
try:
token = greenwave.grab_token(host, 'hass', 'homeassistant')
except PermissionError:
_LOGGER.error('The Gateway Is Not In Sync Mode')
raise
tokenfile = open(tokenfile, "w+")
tokenfile.write(token)
tokenfile.close()
else:
token = None
doc = greenwave.grab_xml(host, token)
add_devices(GreenwaveLight(device, host, token) for device in doc)
bulbs = greenwave.grab_bulbs(host, token)
add_devices(GreenwaveLight(device, host, token, GatewayData(host, token))
for device in bulbs.values())


class GreenwaveLight(Light):
"""Representation of an Greenwave Reality Light."""

def __init__(self, light, host, token):
def __init__(self, light, host, token, gatewaydata):
"""Initialize a Greenwave Reality Light."""
import greenwavereality as greenwave
self._did = light['did']
self._did = int(light['did'])
self._name = light['name']
self._state = int(light['state'])
self._brightness = greenwave.hass_brightness(light)
self._host = host
self._online = greenwave.check_online(light)
self.token = token
self._token = token
self._gatewaydata = gatewaydata

@property
def supported_features(self):
Expand Down Expand Up @@ -94,22 +102,41 @@ def turn_on(self, **kwargs):
temp_brightness = int((kwargs.get(ATTR_BRIGHTNESS, 255)
/ 255) * 100)
greenwave.set_brightness(self._host, self._did,
temp_brightness, self.token)
greenwave.turn_on(self._host, self._did, self.token)
temp_brightness, self._token)
greenwave.turn_on(self._host, self._did, self._token)

def turn_off(self, **kwargs):
"""Instruct the light to turn off."""
import greenwavereality as greenwave
greenwave.turn_off(self._host, self._did, self.token)
greenwave.turn_off(self._host, self._did, self._token)

def update(self):
"""Fetch new state data for this light."""
import greenwavereality as greenwave
doc = greenwave.grab_xml(self._host, self.token)

for device in doc:
if device['did'] == self._did:
self._state = int(device['state'])
self._brightness = greenwave.hass_brightness(device)
self._online = greenwave.check_online(device)
self._name = device['name']
self._gatewaydata.update(self._host, self._token)
bulbs = self._gatewaydata.greenwave

self._state = int(bulbs[self._did]['state'])
self._brightness = greenwave.hass_brightness(bulbs[self._did])
self._online = greenwave.check_online(bulbs[self._did])
self._name = bulbs[self._did]['name']


class GatewayData(object):
"""Handle Gateway data and limit updates."""

def __init__(self, host, token):
"""Initialize the data object."""
import greenwavereality as greenwave
self._greenwave = greenwave.grab_bulbs(host, token)

@property
def greenwave(self):
"""Return Gateway API object."""
return self._greenwave

@Throttle(MIN_TIME_BETWEEN_UPDATES)
def update(self, host, token):
"""Get the latest data from the gateway"""
import greenwavereality as greenwave
return greenwave.grab_bulbs(host, token)
2 changes: 1 addition & 1 deletion requirements_all.txt
Original file line number Diff line number Diff line change
Expand Up @@ -322,7 +322,7 @@ googlemaps==2.5.1
gps3==0.33.3

# homeassistant.components.light.greenwave
greenwavereality==0.2.9
greenwavereality==0.5.1

# homeassistant.components.media_player.gstreamer
gstreamer-player==1.1.0
Expand Down