mirror of
https://github.com/hyperion-project/hyperion.ng.git
synced 2025-03-01 10:33:28 +00:00
Disentangle LedDevice/LinearColorSmoothing, Bug Fixes & Test support (#654)
* 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
This commit is contained in:
@@ -10,6 +10,7 @@ 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
|
||||
|
12
effects/ledtest.json
Normal file
12
effects/ledtest.json
Normal file
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"name" : "Led Test",
|
||||
"script" : "ledtest.py",
|
||||
"args" :
|
||||
{
|
||||
"sleepTime" : 0.20,
|
||||
"testleds" : "all",
|
||||
"smoothing-custom-settings" : true,
|
||||
"smoothing-time_ms" : 500,
|
||||
"smoothing-updateFrequency" : 20.0
|
||||
}
|
||||
}
|
60
effects/ledtest.py
Normal file
60
effects/ledtest.py
Normal file
@@ -0,0 +1,60 @@
|
||||
# testleds can be :
|
||||
# "all" to test all the leds
|
||||
# a single led number, a list of led numbers
|
||||
|
||||
import hyperion
|
||||
import time
|
||||
#import colorsys
|
||||
|
||||
# Get parameters
|
||||
sleepTime = float(hyperion.args.get('sleepTime', 0.2))
|
||||
testleds = hyperion.args.get('testleds', "all")
|
||||
ledlist = hyperion.args.get('ledlist', "1")
|
||||
|
||||
testlist = ()
|
||||
if (testleds == "list") and (type(ledlist) is str):
|
||||
for s in ledlist.split(','):
|
||||
i = int(s)
|
||||
if (i<hyperion.ledCount):
|
||||
testlist += (i,)
|
||||
elif (testleds == "list") and (type(ledlist) is list):
|
||||
for s in (ledlist):
|
||||
i = int(s)
|
||||
if (i<hyperion.ledCount):
|
||||
testlist += (i,)
|
||||
else:
|
||||
testlist = range(hyperion.ledCount)
|
||||
|
||||
def TestRgb( iteration ):
|
||||
|
||||
switcher = {
|
||||
0: (255, 0, 0),
|
||||
1: (0, 255, 0),
|
||||
2: (0, 0, 255),
|
||||
3: (255, 255, 255),
|
||||
4: (0, 0, 0),
|
||||
}
|
||||
|
||||
return switcher.get(iteration, (127,127,127) )
|
||||
|
||||
ledData = bytearray(hyperion.ledCount * (0,0,0) )
|
||||
i = 0
|
||||
while not hyperion.abort():
|
||||
j = i % 5
|
||||
if (testleds == "all"):
|
||||
for lednum in testlist:
|
||||
rgb = TestRgb( j )
|
||||
ledData[3*lednum+0] = rgb[0]
|
||||
ledData[3*lednum+1] = rgb[1]
|
||||
ledData[3*lednum+2] = rgb[2]
|
||||
else:
|
||||
for lednum in testlist:
|
||||
rgb = TestRgb( j )
|
||||
ledData[3*lednum+0] = rgb[0]
|
||||
ledData[3*lednum+1] = rgb[1]
|
||||
ledData[3*lednum+2] = rgb[2]
|
||||
|
||||
hyperion.setColor (ledData)
|
||||
i += 1
|
||||
time.sleep(sleepTime)
|
||||
|
@@ -7,7 +7,9 @@ ledData = bytearray()
|
||||
ledDataBuf = bytearray()
|
||||
color_step = []
|
||||
minStepTime= float(hyperion.latchTime)/1000.0
|
||||
if minStepTime == 0: minStepTime = 1
|
||||
fadeSteps = min(256.0, math.floor(sleepTime/minStepTime))
|
||||
if fadeSteps == 0: fadeSteps = 1
|
||||
|
||||
# Initialize the led data
|
||||
for i in range(hyperion.ledCount):
|
||||
|
77
effects/schema/ledtest.schema.json
Normal file
77
effects/schema/ledtest.schema.json
Normal file
@@ -0,0 +1,77 @@
|
||||
{
|
||||
"type":"object",
|
||||
"script" : "ledtest.py",
|
||||
"title":"edt_eff_ledtest_header",
|
||||
"required":true,
|
||||
"properties":{
|
||||
"testleds": {
|
||||
"type": "string",
|
||||
"title":"edt_eff_whichleds",
|
||||
"enum" : ["all","list"],
|
||||
"default" : "all",
|
||||
"options" : {
|
||||
"enum_titles" : ["edt_eff_enum_all", "edt_eff_enum_list"]
|
||||
},
|
||||
"propertyOrder" : 1
|
||||
},
|
||||
"ledlist": {
|
||||
"type": "string",
|
||||
"title":"edt_eff_ledlist",
|
||||
"default" : "1,11,21",
|
||||
"options": {
|
||||
"dependencies": {
|
||||
"testleds": "list"
|
||||
}
|
||||
},
|
||||
"propertyOrder" : 2
|
||||
},
|
||||
"sleepTime": {
|
||||
"type": "number",
|
||||
"title":"edt_eff_sleeptime",
|
||||
"default": 0.15,
|
||||
"minimum" : 0.01,
|
||||
"maximum": 1,
|
||||
"step": 0.01,
|
||||
"append" : "edt_append_s",
|
||||
"propertyOrder" : 6
|
||||
},
|
||||
"smoothing-custom-settings" :
|
||||
{
|
||||
"type" : "boolean",
|
||||
"title" : "edt_eff_smooth_custom",
|
||||
"default" : false,
|
||||
"propertyOrder" : 7
|
||||
},
|
||||
"smoothing-time_ms" :
|
||||
{
|
||||
"type" : "integer",
|
||||
"title" : "edt_eff_smooth_time_ms",
|
||||
"minimum" : 25,
|
||||
"maximum": 600,
|
||||
"default" : 200,
|
||||
"append" : "edt_append_ms",
|
||||
"options": {
|
||||
"dependencies": {
|
||||
"smoothing-custom-settings": true
|
||||
}
|
||||
},
|
||||
"propertyOrder" : 8
|
||||
},
|
||||
"smoothing-updateFrequency" :
|
||||
{
|
||||
"type" : "number",
|
||||
"title" : "edt_eff_smooth_updateFrequency",
|
||||
"minimum" : 1.0,
|
||||
"maximum" : 100.0,
|
||||
"default" : 25.0,
|
||||
"append" : "edt_append_hz",
|
||||
"options": {
|
||||
"dependencies": {
|
||||
"smoothing-custom-settings": true
|
||||
}
|
||||
},
|
||||
"propertyOrder" : 9
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
}
|
@@ -25,6 +25,7 @@ def getSTime(rt, steps = 360):
|
||||
|
||||
# adapt sleeptime to hardware
|
||||
minStepTime= float(hyperion.latchTime)/1000.0
|
||||
if minStepTime == 0: minStepTime = 1
|
||||
if minStepTime > sleepTime:
|
||||
sleepTime = minStepTime
|
||||
return sleepTime
|
||||
|
@@ -7,6 +7,7 @@ for i in range(hyperion.ledCount):
|
||||
|
||||
sleepTime = float(hyperion.args.get('speed', 1.0)) * 0.004
|
||||
minStepTime = float(hyperion.latchTime)/1000.0
|
||||
if minStepTime == 0: minStepTime = 1
|
||||
factor = 1 if sleepTime > minStepTime else int(math.ceil(minStepTime/sleepTime))
|
||||
|
||||
runners = [
|
||||
|
Reference in New Issue
Block a user