Last active
December 19, 2016 22:40
-
-
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 :(
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!./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