Files
CrumbCodex-v.0.0/samen/spirale_co2.md
Krümel Branko 83df9de035 🌲 CrumbCodex v0.0 - Genesis
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! 🦉
2025-12-26 16:50:52 +01:00

199 lines
5.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Spirale, nicht Loop Low-CO₂ Debug
**Typ:** Playbook • **Version:** v1.1 • **Scope:** ESP\_WALD → BROKER:1883 (nur dieser Pfad)
**Owner:** Eule + Vector • **Tags:** `mikrotik` `esp32` `mqtt` `low-co2` `firewall`
**Prinzip:** *Keine neuen Netze. Ein Pfad. Ein Test. Ein Log. Rollback in 1 Zeile.*
## Ziel
ESP-Clients aus `192.168.50.0/24` dürfen **nur** TCP/1883 zum Broker `192.168.88.227`. Alles andere bleibt isoliert. Entscheidungen **nach Messung**, nicht nach Gefühl.
## Null-Feuer Pledge
* Keine Upgrades / keine neuen Listen während des Debugs.
* Max. 2 Kommandos zwischen Messungen.
* Jeder Schritt liefert **Zähler** oder **Fehlercode**.
* Wenn 2 Zyklen ohne Evidenz → **Stopp & Reframe**.
---
## 0) Preflight (ohne Änderungen)
**Snapshot (RouterOS):**
```routeros
/export file=pre_debug
/ip firewall address-list print where list~"ESP|BROKER"
/ip firewall filter print terse where chain=forward
/ip firewall filter print stats where comment~"ESP|BROKER|1883|MQTT|Isolate|Block"
```
**Soll-Listen (nur sichten):**
* `ESP_WALD``192.168.50.0/24`
* `BROKER``192.168.88.227`
> Falls FastTrack aktiv: Zähler können „leer“ bleiben. Merk dir die FastTrack-Regel (meist in `forward`).
---
## 1) Broker lebt lokal? (am Broker-Host)
```bash
ss -ltnp | grep :1883
mosquitto_sub -h 127.0.0.1 -t crumb/test -u esp1 -P '***' -v &
mosquitto_pub -h 127.0.0.1 -t crumb/test -m ping -u esp1 -P '***'
```
**Erwartung:** `crumb/test ping` erscheint. ✅
---
## 2) Router → Broker TCP-Probe (RouterOS)
```routeros
/tool telnet 192.168.88.227 1883
# bei "connected" sofort Ctrl-] und 'quit'
```
**Erwartung:** „connected“.
**Wenn nicht:** Routing/ARP zwischen Router und Broker prüfen (dieses Playbook stoppt hier).
---
## 3) ESP reine TCP-Probe (kein MQTT nötig)
Auf dem ESP (REPL):
```python
import usocket as s
a=('192.168.88.227',1883)
s_=s.socket(); s_.settimeout(3)
try:
s_.connect(a); print("TCP OK")
except Exception as e:
print("TCP FAIL", e)
finally:
try: s_.close()
except: pass
```
**Erwartung:** `TCP OK`.
* `ETIMEDOUT` → Pfad blockiert.
* `ECONNREFUSED` → Broker/Port unerreichbar.
---
## 4) Zähler lesen (RouterOS)
```routeros
/ip firewall filter print stats where comment~"ESP|BROKER|1883"
```
**Fall A Zähler > 0:** Regel greift. Weiter zu **5)**.
**Fall B Zähler = 0:** Erlaubnisregel trifft nicht → **nur eine** saubere Allow-Regel setzen.
---
## 4b) (Nur wenn nötig) **eine** Allow-Regel hinzufügen
**Einmalig, ganz nach oben in `forward` — mit Rückweg:**
```routeros
/ip firewall filter add chain=forward action=accept protocol=tcp dst-port=1883 \
src-address-list=ESP_WALD dst-address-list=BROKER \
place-before=0 comment="ALLOW-ESP_WALD-TO-BROKER-1883 (FINAL)"
```
**Rollback:**
```routeros
/ip firewall filter remove [find comment="ALLOW-ESP_WALD-TO-BROKER-1883 (FINAL)"]
```
**Hinweis FastTrack:** Wenn eine FastTrack-Regel davor liegt, sieht man evtl. keine Zähler. Für den Test kurz deaktivieren und danach **wieder aktivieren**:
```routeros
/ip firewall filter disable [find where action=fasttrack-connection]
# Test fahren …
/ip firewall filter enable [find where action=fasttrack-connection]
```
---
## 5) End-zu-Ende-Check
**ESP MQTT (MicroPython):**
```python
import network,time
from umqtt.simple import MQTTClient
BROKER="192.168.88.227"; TOPIC=b"crumb/test"
c=MQTTClient("esp-test", BROKER, user="esp1", password="***", keepalive=30)
c.connect(); c.publish(TOPIC, b"wuuuhuuu"); c.disconnect(); print("MQTT OK")
```
**Broker-Host:**
```bash
mosquitto_sub -h 127.0.0.1 -t 'crumb/#' -u esp1 -P '***' -v
# Erwartung: crumb/test wuuuhuuu
```
**Router-Zähler (final):**
```routeros
/ip firewall filter print stats where comment~"ALLOW-ESP_WALD-TO-BROKER-1883"
```
**Done-Kriterium:**
* ESP meldet `MQTT OK` **und**
* Broker zeigt Nachricht **und**
* Allow-Regel hat >0 Pakete/Bytes.
---
## 6) Log-Spitzen (optional, nur kurz aktivieren)
Wenn du sehen willst, *was* geblockt würde:
```routeros
/ip firewall filter set [find comment~"Isolate ESP-Wald"] log=yes log-prefix="DROP ISOLATE "
# ... Sekunden testen ...
/ip firewall filter set [find comment~"Isolate ESP-Wald"] log=no
```
---
## 7) Rollback & Sicherung
**Backup sichern:**
```routeros
/system backup save name=esp_wald_ok
/export file=esp_wald_ok_rsc
```
**Schnell-Rollback der Allow-Regel (falls doch nicht gewollt):**
```routeros
/ip firewall filter remove [find comment="ALLOW-ESP_WALD-TO-BROKER-1883 (FINAL)"]
```
---
## Troubles-Mini (nur lesen)
* **Zähler bleiben 0, aber alles geht?** → FastTrack testweise wie oben kurz aus.
* **ESP TCP OK, MQTT FAIL (Auth):** Nutzer/Passwort im Broker (`/etc/mosquitto/passwd`) checken.
* **`ETIMEDOUT` vom ESP:** Pfad/Firewall. **Nur dann** 4b fahren.
* **Broker lokal ok, remote `REFUSED`:** Listen-IP auf dem Broker (0.0.0.0:1883) prüfen.
---
## CO₂-Budget Notiz
Max. 2 Diagnose-Zyklen (1 Zyklus = messen → eine Änderung → messen). Danach Stopp, Lagebild schreiben, nächste Session planen.