139 lines
4.5 KiB
Bash
Executable File
139 lines
4.5 KiB
Bash
Executable File
#!/bin/bash
|
|
# 🚀 Mission Data Evaluator (Master Gateway)
|
|
# Liest JSON vom Browser und routet zur richtigen Mission.
|
|
|
|
# Waldwächter laden
|
|
# Waldwächter laden
|
|
MISSION_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
source "${MISSION_DIR}/../lib/waldwaechter.sh"
|
|
|
|
clear
|
|
cat << "EOF"
|
|
📡 CRUMB-MISSION DATA LINK 📡
|
|
|
|
Verbindung zum Browser wird hergestellt...
|
|
|
|
Anleitung:
|
|
1. Öffne die Crumbblocks Mission im Browser
|
|
2. Baue deinen Code und klicke "▶️ Ausführen"
|
|
3. Klicke "🚀 An Crew Senden"
|
|
4. Füge den kopierten Code hier ein (Ctrl+V / Cmd+V)
|
|
5. Drücke ENTER und dann CTRL+D (um das Einfügen beenden)
|
|
EOF
|
|
|
|
echo ""
|
|
echo "👇 Bitte JSON-Daten jetzt einfügen:"
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
|
|
# Lese Input bis EOF
|
|
INPUT_DATA=$(cat)
|
|
|
|
echo ""
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
echo "🔄 Daten empfangen. Prüfe Mission-Typ..."
|
|
sleep 0.5
|
|
|
|
# Extrahiere Mission-ID aus dem JSON
|
|
# Wir nutzen grep/cut als robusten Fallback, falls jq fehlt
|
|
MISSION_ID=$(echo "$INPUT_DATA" | grep -o '"mission": *"[^"]*"' | cut -d'"' -f4)
|
|
|
|
# Routing Logic
|
|
if [[ "$MISSION_ID" == "schnippsi_ui" ]]; then
|
|
# --> Rerouting zur UI Mission
|
|
echo ">> Routing zu: Dein Zeichen im Wald (Schnippsi UI)"
|
|
echo "$INPUT_DATA" | "${MISSION_DIR}/evaluate_sign.sh"
|
|
exit $?
|
|
elif [[ "$MISSION_ID" == "solar_kettle" ]]; then
|
|
# --> Rerouting zur Solar Mission
|
|
echo ">> Routing zu: Solar Wasserkocher (Tobi Physics)"
|
|
echo "$INPUT_DATA" | "${MISSION_DIR}/robots/evaluate_solar_kettle.sh"
|
|
exit $?
|
|
fi
|
|
|
|
# ============================================================
|
|
# DEFAULT / LEGACY LOGIC (Rainbow Counter)
|
|
# ============================================================
|
|
|
|
# Falls keine Mission-ID gefunden wurde oder unbekannt, gehen wir davon aus,
|
|
# dass es der Rainbow Counter ist (Backward Compatibility).
|
|
|
|
echo ">> Routing zu: Standard (Rainbow Counter)"
|
|
echo ""
|
|
|
|
# Validierung
|
|
if [[ "$INPUT_DATA" != *"{"* ]] || [[ "$INPUT_DATA" != *"}"* ]]; then
|
|
echo "❌ FEHLER: Das sieht nicht wie gültiges JSON aus."
|
|
exit 1
|
|
fi
|
|
|
|
has_jq=$(command -v jq)
|
|
|
|
# Versuch, die relevante Zeile zu finden (total_events)
|
|
VALID_JSON_LINE=$(echo "$INPUT_DATA" | grep '"total_events":' | head -n 1)
|
|
|
|
if [ -z "$VALID_JSON_LINE" ]; then
|
|
CLEAN_JSON="$INPUT_DATA"
|
|
else
|
|
CLEAN_JSON="$VALID_JSON_LINE"
|
|
fi
|
|
|
|
CLEAN_JSON=$(echo "$CLEAN_JSON" | sed 's/^[^{]*{/{/; s/}[^}]*$/}/')
|
|
|
|
if [ -n "$has_jq" ] && echo "$CLEAN_JSON" | jq . >/dev/null 2>&1; then
|
|
TOTAL=$(echo "$CLEAN_JSON" | jq -r '.total_events // 0')
|
|
DOMINANT=$(echo "$CLEAN_JSON" | jq -r '.dominant // "unknown"')
|
|
RED=$(echo "$CLEAN_JSON" | jq -r '.classes.red // 0')
|
|
BLUE=$(echo "$CLEAN_JSON" | jq -r '.classes.blue // 0')
|
|
else
|
|
# Fallback Parser
|
|
TOTAL=$(echo "$CLEAN_JSON" | grep -o '"total_events": *[0-9]*' | awk -F: '{print $2}' | tr -d ' ,')
|
|
DOMINANT=$(echo "$INPUT_DATA" | grep -o '"dominant": *"[^"]*"' | awk -F: '{print $2}' | tr -d ' "')
|
|
RED=$(echo "$INPUT_DATA" | grep -o '"red": *[0-9]*' | awk -F: '{print $2}' | tr -d ' ,')
|
|
BLUE=$(echo "$INPUT_DATA" | grep -o '"blue": *[0-9]*' | awk -F: '{print $2}' | tr -d ' ,')
|
|
fi
|
|
|
|
# Default Werte falls leer
|
|
TOTAL=${TOTAL:-0}
|
|
RED=${RED:-0}
|
|
BLUE=${BLUE:-0}
|
|
DOMINANT=${DOMINANT:-unknown}
|
|
|
|
# Feedback der Crew
|
|
echo "🐘 DumboSQL prüft die Struktur..."
|
|
sleep 1
|
|
dumbosql "Datensatz empfangen. $TOTAL Ereignisse gefunden. Die Syntax ist valide. Speichere in temporärem Cache..."
|
|
echo ""
|
|
|
|
echo "🦊 FunkFox analysiert den Flow..."
|
|
sleep 1
|
|
if [ "$TOTAL" -gt 10 ]; then
|
|
funkfox "Wow, da ist ordentlich was los! $TOTAL Signale verarbeitet. Der Flow ist fast schon ein Stream!"
|
|
elif [ "$TOTAL" -eq 0 ]; then
|
|
funkfox "Äh, Stille? Ich höre nichts. Null Events. Sicher, dass der Code lief?"
|
|
else
|
|
funkfox "Okay, $TOTAL Signale. Ein guter Start für einen kleinen Loop."
|
|
fi
|
|
echo ""
|
|
|
|
echo "🦉 Maya-Eule betrachtet die Farben..."
|
|
sleep 1
|
|
case $DOMINANT in
|
|
"red") mayaeule "Rot dominiert. Energie und Warnung." ;;
|
|
"blue") mayaeule "Blau ist stark. Ruhe und Technik." ;;
|
|
"green") mayaeule "Grün wie der Wald. Alles im Bereich." ;;
|
|
"yellow") mayaeule "Gelb leuchtet wie die Sonne." ;;
|
|
*) mayaeule "Eine interessante Mischung ($DOMINANT). Vielfalt ist gut." ;;
|
|
esac
|
|
echo ""
|
|
|
|
echo "📊 Statistik:"
|
|
echo " 🔴 Rot: $RED"
|
|
echo " 🔵 Blau: $BLUE"
|
|
echo ""
|
|
|
|
cat << "EOF"
|
|
✅ ANALYSE ABGESCHLOSSEN
|
|
|
|
Die Crew bestätigt: Dein Blockly-Code funktioniert!
|
|
EOF
|