12 Monate Crumbforest-Wachstum, sortiert nach Waldlogik. Struktur: - 454 Dokumente in 7 organischen Ebenen - Lichtung → Waldrand → Waldmitte → Wurzeln → Krone → Unterholz → Samen - INDEX.md für jede Ebene (eigene Stimme) - WALDKARTE.md (Master-Navigation) - crumbcodex.md (Das Versprechen zwischen Krümel & Bits) - lichtung/willkommen.md (Nullfeld-Einstieg für Kinder) Philosophie: - Waldlogik statt Ordnerlogik - Tiefe, Licht, Wurzeln - wie ein echter Wald - Schutz für Krümel, Tiefe für Gräber, Poesie für Atmende Repos verbunden: - OZM-Keks-Handbuch-v1 (Das Wissen) - Crumb-Core-v.1 (Das Herz) - 194.164.194.191 - crumbmissions (Das Spiel) Wuuuhuuuuu! 🦉✨
241 lines
6.7 KiB
Markdown
241 lines
6.7 KiB
Markdown
````markdown
|
||
---
|
||
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.
|
||
|
||
```python
|
||
# 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
|
||
|
||
```html
|
||
<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
|
||
|
||
```html
|
||
<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
|
||
|
||
1. „Crumbforest Study Mode“ gut sichtbar genannt wird und
|
||
2. ein messbarer Rückfluss erfolgt (z. B. Stipendium, Sachspende, 1% vom studienbezogenen Umsatz an ein offenes Kinder-Lernprojekt).
|
||
|
||
---
|
||
|
||
## 11) 5-Min-Check (vor Kids)
|
||
|
||
1. Broker up? `ss -ltn | grep 1883`
|
||
2. Topic test: `mosquitto_pub/sub` auf `crumb/study/test/event`
|
||
3. Ledger wächst? `tail -f /var/log/crumb/study_ledger.jsonl`
|
||
4. Energie tickt? Node-RED „tick“ schreibt Events
|
||
5. 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](mailto:crew@crumbforest.org) – Eule hört zuerst.
|
||
|
||
```
|
||
|
||
::contentReference[oaicite:0]{index=0}
|
||
```
|