Here you go â a clean, vector-friendly MD you can drop straight into the repo.
Beardyman-Prinzip â ESP-Wald
Ein Sound-Broker als Lern- und BĂŒhnen-Setup (Clock, Control, Care)
Stand: v1
Kontext: 4 iPads steuern via MQTT eine âAuroraâ-Kernuhr (Clock) und Module (LEDs, Seifenblasen, Prompts). Broker lĂ€uft lokal/statisch, MikroTik segmentiert (ESP-VLAN isoliert, Crew-Pads separat).
Ziel: Ein robustes, kindertaugliches Set-up, das im Learn-Modus ruhig und nachvollziehbar ist und im Stage-Modus Show kannâohne je die Nullfeld-Sicherheiten (CUT, Watchdogs, Logs) zu verlieren.
1) Architektur (kurz)
-
Netz
-
MikroTik:
VLAN50 = ESP_WALD,VLAN20 = CREWPADS(oder vorhandenes Crew-WLAN). - Broker (RasPi/Jetson) per LAN, feste IP (z. B.
192.168.50.10), nur Control-Daten ĂŒber MQTT. -
Rollen
-
Clock/Conductor: zentrale BPM & Tick.
- Controller (4 iPads): Beat, Lights/Bubbles, FX/Prompts, Scene/CUT.
- Acts: ESP-LEDs, Seifenblasen-ESP, OpenMV (Heartbeat/Events), optional Audio-Host (Ableton/Logic).
2) MQTT-Topics (minimal & robust)
# Zeitbasis
crumb/clock/bpm int # z.B. 120
crumb/clock/tick int # 0..7 (8er Raster)
# Global Commands
crumb/cmd/cut "NOW" # harter Not-Aus fĂŒr alles
crumb/cmd/scene "A"|"B"|"C"
# Musik / Visual Control (klein halten!)
crumb/stem/beat "k:1,5|h:3,7" # Mini-Pattern
crumb/stem/melody "C4:1,C5:5" # Note events
crumb/stem/light/<zone> JSON {"mode":"pulse","h":210,"s":80,"v":60}
# Telemetrie / Logs
crumb/esp/<id>/heartbeat JSON {"rssi":-57,"lat":42}
crumb/log/<device> string # Plain debug for Node-RED pane
Prinzip: Nur wenige, sinnvolle Messages. Clock zuerst, alles andere folgt.
3) Zwei Betriebsarten
Learn (Default)
- 8-Takt-Fenster: add (1â2), hold (3â6), remove (7â8) â Kinder spĂŒren Struktur.
- Node-RED zeigt Logs (âKrĂŒmel-Beweiseâ) live.
- CUT jederzeit verfĂŒgbar.
Stage (Show)
- Clock âfree runâ, Scenes feuern mehrere Topics als Makro.
- CUT bleibt âgroĂer roter Knopfâ.
4) Die 4 iPad-Rollen
-
Clock/Conductor
-
Fader:
bpm(80â140) âcrumb/clock/bpm - Buttons:
crumb/cmd/cut=NOW,crumb/cmd/scene=A|B|C -
Takt-Reset (
tick=0) -
Beat
-
8 Step-Pads â
crumb/stem/beat -
âGhostâ-Taste: nur Visuals (kein Ton)
-
Lights & Bubbles
-
Zonen-Pads:
crumb/stem/light/front|hex|sky -
Slider: H/S/V, Modes:
pulse|aurora -
FX / Prompts
-
Kurztexte â
crumb/ui/hint - âSoloâ: alles Mute auĂer gewĂ€hlte Zone
UX-Regel: Pro iPad nur 3â4 Controls gleichzeitig aktiv. Kein Ăberladen.
5) Node-RED Mini-Flow (Tag-1)
- mqtt-in:
crumb/#â debug (Live-Sicht fĂŒr Kinder & Crew) - function âtick gateâ: lĂ€sst nur Messages zu Takt-Beginn (1/3/5/7) durch â Groove bleibt sauber.
- Optional: Ableton-Link â MQTT (kleines Python-Skript) publisht
bpm&tick.
6) Safety (Nullfeld)
- CUT muss auf jedem iPad groĂ, eindeutig, erreichbar sein.
- Jedes ESP: Wenn 3 Ticks fehlen oder
bpmout-of-range, lokal Failsafe (Schwarz/Still) bistick=0. - Watchdog: Bei fehlendem
heartbeatâ Node-RED zeigt Warnkarte. - Firewall: ESP-VLAN darf nur DNS/DHCP/MQTT; kein âInternet by defaultâ.
7) Bring-up in 10 Schritten
- Broker IP fix (z. B.
192.168.50.10). Lokal testen:mosquitto_pub/sub. - MikroTik: CREWPADS â Broker TCP/1883 erlauben; ESP-VLAN nur DNS/DHCP/MQTT.
- Node-RED:
mqtt-brokerNode + Panels âClock / Logsâ. - Clock-Publisher (RPi):
bpm=120,tick 0..7senden (8er Raster). - iPad #1 (Clock): CUT + Scene + BPM-Fader live testen.
- iPad #2 (Beat): Step-Pads â
crumb/stem/beat. - ESP-LED:
crumb/stem/light/hexâ Farbe Ă€ndert. - OpenMV:
heartbeat/ui/hintpublisht (âBubble time!â). - CUT-Test: Alles geht sofort aus, Re-Start bei
tick=0. - âRegel der 8â mit Kids ĂŒben (add/hold/remove) â Ruhe & Kontrolle.
8) Beispiel: mini-Clock (Python, skizziert)
# sendet bpm & 8er tick
import time, paho.mqtt.client as mq
c = mq.Client()
c.connect("192.168.50.10", 1883, 60)
bpm = 120
t = 0
while True:
c.publish("crumb/clock/bpm", bpm, qos=0, retain=True)
c.publish("crumb/clock/tick", t, qos=0, retain=False)
t = (t + 1) % 8
time.sleep(60.0 / bpm / 2) # 8tel oder wie gewĂŒnscht
9) Akzeptanzkriterien (Done)
- CUT schaltet alles in < 200 ms stumm/aus.
- Tick-Sync: Alle sichtbaren Akteure reagieren im Raster (kein âSchwimmenâ).
- Logs: Node-RED zeigt alle eingehenden Topics (kindverstÀndlich).
- Failsafe: 3 fehlende Ticks â alle ESPs gehen âsicherâ.
10) Rollback / Notfall
- Broker down â Clock stoppt â ESPs gehen sicher (Schwarz/Still).
- MikroTik-Regeln off? Fallback-Profile bereit halten (export
.rsc). - CUT bleibt lokal (auch ohne Broker) als letzte Instanz.
11) Backlog (kurz)
- TouchOSC/MIDI-Mapping Templates versionieren.
- âScene-Makrosâ als Node-RED Subflows.
- Ableton-Link Bridge hÀrten (Jitter-Messung).
- Telemetrie-Dashboard (LED-Zonen, RSSI, Tick-Lag).
- Workshop-Kit: âRegel der 8â als Boden-Hexa mit LED-Ring (Eule in der Mitte).
Nullfeld-Merksatz
Die 1 (Clock) fĂŒhrt, die 0 (CUT) schĂŒtzt.
Dazwischen sind nur so viele Nachrichten, wie KinderhÀnde zÀhlen können.