Skip to content

Instantly share code, notes, and snippets.

@GammaGames
Last active July 25, 2022 01:43
Show Gist options
  • Save GammaGames/d424ea1606e60cea328c9a16abf42059 to your computer and use it in GitHub Desktop.
Save GammaGames/d424ea1606e60cea328c9a16abf42059 to your computer and use it in GitHub Desktop.
kano wand + phillips hue
from kano_wand.kano_wand import Shop, Wand, PATTERN
from qhue import Bridge
import moosegesture as mg
import time
import random
import math
class GestureWand(Wand):
def post_connect(self):
self.gestures = {
("DL", "R", "DL"): "stupefy",
("DR", "R", "UR", "D"): "wingardium_leviosa",
("UL", "UR"): "reducio",
("DR", "U", "UR", "DR", "UR"): "flipendo",
("R", "D"): "expelliarmus",
("UR", "U", "D", "UL", "L", "DL"): "incendio",
("UR", "U", "DR"): "lumos",
("U", "D", "DR", "R", "L"): "locomotor",
("DR", "DL"): "engorgio",
("UR", "R", "DR"): "aguamenti",
("UR", "R", "DR", "UR", "R", "DR"): "avis",
("D", "R", "U"): "reducto"
}
self.spell = None
self.pressed = False
self.positions = []
self.subscribe_button()
self.subscribe_position()
def on_position(self, x, y, pitch, roll):
if self.pressed:
self.positions.append(tuple([x, -1 * y]))
def on_button(self, pressed):
self.pressed = pressed
if pressed:
self.spell = None
else:
gesture = mg.getGesture(self.positions)
self.positions = []
closest = mg.findClosestMatchingGesture(gesture, self.gestures, maxDifference=1)
if closest != None:
self.spell = self.gestures[closest[0]]
self.vibrate(PATTERN.SHORT)
print("{}: {}".format(gesture, self.spell))
class LightManager():
def __init__(self):
self.bridge_ip = "192.168.1.22"
self.username = "dBHN8d6Qkw6EJMqzEI2oI0zXJGiOdvyE2lRzFha8"
self.bridge = Bridge(self.bridge_ip, self.username)
self.light_ids = ["1"]
self.light_states = {}
self.default = {"on": True, "bri": 144, "hue": 7676, "sat": 199}
for id in self.light_ids:
light = self.bridge.lights[id]
state = self.default.copy()
s = light()['state']
for key in state:
state[key] = s[key]
self.light_states[id] = state
light.state(**self.default)
def flicker(self, transition):
for id in self.light_ids:
light = self.bridge.lights[id]
c = self.default.copy()
c["bri"] = c["bri"] + random.randint(0, 53)
light.state(transitiontime=transition, **c)
def reset(self):
for id in self.light_ids:
light = self.bridge.lights[id]
light.state(**self.light_states[id])
manager = LightManager()
shop = Shop(wand_class=GestureWand)
wands = []
try:
while len(wands) == 0:
print("Scanning...")
wands = shop.scan(connect=True)
wand = wands[0]
while wand.connected:
sleep = random.uniform(0.1, 0.2)
transition = math.ceil(sleep * 10)
manager.flicker(transition)
time.sleep(sleep)
manager.reset()
except KeyboardInterrupt as e:
for wand in wands:
wand.disconnect()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment