mirror of
https://github.com/hyperion-project/hyperion.ng.git
synced 2023-10-10 13:36:59 +02:00
ed5455458b
* Handle Exceptions in main & Pythoninit * Have SSDPDiscover generic again * Have SSDPDiscover generic again * Change Info- to Debug logs as technical service messages * Nanoleaf - When switched on, ensure UDP mode * Include SQL Database in Cross-Compile instructions * Fix Clazy (QT code checker) and clang Warnings * Stop LedDevice:write for disabled device * Nanoleaf: Fix uint printfs * NanoLeaf: Fix indents to tabs * NanoLeaf - Add debug verbosity switches * Device switchability support, FileDevice with timestamp support * Nanoleaf Light Panels now support External Control V2 * Enhance LedDeviceFile by Timestamp + fix readyness * Stop color stream, if LedDevice disabled * Nanoleaf - remove switchability * Fix MultiColorAdjustment, if led-range is greater lednum * Fix logging * LedFileDevice/LedDevice - add testing support * New "Led Test" effect * LedDeviceFile - Add chrono include + Allow Led rewrites for testing * Stabilize Effects for LedDevices where latchtime = 0 * Update LedDeviceFile, allow latchtime = 0 * Distangle LinearColorSmoothing and LEDDevice, Fix Effect configuration updates * Updates LedDeviceFile - Initialize via Open * Updates LedDeviceNanoleaf - Initialize via Open, Remove throwing exceptions * Updates ProviderUDP - Remove throwing exceptions * Framebuffer - Use precise timer * TestSpi - Align to LedDevice updates * Pretty Print CrossCompileHowTo as markdown-file * Ensure that output is only written when LedDevice is ready * Align APA102 Device to new device staging * Logger - Remove clang warnings on extra semicolon * Devices SPI - Align to Device stages and methods * Fix cppcheck and clang findings * Add Code-Template for new Devices * Align devices to stages and methods, clean-up some code * Allow to reopen LedDevice without restart * Revert change "Remove Connect (PriorityMuxer::visiblePriorityChanged -> Hyperion::update) due to double writes" * Remove visiblePriorityChanged from LedDevice to decouple LedDevice from hyperion logic * Expose LedDevice getLedCount and align signedness
99 lines
3.0 KiB
Python
99 lines
3.0 KiB
Python
import hyperion, time
|
|
|
|
# Get the parameters
|
|
fadeInTime = float(hyperion.args.get('fade-in-time', 2000)) / 1000.0
|
|
fadeOutTime = float(hyperion.args.get('fade-out-time', 2000)) / 1000.0
|
|
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 = float(hyperion.latchTime)/1000.0
|
|
if minStepTime == 0: minStepTime = 1
|
|
currentR = currentG = currentB = 0
|
|
|
|
# create color table for fading from start to end color
|
|
steps = float(max(abs(colorEnd[0] - colorStart[0]),max(abs(colorEnd[1] - colorStart[1]),abs(colorEnd[2] - colorStart[2]))))
|
|
color_step = (0,0,0)
|
|
|
|
if steps == 0:
|
|
steps = 1
|
|
else:
|
|
color_step = (
|
|
(colorEnd[0] - colorStart[0]) / steps,
|
|
(colorEnd[1] - colorStart[1]) / steps,
|
|
(colorEnd[2] - colorStart[2]) / steps
|
|
)
|
|
|
|
calcChannel = lambda i: min(max(int(round(colorStart[i] + color_step[i]*step)),0), colorEnd[i] if colorStart[i] < colorEnd[i] else colorStart[i])
|
|
colors = []
|
|
for step in range(int(steps)+1):
|
|
colors.append( (calcChannel(0),calcChannel(1),calcChannel(2)) )
|
|
|
|
# calculate timings
|
|
if fadeInTime>0:
|
|
incrementIn = max(1,int(round(steps / (fadeInTime / minStepTime) )))
|
|
sleepTimeIn = fadeInTime / (steps / incrementIn)
|
|
else:
|
|
incrementIn = sleepTimeIn = 1
|
|
|
|
if fadeOutTime>0:
|
|
incrementOut = max(1,int(round(steps / (fadeOutTime / minStepTime) )))
|
|
sleepTimeOut = fadeOutTime / (steps / incrementOut)
|
|
else:
|
|
incrementOut = sleepTimeOut = 1
|
|
|
|
def setColor(r,g,b):
|
|
global currentR,currentG,currentB
|
|
|
|
currentR = r
|
|
currentG = g
|
|
currentB = b
|
|
hyperion.setColor(r,g,b)
|
|
|
|
# loop
|
|
repeatCounter = 1
|
|
while not hyperion.abort():
|
|
# fade in
|
|
if fadeInTime > 0:
|
|
setColor( colors[0][0],colors[0][1],colors[0][2] )
|
|
for step in range(0,int(steps)+1,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[int(steps)][0],colors[int(steps)][1],colors[int(steps)][2] )
|
|
time.sleep(minStepTime)
|
|
t += minStepTime
|
|
|
|
# fade out
|
|
if fadeOutTime > 0:
|
|
setColor( colors[int(steps)][0],colors[int(steps)][1],colors[int(steps)][2] )
|
|
for step in range(int(steps),-1,-incrementOut):
|
|
if hyperion.abort(): break
|
|
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(minStepTime)
|
|
t += minStepTime
|
|
|
|
# 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)
|
|
|