Skip to content

Instantly share code, notes, and snippets.

@thinkl33t
Last active December 19, 2016 22:40
Show Gist options
  • Save thinkl33t/b8b12325c570fd9fa37ebc48cc37fb0a to your computer and use it in GitHub Desktop.
Save thinkl33t/b8b12325c570fd9fa37ebc48cc37fb0a to your computer and use it in GitHub Desktop.
upop bulb controller - requires gattlib - wont work on python 3 because strings are too different :(
#!./venv2/bin/python
from gattlib import GATTRequester
class bulb:
_red = 255
_green = 255
_blue = 255
def __init__(self, address):
self._address = address
self._connect()
def _connect(self):
self.req = GATTRequester(self._address)
def _write(self, r, g, b):
try:
self.req.write_by_handle(0x2d, str(bytearray([b, g, r, 0x0])))
except RuntimeError:
self._connect()
def on(self):
self._write(self._red, self._green, self._blue)
def off(self):
self._write(0, 0, 0)
def rgb(self, red, green, blue):
self._red = red
self._green = green
self._blue = blue
self.on()
def hsv(self, h, s, v):
if s == 0.0: v*=255; self.rgb(v, v, v)
i = int(h*6.) # XXX assume int() truncates!
f = (h*6.)-i; p,q,t = int(255*(v*(1.-s))), int(255*(v*(1.-s*f))), int(255*(v*(1.-s*(1.-f)))); v*=255; i%=6
if i == 0: self.rgb(v, t, p)
if i == 1: self.rgb(q, v, p)
if i == 2: self.rgb(p, v, t)
if i == 3: self.rgb(p, q, v)
if i == 4: self.rgb(t, p, v)
if i == 5: self.rgb(v, p, q)
if __name__ == "__main__":
upright = bulb('E0:E5:CF:95:B4:8C')
for h in range(0,359):
upright.hsv(h/360.0, 1, 1)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment