From 3257879c22fd67c1e2b055964e66f1099a78f670 Mon Sep 17 00:00:00 2001
From: LordGrey <48840279+Lord-Grey@users.noreply.github.com>
Date: Fri, 13 Oct 2023 23:36:41 +0200
Subject: [PATCH] Add LED test effect lightening up LEDs in sequence

---
 assets/webconfig/i18n/en.json          |  2 +
 effects/ledtest-seq.json               | 11 +++++
 effects/ledtest-seq.py                 | 39 ++++++++++++++++++
 effects/schema/ledtest-seq.schema.json | 56 ++++++++++++++++++++++++++
 4 files changed, 108 insertions(+)
 create mode 100644 effects/ledtest-seq.json
 create mode 100644 effects/ledtest-seq.py
 create mode 100644 effects/schema/ledtest-seq.schema.json

diff --git a/assets/webconfig/i18n/en.json b/assets/webconfig/i18n/en.json
index 505c1be9..0b238935 100644
--- a/assets/webconfig/i18n/en.json
+++ b/assets/webconfig/i18n/en.json
@@ -760,6 +760,8 @@
     "edt_eff_ledlist": "LED List",
     "edt_eff_ledtest_header": "LED Test",
     "edt_eff_ledtest_header_desc": "Rotating output: Red, Green, Blue, White, Black",
+    "edt_eff_ledtest_seq_header": "LED Test - Sequence",
+    "edt_eff_ledtest_seq_header_desc": "Light up the LEDs in sequence",    
     "edt_eff_length": "Length",
     "edt_eff_lightclock_header": "Light Clock",
     "edt_eff_lightclock_header_desc": "A real clock as light! Adjust the colors of hours, minute, seconds. A optional 3/6/9/12 o'clock marker is also available. In case the clock is wrong, you need to check your system clock.",
diff --git a/effects/ledtest-seq.json b/effects/ledtest-seq.json
new file mode 100644
index 00000000..9577046d
--- /dev/null
+++ b/effects/ledtest-seq.json
@@ -0,0 +1,11 @@
+{
+	"name" : "Led Test - Sequence",
+	"script" : "ledtest-seq.py",
+	"args" :
+	{
+		"sleepTime" : 0.5,
+		"smoothing-custom-settings" : false,
+		"smoothing-time_ms" : 500,
+		"smoothing-updateFrequency" : 20.0
+	}
+}
diff --git a/effects/ledtest-seq.py b/effects/ledtest-seq.py
new file mode 100644
index 00000000..535c06bb
--- /dev/null
+++ b/effects/ledtest-seq.py
@@ -0,0 +1,39 @@
+import hyperion
+import time
+
+# Get parameters
+sleepTime = float(hyperion.args.get('sleepTime', 0.5))
+
+def TestRgb( iteration ):
+
+    switcher = {
+        0: (255, 0, 0),
+        1: (0, 255, 0),
+        2: (0, 0, 255),
+    }
+
+    return switcher.get(iteration, (127,127,127) )
+
+ledData = bytearray(hyperion.ledCount * (0,0,0) )
+
+i = 0
+while not hyperion.abort():
+
+	if i < hyperion.ledCount:
+		j = i % 3
+		rgb = TestRgb( j )
+		ledData[3*i+0] = rgb[0] 
+		ledData[3*i+1] = rgb[1] 
+		ledData[3*i+2] = rgb[2] 
+		i += 1
+	else:
+		if i == hyperion.ledCount:
+			ledData = bytearray(hyperion.ledCount * (0,0,0) )
+			i += 1
+		else:
+			i = 0
+
+	hyperion.setColor (ledData)
+		
+	time.sleep(sleepTime)
+
diff --git a/effects/schema/ledtest-seq.schema.json b/effects/schema/ledtest-seq.schema.json
new file mode 100644
index 00000000..d75afbe5
--- /dev/null
+++ b/effects/schema/ledtest-seq.schema.json
@@ -0,0 +1,56 @@
+{
+	"type":"object",
+	"script" : "ledtest-seq.py",
+	"title":"edt_eff_ledtest_seq_header",
+	"required":true,
+	"properties":{
+		"sleepTime": {
+			"type": "number",
+			"title":"edt_eff_sleeptime",
+			"default": 0.5,
+			"minimum" : 0.01,
+			"maximum": 1,
+			"step": 0.01,
+			"append" : "edt_append_s",
+			"propertyOrder" : 1
+		},
+		"smoothing-custom-settings" :
+		{
+			"type" : "boolean",
+			"title" : "edt_eff_smooth_custom",
+			"default" : false,
+			"propertyOrder" : 2
+		},
+		"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" : 3
+		},
+		"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" : 4
+		}
+	},
+	"additionalProperties": false
+}