aboutsummaryrefslogtreecommitdiff
path: root/light.py
blob: f7cb2434e4678eff6eb8aae3a9da719b63f29963 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
import homeassistant.helpers.config_validation as cv
import voluptuous as vol
from math import floor
from homeassistant.const import CONF_MAC
from .driver import BekenConnection, makemsg, BEKEN_CHARACTERISTIC_LAMP
from homeassistant.components.light import (
  LightEntity,

  SUPPORT_BRIGHTNESS,
  SUPPORT_COLOR,
  SUPPORT_WHITE_VALUE,

  ATTR_BRIGHTNESS,
  ATTR_RGBW_COLOR,

  COLOR_MODE_RGBW,
  PLATFORM_SCHEMA
)

PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
  vol.Required("name"): cv.string,
  vol.Required("address"): cv.string
})

SUPPORT_FEATURES_RGB = SUPPORT_BRIGHTNESS | SUPPORT_COLOR
SUPPORT_FEATURES_WHITE = SUPPORT_BRIGHTNESS

def setup_platform(hass, config, add_entities, discovery_info=None):
  add_entities([ BekenLight(name=config["name"], address=config["address"]) ])

class BekenLight(LightEntity):
  def __init__(self, **kwargs):
    self._name = kwargs["name"]
    self._address = kwargs["address"]
    self._on = False
    self._brightness = 255
    self._rgb = (255, 255, 255)
    self._w = 255
    self._connection = BekenConnection(self._address)
    self._connection.start_threads()

  @property
  def color_mode(self):
    return COLOR_MODE_RGBW

  @property
  def supported_color_modes(self):
    return set([ COLOR_MODE_RGBW ])

  @property
  def supported_features(self):
    return SUPPORT_BRIGHTNESS | SUPPORT_COLOR | SUPPORT_WHITE_VALUE

  @property
  def unique_id(self):
    return self._address

  @property
  def name(self):
    return self._name

  @property
  def is_on(self):
    return self._on

  @property
  def brightness(self):
    return self._brightness

  @property
  def rgbw_color(self):
    return self._rgb + (self._w,)

  def turn_on(self, **kwargs):
    self._on = True

    brightness = kwargs.get(ATTR_BRIGHTNESS)
    if brightness != None:
      self._brightness = brightness

    rgbw = kwargs.get(ATTR_RGBW_COLOR)
    if rgbw != None:
      self._rgb = rgbw[0:3]
      self._w = rgbw[3]

    self.update_beken_lamp()

  def turn_off(self, **kwargs):
    self._on = False
    self.update_beken_lamp()

  def update_beken_lamp(self):
    r = int(self._on) * self._rgb[0]
    g = int(self._on) * self._rgb[1]
    b = int(self._on) * self._rgb[2]
    l = int(self._on) * self._w
    self._connection.send(BEKEN_CHARACTERISTIC_LAMP, makemsg(r, g, b, l))