added stop_effect, get_effects

fixed some wrong calculations from hsv to pwm
added lots of todo descriptions
changed find_stripe from requiring a json to sid directly
This commit is contained in:
Giovanni Harting
2015-08-28 21:10:14 +02:00
parent dfaeea33c9
commit 12e946ab39
3 changed files with 62 additions and 21 deletions

View File

@@ -25,7 +25,6 @@ import time
import asyncio
import spectra
from zeroconf import Zeroconf, ServiceInfo
from ledd import controller, VERSION
@@ -149,30 +148,72 @@ class Daemon:
@ledd_protocol(protocol)
def start_effect(self, req_json):
"""
Part of the Color API. Used to start a specific effect.
Required JSON parameters: stripe IDs: sids; effect id: eid, effect options: eopt
:param req_json: dict of request json
"""
log.debug("recieved action: %s", req_json['action'])
stripes = []
if "sids" in req_json:
for sid in req_json['sids']:
found_s = self.find_stripe(sid)
if found_s is not None:
stripes.append(found_s)
if len(stripes) > 0:
# TODO: add anything required to start effect with req_json['eid']
# on stripes[] with options in req_json['eopt']
effect = EffectStack()
self.effects.append(effect)
effect.stripes.append(self.controllers[1].stripes[0])
effect.stripes.append(self.controllers[0].stripes[0])
effect.start()
# asyncio.ensure_future(asyncio.get_event_loop().run_in_executor(self.executor, effect.execute))
log.debug("recieved action: %s", req_json['action'])
rjson = {
'success': True,
'eident': None, # unique effect identifier that identifies excatly this effect started on this set of
# stripes, used to stop them later and to give informations about running effects
'ref': req_json['ref']
}
return json.dumps(rjson)
else:
rjson = {
'success': False,
'message': "No stripe with this id found",
'ref': req_json['ref']
}
return json.dumps(rjson)
@ledd_protocol(protocol)
def start_effect(self, req_json):
def stop_effect(self, req_json):
"""
Part of the Color API. Used to stop a specific effect.
Required JSON parameters: effect identifier: eident
:param req_json: dict of request json
"""
effect = BaseEffect(Stripe(),self.loop)
self.effects.append(effect)
asyncio.ensure_future(asyncio.get_event_loop().run_in_executor(self.executor, effect.execute))
log.debug("recieved action: %s", req_json['action'])
# TODO: add stop effect by eident logic
@ledd_protocol(protocol)
def get_effects(self, req_json):
"""
Part of the Color API. Used to show all available and running effects.
Required JSON parameters: -
:param req_json: dict of request json
"""
log.debug("recieved action: %s", req_json['action'])
# TODO: list all effects here and on which stripes they run atm
# TODO: all effects get runtime only ids, "eid"'s. They are shown here for the client to start effects.
# TODO: All options that an effect may have need to be transmitted here too with "eopt".
@ledd_protocol(protocol)
def set_color(self, req_json):
"""
@@ -184,7 +225,7 @@ class Daemon:
if "stripes" in req_json:
for stripe in req_json['stripes']:
found_s = self.find_stripe(stripe)
found_s = self.find_stripe(stripe['sid'])
if found_s is None:
log.warning("Stripe not found: id=%s", stripe['sid'])
@@ -192,7 +233,7 @@ class Daemon:
found_s.set_color(spectra.hsv(stripe['hsv']['h'], stripe['hsv']['s'], stripe['hsv']['v']))
def find_stripe(self, jstripe):
def find_stripe(self, sid):
"""
Finds a given stripeid in the currently known controllers
:param jstripe: json containing sid
@@ -201,7 +242,7 @@ class Daemon:
"""
for c in self.controllers:
for s in c.stripes:
if s.id == jstripe['sid']:
if s.id == sid:
return s
return None
@@ -251,7 +292,7 @@ class Daemon:
if "stripes" in req_json:
for stripe in req_json['stripes']:
found_s = self.find_stripe(stripe)
found_s = self.find_stripe(stripe['sid'])
if found_s is None:
log.warning("Stripe not found: id=%s", stripe['sid'])

View File

@@ -27,7 +27,7 @@ class FadeEffect(GeneratorEffect):
description = "Fades through the HSV color wheel"
def execute(self):
scale = spectra.scale([spectra.hsv(0.0, 1.0, 1.0), spectra.hsv(360, 1.0, 1.0)]).domain([0, 20000])
scale = spectra.scale([spectra.hsv(0.0, 1.0, 1.0), spectra.hsv(360.0, 1.0, 1.0)]).domain([0, 20000])
i = 0
while True:

View File

@@ -57,7 +57,7 @@ class Stripe:
def set_color(self, c):
self._color = c
for channel, gamma_correct, value in zip(self.channels, self.gamma_correct, c.clamped_rgb):
self.controller.set_channel(channel, value * 255)
self.controller.set_channel(channel, value)
def get_color(self):
return self._color