---
title: "Nullfeld â Study Mode"
id: study-mode-nullfeld
version: "v0.1"
date: "2025-09-03"
scope: "pilot"
owner: "Crew (Eule & Vector)"
status: "pilotfaehig"
tags: ["nullfeld","study-mode","kids","mqtt","energy","audit","local-first"]
roles: ["Eule","Vector","Bugsy","SnakePy","Schnippsi","CapaciTobi","Schraubaer"]
license: "Code: AGPL-3.0; Content: CC BY-SA 4.0; Add-on: Crumbforest-Return"
summary: "Frage -> Vektor -> Aufmerksamkeit -> Kruemelcode -> (keine fertige Loesung) -> neue Fragen."
---
# Nullfeld â Study Mode (v0.1)
**Kurzsatz:** Frage -> Vektor -> Aufmerksamkeit -> KrĂŒmelcode -> (keine fertige Lösung) -> neue Fragen.
**Prinzip:** Fragen > Tempo. Local-first. Energie sichtbar. Logs statt Bauch.
---
## 1) Wozu?
Damit Kinder atmen (nicht performen), Maschinen helfen (nicht ersetzen) und der Wald mitlernt.
Nullfeld heiĂt: keine fertigen Antworten, sondern erfahrbare Schritte mit sichtbaren Spuren (Logs, Energie, Herkunft).
---
## 2) Leitplanken (non-negotiable)
- **Local-first:** Alles lÀuft offline im Pelicase (Broker/Flows). Cloud optional.
- **EinverstÀndnis & Opt-out:** Kind/Eltern verstehen in 1 Satz. Stopp jederzeit.
- **Datensparsamkeit:** Nur, was fĂŒrs Lernen/SchĂŒtzen nötig ist.
- **Auditierbar:** Jede Aktion bekommt Zeit, Zweck, Energie â als Datei.
- **Energie sichtbar:** Jede Antwort kostet Joule; wir zeigenâs.
- **RĂŒckfluss:** Wer nutzt, nennt Crumbforest und gibt etwas zurĂŒck (siehe Lizenz).
---
## 3) Datenformate
### 3.1 MQTT Topics
- Publish (Edge -> Ledger):
`crumb/study/<device_id>/event`
- Subscribe (Hints an Device):
`crumb/study/<device_id>/hint`
- Healthbeat (bestehend):
`crumb/esp/<id>/heartbeat`
### 3.2 Event-Payload (JSON)
```json
{
"session_id": "cf-2025-09-03-XYZ",
"learner_id": "pseudo-abc123",
"mode": "study-nullfeld",
"material": "md://spirale_co2.md#abschnitt2",
"step": {"t":"2025-09-03T10:15:05Z","action":"explain","value":"CO2 > 1400 ppm -> Lueften"},
"energy_joules": 42,
"provenance": "https://crumbforest.org/specs/study-nullfeld/v0.1"
}
4) Minimal-Setup (5 Minuten)
Voraussetzung: Mosquitto lÀuft auf BROKER_IP (z. B. 192.168.50.10), User esp*, allow_anonymous false.
4.1 Node-RED (Edge)
Flow A: Ledger
- MQTT in: topic
crumb/study/+/event - file out (append):
/var/log/crumb/study_ledger.jsonl
Flow B: Energy tick
- inject: alle 60s
- function: schÀtzt
energy_joules - MQTT out:
crumb/study/<device_id>/event
(Reicht fĂŒr Pilot. Visualisierung spĂ€ter.)
5) ESP MicroPython â Hallo Nullfeld
Ziel: WLAN, Heartbeat, eine Lern-Frage posten.
# boot.py (kompakt, robuste Defaults)
import network, time, json
from umqtt.simple import MQTTClient
SSID = "ESP-Wald"
PWD = "***"
BROKER = "192.168.50.10"
CID = "esp-null-01"
def wifi():
sta = network.WLAN(network.STA_IF)
sta.active(True)
if not sta.isconnected():
sta.connect(SSID, PWD)
for _ in range(50):
if sta.isconnected(): break
time.sleep_ms(200)
return sta.ifconfig()
def post(topic, obj):
c = MQTTClient(CID, BROKER, keepalive=60, ssl=False)
c.connect()
c.publish(topic, json.dumps(obj))
c.disconnect()
cfg = wifi()
now = time.time()
post(f"crumb/esp/{CID}/heartbeat", {"if": cfg, "t": now})
post(f"crumb/study/{CID}/event", {
"session_id": "demo-" + str(int(now)),
"learner_id": "pseudo",
"mode": "study-nullfeld",
"material": "md://spirale_co2.md#start",
"step": {"t": now, "action": "prompt", "value": "Warum blinkt das?"},
"energy_joules": 1
})
6) EinverstĂ€ndnis â 1-Satz-ErklĂ€rung (UI-Baustein)
Wozu? Damit du leichter atmest und verstehst.
Was speichern wir? Frage, Antwort, Zeitpunkt, ein bisschen Technik â keine versteckten Personendaten.
Dein Knopf: Stopp jederzeit.
Energie heute: 0.04 Wh đČ
(Als Infobox direkt im UI, plus âStoppâ-Button.)
7) Energie & CO2 (sichtbar, nicht schulmeistern)
energy_joules = board_idle + tx_cost + compute_estimate(SchĂ€tzer reicht).- Anzeige: pro Schritt und pro Session (kleiner âWaldzĂ€hlerâ).
- Optional CO2-Faktor (lokal definieren), z. B.
gCO2_per_Whâ nur als Kontext.
8) Audit & Einsicht
- Ledger: JSONL unter
/var/log/crumb/study_ledger.jsonl - Rotation: tÀglich; Aufbewahrung: 30 Tage (Pilot)
- Eltern-Einsicht: read-only Export (ZIP) + kurzer âWas wurde gelernt?â-Report
9) Sicherheit & Rechte
- Standard: keine Bild/Ton-Aufnahme.
- Kamera nur projektbezogen + separate Zustimmung.
- Minimaldaten: keine Klarnamen im Ledger.
- Netzwerk: ESP-VLAN -> Broker:1883; DNS/DHCP offen; Rest drop.
- Fehlerkultur: Bug != Schuld. Bugsy loggt, Eule prĂŒft, Vector erklĂ€rt.
10) Herkunft & RĂŒckfluss
HTML-Provenance
<meta name="generator" content="Crumbforest Study Mode / Nullfeld v0.1">
<meta name="origin" content="https://crumbforest.org/specs/study-nullfeld/v0.1">
<meta name="credit" content="Built with Crumbforest Crew (Kids, Eule & Vector).">
JSON-LD
<script type="application/ld+json">
{
"@context":"https://schema.org",
"@type":"SoftwareApplication",
"name":"Crumbforest Study Mode / Nullfeld",
"version":"0.1",
"creator":{"@type":"Organization","name":"Crumbforest Crew"},
"license":"AGPL-3.0-or-later + CC BY-SA 4.0 + Crumbforest-Return-Addendum",
"isAccessibleForFree": true
}
</script>
Lizenz (Kurz)
- Code: AGPL-3.0
- Content: CC BY-SA 4.0
-
Crumbforest-Return-Addendum: Kommerzielle Nutzung erlaubt, wenn
-
âCrumbforest Study Modeâ gut sichtbar genannt wird und
- ein messbarer RĂŒckfluss erfolgt (z. B. Stipendium, Sachspende, 1% vom studienbezogenen Umsatz an ein offenes Kinder-Lernprojekt).
11) 5-Min-Check (vor Kids)
- Broker up?
ss -ltn | grep 1883 - Topic test:
mosquitto_pub/subaufcrumb/study/test/event - Ledger wÀchst?
tail -f /var/log/crumb/study_ledger.jsonl - Energie tickt? Node-RED âtickâ schreibt Events
- Opt-out funktioniert? Stopp-Button stoppt sofort
12) Warum Nullfeld?
Weil Stille vor Antwort kommt.
Weil Aufmerksamkeit wertvoller ist als Output.
Weil Kinder keine KPI sind.
Und weil jede gute Frage den Wald klĂŒger macht â uns auch. đČ
13) Roadmap (leicht, spiralförmig)
- v0.2: kleine UI-Anzeige (Energiebalken + letzte 3 Schritte)
- v0.3: Eltern-Export (1-Klick, Passwort-ZIP)
- v0.4: Badges (Erster Funke, Sauber geloggt) â ohne Punktejagd
Changelog: v0.1 â Erstfassung (Edge-Flows, Topics, Consent, Lizenz & RĂŒckfluss)
Kontakt: crew@crumbforest.org â Eule hört zuerst.
::contentReference[oaicite:0]{index=0}