mirror of
https://github.com/hyperion-project/hyperion.ng.git
synced 2023-10-10 13:36:59 +02:00
disable smoothing for effects (#425)
* no smooth for efx rework fade effect * join strobe and fade effects new effect "breath" * - make transition efx to smooth mode more smooth - fixes for pacman - rework fade base effect - make it more versatile - fix prios in schema files - new notify blue effect to demonstrate capability of fade effect
This commit is contained in:
parent
230c403bba
commit
e9040f885d
@ -602,7 +602,11 @@
|
|||||||
"edt_eff_rotationtime_title" : "Rotationszeit",
|
"edt_eff_rotationtime_title" : "Rotationszeit",
|
||||||
"edt_eff_sleeptime_title" : "Schlafzeit",
|
"edt_eff_sleeptime_title" : "Schlafzeit",
|
||||||
"edt_eff_reversedirection_title" : "Richtung umkehren",
|
"edt_eff_reversedirection_title" : "Richtung umkehren",
|
||||||
"edt_eff_fadetime_title" : "Übergangszeit",
|
"edt_eff_fadeintime_title" : "Zeit für Einblendung",
|
||||||
|
"edt_eff_fadeouttime_title" : "Zeit für Ausblendung",
|
||||||
|
"edt_eff_repeat_title" : "Wiederholung",
|
||||||
|
"edt_eff_colorendtime_title" : "Zeit für Start-Farbe",
|
||||||
|
"edt_eff_colorstarttime_title" : "Zeit für End-Farbe",
|
||||||
"edt_eff_colorstart_title" : "Farbe Start",
|
"edt_eff_colorstart_title" : "Farbe Start",
|
||||||
"edt_eff_colorend_title" : "Farbe Ende",
|
"edt_eff_colorend_title" : "Farbe Ende",
|
||||||
"edt_eff_colorshift_title" : "Farbverschiebung",
|
"edt_eff_colorshift_title" : "Farbverschiebung",
|
||||||
|
@ -603,7 +603,11 @@
|
|||||||
"edt_eff_rotationtime_title" : "Rotation time",
|
"edt_eff_rotationtime_title" : "Rotation time",
|
||||||
"edt_eff_sleeptime_title" : "Sleep time",
|
"edt_eff_sleeptime_title" : "Sleep time",
|
||||||
"edt_eff_reversedirection_title" : "Reverse direction",
|
"edt_eff_reversedirection_title" : "Reverse direction",
|
||||||
"edt_eff_fadetime_title" : "Fade time",
|
"edt_eff_fadeintime_title" : "Fade in time",
|
||||||
|
"edt_eff_fadeouttime_title" : "Fade out time",
|
||||||
|
"edt_eff_repeat_title" : "Repeat",
|
||||||
|
"edt_eff_colorendtime_title" : "Time to hold start color",
|
||||||
|
"edt_eff_colorstarttime_title" : "Time to hold end color",
|
||||||
"edt_eff_colorstart_title" : "Color start",
|
"edt_eff_colorstart_title" : "Color start",
|
||||||
"edt_eff_colorend_title" : "Color end",
|
"edt_eff_colorend_title" : "Color end",
|
||||||
"edt_eff_colorshift_title" : "Color Shift",
|
"edt_eff_colorshift_title" : "Color Shift",
|
||||||
|
@ -106,41 +106,53 @@ $(document).ready(function() {
|
|||||||
var btn_type = "default";
|
var btn_type = "default";
|
||||||
var btn_text = $.i18n('remote_input_setsource_btn');
|
var btn_text = $.i18n('remote_input_setsource_btn');
|
||||||
var btn_state = "enabled";
|
var btn_state = "enabled";
|
||||||
if (active) btn_type = "primary";
|
|
||||||
|
if (active)
|
||||||
|
btn_type = "primary";
|
||||||
|
|
||||||
|
if(priority > 254)
|
||||||
|
continue;
|
||||||
|
if(priority < 254 && (compId == "EFFECT" || compId == "COLOR") )
|
||||||
|
clearAll = true;
|
||||||
|
|
||||||
if (visible)
|
if (visible)
|
||||||
{
|
{
|
||||||
btn_state = "disabled";
|
btn_state = "disabled";
|
||||||
btn_type = "success";
|
btn_type = "success";
|
||||||
btn_text = $.i18n('remote_input_sourceactiv_btn');
|
btn_text = $.i18n('remote_input_sourceactiv_btn');
|
||||||
}
|
}
|
||||||
|
|
||||||
if(ip)
|
if(ip)
|
||||||
origin += '<br/><span style="font-size:80%; color:grey;">'+$.i18n('remote_input_ip')+' '+ip+'</span>';
|
origin += '<br/><span style="font-size:80%; color:grey;">'+$.i18n('remote_input_ip')+' '+ip+'</span>';
|
||||||
if(compId == "EFFECT")
|
|
||||||
|
switch (compId)
|
||||||
{
|
{
|
||||||
owner = $.i18n('remote_effects_label_effects')+' '+owner;
|
case "EFFECT":
|
||||||
if(priority != 255)
|
owner = $.i18n('remote_effects_label_effects')+' '+owner;
|
||||||
clearAll = true;
|
break;
|
||||||
|
case "COLOR":
|
||||||
|
owner = $.i18n('remote_color_label_color')+' '+'<div style="width:18px; height:18px; border-radius:20px; margin-bottom:-4px; border:1px grey solid; background-color: rgb('+prios[i].value.RGB+'); display:inline-block" title="RGB: ('+prios[i].value.RGB+')"></div>';
|
||||||
|
break;
|
||||||
|
case "GRABBER":
|
||||||
|
owner = $.i18n('general_comp_GRABBER')+': ('+owner+')';
|
||||||
|
break;
|
||||||
|
case "V4L":
|
||||||
|
owner = $.i18n('general_comp_V4L')+': ('+owner+')';
|
||||||
|
break;
|
||||||
|
case "BOBLIGHTSERVER":
|
||||||
|
owner = $.i18n('general_comp_BOBLIGHTSERVER');
|
||||||
|
break;
|
||||||
|
case "UDPLISTENER":
|
||||||
|
owner = $.i18n('general_comp_UDPLISTENER');
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
if(compId == "COLOR")
|
|
||||||
{
|
|
||||||
owner = $.i18n('remote_color_label_color')+' '+'<div style="width:18px; height:18px; border-radius:20px; margin-bottom:-4px; border:1px grey solid; background-color: rgb('+prios[i].value.RGB+'); display:inline-block" title="RGB: ('+prios[i].value.RGB+')"></div>';
|
|
||||||
if(priority != 255)
|
|
||||||
clearAll = true;
|
|
||||||
}
|
|
||||||
if(compId == "GRABBER")
|
|
||||||
owner = $.i18n('general_comp_GRABBER')+': ('+owner+')';
|
|
||||||
if(compId == "V4L")
|
|
||||||
owner = $.i18n('general_comp_V4L')+': ('+owner+')';
|
|
||||||
if(compId == "BOBLIGHTSERVER")
|
|
||||||
owner = $.i18n('general_comp_BOBLIGHTSERVER');
|
|
||||||
if(compId == "UDPLISTENER")
|
|
||||||
owner = $.i18n('general_comp_UDPLISTENER');
|
|
||||||
if(duration && compId != "GRABBER" && compId != "PROTOSERVER")
|
if(duration && compId != "GRABBER" && compId != "PROTOSERVER")
|
||||||
owner += '<br/><span style="font-size:80%; color:grey;">'+$.i18n('remote_input_duration')+' '+duration.toFixed(0)+$.i18n('edt_append_s')+'</span>';
|
owner += '<br/><span style="font-size:80%; color:grey;">'+$.i18n('remote_input_duration')+' '+duration.toFixed(0)+$.i18n('edt_append_s')+'</span>';
|
||||||
|
|
||||||
var btn = '<button id="srcBtn'+i+'" type="button" '+btn_state+' class="btn btn-'+btn_type+' btn_input_selection" onclick="requestSetSource('+priority+');">'+btn_text+'</button>';
|
var btn = '<button id="srcBtn'+i+'" type="button" '+btn_state+' class="btn btn-'+btn_type+' btn_input_selection" onclick="requestSetSource('+priority+');">'+btn_text+'</button>';
|
||||||
|
|
||||||
if((compId == "EFFECT" || compId == "COLOR") && priority != 255)
|
if((compId == "EFFECT" || compId == "COLOR") && priority < 254)
|
||||||
btn += '<button type="button" class="btn btn-sm btn-danger" style="margin-left:10px;" onclick="requestPriorityClear('+priority+');"><i class="fa fa-close"></button>';
|
btn += '<button type="button" class="btn btn-sm btn-danger" style="margin-left:10px;" onclick="requestPriorityClear('+priority+');"><i class="fa fa-close"></button>';
|
||||||
|
|
||||||
if(btn_type != 'default')
|
if(btn_type != 'default')
|
||||||
|
15
effects/breath.json
Normal file
15
effects/breath.json
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
"name" : "Breath",
|
||||||
|
"script" : "fade.py",
|
||||||
|
"args" :
|
||||||
|
{
|
||||||
|
"color-end": [ 255, 255, 255 ],
|
||||||
|
"color-start": [ 50, 50, 50 ],
|
||||||
|
"fade-in-time" : 4000,
|
||||||
|
"fade-out-time" : 1000,
|
||||||
|
"color-start-time" : 50,
|
||||||
|
"color-end-time" : 250,
|
||||||
|
"repeat-count" : 0,
|
||||||
|
"maintain-end-color" : true
|
||||||
|
}
|
||||||
|
}
|
@ -3,7 +3,7 @@
|
|||||||
"script" : "candle.py",
|
"script" : "candle.py",
|
||||||
"args" :
|
"args" :
|
||||||
{
|
{
|
||||||
"sleepTime" : 0.15,
|
"sleepTime" : 0.20,
|
||||||
"brightness" : 100,
|
"brightness" : 100,
|
||||||
"color" : [ 255, 138, 0 ],
|
"color" : [ 255, 138, 0 ],
|
||||||
"candles" : "all"
|
"candles" : "all"
|
||||||
|
@ -3,8 +3,13 @@
|
|||||||
"script" : "fade.py",
|
"script" : "fade.py",
|
||||||
"args" :
|
"args" :
|
||||||
{
|
{
|
||||||
"fade-time" : 5.0,
|
|
||||||
"color-start" : [ 136, 97, 7 ],
|
"color-start" : [ 136, 97, 7 ],
|
||||||
"color-end" : [ 238, 173, 47 ]
|
"color-end" : [ 238, 173, 47 ],
|
||||||
|
"fade-in-time" : 5000,
|
||||||
|
"fade-out-time" : 0,
|
||||||
|
"color-start-time" : 0,
|
||||||
|
"color-end-time" : 0,
|
||||||
|
"repeat-count" : 1,
|
||||||
|
"maintain-end-color" : true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,8 +3,13 @@
|
|||||||
"script" : "fade.py",
|
"script" : "fade.py",
|
||||||
"args" :
|
"args" :
|
||||||
{
|
{
|
||||||
"fade-time" : 5.0,
|
"color-start" : [ 136, 97, 7 ],
|
||||||
"color-start" : [ 238, 173, 47 ],
|
"color-end" : [ 238, 173, 47 ],
|
||||||
"color-end" : [ 136, 97, 7 ]
|
"fade-in-time" : 0,
|
||||||
|
"fade-out-time" : 5000,
|
||||||
|
"color-start-time" : 0,
|
||||||
|
"color-end-time" : 0,
|
||||||
|
"repeat-count" : 1,
|
||||||
|
"maintain-end-color" : true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,27 +1,88 @@
|
|||||||
import hyperion, time
|
import hyperion, time
|
||||||
|
|
||||||
# Get the parameters
|
# Get the parameters
|
||||||
fadeTime = float(hyperion.args.get('fade-time', 5.0))
|
fadeInTime = float(hyperion.args.get('fade-in-time', 2000)) / 1000.0
|
||||||
colorStart = hyperion.args.get('color-start', (255,174,11))
|
fadeOutTime = float(hyperion.args.get('fade-out-time', 2000)) / 1000.0
|
||||||
colorEnd = hyperion.args.get('color-end', (100,100,100))
|
colorStart = hyperion.args.get('color-start', (255,174,11))
|
||||||
|
colorEnd = hyperion.args.get('color-end', (0,0,0))
|
||||||
|
colorStartTime = float(hyperion.args.get('color-start-time', 1000)) / 1000
|
||||||
|
colorEndTime = float(hyperion.args.get('color-end-time', 1000)) / 1000
|
||||||
|
repeat = hyperion.args.get('repeat-count', 0)
|
||||||
|
maintainEndCol = hyperion.args.get('maintain-end-color', True)
|
||||||
|
minStepTime = 0.03
|
||||||
|
currentR = currentG = currentB = 0
|
||||||
|
|
||||||
|
# create color table for fading from start to end color
|
||||||
color_step = (
|
color_step = (
|
||||||
(colorEnd[0] - colorStart[0]) / 256.0,
|
(colorEnd[0] - colorStart[0]) / 256.0,
|
||||||
(colorEnd[1] - colorStart[1]) / 256.0,
|
(colorEnd[1] - colorStart[1]) / 256.0,
|
||||||
(colorEnd[2] - colorStart[2]) / 256.0
|
(colorEnd[2] - colorStart[2]) / 256.0
|
||||||
)
|
)
|
||||||
|
|
||||||
# fade color
|
|
||||||
calcChannel = lambda i: min(max(int(colorStart[i] + color_step[i]*step),0),255)
|
calcChannel = lambda i: min(max(int(colorStart[i] + color_step[i]*step),0),255)
|
||||||
|
colors = []
|
||||||
for step in range(256):
|
for step in range(256):
|
||||||
if hyperion.abort():
|
colors.append( (calcChannel(0),calcChannel(1),calcChannel(2)) )
|
||||||
break
|
|
||||||
|
|
||||||
hyperion.setColor( calcChannel(0),calcChannel(1),calcChannel(2) )
|
# calculate timings
|
||||||
time.sleep( fadeTime / 256 )
|
if fadeInTime>0:
|
||||||
|
incrementIn = max(1,int(round(256.0 / (fadeInTime / minStepTime) )))
|
||||||
|
sleepTimeIn = fadeInTime / (256.0 / incrementIn)
|
||||||
|
else:
|
||||||
|
incrementIn = sleepTimeIn = 1
|
||||||
|
|
||||||
|
if fadeOutTime>0:
|
||||||
|
incrementOut = max(1,int(round(256.0 / (fadeOutTime / minStepTime) )))
|
||||||
|
sleepTimeOut = fadeOutTime / (256.0 / incrementOut)
|
||||||
|
else:
|
||||||
|
incrementOut = sleepTimeOut = 1
|
||||||
|
|
||||||
# maintain color until effect end
|
def setColor(r,g,b):
|
||||||
hyperion.setColor(colorEnd[0],colorEnd[1],colorEnd[2])
|
global currentR,currentG,currentB
|
||||||
|
|
||||||
|
currentR = r
|
||||||
|
currentG = g
|
||||||
|
currentB = b
|
||||||
|
hyperion.setColor(r,g,b)
|
||||||
|
|
||||||
|
# loop
|
||||||
|
repeatCounter = 1
|
||||||
while not hyperion.abort():
|
while not hyperion.abort():
|
||||||
time.sleep(1)
|
# fade in
|
||||||
|
if fadeInTime > 0:
|
||||||
|
for step in range(0,256,incrementIn):
|
||||||
|
if hyperion.abort(): break
|
||||||
|
setColor( colors[step][0],colors[step][1],colors[step][2] )
|
||||||
|
time.sleep(sleepTimeIn)
|
||||||
|
|
||||||
|
# end color
|
||||||
|
t = 0.0
|
||||||
|
while t<colorStartTime and not hyperion.abort():
|
||||||
|
setColor( colors[255][0],colors[255][1],colors[255][2] )
|
||||||
|
time.sleep(0.01)
|
||||||
|
t += 0.01
|
||||||
|
|
||||||
|
# fade out
|
||||||
|
if fadeOutTime > 0:
|
||||||
|
for step in range(255,-1,-incrementOut):
|
||||||
|
if hyperion.abort(): break
|
||||||
|
hyperion.setColor( colors[step][0],colors[step][1],colors[step][2] )
|
||||||
|
time.sleep(sleepTimeOut)
|
||||||
|
|
||||||
|
# start color
|
||||||
|
t = 0.0
|
||||||
|
while t<colorEndTime and not hyperion.abort():
|
||||||
|
setColor( colors[0][0],colors[0][1],colors[0][2] )
|
||||||
|
time.sleep(0.01)
|
||||||
|
t += 0.01
|
||||||
|
|
||||||
|
# repeat
|
||||||
|
if repeat > 0 and repeatCounter >= repeat : break
|
||||||
|
repeatCounter += 1
|
||||||
|
|
||||||
|
time.sleep(0.5)
|
||||||
|
# maintain end color until effect end
|
||||||
|
while not hyperion.abort() and maintainEndCol:
|
||||||
|
hyperion.setColor( currentR, currentG, currentB )
|
||||||
|
time.sleep(1)
|
||||||
|
|
||||||
|
16
effects/notify-blue.json
Normal file
16
effects/notify-blue.json
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
{
|
||||||
|
"name" : "Notify blue",
|
||||||
|
"script" : "fade.py",
|
||||||
|
"args" :
|
||||||
|
{
|
||||||
|
"color-start": [ 0, 0, 50 ],
|
||||||
|
"color-end": [ 0, 0, 255 ],
|
||||||
|
"fade-in-time" : 200,
|
||||||
|
"fade-out-time" : 100,
|
||||||
|
"color-start-time" : 40,
|
||||||
|
"color-end-time" : 150,
|
||||||
|
"repeat-count" : 3,
|
||||||
|
"maintain-end-color" : false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -4,6 +4,6 @@
|
|||||||
"args" :
|
"args" :
|
||||||
{
|
{
|
||||||
"margin-pos" : 2.0,
|
"margin-pos" : 2.0,
|
||||||
"rotationTime" : 8
|
"rotationTime" : 4
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,17 +1,15 @@
|
|||||||
import hyperion
|
import hyperion, time, colorsys
|
||||||
import time
|
|
||||||
import colorsys
|
|
||||||
from random import randint
|
from random import randint
|
||||||
|
|
||||||
#get args
|
#get args
|
||||||
rotationTime = int(hyperion.args.get('rotationTime', 8))
|
rotationTime = float(hyperion.args.get('rotationTime', 4))
|
||||||
marginPos = float(hyperion.args.get('margin-pos', 1.5))
|
marginPos = float(hyperion.args.get('margin-pos', 2))
|
||||||
|
|
||||||
# define pacman
|
# define pacman
|
||||||
pacman = bytearray((255, 255, 0))
|
pacman = bytearray((255, 255, 0))
|
||||||
|
|
||||||
# define ghosts
|
# define ghosts
|
||||||
redGuy = bytearray((255, 0, 0))
|
redGuy = bytearray((255, 0, 0))
|
||||||
pinkGuy = bytearray((255, 184, 255))
|
pinkGuy = bytearray((255, 184, 255))
|
||||||
blueGuy = bytearray((0, 255, 255))
|
blueGuy = bytearray((0, 255, 255))
|
||||||
slowGuy = bytearray((255, 184, 81))
|
slowGuy = bytearray((255, 184, 81))
|
||||||
@ -20,10 +18,10 @@ light = bytearray((255, 184, 174))
|
|||||||
background = bytearray((0, 0, 0))
|
background = bytearray((0, 0, 0))
|
||||||
|
|
||||||
#helper
|
#helper
|
||||||
posPac = 1
|
posPac = 1
|
||||||
diffPac = 6*marginPos
|
diffPac = 6*marginPos
|
||||||
diffGuys = 3*marginPos
|
diffGuys = 3*marginPos
|
||||||
sleepTime = rotationTime/ledCount
|
sleepTime = max(0.02,rotationTime/hyperion.ledCount)
|
||||||
|
|
||||||
posPinkGuy = posPac + diffPac
|
posPinkGuy = posPac + diffPac
|
||||||
posBlueGuy = posPinkGuy + diffGuys
|
posBlueGuy = posPinkGuy + diffGuys
|
||||||
@ -89,7 +87,8 @@ while not hyperion.abort():
|
|||||||
shiftLED(ledData, increment, hyperion.ledCount - random, s)
|
shiftLED(ledData, increment, hyperion.ledCount - random, s)
|
||||||
|
|
||||||
# chase mode
|
# chase mode
|
||||||
shift = 3*(hyperion.ledCount - random)
|
shift = 3*(hyperion.ledCount - random)
|
||||||
ledData=ledDataChase[shift:]+ledDataChase[:shift]
|
ledData = ledDataChase[shift:]+ledDataChase[:shift]
|
||||||
shiftLED(ledData, -increment, 2*hyperion.ledCount-random)
|
shiftLED(ledData, -increment, 2*hyperion.ledCount-random)
|
||||||
|
time.sleep(sleepTime)
|
||||||
|
|
||||||
|
@ -4,14 +4,6 @@
|
|||||||
"title":"edt_eff_fade_header_title",
|
"title":"edt_eff_fade_header_title",
|
||||||
"required":true,
|
"required":true,
|
||||||
"properties":{
|
"properties":{
|
||||||
"fade-time": {
|
|
||||||
"type": "number",
|
|
||||||
"title":"edt_eff_fadetime_title",
|
|
||||||
"default": 5.0,
|
|
||||||
"minimum" : 0.1,
|
|
||||||
"append" : "edt_append_s",
|
|
||||||
"propertyOrder" : 1
|
|
||||||
},
|
|
||||||
"color-start": {
|
"color-start": {
|
||||||
"type": "array",
|
"type": "array",
|
||||||
"title":"edt_eff_colorstart_title",
|
"title":"edt_eff_colorstart_title",
|
||||||
@ -25,8 +17,24 @@
|
|||||||
},
|
},
|
||||||
"minItems": 3,
|
"minItems": 3,
|
||||||
"maxItems": 3,
|
"maxItems": 3,
|
||||||
|
"propertyOrder" : 1
|
||||||
|
},
|
||||||
|
"color-start-time": {
|
||||||
|
"type": "integer",
|
||||||
|
"title":"edt_eff_colorstarttime_title",
|
||||||
|
"default": 1000,
|
||||||
|
"minimum" : 0,
|
||||||
|
"append" : "edt_append_ms",
|
||||||
"propertyOrder" : 2
|
"propertyOrder" : 2
|
||||||
},
|
},
|
||||||
|
"fade-in-time": {
|
||||||
|
"type": "integer",
|
||||||
|
"title":"edt_eff_fadeintime_title",
|
||||||
|
"default": 2000,
|
||||||
|
"minimum" : 0,
|
||||||
|
"append" : "edt_append_ms",
|
||||||
|
"propertyOrder" : 3
|
||||||
|
},
|
||||||
"color-end": {
|
"color-end": {
|
||||||
"type": "array",
|
"type": "array",
|
||||||
"title":"edt_eff_colorend_title",
|
"title":"edt_eff_colorend_title",
|
||||||
@ -39,8 +47,36 @@
|
|||||||
},
|
},
|
||||||
"minItems": 3,
|
"minItems": 3,
|
||||||
"maxItems": 3,
|
"maxItems": 3,
|
||||||
"propertyOrder" : 3
|
"propertyOrder" : 4
|
||||||
}
|
},
|
||||||
|
"color-end-time": {
|
||||||
|
"type": "integer",
|
||||||
|
"title":"edt_eff_colorendtime_title",
|
||||||
|
"default": 1000,
|
||||||
|
"minimum" : 0,
|
||||||
|
"append" : "edt_append_ms",
|
||||||
|
"propertyOrder" : 5
|
||||||
|
},
|
||||||
|
"fade-out-time": {
|
||||||
|
"type": "integer",
|
||||||
|
"title":"edt_eff_fadeouttime_title",
|
||||||
|
"default": 2000,
|
||||||
|
"minimum" : 0,
|
||||||
|
"append" : "edt_append_ms",
|
||||||
|
"propertyOrder" : 6
|
||||||
|
},
|
||||||
|
"repeat-count": {
|
||||||
|
"type": "integer",
|
||||||
|
"title":"edt_eff_repeatcount_title",
|
||||||
|
"default": 0,
|
||||||
|
"propertyOrder" : 7
|
||||||
|
},
|
||||||
|
"maintain-end-color": {
|
||||||
|
"type": "boolean",
|
||||||
|
"title":"edt_eff_maintain_end_color_title",
|
||||||
|
"default": true,
|
||||||
|
"propertyOrder" : 8
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"additionalProperties": false
|
"additionalProperties": false
|
||||||
}
|
}
|
||||||
|
@ -1,31 +0,0 @@
|
|||||||
{
|
|
||||||
"type":"object",
|
|
||||||
"script" : "strobe.py",
|
|
||||||
"title":"edt_eff_storbe_header_title",
|
|
||||||
"required":true,
|
|
||||||
"properties":{
|
|
||||||
"color": {
|
|
||||||
"type": "array",
|
|
||||||
"title":"edt_eff_color_title",
|
|
||||||
"format":"colorpicker",
|
|
||||||
"default": [255,0,0],
|
|
||||||
"items" : {
|
|
||||||
"type": "integer",
|
|
||||||
"minimum": 0,
|
|
||||||
"maximum": 255
|
|
||||||
},
|
|
||||||
"minItems": 3,
|
|
||||||
"maxItems": 3,
|
|
||||||
"propertyOrder" : 1
|
|
||||||
},
|
|
||||||
"frequency": {
|
|
||||||
"type": "number",
|
|
||||||
"title":"edt_eff_frequency_title",
|
|
||||||
"default": 10.0,
|
|
||||||
"minimum" : 0.1,
|
|
||||||
"append" : "edt_append_hz",
|
|
||||||
"propertyOrder" : 2
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"additionalProperties": false
|
|
||||||
}
|
|
@ -1,9 +0,0 @@
|
|||||||
{
|
|
||||||
"name" : "Strobe blue",
|
|
||||||
"script" : "strobe.py",
|
|
||||||
"args" :
|
|
||||||
{
|
|
||||||
"color" : [ 0, 0, 255 ],
|
|
||||||
"frequency" : 5.0
|
|
||||||
}
|
|
||||||
}
|
|
15
effects/strobe-red.json
Normal file
15
effects/strobe-red.json
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
"name" : "Strobe red",
|
||||||
|
"script" : "fade.py",
|
||||||
|
"args" :
|
||||||
|
{
|
||||||
|
"color-start": [ 255, 0, 0 ],
|
||||||
|
"color-end": [ 0, 0, 0 ],
|
||||||
|
"fade-in-time" : 100,
|
||||||
|
"fade-out-time" : 100,
|
||||||
|
"color-start-time" : 100,
|
||||||
|
"color-end-time" : 100,
|
||||||
|
"repeat-count" : 0,
|
||||||
|
"maintain-end-color" : true
|
||||||
|
}
|
||||||
|
}
|
@ -1,9 +1,15 @@
|
|||||||
{
|
{
|
||||||
"name" : "Strobe white",
|
"name" : "Strobe white",
|
||||||
"script" : "strobe.py",
|
"script" : "fade.py",
|
||||||
"args" :
|
"args" :
|
||||||
{
|
{
|
||||||
"color" : [ 255, 255, 255 ],
|
"color-start": [ 255, 255, 255 ],
|
||||||
"frequency" : 5.0
|
"color-end": [ 0, 0, 0 ],
|
||||||
|
"fade-in-time" : 0,
|
||||||
|
"fade-out-time" : 100,
|
||||||
|
"color-start-time" : 50,
|
||||||
|
"color-end-time" : 10,
|
||||||
|
"repeat-count" : 0,
|
||||||
|
"maintain-end-color" : true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,18 +0,0 @@
|
|||||||
import hyperion, time
|
|
||||||
|
|
||||||
# Get the rotation time
|
|
||||||
color = hyperion.args.get('color', (255,255,255))
|
|
||||||
frequency = float(hyperion.args.get('frequency', 10.0))
|
|
||||||
|
|
||||||
# Check parameters
|
|
||||||
frequency = min(100.0, frequency)
|
|
||||||
|
|
||||||
# Compute the strobe interval
|
|
||||||
sleepTime = 0.5 / frequency
|
|
||||||
|
|
||||||
# Start the write data loop
|
|
||||||
while not hyperion.abort():
|
|
||||||
hyperion.setColor(0, 0, 0)
|
|
||||||
time.sleep(sleepTime)
|
|
||||||
hyperion.setColor(color[0], color[1], color[2])
|
|
||||||
time.sleep(sleepTime)
|
|
@ -846,9 +846,12 @@ void Hyperion::update()
|
|||||||
// Write the data to the device
|
// Write the data to the device
|
||||||
if (_device->enabled())
|
if (_device->enabled())
|
||||||
{
|
{
|
||||||
if (_deviceSmooth->enabled())
|
_deviceSmooth->setPause(priorityInfo.componentId == hyperion::COMP_EFFECT);
|
||||||
|
// feed smoothing in pause mode to maintain a smooth transistion back to smoth mode
|
||||||
|
if (_deviceSmooth->enabled() || _deviceSmooth->pause())
|
||||||
_deviceSmooth->setLedValues(_ledBuffer);
|
_deviceSmooth->setLedValues(_ledBuffer);
|
||||||
else
|
|
||||||
|
if (! _deviceSmooth->enabled())
|
||||||
_device->setLedValues(_ledBuffer);
|
_device->setLedValues(_ledBuffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -17,6 +17,7 @@ LinearColorSmoothing::LinearColorSmoothing( LedDevice * ledDevice, double ledUpd
|
|||||||
, _outputDelay(updateDelay)
|
, _outputDelay(updateDelay)
|
||||||
, _writeToLedsEnable(true)
|
, _writeToLedsEnable(true)
|
||||||
, _continuousOutput(continuousOutput)
|
, _continuousOutput(continuousOutput)
|
||||||
|
, _pause(false)
|
||||||
{
|
{
|
||||||
_log = Logger::getInstance("Smoothing");
|
_log = Logger::getInstance("Smoothing");
|
||||||
_timer.setSingleShot(false);
|
_timer.setSingleShot(false);
|
||||||
@ -118,7 +119,7 @@ void LinearColorSmoothing::queueColors(const std::vector<ColorRgb> & ledColors)
|
|||||||
if (_outputDelay == 0)
|
if (_outputDelay == 0)
|
||||||
{
|
{
|
||||||
// No output delay => immediate write
|
// No output delay => immediate write
|
||||||
if ( _writeToLedsEnable )
|
if ( _writeToLedsEnable && !_pause)
|
||||||
_ledDevice->setLedValues(ledColors);
|
_ledDevice->setLedValues(ledColors);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -132,7 +133,10 @@ void LinearColorSmoothing::queueColors(const std::vector<ColorRgb> & ledColors)
|
|||||||
{
|
{
|
||||||
if ( _outputQueue.size() > _outputDelay || !_writeToLedsEnable )
|
if ( _outputQueue.size() > _outputDelay || !_writeToLedsEnable )
|
||||||
{
|
{
|
||||||
_ledDevice->setLedValues(_outputQueue.front());
|
if (!_pause)
|
||||||
|
{
|
||||||
|
_ledDevice->setLedValues(_outputQueue.front());
|
||||||
|
}
|
||||||
_outputQueue.pop_front();
|
_outputQueue.pop_front();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -148,6 +152,11 @@ void LinearColorSmoothing::setEnable(bool enable)
|
|||||||
{
|
{
|
||||||
_timer.stop();
|
_timer.stop();
|
||||||
_previousValues.clear();
|
_previousValues.clear();
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void LinearColorSmoothing::setPause(bool pause)
|
||||||
|
{
|
||||||
|
_pause = pause;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -41,6 +41,9 @@ public:
|
|||||||
virtual int switchOff();
|
virtual int switchOff();
|
||||||
|
|
||||||
void setEnable(bool enable);
|
void setEnable(bool enable);
|
||||||
|
void setPause(bool pause);
|
||||||
|
bool pause() { return _pause; } ;
|
||||||
|
bool enabled() { return LedDevice::enabled() && !_pause; };
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
/// Timer callback which writes updated led values to the led device
|
/// Timer callback which writes updated led values to the led device
|
||||||
@ -88,4 +91,7 @@ private:
|
|||||||
|
|
||||||
/// Flag for dis/enable continuous output to led device regardless there is new data or not
|
/// Flag for dis/enable continuous output to led device regardless there is new data or not
|
||||||
bool _continuousOutput;
|
bool _continuousOutput;
|
||||||
|
|
||||||
|
/// Flag for pausing
|
||||||
|
bool _pause;
|
||||||
};
|
};
|
||||||
|
@ -78,7 +78,7 @@ void PriorityMuxer::clearAll()
|
|||||||
{
|
{
|
||||||
for(auto key : _activeInputs.keys())
|
for(auto key : _activeInputs.keys())
|
||||||
{
|
{
|
||||||
if (key < LOWEST_PRIORITY)
|
if (key < LOWEST_PRIORITY-1)
|
||||||
{
|
{
|
||||||
_activeInputs.remove(key);
|
_activeInputs.remove(key);
|
||||||
}
|
}
|
||||||
|
@ -617,7 +617,7 @@ void JsonClientConnection::handleServerInfoCommand(const QJsonObject&, const QSt
|
|||||||
const Hyperion::InputInfo & priorityInfo = _hyperion->getPriorityInfo(priority);
|
const Hyperion::InputInfo & priorityInfo = _hyperion->getPriorityInfo(priority);
|
||||||
QJsonObject item;
|
QJsonObject item;
|
||||||
item["priority"] = priority;
|
item["priority"] = priority;
|
||||||
if (priorityInfo.timeoutTime_ms != -1 && (priorityInfo.componentId == hyperion::COMP_COLOR || priorityInfo.componentId == hyperion::COMP_EFFECT))
|
if (priorityInfo.timeoutTime_ms != -1 )
|
||||||
{
|
{
|
||||||
item["duration_ms"] = int(priorityInfo.timeoutTime_ms - now);
|
item["duration_ms"] = int(priorityInfo.timeoutTime_ms - now);
|
||||||
}
|
}
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
"priority": {
|
"priority": {
|
||||||
"type": "integer",
|
"type": "integer",
|
||||||
"minimum" : 1,
|
"minimum" : 1,
|
||||||
"maximum" : 254,
|
"maximum" : 253,
|
||||||
"required": true
|
"required": true
|
||||||
},
|
},
|
||||||
"duration": {
|
"duration": {
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
"priority": {
|
"priority": {
|
||||||
"type": "integer",
|
"type": "integer",
|
||||||
"minimum" : 1,
|
"minimum" : 1,
|
||||||
"maximum" : 254,
|
"maximum" : 253,
|
||||||
"required": true
|
"required": true
|
||||||
},
|
},
|
||||||
"duration": {
|
"duration": {
|
||||||
|
@ -210,7 +210,7 @@ void HyperionDaemon::startInitialEffect()
|
|||||||
const QJsonObject & BGEffectConfig = _qconfig["backgroundEffect"].toObject();
|
const QJsonObject & BGEffectConfig = _qconfig["backgroundEffect"].toObject();
|
||||||
const int FG_PRIORITY = 0;
|
const int FG_PRIORITY = 0;
|
||||||
const int DURATION_INFINITY = 0;
|
const int DURATION_INFINITY = 0;
|
||||||
const int BG_PRIORITY = PriorityMuxer::LOWEST_PRIORITY;
|
const int BG_PRIORITY = PriorityMuxer::LOWEST_PRIORITY-1;
|
||||||
|
|
||||||
// clear the leds
|
// clear the leds
|
||||||
hyperion->setColor(FG_PRIORITY, ColorRgb::BLACK, 100, false);
|
hyperion->setColor(FG_PRIORITY, ColorRgb::BLACK, 100, false);
|
||||||
|
Loading…
Reference in New Issue
Block a user