5.5 KiB
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.
- MikroTik:
-
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)
- Fader:
-
Beat
- 8 Step-Pads →
crumb/stem/beat - „Ghost“-Taste: nur Visuals (kein Ton)
- 8 Step-Pads →
-
Lights & Bubbles
- Zonen-Pads:
crumb/stem/light/front|hex|sky - Slider: H/S/V, Modes:
pulse|aurora
- Zonen-Pads:
-
FX / Prompts
- Kurztexte →
crumb/ui/hint - „Solo“: alles Mute außer gewählte Zone
- Kurztexte →
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.