mirror of
https://github.com/home-assistant/core.git
synced 2025-07-19 11:17:21 +00:00
Multi-Room Support for Greenwave Reality (#11364)
* Multi-Room Support for Greenwave Reality * PEP8 Line Too Long * Update requirements_all.txt * Shared State Object Shared State Object added, and implemented new function of greenwavereality to abstract complex runtimes. * Update requirements_all.txt * Lint issues * Rewrite method to not trigger "Method could be a function" * Remove unnecessary arguments for update call
This commit is contained in:
parent
94e270f828
commit
caa16da5c5
@ -5,6 +5,7 @@ For more details about this platform, please refer to the documentation at
|
|||||||
https://home-assistant.io/components/light.greenwave/
|
https://home-assistant.io/components/light.greenwave/
|
||||||
"""
|
"""
|
||||||
import logging
|
import logging
|
||||||
|
from datetime import timedelta
|
||||||
|
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
@ -12,20 +13,22 @@ from homeassistant.components.light import (
|
|||||||
ATTR_BRIGHTNESS, PLATFORM_SCHEMA, SUPPORT_BRIGHTNESS, Light)
|
ATTR_BRIGHTNESS, PLATFORM_SCHEMA, SUPPORT_BRIGHTNESS, Light)
|
||||||
from homeassistant.const import CONF_HOST
|
from homeassistant.const import CONF_HOST
|
||||||
import homeassistant.helpers.config_validation as cv
|
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__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
CONF_VERSION = 'version'
|
CONF_VERSION = 'version'
|
||||||
|
|
||||||
SUPPORTED_FEATURES = (SUPPORT_BRIGHTNESS)
|
SUPPORTED_FEATURES = SUPPORT_BRIGHTNESS
|
||||||
|
|
||||||
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
|
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
|
||||||
vol.Required(CONF_HOST): cv.string,
|
vol.Required(CONF_HOST): cv.string,
|
||||||
vol.Required(CONF_VERSION): cv.positive_int,
|
vol.Required(CONF_VERSION): cv.positive_int,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
MIN_TIME_BETWEEN_UPDATES = timedelta(minutes=1)
|
||||||
|
|
||||||
|
|
||||||
def setup_platform(hass, config, add_devices, discovery_info=None):
|
def setup_platform(hass, config, add_devices, discovery_info=None):
|
||||||
"""Set up the Greenwave Reality Platform."""
|
"""Set up the Greenwave Reality Platform."""
|
||||||
@ -39,29 +42,35 @@ def setup_platform(hass, config, add_devices, discovery_info=None):
|
|||||||
token = tokenfile.read()
|
token = tokenfile.read()
|
||||||
tokenfile.close()
|
tokenfile.close()
|
||||||
else:
|
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 = open(tokenfile, "w+")
|
||||||
tokenfile.write(token)
|
tokenfile.write(token)
|
||||||
tokenfile.close()
|
tokenfile.close()
|
||||||
else:
|
else:
|
||||||
token = None
|
token = None
|
||||||
doc = greenwave.grab_xml(host, token)
|
bulbs = greenwave.grab_bulbs(host, token)
|
||||||
add_devices(GreenwaveLight(device, host, token) for device in doc)
|
add_devices(GreenwaveLight(device, host, token, GatewayData(host, token))
|
||||||
|
for device in bulbs.values())
|
||||||
|
|
||||||
|
|
||||||
class GreenwaveLight(Light):
|
class GreenwaveLight(Light):
|
||||||
"""Representation of an Greenwave Reality 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."""
|
"""Initialize a Greenwave Reality Light."""
|
||||||
import greenwavereality as greenwave
|
import greenwavereality as greenwave
|
||||||
self._did = light['did']
|
self._did = int(light['did'])
|
||||||
self._name = light['name']
|
self._name = light['name']
|
||||||
self._state = int(light['state'])
|
self._state = int(light['state'])
|
||||||
self._brightness = greenwave.hass_brightness(light)
|
self._brightness = greenwave.hass_brightness(light)
|
||||||
self._host = host
|
self._host = host
|
||||||
self._online = greenwave.check_online(light)
|
self._online = greenwave.check_online(light)
|
||||||
self.token = token
|
self._token = token
|
||||||
|
self._gatewaydata = gatewaydata
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def supported_features(self):
|
def supported_features(self):
|
||||||
@ -94,22 +103,44 @@ class GreenwaveLight(Light):
|
|||||||
temp_brightness = int((kwargs.get(ATTR_BRIGHTNESS, 255)
|
temp_brightness = int((kwargs.get(ATTR_BRIGHTNESS, 255)
|
||||||
/ 255) * 100)
|
/ 255) * 100)
|
||||||
greenwave.set_brightness(self._host, self._did,
|
greenwave.set_brightness(self._host, self._did,
|
||||||
temp_brightness, self.token)
|
temp_brightness, self._token)
|
||||||
greenwave.turn_on(self._host, self._did, self.token)
|
greenwave.turn_on(self._host, self._did, self._token)
|
||||||
|
|
||||||
def turn_off(self, **kwargs):
|
def turn_off(self, **kwargs):
|
||||||
"""Instruct the light to turn off."""
|
"""Instruct the light to turn off."""
|
||||||
import greenwavereality as greenwave
|
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):
|
def update(self):
|
||||||
"""Fetch new state data for this light."""
|
"""Fetch new state data for this light."""
|
||||||
import greenwavereality as greenwave
|
import greenwavereality as greenwave
|
||||||
doc = greenwave.grab_xml(self._host, self.token)
|
self._gatewaydata.update()
|
||||||
|
bulbs = self._gatewaydata.greenwave
|
||||||
|
|
||||||
for device in doc:
|
self._state = int(bulbs[self._did]['state'])
|
||||||
if device['did'] == self._did:
|
self._brightness = greenwave.hass_brightness(bulbs[self._did])
|
||||||
self._state = int(device['state'])
|
self._online = greenwave.check_online(bulbs[self._did])
|
||||||
self._brightness = greenwave.hass_brightness(device)
|
self._name = bulbs[self._did]['name']
|
||||||
self._online = greenwave.check_online(device)
|
|
||||||
self._name = device['name']
|
|
||||||
|
class GatewayData(object):
|
||||||
|
"""Handle Gateway data and limit updates."""
|
||||||
|
|
||||||
|
def __init__(self, host, token):
|
||||||
|
"""Initialize the data object."""
|
||||||
|
import greenwavereality as greenwave
|
||||||
|
self._host = host
|
||||||
|
self._token = token
|
||||||
|
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):
|
||||||
|
"""Get the latest data from the gateway."""
|
||||||
|
import greenwavereality as greenwave
|
||||||
|
self._greenwave = greenwave.grab_bulbs(self._host, self._token)
|
||||||
|
return self._greenwave
|
||||||
|
@ -322,7 +322,7 @@ googlemaps==2.5.1
|
|||||||
gps3==0.33.3
|
gps3==0.33.3
|
||||||
|
|
||||||
# homeassistant.components.light.greenwave
|
# homeassistant.components.light.greenwave
|
||||||
greenwavereality==0.2.9
|
greenwavereality==0.5.1
|
||||||
|
|
||||||
# homeassistant.components.media_player.gstreamer
|
# homeassistant.components.media_player.gstreamer
|
||||||
gstreamer-player==1.1.0
|
gstreamer-player==1.1.0
|
||||||
|
Loading…
x
Reference in New Issue
Block a user