- HTML 53.9%
- JavaScript 26.8%
- C++ 15.3%
- CSS 2%
- Shell 1.2%
- Other 0.8%
|
All checks were successful
firmware / build (push) Successful in 28m54s
Bisher stand markus@strogg.de in vier Hooks. Jetzt gilt überall, was unter Einstellungen → Mail als Absender eingetragen ist — so zieht der Wechsel auf eine @reeftank.pro-Adresse mit dem SMTP-Wechsel zusammen um. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> |
||
|---|---|---|
| .forgejo/workflows | ||
| assets | ||
| cr-rechner | ||
| entwuerfe | ||
| esp-firmware | ||
| geraete | ||
| icp | ||
| kalk | ||
| khtester | ||
| nutrient | ||
| pb_hooks | ||
| pb_migrations | ||
| salz | ||
| server | ||
| spurenrechner | ||
| tools | ||
| .gitignore | ||
| datenschutz.html | ||
| deploy.list | ||
| FIRMWARE.md | ||
| impressum.html | ||
| index.html | ||
| KH-TESTER-INTEGRATION.md | ||
| LICENSE | ||
| README.md | ||
Aquarium Rechner
Werkzeuge für Meerwasser-Aquaristik — von Wasserwechsel-Berechnung bis hin zu vollautomatischer Kalk-Dosierung mit eigener ESP32-Firmware.
Hosting
Selbst gehostet — die Web-Oberfläche wird direkt von einem eigenen PocketBase-Server ausgeliefert (statische Dateien im pb_public/, dazu API + Auth). Es gibt keine zentrale öffentliche Instanz; Details unter Hosting & Daten.
Die einzelnen Rechner liegen unter den Pfaden / (Übersicht), /cr-rechner/,
/spurenrechner/, /salz/, /kalk/, /nutrient/ und /khtester/.
Inhalt
C&R Aquarium Rechner
Berechnet optimale Wasserwechsel mit C&R Lösungen, um ICP-Messwerte schrittweise zu Optimalwerten zu führen. Mit Max-Δ-Begrenzung pro Schritt für schonende Anpassung empfindlicher Korallen. Historie der Messwerte und ausgeführten Ausgleiche mit Verlaufsgrafik.
Spurenelemente Rechner
Plant Tagesdosen einzelner Spurenelemente basierend auf ICP-Messwerten und Verbrauchshistorie. Jede Dosis wird mit Beckenvolumen und Reichweite der Mischung gespeichert — ein Wechsel des ICP-Rhythmus (monatlich/14-tägig) rechnet die Historie deshalb um, statt die alten Millilitermengen weiterzuschreiben. Geregelt wird je Element unterschiedlich: aus den eigenen Messung-Dosis-Paaren schätzt der Rechner, wie viel an einer Abweichung Laborstreuung und wie viel echte Bewegung des Beckens ist, und wendet nur den entsprechenden Teil einer Korrektur an (Spalte γ). Die Schätzung verfeinert sich mit jeder ICP; der Zielwert bleibt derselbe, nur das Tempo passt sich an. Die Schrittweite folgt der engeren Seite des Zielbands, und wenn ein Element mehrere Runden gegen die Dosierung anläuft, benennt der Rechner die Ursache, statt weiter zu regeln. Daten lokal oder im eigenen Account.
Salz & Salinität
Rechnet Dichte, spezifisches Gewicht, Salinität und Leitfähigkeit ineinander um (EOS-80/PSS-78), passt die Salinität gezielt an und kalibriert Salz sowie Spindel. Verfolgt zusätzlich den Salz-Drift beim Balling.
Nährstoffmanagement (Web + ESP32-Firmware)
Regelt NO₃ und PO₄ über vier Pumpen (Stickstoff, Phosphat, Kohlenstoff, Lanthan). Lernt den Netto-Verbrauch aus der Massenbilanz und leitet daraus eine Erhaltungsdosis samt gerampter Korrektur ab. Die Wahl des Abbaumittels folgt dem molaren N:P-Verhältnis — Kohlenstoff senkt beide Werte, Lanthan wirkt gezielt auf Phosphat.
KH-Tester (Web + ESP32-Firmware)
Misst die Karbonathärte automatisch per Säure-Titration — wahlweise dynamisch bis zum Ziel-pH oder als Gran-Titration mit Regression über den Äquivalenzpunkt. Live-Verfolgung der laufenden Messung im Browser, pH-Kalibrierung mit Sonden-Gesundheitscheck, Überwachung von Säurevorrat und Abwasserbehälter. Ein Klick übernimmt das Ergebnis ins Kalkmanagement, das daraufhin seinen Dosierplan neu rechnet.
Kalkmanagement (Web + ESP32-Firmware)
Komplette Steuerung für eine selbstgebaute 4-Pumpen-Dosier-Anlage (Calcium, Magnesium, KH-Tag, KH-Nacht). Web-Interface plant die Dosierung, ESP32 führt sie aus.
Web-Funktionen:
- Quick-Inputs für KH/Ca direkt auf der Übersicht + Live-Kanister-Balken
- Dosier-Plan-Berechnung (KH + Ca/Mg) mit wählbarer Frequenz (2–12 pro Tag) — ohne Messwert als reine Erhaltungsdosierung aus der eingetragenen Verbrauchsrate
- Plan-Visualisierung als Tabelle + Charts
- Pumpen-Kalibrierung (Live-Lauf über das Web)
- pH-Sensor-Kalibrierung (2-Punkt mit pH-4 + pH-7)
- Container-Füllstand-Tracking
- Historie (Messungen, Dosierungen) mit Charts
- JSON-Backup/-Restore
- OTA-Firmware-Update mit einem Klick
ESP32-Firmware:
- Plan-Cache lokal (NVS) → läuft offline beliebig lange weiter (Anpassungs-Doses anhand absoluter Timestamps, danach unbegrenzte Erhaltungs-Dose)
- DS3231-RTC-Sync → Dosier-Plan läuft auch nach Stromausfall ohne Internet weiter
- Auto-Dosierung (per Schalter im Web aktivierbar)
- Anti-Drip-Sequenz (Prime → Dose → Retract) für sauberes Stop-Verhalten
- KH-Tag/Nacht-Umschaltung anhand pH-Wert oder Uhrzeit
- pH-Wächter (optional): eine Sonde, deren Wert 6 h lang steht, gilt als eingefroren → Tag-Pumpe statt Nacht-Lösung, Störung im Gerät-Tab; dazu serverseitig eine E-Mail, wenn der pH ein einstellbares Fenster verlässt oder der ESP die eingefrorene Sonde meldet
- WS2812-Status-LED zeigt System-Zustand
- Ausfall-Benachrichtigung per E-Mail — ein serverseitiger Watchdog (PocketBase-Cron) überwacht den Heartbeat und meldet, wenn der ESP länger als 5 Min ausfällt (pro Nutzer im Gerät-Tab an/aus)
- OTA-Update aus den Releases des eigenen Git-Servers (git.reeftank.pro) — CI baut das .bin automatisch bei jedem Version-Tag
Hosting & Daten
Statische HTML-Seiten, ausgeliefert direkt von PocketBase (pb_public/). Alles läuft im Browser.
Ohne Login (C&R, Spuren): Daten werden ausschließlich lokal im Browser gespeichert (localStorage). Nichts wird übertragen.
Mit Login (E-Mail/Passwort): Daten werden zusätzlich auf einem privaten PocketBase-Server (Deutschland, Übertragung per HTTPS verschlüsselt) abgelegt, damit du sie auf jedem Gerät verfügbar hast. Jeder Nutzer kann nur seine eigenen Daten lesen/schreiben (PocketBase-API-Regeln pro Nutzer). Kein Tracking, keine Weitergabe.
Kalkmanagement, Nährstoffmanagement und KH-Tester erfordern einen Account, weil Web und ESP über PocketBase synchronisieren.
ESP-Firmware bauen
Im Ordner esp-firmware/aquarium-rechner-esp/.
- Board: ESP32-S3 N16R8 (16 MB Flash, 8 MB OPI PSRAM)
- IDE: Arduino 2.x mit „ESP32 by Espressif Systems" Boards
- Partition:
16M Flash (3MB APP/9.9MB FATFS) - Libraries: FastAccelStepper, ArduinoJson (v7), RTClib, Adafruit NeoPixel (kein extra Backend-Client nötig — Anbindung an PocketBase per HTTPS-REST)
Eine Firmware für alle Geräte. Welche Aufgabe ein ESP übernimmt, entscheidet
seine Rolle (kalk, nutrient, khtest), die im Web-Interface pro Gerät
zugewiesen wird — nicht ein eigener Build. Alle drei laufen auf derselben
Platine; was die Rolle unterscheidet (Pumpenzahl und -namen, Rührer-PWM beim
Tester, pH-Fenster), wird beim Boot anhand der Rolle gesetzt; siehe
RoleConfig in config.h.
Neue Releases baut die CI (Forgejo Actions) automatisch: Version-Tag v* pushen →
kompilierte .bin erscheint als Release-Asset auf https://git.reeftank.pro —
der ESP holt sie sich per OTA. Details in FIRMWARE.md.
Werkzeuge
Alles unter tools/ — wird nicht ins Web gespiegelt (siehe deploy.list).
Seiten vor dem Deploy prüfen. Die Rechner sind je eine HTML-Datei mit einem
grossen <script type="module">. Ein Syntaxcheck reicht dort nicht: eine
undefinierte Variable in einem const-Literal ist syntaktisch tadellos und
zerlegt die Seite trotzdem beim Laden — sichtbar erst, wenn jemand sie aufmacht.
python3 tools/check-inline.py nutrient/index.html
Das Skript löst die Importe heraus, ersetzt sie durch nachgiebige Stubs samt
DOM-Attrappe und führt den Modulrumpf aus. Es braucht eine JS-Engine
(node oder macOS-jsc) und meldet sichtbar, wenn es keine findet.
tools/deploy.sh ruft es serverseitig vor dem Spiegeln auf: fällt eine Seite
durch, bricht der Deploy ab und pb_public bleibt auf dem vorigen Stand.
Tagesmail durchspielen. Der Server-Hook pb_hooks/container_alert.pb.js
(Erinnerung „heute messen" + Kanister fast leer / leer, einmal morgens) läuft
nur in der PocketBase-JSVM. Der Selbstcheck stellt sie nach, dreht die Uhr auf
8:07 und prüft Mails und Merker in einem Dutzend Fällen:
/System/Library/Frameworks/JavaScriptCore.framework/Versions/Current/Helpers/jsc tools/test-tagesmail.js
Lokal ansehen. Die Seiten laden ihre Module über absolute Pfade
(/assets/...), die ein file://-Aufruf nicht auflöst — ohne Server sieht man
deshalb keine Laufzeitfehler, sondern gar nichts.
python3 tools/devserver.py 8788
Danach http://localhost:8788/nutrient/ im Browser. (Bewusst nicht
python3 -m http.server: dessen __main__ ruft os.getcwd() auf, was in
manchen Sandboxes scheitert.)
Quellcode & Mitmachen
Der Quellcode liegt auf dem eigenen Git-Server: https://git.reeftank.pro (öffentlich lesbar/klonbar).
Lizenz
Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0)
Du darfst das Material teilen und bearbeiten, sofern du:
- Namensnennung vornimmst (Markus / markus629)
- es nicht für kommerzielle Zwecke nutzt
- abgeleitete Werke unter der gleichen Lizenz weitergibst
Vollständiger Lizenztext: LICENSE