alternating_phase: compact per-bar overrides to stay <230 bytes; swap grouping flip; avoid pure white by sending 254,254,254 to work around strip edge-cases; add API logging improvements

This commit is contained in:
2025-10-04 01:44:05 +13:00
parent 43feb5938f
commit dc6d48a44b
2 changed files with 34 additions and 22 deletions

View File

@@ -15,11 +15,6 @@
"g": 0,
"b": 255
},
{
"r": 128,
"g": 0,
"b": 128
},
{
"r": 255,
"g": 255,
@@ -31,19 +26,24 @@
"b": 255
},
{
"r": 255,
"r": 0,
"g": 255,
"b": 255
},
{
"r": 255,
"g": 128,
"b": 128
"g": 0,
"b": 255
},
{
"r": 108,
"g": 255,
"b": 255
}
],
"selected_color_indices": [
4,
3
5,
2
],
"pattern_parameters": {
"alternating": {
@@ -127,6 +127,13 @@
"delay": 100,
"n1": 21,
"n2": 60,
"n3": 28,
"n4": 1
},
"ap": {
"delay": 100,
"n1": 10,
"n2": 10,
"n3": 1,
"n4": 1
}

View File

@@ -384,29 +384,34 @@ class LightingController:
color_b = self._palette_color(1)
phase = self.beat_index % 2
# Set the default color based on phase so both bar groups swap each beat
default_color = color_a if phase == 0 else color_b
alt_color_for_swap = color_b if phase == 0 else color_a
# Avoid pure white edge-case on some bars by slightly reducing to 254
if default_color == (255, 255, 255):
default_color = (254, 254, 254)
if alt_color_for_swap == (255, 255, 255):
alt_color_for_swap = (254, 254, 254)
payload = {
"d": {
"t": "b",
"pt": "a", # alternating
"n1": self.n1,
"n2": self.n2,
# Default color for bars not overridden (keeps payload small)
"cl": [color_a],
# Default color for non-swapped bars changes with phase
"cl": [default_color],
"s": phase,
}
}
# Bars in this list will have inverted phase and explicit color override
swap_bars = ["101", "103", "105", "107"]
for bar_name in LED_BAR_NAMES:
if bar_name in swap_bars:
# Invert phase and explicitly set alternate color
inv_phase = (phase + 1) % 2
alt_color = color_b if phase == 0 else color_a
payload[bar_name] = {"s": inv_phase, "cl": [alt_color]}
else:
# Keep default (no extra fields) to save bytes
payload[bar_name] = {}
# Flip grouping so first four bars (100-103) use default color (color_a on even beats)
swap_bars = ["104", "105", "106", "107"]
# Only include overrides for swapped bars to minimize payload size
for bar_name in swap_bars:
inv_phase = (phase + 1) % 2
payload[bar_name] = {"s": inv_phase, "cl": [alt_color_for_swap]}
await self.led_controller.send_data(payload)