██████╗ ██╗ ██╗██╗ ██╗██╗ ██╗██████╗
██╔══██╗██║ ██║██║ ██║██║ ██║██╔══██╗
██║ ██║██║ ██║███████║██║ ██║██████╔╝
██║ ██║╚██╗ ██╔╝██╔══██║██║ ██║██╔══██╗
██████╔╝ ╚████╔╝ ██║ ██║╚██████╔╝██████╔╝
╚═════╝ ╚═══╝ ╚═╝ ╚═╝ ╚═════╝ ╚═════╝
Hack the Grid
Direktvermarktung als Software — ohne neue Hardware.
DVhub macht eine bestehende Victron-ESS-Anlage direktvermarktungs-tauglich: Es bildet die PLEXLOG-kompatible Modbus-Schnittstelle des Direktvermarkters in Software nach und erweitert sie zu einem vollwertigen Home Energy Management System (HEMS) — mit Web-Leitstand, Day-Ahead-Börsenautomatik, Prognose- und Optimierungs-Engine, Telemetrie-Historie und Familien-Dashboard. Alles läuft auf eigener Linux-Hardware, ohne Cloud-Zwang. Getestet mit LUOX Energy (ehem. Lumenaza) als Direktvermarkter.
0 € Zusatz-Hardware · 1 Befehl zur Installation · 100 % auf eigener Hardware
| Status | Version 1.0.0 „Sushi" (v1.0) — feature-complete (Release-Tag operator-gated) |
| Getestet mit | LUOX Energy · Victron Ekrano-GX / Cerbo-GX · Fronius AC-PV |
| Plattform | Debian/Ubuntu (x86_64) · Node.js 22 · PostgreSQL |
| Lizenz | Energy Community License (ECL-1.0) — siehe Lizenz |
| Drittlizenzen | THIRD-PARTY-LICENSES.md |
Leitstand — Live-Dashboard mit Energy-Flow-Visualisierung, Day-Ahead-Preisen und Steuerung
DVhub ersetzt bzw. ergänzt einen physischen Plexlog als DV-Schnittstelle: Die Modbus-Kommunikation des Direktvermarkters wird in Software nachgebildet, während die Live-Werte direkt vom Victron-GX-System kommen. Darüber hinaus ist DVhub zu einem vollwertigen HEMS ausgebaut.
- DV-Schnittstelle (DVhub Pro) und Web-Leitstand in einer Anwendung — keine zusätzliche Hardware
- Dashboard mit Energy-Flow-Visualisierung, Live-Werten, Day-Ahead-Preisen und Steuerung
- Kleine Börsenautomatik mit zweistufigem Forecast-aware-Modus (Stufe 2: vorausschauendes Akku-Leeren)
- Prognose-Engine — PV-Ertrag (pvlib), Lastvorhersage und Multi-Modell-Ensemble mit Accuracy-Tracking
- Optimierung — freie kleine Börsenautomatik (Greedy/MILP-Abend-Slots) plus der Akkudoktor-EOS-Arbitrage-Optimizer (DVhub Pro) (DV-Direktvermarktungs-Fork, 15-Minuten-Slots, standardmäßig mitinstalliert)
- Optionale ML-Prognose-Korrektur — selbstlernende Korrektur systematischer Prognosefehler (LightGBM)
- Historie mit PostgreSQL-Telemetrie, Finanz-Karten und 14 Visualisierungs-Karten
- Familien-Dashboard als haushaltstaugliche Übersicht inkl. Tesla-/Haus-Flow und Screensaver (DVhub Pro)
- Integrationsplattform für Home Assistant, Loxone, EOS, EMHASS, evcc, MQTT und TeslaMate
- DVhub Price Feed (dvhub.online) als zentraler Preisfeed für alle EPEX-Preiszonen
- VPN-Manager für OpenVPN-/WireGuard-/IPsec-Tunnel zum Direktvermarkter (DVhub Pro)
- Schnellstart
- Funktionsumfang (Community)
- DVhub Pro
- Oberflächen
- Prognose, Optimierung & Steuerintelligenz
- Integrationen
- DVhub Price Feed
- Sicherheit & Betrieb
- Direktvermarktung kompakt
- Installation im Detail
- API und Konfiguration
- Changelog
- Lizenz
Stable (empfohlen):
curl -fsSL https://raw.githubusercontent.com/chloepriceless/dvhub/main/install.sh | sudo bashDev (Bleeding Edge — aktuelle Commits von main):
curl -fsSL https://raw.githubusercontent.com/chloepriceless/dvhub/main/install.sh | sudo bash -s -- --channel devDer Installer:
- installiert Node.js 22 (nur falls keine Node ≥ 18 vorhanden ist), PostgreSQL, die VPN-Pakete (OpenVPN, WireGuard, strongSwan) sowie
python3-venv,python3-pip,autosshundopenssh-client - legt PostgreSQL-User und Datenbank
dvhuban (Peer-Auth via Unix-Socket) - klont das Repo nach
/opt/dvhubund betreibt die App unter/opt/dvhub/dvhub - generiert automatisch einen
apiTokenund ein selbstsigniertes TLS-Zertifikat - richtet einen systemd-Service mit Selbstheilung beim Start ein (
post-update.shalsExecStartPre) - nutzt eine externe Config unter
/etc/dvhub/config.json - installiert den vollen Prognose-/ML-Stack hash-gepinnt aus
requirements.lock(auf jeder Box) und zusätzlich Akkudoktor-EOS ab ≥ 1 GB RAM (siehe Leistungsstufen) - Stable-Channel (Standard): checkt den neuesten Semver-Release-Tag aus
- Dev-Channel (
--channel dev): checktorigin/mainHEAD aus - der Update-Channel ist nachträglich über die Einstellungen umschaltbar
- legt standardmäßig einen Fern-Support-Login-User
dvhub-support(Gruppedvhub, kein sudo) an und hinterlegt den öffentlichen Support-Schlüssel — als Bereitschaft für Fern-Diagnose. Wichtig: Das gibt dem Support keinen Zugriff. Erreichbar ist die Box nur, solange du in den Einstellungen aktiv einen zeitbegrenzten Support-Tunnel öffnest (jederzeit abbrechbar). Abschaltbar mit--no-support-user.
Ohne Akkudoktor-EOS (Opt-out):
curl -fsSL https://raw.githubusercontent.com/chloepriceless/dvhub/main/install.sh | sudo bash -s -- --no-eosAkkudoktor-EOS wird standardmäßig mitinstalliert — als DVhubs eigener
Direktvermarktungs-Fork (DV-EOS: 15-Minuten-Slots, slot-genaue Batterie-/
Wechselrichter-Mathematik, Akku→Netz-Arbitrage) als eigener Dienst unter
127.0.0.1:8503, sofern ≥ 1 GB RAM verfügbar sind. Mit --no-eos lässt sich das
überspringen (z. B. auf RAM-armen/Headless-Boxen); die interne MILP-/Heuristik-
Optimierung läuft auch ohne EOS. (--with-eos bleibt als kompatibler No-op
erhalten, da EOS jetzt Default ist.)
Ohne Fern-Support-User (Opt-out):
curl -fsSL https://raw.githubusercontent.com/chloepriceless/dvhub/main/install.sh | sudo bash -s -- --no-support-userFlags sind kombinierbar, z. B.
--channel dev --no-eos --no-support-user.
Wenn die Config-Datei noch fehlt oder ungültig ist, öffnet DVhub beim ersten Aufruf automatisch den Setup-Assistenten.
DVhub skaliert mit der verfügbaren Hardware. Der Installer erkennt den RAM und installiert nur die Komponenten, die das System tragen kann:
| Stufe | RAM | Funktionen |
|---|---|---|
| Vollständig | ≥ 1 GB | Kern-DV, Steuerung, Telemetrie, Börsenautomatik, voller Prognose-/ML-Stack (pvlib, scikit-learn, LightGBM, statsforecast — hash-gepinnt aus requirements.lock, auf jeder Box) und Akkudoktor-EOS (DVhub-Direktvermarktungs-Fork) als externer Optimizer-Dienst — standardmäßig mitinstalliert, opt-out mit --no-eos |
| Ohne EOS | < 1 GB | wie oben, aber ohne EOS (zu RAM-hungrig unter 1 GB); die interne MILP-/Heuristik-Optimierung + kleine Börsenautomatik laufen weiter |
Hinweis: Ein früher dokumentierter Edge-LLM-Layer (Ollama/TinyLlama für Kachel-Erläuterungen) ist in v1.0 nicht mehr Bestandteil von DVhub und wird vom Installer nicht eingerichtet.
Der Installer betreibt den Webserver auf Port 80 (HTTP) und Port 443
(HTTPS, selbstsigniertes Zertifikat); das node-Binary erhält dafür
cap_net_bind_service. Der HTTP-Port ist über httpPort in der Config frei
wählbar (Code-Default ohne Beispiel-Config: 8080).
- Leitstand:
http://<host>/ - Familie:
http://<host>/family(DVhub Pro) - Integrationen:
http://<host>/integrations - Historie:
http://<host>/history.html - Explorer:
http://<host>/explorer.html - Einstellungen:
http://<host>/settings.html - API-Dokumentation:
http://<host>/api-docs.html - Setup-Assistent:
http://<host>/setup.html(wird bei fehlender Config automatisch unter/angezeigt)
Alle hier gelisteten Funktionen sind in der freien ECL-1.0-Edition ohne Lizenzschlüssel nutzbar. Die wenigen lizenzpflichtigen Komfort-Features stehen separat unter DVhub Pro.
- DV-Modbus-Server auf Port
1502(DefaultmodbusListenPort) mit FC3/FC4 Read und FC6/FC16 Write — PLEXLOG-kompatibel (DVhub Pro — die DV-Schnittstelle; ohne Lizenz startet der Server nicht. Der Victron-Modbus-CLIENT + Steuerpfad unten bleiben frei.) - LAN-only-Zugriffsschutz für den Modbus-Server: nur Loopback + RFC1918 (oder eine explizite
modbusAllowedClients-Allowlist); fremde Clients werden sofort getrennt und protokolliert - DV-Signalerkennung mit Lease-Logik (
offLeaseMs) und automatischer, sicherer Rückkehr in Freigabe nach Ablauf - Victron-Steuerung für Grid Setpoint, Charge Current, Min SOC, Max Discharge sowie die DC-/AC-Einspeise-Flags (
feedExcessDcPv,dontFeedExcessAcPv) - Transport wahlweise Modbus TCP (On-Demand-Client mit Connection-Pool und Connect-Timeout-Guard) oder MQTT (Venus OS, mit Keepalive und Cache-Frische-Prüfung)
- Negativpreis-Schutz — blockiert die Einspeisung automatisch, sobald der EPEX-Preis < 0 ct/kWh fällt
- Rechtliches Schreibgate (EEG/§14a) — Netzladen bzw. erzwungene Netzentladung nur bei freigegebenen Flags (
allowGridCharge/allowGridDischarge) - Universeller Entlade-Boden — kein entlade-aktivierender Write, wenn der SOC unbekannt, veraltet oder ≤ Hartboden (
hardFloorSocPct) ist - Sell-Price-Floor — verhindert das Verschleudern von Akku-Energie unterhalb eines konfigurierbaren Mindest-Verkaufspreises
- reg-2700/2716-Keepalive — verlorene ESS-Setpoints (GX-Reboot/Watchdog) werden automatisch erneut gesetzt
- Selektiver Not-Halt — pausiert alle diskretionären Writes; nur Sicherheits-Pflichtquellen (Negativpreis-Schutz, SOC-Floor, Not-Halt selbst) schreiben weiter. Der Zustand wird atomar persistiert und überlebt einen Service-Neustart
- Day-Ahead-Preis-Engine mit Heute-/Morgen-Daten, Hover-Details und Chart-Auswahl
- Schedule-System mit Defaults, manuellen und persistenten Overrides sowie Chart-zu-Schedule-Auswahl
- Kleine Börsenautomatik für automatische Entladung in Hochpreisphasen — energiebasierte Slot-Allokation, dynamischer sonnenstandsabhängiger SOC-Floor und wahlweise Greedy- oder MILP-Engine
- Forecast-aware Börsenautomatik (Stufe 2) — leitet Reserve und Hoarding-Gate aus dem PV-/Last-Forecast der nächsten 24 h ab (Über-Nacht-SOC-Schutz,
forecastAware). („Forecast Aware++"/Stage 2++ — das vorausschauende aktive Akku-Leeren — wurde entfernt und in der UI ausgeblendet; die EOS-Arbitrage ist der produktive Nachfolger. Der Code bleibt mitinstalliert.) - DC-Export-Modus (100 % Einspeisung) mit Live-Hausverbrauchs-Abzug (
subtractHouseLoad) und SOC-/Deadline-Schutz vor dem Abend-Peak - §51-EEG Förderzeitraum-Verlängerungs-KPI aus den Negativpreis-Viertelstunden (Solarspitzengesetz)
- Victron-Alarm-Banner — read-only Anzeige aktiver VE.Bus-/BMS-Alarme im Status, entkoppelt vom Steuerpfad
- Kosten- und Preislogik für Netz, PV und Akku über
userEnergyPricing, inkl. datumsbasierter Bezugspreise und §14a Modul 3
- PV-Ertragsprognose über pvlib mit standort- und anlagenspezifischen Parametern
- Multi-Provider-Ensemble — kombiniert pvlib, Solcast, pvnode.de, forecast_solar, Open-Meteo und VRM, gewichtet nach rollierendem Prognosefehler (inverse MAE); fehlende Provider renormalisieren automatisch
- Lastvorhersage über statistische Modelle (statsforecast) mit SQL-Wochentag-Fallback
- Nebel-Korrektur und Accuracy-Tracking — jede Prognose wird als Snapshot gespeichert und gegen die Messwerte ausgewertet
- Optionale ML-Korrektur (
ml.mlEnabled) — selbstlernendes LightGBM-Modell korrigiert systematische Prognosefehler, mit atomarem Modell-Swap, Schema-Guard und automatischem Sanity-Fallback auf die Rohprognose - Optimizer-Dispatch (DVhub Pro) — MILP-Batterieoptimierung über den HiGHS-Solver (15-Minuten-Slots) mit schneller Heuristik als Fallback; der
internal-Modus ist Teil des Pro-Optimizer-Layers (services/optimizer) und geht ohne Lizenz mit aus. Die freie kleine Börsenautomatik oben nutzt ihre eigene Engine - Akkudoktor-EOS-Anbindung (DVhub Pro — Arbitrage) (standardmäßig mitinstalliert als DVhub-Direktvermarktungs-Fork; opt-out
--no-eos) — externer Optimizer-Dienst mit Config-Sync, Forecast-Bridge (Selbstheilung nach EOS-Neustart) und Akku→Netz-Arbitrage; ohne aktive Lizenz aktuiert EOS nicht (automatischer Fallback auf Stufe 1/2, Prognosewerte bleiben sichtbar) - Marktprämien-Modulation (optional,
optimizer.tariff.feedInIncludeMarketPremium) — bewertet die Einspeisung am realen Direktvermarktungs-Margin (Spot + Marktprämie) statt am Rohspot; §51-konform (keine Prämie in Negativpreis-Slots) - Quellen-Selektor
best/internal/eos(DVhub Pro) — wählt anhand einer Netzkosten-Schätzung den günstigeren Plan (Teil des Pro-Optimizer-Layers) - MiSpeL-Guard — setzt das §14a-konforme Netzlade-Verbot durch (außer bei lizenzierter Arbitrage)
- Abgeregelte Energie — strahlungskalibrierte Schätzung des durch §51/Direktvermarkter gedrosselten Stroms — in einfacher Sprache erklärt
- PostgreSQL-Telemetrie mit Persistenz, Rollups, historischem Nachimport und Retention
- TimescaleDB optional — bei aktiviertem
telemetry.database.timescaledbersetzen Continuous Aggregates & Retention die App-Rollups; fehlt die Extension, fällt DVhub automatisch auf App-Rollups zurück - History-Visualisierung mit 14 Analyse-Karten und CSV-/Parquet-Export
- Prometheus-Metriken unter
/api/metrics(prom-client) - VRM-History-Import zum Nachfüllen von Telemetrie-Lücken
- DB-Backup — Download-Stream (
pg_dump) und geplantes tägliches Backup mit Retention; Ziel wahlweise lokales Verzeichnis oder SMB/CIFS-Share
- Home Assistant (JSON-Endpunkt + MQTT-Auto-Discovery), Loxone (Textformat), EOS, EMHASS, evcc, TeslaMate
- Eingebauter MQTT-Broker (aedes, gebunden auf Loopback) + Publisher + MQTT-Inspector
- Geräte-Schaltung über Shelly-HTTP- und MQTT-Generic-Adapter (Live-Leistung + schaltbares Relais)
- Benachrichtigungen über Telegram, Pushover und ntfy; separater Uptime-Kuma-Heartbeat (signiert, SSRF-geschützt)
- VPN-Manager (DVhub Pro) für OpenVPN-/WireGuard-/IPsec-Tunnel zum Direktvermarkter — mit Direktiven-Härtung, Cert-Expiry-Check und Watchdog (benötigt eine aktive DVhub-Pro-Lizenz)
- Fern-Support — kundeninitiierter, zeitbegrenzter Reverse-SSH-Tunnel (Kill-Switch) und Support-Bundle-Download
- Externe Konfiguration statt fest eingebauter Runtime-Dateien
- Hersteller-Adapter entkoppeln gerätespezifische Register/Endpunkte vom Kern
- Härtbare Sicherheits-Posture —
security.lanTrust(open/restricted/strict) plus Host-/CORS-/Proxy-Allowlists für öffentlich erreichbare Deployments - systemd-ready für dauerhaften Betrieb, Health-/Service-Status in den Einstellungen, Restart aus der GUI
- Modulare Architektur mit Factory-Modulen, Service-Layer und DI-Context-Pattern
DVhub ist vollständig unter der ECL-1.0 nutzbar. Ausgewählte Komfort-Features sind hinter eine optionale DVhub-Pro-Lizenz gestellt (selbst gehostetes Keygen CE). Diese Features erfordern eine aktive Lizenz. Der LAN-Bypass von DVhub betrifft ausschließlich die API-Token-Authentifizierung (Clients im eigenen Netz brauchen keinen Bearer-Token) — die Pro-Lizenzprüfung läuft davon unabhängig.
Die beiden Kern-Direktvermarktungs-Funktionen und drei Komfort-Features sind
lizenzpflichtig und werden serverseitig durchgesetzt (nicht nur in der UI
versteckt). Das Code-Gating (requirePro() für HTTP, isProActive() für die
Live-Dienste) und die Frontend-Whitelist ALLOWED_FEATURES sind deckungsgleich:
| Feature (intern) | Oberfläche / Funktion | Ohne Lizenz |
|---|---|---|
dv-interface |
DV-Schnittstelle = Modbus-SERVER (Port 1502) für den Direktvermarkter + HTTP-Read /dv/control-value |
Server startet nicht / bleibt komplett geschlossen; der Victron-Modbus-CLIENT und alle anderen Anlagen-Integrationen laufen unverändert weiter |
eos |
EOS / DV-EOS Arbitrage-Optimizer-Dispatch (services/optimizer, primarySource=eos) |
EOS aktuiert nicht → automatischer Fallback auf die freie kleine Börsenautomatik (Stufe 1/2); Prognosewerte bleiben sichtbar |
family-dashboard |
Familien-Dashboard (/family + alle /api/family/*-Routen) |
403 pro_required + 🔒-Badge in der Top-Nav, Klick öffnet das Pro-Modal |
vpn-manager |
Einstellungen → VPN (/api/vpn/* — Status, Profil-Upload, Start/Stop/Restart) |
403 pro_required; Tab zeigt Pro-Hinweis mit Lizenz-Link |
forecast-inspector-ml |
Einstellungen → Forecast → ML-Korrektur-Inspector | 403 + Pro-Banner inline, CTA öffnet das Pro-Modal |
forecast-inspector-eos |
Einstellungen → Forecast → EOS-Output-Inspector (Teil von EOS-Pro) | dito |
Frei (Community, ECL-1.0): die kleine Börsenautomatik Stufe 1 (Greedy/MILP-Abend-Slots) und Stufe 2 (
forecastAware, Über-Nacht-SOC- Reserve/Hoarding), Leitstand, Historie, Prognose-Anzeige (PV + Last), der Victron-Client und andere Anlagen-Integrationen, Negativpreis-Schutz und alle Sicherheits-Gates (EEG/§14a, SOC-/Entlade-Boden, Not-Halt).Pro schaltet die DV-Schnittstelle (Direktvermarkter-Modbus-Server) und die EOS-Arbitrage frei — beide sind ohne Lizenz serverseitig aus. „Stage 2++" (
predictivePreEmpty/ „Forecast Aware++", das nie produktive Morgens-Entleeren) wurde entfernt (in der UI ausgeblendet; EOS ist der Nachfolger) — der Code bleibt mitinstalliert.Das Pro-Gating prüft ausschließlich den Lizenzstatus (
active) und gilt netzwerkunabhängig — auch im eigenen LAN sind die Pro-Features ohne aktive Lizenz nicht freigeschaltet. Der LAN-Bypass von DVhub betrifft nur die API-Token-Authentifizierung, nicht die Pro-Lizenz.
- Lizenzschlüssel im Shop bestellen: https://shop.dvhub.de (Format
DVHB-XXXX-XXXX-XXXX-XXXX). - Einstellungen → Lizenz öffnen (oder direkt
/settings.html#license). - Schlüssel einfügen → Aktivieren. DVhub validiert gegen https://license.dvhub.de (Keygen CE); bei Erfolg flippt der Status-Chip auf Aktiv, die Pro-Features sind frei und die Family-Nav verliert ihr 🔒-Icon.
- DVhub revalidiert die Lizenz alle ~6 h im Hintergrund; manuell via Jetzt prüfen.
- Lizenz entfernen setzt den Status zurück auf Keine Lizenz; die Pro-Routen liefern wieder
403 pro_required.
Headless-Aktivierung (z. B. für Provisioning):
curl -X POST http://127.0.0.1/api/license/activate \
-H "Authorization: Bearer ${DVHUB_API_TOKEN}" \
-H "Content-Type: application/json" \
-d '{"key": "DVHB-XXXX-XXXX-XXXX-XXXX"}'- Source of Truth ist Keygen CE auf
license.dvhub.de(Statusactive/invalid/expired/suspended). Der Kauf läuft über Polar (Webhook → Keygen); Polar ist nicht Source-of-Truth für die Aktivierung. - Floating-Modell ohne Machine-Pinning: Ein Schlüssel darf auf beliebig vielen eigenen DVhub-Instanzen gleichzeitig aktiv sein (Test-LXC, Prod, Backup).
- Offline-Survival: Ist
license.dvhub.denicht erreichbar, läuft DVhub mit dem zuletzt persistiertenactive-Status weiter — ein Keygen-Ausfall sperrt dich nicht aus dem eigenen Dashboard aus. - Persistenz:
${DV_DATA_DIR}/license_state.json(Mode0600). Der Klar-Schlüssel verlässt den Server nie über die API —GET /api/license/stateredacted ihn. - Config:
licensing.keygenAccount(FallbackKEYGEN_ACCOUNT-Env). Fehlt der Account-Slug, liefert die Aktivierung503 keygen_account_not_configured.
Ein neues Pro-Feature hängt sich an, indem es (1) requirePro(req, res, '<feature>')
an die Route hängt, (2) einen Eintrag in FEATURE_BODY (deutsche Modal-Microcopy)
ergänzt und (3) den Namen in ALLOWED_FEATURES aufnimmt.
Alle Oberflächen sind auf das Aurora Design System portiert — card-basiertes Layout, einheitliche Tokens, responsiv bis 430 px Viewport. Die Topbar führt zu Leitstand, Familie, Integrationen, Historie, Explorer und Einstellungen.
Startseite unter /:
- DV-Schaltstatus und Börsenpreis mit Negativpreis-Schutz
- Energy-Flow-Visualisierung, Netzleistung pro Phase, Victron-Werte (SOC, Akku, PV) inkl. Alarm-Banner
- Day-Ahead-Chart mit Hover, Highlight und Schedule-Auswahl
- Kleine Börsenautomatik mit Planungsanzeige und Chart-Highlighting
- Steuerung mit aktiven Werten, Defaults und manuellen Writes
- Forecast- & Energiebilanz-Karte und Optimizer-Plan (48 h)
- letzte Events aus dem Systemlog
PostgreSQL-Telemetrie als eigene Analyseansicht (/history.html):
- Tag-, Wochen-, Monats- und Jahresansicht
- Finanz-Karten: Energiekosten, Einnahmen, Cashflow, vermiedene Kosten, Gesamtbilanz
- Preisvergleich zwischen historischem Marktpreis und eigenem Bezugspreis
- Solar-Zusammenfassung mit Jahres-Marktwert
- 14 Visualisierungs-Karten: Sankey-Energiefluss, Heatmap, Tagesprofil, Stack, Autarkie-Kalender, Jahres-Ring, Lastdauerlinie, Preis-Heatmap, Negativpreis-Übersicht, Spaghetti, Ladezyklen, Top-10, Jahres-Kalender, Streudiagramm
- Abgeregelte Energie: strahlungskalibrierte §51-Schätzung — in einfacher Sprache erklärt
- gezielter Preis-Backfill für Buckets ohne historischen Marktpreis
- CSV- und Parquet-Export der Rohdaten
Eine bewusst vereinfachte Haushaltsansicht (/family):
- gut lesbare Übersicht von Verbrauch, PV, Akku und Autarkie
- Haus-zentrierter Energy-Flow mit konfigurierbaren MQTT-Kacheln
- Tesla-/EV-Integration: Lade-/Fahrzeugzustand und Lade-Historie-Chart aus TeslaMate
- Shelly-/Geräte-Kacheln mit schaltbarem Relais
- Screensaver-Modus für dauerhaft laufende Displays
Eigene Seite (/integrations) für alle externen Anbindungen — Status, Health und
Konfiguration als Karten: Verbundene Systeme, Family-MQTT-Kacheln, MQTT-Hub,
Benachrichtigungen (Telegram/Pushover/ntfy), VRM, evcc-Wallbox, Netzzähler-Quelle,
DV-EOS-Optimizer, Victron-Wechselrichter, Home Assistant, Loxone, PV-Forecast-Provider
(Solcast/pvnode), TeslaMate, Shelly-Geräte und Logs.
EMHASS ist über die API angebunden (
/api/integration/emhass), wird auf dem Integrations-Screen aber nicht als eigene Karte geführt.
Eigene Seite (/explorer.html) zum freien Erkunden der Telemetrie-Zeitreihen und
Rohdaten in der PostgreSQL-Datenbank.
Acht Tabs decken die Konfiguration ab, dazu eine stets sichtbare Lizenz-Karte:
| Tab | Inhalt |
|---|---|
| Anlage | Victron-Verbindung (Modbus/MQTT), Hardware-Grunddaten |
| Steuerung | Schedule, Defaults, manuelle Writes, DV-Steuerung |
| Preise | Bezugspreis (fix/dynamisch), Tarif-Perioden, §14a Modul 3, Marktwert, EPEX-Preiszone/-quelle |
| Status | Health, Service, Config Import/Export, Update-Channel, System-Updates/Reboot, Modbus Register Scan, VRM-Import, DB-Backup |
| Forecast | Prognose-Provider und Forecast-Inspector-Subsections (ML / EOS / Stufe 2 — Pro) |
| ML & AI | ML-Prognose-Korrektur und Training |
| EOS | Akkudoktor-EOS-Konfiguration |
| VPN (Pro) | Tunnel-Status, Config-Upload, Restart, Verlauf |
Die EPEX-Preiszone wird über einen dynamischen Selektor gewählt, der die
verfügbaren Zonen samt Abdeckung vom DVhub Price Feed (dvhub.online) lädt. Die
Lizenz-Karte (#license) sitzt oberhalb der Tabs und ist immer sichtbar.
Der First-Run-Assistent (/setup.html) führt Schritt für Schritt durch
Port/Token, Victron-Verbindung (Modbus oder MQTT mit automatischer
Systemerkennung), Meter-/DV-Basiswerte und EPEX-Grunddaten — alle Felder sind mit
sinnvollen Defaults vorbelegt.
Die vollständige, immer aktuelle Endpunkt-Referenz steht als Swagger UI unter
/api-docs.html (openapi.json) zur Verfügung. Die frühere eigenständige
Tools-Seite (tools.html) ist nur noch eine Weiterleitung auf
Einstellungen / Status.
DVhub trifft Lade-/Entladeentscheidungen nicht nur reaktiv, sondern vorausschauend — vollständig lokal, ohne Cloud-Pflicht.
-
Prognose — Für PV-Ertrag wird pvlib mit Standort, Modulausrichtung und Anlagenparametern gerechnet; optionale Cloud-Provider (Solcast, pvnode.de, forecast_solar, Open-Meteo, VRM) gehen als zusätzliche Eingänge in ein nach Prognosefehler gewichtetes Ensemble ein. Die Hauslast wird statistisch (statsforecast) mit SQL-Wochentag-Fallback vorhergesagt. Eine Nebel-Korrektur dämpft typische Schönwetter-Überschätzungen. Jede Prognose wird als Snapshot gespeichert und gegen die Messwerte ausgewertet (Accuracy-Tracking).
-
Optionale ML-Korrektur — Bei aktiviertem
ml.mlEnabledlernt DVhub aus dem gemessenen Prognosefehler ein LightGBM-Korrekturmodell. Modelle werden im Hintergrund neu trainiert und atomar getauscht; ein Schema-Guard verhindert das Laden inkompatibler Modelle, und ein Sanity-Fallback fällt automatisch auf die Rohprognose zurück, falls die Korrektur die PV-Erwartung kollabieren lässt. -
Optimierung — Ein interner Optimizer plant das Batterie-Lade-/Entladeprofil über bis zu 192 Viertelstunden-Slots gegen die Day-Ahead-Preise: als MILP (HiGHS-Solver) oder als schnelle Heuristik. Alternativ übernimmt Akkudoktor-EOS die Optimierung — DVhubs standardmäßig mitinstallierter Direktvermarktungs-Fork (15-Minuten-Slots, Akku→Netz-Arbitrage). Eine Confidence-Stufe skaliert die Batterieparameter (Min-SOC, Entladeleistung) linear mit der Prognose-Sicherheit. Optional bewertet eine Marktprämien-Modulation die Einspeisung am realen Direktvermarktungs-Margin statt am Rohspot.
-
Forecast-aware Börsenautomatik — Stufe 1 dimensioniert Reserve und Hoarding-Gate aus dem erwarteten PV-Ertrag der nächsten 24 h. Stufe 2 („Forecast Aware++",
predictive-pre-empty.js) leert den Akku vorausschauend, wenn der Börsenpreis unter die PV-Erzeugungskosten fällt — mit Soft-/Hard-Limit- Taper auf die Entladeleistung und einer Live-Runtime-Clamp im Schreibpfad (schedule-eval.js), die die gemessene Akku-Entladung hart auf das Akku-Hard-Limit begrenzt.
Die ML- und EOS-Komponenten sind hardware-abhängig zuschaltbar (siehe Leistungsstufen) und laufen vollständig lokal.
DVhub stellt Daten bereit oder nimmt Optimierungsergebnisse entgegen für:
- Home Assistant — JSON-Endpunkt und MQTT-Auto-Discovery (DVhub erscheint als Gerät mit Sensoren; Wh-Zähler als
total_increasingfür das HA-Energy-Dashboard) - Loxone — Textformat-Endpunkt
- EOS (Akkudoktor) — Messwerte/Preise raus, Optimierung rein; EOSdash-Proxy unter
/eosdash/ - EMHASS — Messwerte/Preisarrays raus, Optimierung rein
- evcc — schützt den Hausakku während der EV-Ladung (setzt
MaxDischargePower-Hold, damit das Fahrzeug aus dem Netz statt aus dem Akku lädt) und zeigt/steuert Ladepunkte im Familien-Dashboard - MQTT — eingebauter Broker (aedes) und Publisher (~25 retained State-Topics), plus MQTT-Inspector
- TeslaMate — Fahrzeug-/Ladedaten und Lade-Sessions im Familien-Dashboard
- Shelly / Smart Plugs — HTTP- und MQTT-Generic-Adapter mit Live-Leistung und schaltbarem Relais
Zusätzlich kann DVhub historische Daten per VRM nachladen, um Lücken in der Telemetrie zu füllen. Für Marktpreise nutzt DVhub den zentralen DVhub Price Feed (dvhub.online) mit Fallback auf Energy Charts.
Benachrichtigungen über Telegram, Pushover und ntfy informieren über Schaltvorgänge und Systemereignisse (mit Throttle und Ruhezeiten). Ein separater Uptime-Kuma-Heartbeat (signiert, SSRF-geschützt) überwacht die Erreichbarkeit.
DVhub betreibt unter dvhub.online einen zentralen Preisfeed für EPEX
Day-Ahead Preise:
- Alle EPEX Day-Ahead Bidding Zones (AT, BE, BG, CH, CZ, DE-LU, DK1, DK2, ES, FI, FR, NL, NO1-5, PL, SE1-4, …)
- Historische Daten ab 2020 mit stündlicher Auflösung (vor 01.10.2024) und 15-Minuten-Auflösung (ab 01.10.2024)
- Primärquelle: Energy Charts (Fraunhofer ISE / SMARD.de) · Fallback: ENTSO-E Transparency Platform
DVhub-Instanzen holen ihre Preise automatisch von dieser API — es muss kein Port
freigegeben werden. Das Verhalten steuert epex.priceSource:
dvhub(Default) — Preise vondvhub.online, mit Energy Charts als automatischem stillen Fallback. Nur in diesem Modus funktionieren Zonen-Liste, Lücken-Anzeige und Backfill.public— direkt von Energy Charts (api.energy-charts.info), ohnedvhub.online.
Die frühere Domain
api.dvhub.deist stillgelegt; bestehende Configs werden beim Laden automatisch aufdvhub.onlinemigriert. Der Endpunkt ist überepex.priceApiUrl(Defaulthttps://dvhub.online) konfigurierbar; beim Speichern werden non-HTTPS-, Loopback- und RFC1918-URLs abgewiesen (SSRF-Guard).
| Methode | Pfad | Beschreibung |
|---|---|---|
GET |
/api/zones |
Alle verfügbaren Preiszonen mit Abdeckungsinfo |
GET |
/api/prices?start=...&end=...&zone=DE-LU |
Preise für Zeitraum und Zone |
GET |
/api/prices/gaps?zone=DE-LU |
Fehlende Daten finden |
POST |
/api/backfill |
Backfill für eine Zone anstoßen |
DVhub spiegelt diese serverseitig als /api/epex/zones, /api/epex/gaps und
POST /api/epex/backfill.
- DV-Modbus-Server LAN-only — akzeptiert nur Loopback + RFC1918 oder eine explizite
modbusAllowedClients-Allowlist - LAN-Trust-Posture —
security.lanTrust(open/restricted/strict, Neuinstall-Defaultrestricted) steuert den Token-Bypass für LAN-Clients; ergänzend Allowlists für Host-Header (allowedHosts), CORS (corsAllowedOrigins) und Reverse-Proxy-Vertrauen (trustProxy/trustedProxyIps) - API-Token erzwungen — der Service startet nur mit einem
apiToken≥ 16 Zeichen (vom Installer auto-generiert); Rotation/Widerruf über die API - TLS — selbstsigniertes Zertifikat (397 Tage) ab Werk; eigene Zertifikate über
tlsCertPath/tlsKeyPath - Fern-Support unter deiner Kontrolle — der Support-User hat keinen Zugriff; erreichbar ist die Box nur über einen von dir geöffneten, zeitbegrenzten Reverse-SSH-Tunnel (Kill-Switch, gepinnter Relay-Hostkey)
- DB-Backups — Download-Stream und geplantes Backup mit Retention (lokal oder SMB/CIFS)
- Selbstheilung beim Start —
post-update.shreconciliert bei jedem Service-Start idempotent Pakete,setcap, TLS, den Sudoers-Block, die Service-Unit und das Support-Provisioning
Eine Direktvermarktungs-Schnittstelle verbindet den Direktvermarkter mit deiner Anlage, damit:
- Live-Werte abgefragt werden können
- Steuersignale bei negativen Preisen oder Vermarktungsvorgaben ankommen
Der Direktvermarkter kann so Einspeisung bewerten, regeln und wirtschaftlich steuern.
Der physische Plexlog kann Live-Daten liefern, aber die Steuerung moderner Victron-Setups ist in der Praxis oft unflexibel oder nicht vollständig nutzbar. DVhub liest die Daten direkt vom GX-Gerät und beantwortet die PLEXLOG-kompatiblen Modbus-Anfragen in Software — ohne zusätzliche Hardware.
Nach dem Solarspitzengesetz benötigen PV-Anlagen ab 25 kWp typischerweise eine DV-Schnittstelle für die Direktvermarktung. Kleinere Anlagen können freiwillig teilnehmen.
Mit der diskutierten Pauschaloption / MiSpeL wird Direktvermarktung auch für kleinere Anlagen mit Speicher attraktiver, weil Speicher flexibler aus PV und Netz geladen werden dürfen und die Vermarktung wirtschaftlich interessanter wird.
Zum Redaktionsstand (Frühjahr 2026):
- die BNetzA-Festlegung soll bis 30. Juni 2026 finalisiert werden
- die EU-beihilferechtliche Genehmigung steht noch aus
- die Konsultationsphase wurde im Oktober 2025 abgeschlossen
- BNetzA MiSpeL Festlegungsverfahren
- BNetzA MiSpeL Artikel/Überblick
- BNetzA Pressemitteilung (19.09.2025)
- Anlage 2: Pauschaloption Eckpunkte (PDF)
- BMWK FAQ Solarspitzengesetz
Für LUOX brauchst du in der Praxis:
- Meldung, dass eine PLEXLOG-kompatible DV-Schnittstelle vorhanden ist
- VPN-Tunnel zu LUOX (OpenVPN, WireGuard oder IPsec — verwaltbar im VPN-Manager)
- Portforwarding von Port
502aus dem Tunnel auf Port1502von DVhub
Unifi-Hinweis: Falls die GUI das Tunnel-Portforwarding nicht sauber abbildet,
hilft das Skript 20-dv-modbus.sh für die iptables-Regeln.
- Debian/Ubuntu mit
apt-get(x86_64) - Node.js 22+ (der Installer akzeptiert vorhandene Node-Versionen ab 18;
package.jsonfordert>=18) - PostgreSQL 14+ (für Telemetrie)
- Victron GX-Gerät im lokalen Netz
- Python 3.11+ für Prognose/ML (vom Installer im venv eingerichtet)
sudo apt update
sudo apt install -y curl ca-certificates git sudo postgresql \
openvpn wireguard-tools strongswan python3-venv python3-pip autossh openssh-client
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
sudo apt install -y nodejs
sudo mkdir -p /opt/dvhub /etc/dvhub /var/lib/dvhub
sudo useradd --system --create-home --shell /usr/sbin/nologin dvhub
sudo git clone https://github.com/chloepriceless/dvhub.git /opt/dvhubDanach:
sudo chown -R dvhub:dvhub /opt/dvhub /etc/dvhub /var/lib/dvhub
cd /opt/dvhub/dvhub
npm install --omit=dev
sudo cp config.example.json /etc/dvhub/config.json
sudo mkdir -p /etc/dvhub/hersteller
sudo cp hersteller/victron.json /etc/dvhub/hersteller/victron.json
sudo nano /etc/dvhub/config.jsonBei der manuellen Installation musst du einen
apiToken(≥ 16 Zeichen) in der Config setzen — sonst startet der Service mit aktivierten Service-Actions nicht. Der Installer erzeugt diesen Token automatisch.
Technische Victron-Werte wie Register, Port, Unit-ID oder Timeout werden nicht in
/etc/dvhub/config.json gepflegt, sondern im Herstellerprofil unter
/etc/dvhub/hersteller/victron.json.
Prognose-/ML-Funktionen benötigen zusätzlich eine Python-Umgebung
(dvhub/python/requirements.txt, hash-gepinnt über requirements.lock); der
Installer richtet diese je nach Leistungsstufe
automatisch ein.
Datei: /etc/systemd/system/dvhub.service
[Unit]
Description=DVhub DV Control
After=network-online.target postgresql.service
Wants=network-online.target
[Service]
Type=simple
User=dvhub
Group=dvhub
WorkingDirectory=/opt/dvhub/dvhub
ExecStartPre=-+/opt/dvhub/post-update.sh
ExecStart=/usr/bin/node /opt/dvhub/dvhub/server.js
Environment=NODE_ENV=production
Environment=DV_APP_CONFIG=/etc/dvhub/config.json
Environment=DV_ENABLE_SERVICE_ACTIONS=1
Environment=DV_SERVICE_NAME=dvhub.service
Environment=DV_SERVICE_USE_SUDO=1
Environment=DV_DATA_DIR=/var/lib/dvhub
TimeoutStartSec=120
Restart=always
RestartSec=3
[Install]
WantedBy=multi-user.targetService aktivieren:
sudo systemctl daemon-reload
sudo systemctl enable --now dvhubSYSTEMCTL_PATH="$(command -v systemctl)"
echo "dvhub ALL=(root) NOPASSWD: ${SYSTEMCTL_PATH} restart dvhub.service" | sudo tee /etc/sudoers.d/dvhub-service-actions >/dev/null
echo "dvhub ALL=(root) NOPASSWD: ${SYSTEMCTL_PATH} is-active dvhub.service" | sudo tee -a /etc/sudoers.d/dvhub-service-actions >/dev/null
echo "dvhub ALL=(root) NOPASSWD: ${SYSTEMCTL_PATH} show dvhub.service *" | sudo tee -a /etc/sudoers.d/dvhub-service-actions >/dev/null
sudo chmod 440 /etc/sudoers.d/dvhub-service-actionscd /opt/dvhub/dvhub
DV_APP_CONFIG=/etc/dvhub/config.json DV_DATA_DIR=/var/lib/dvhub npm startDVhub stellt eine HTTP-API unter /api/* bereit (plus den DV-Endpunkt
/dv/control-value). Die folgenden Tabellen listen die wichtigsten Routen; die
vollständige, immer aktuelle Referenz steht als Swagger UI unter /api-docs.html
(openapi.json). Eine Regressionsschranke für client-seitig genutzte Endpunkte
liefert tests/endpoint-inventory.mjs.
| Methode | Pfad | Beschreibung |
|---|---|---|
GET |
/dv/control-value |
DV-Status: 0 = Abregelung, 1 = Einspeisung erlaubt |
GET |
/api/status |
Vollständiger Systemstatus inkl. Victron-Verbindung und Alarm-Banner |
GET |
/api/costs |
Tages-Kostenübersicht |
GET POST |
/api/log |
Event-Log lesen/schreiben (?limit=) |
GET |
/api/log/dv-signals |
DV-Schaltsignal-Log |
GET |
/api/metrics |
Prometheus-Metriken |
GET |
/api/keepalive/modbus, /api/keepalive/pulse |
Keepalive-Status |
GET |
/health, /healthz |
Liveness-Probe |
| Methode | Pfad | Beschreibung |
|---|---|---|
GET POST |
/api/config |
Konfiguration lesen/aktualisieren (ersetzt die gesamte Config) |
POST |
/api/config/import |
Config aus JSON importieren |
GET |
/api/config/export |
Config als JSON exportieren |
GET |
/api/admin/health |
Health-Check-Status |
POST |
/api/admin/service/restart |
systemd-Service neu starten |
GET POST |
/api/admin/system/info, /api/admin/system/reboot |
Systeminfo / Reboot |
POST GET |
/api/admin/update/{channel,check,apply} |
App-Update-Channel / prüfen / anwenden |
GET POST |
/api/admin/system/updates/{check,apply} |
System-Updates prüfen / anwenden |
POST |
/api/admin/token/rotate, /api/admin/token/revoke |
API-Token rotieren/widerrufen |
GET |
/api/support/bundle |
Diagnose-Bundle (Bearer) |
GET POST |
/api/support/tunnel/{status,open,close} |
Fern-Support-Tunnel |
GET POST |
/api/db/backup, /api/db/backup/{run,status} |
DB-Backup (Stream / geplant) |
| Methode | Pfad | Beschreibung |
|---|---|---|
POST |
/api/epex/refresh |
EPEX-Preise manuell aktualisieren |
GET |
/api/epex/zones |
Verfügbare Preiszonen (Upstream dvhub.online) |
GET |
/api/epex/gaps?zone=DE-LU |
Fehlende Preisdaten für Zone |
POST |
/api/epex/backfill |
Backfill fehlender Preise anstoßen |
| Methode | Pfad | Beschreibung |
|---|---|---|
GET |
/api/history/summary?view=day&date=YYYY-MM-DD |
Historische Zusammenfassung |
GET |
/api/history/export?view=... |
Aggregierter History-Export |
GET |
/api/history/raw |
Telemetrie-Rohdaten |
GET |
/api/history/raw/export.csv, …/export.parquet |
Rohdaten-Export |
POST GET |
/api/history/import, /api/history/import/status |
Historische Telemetrie importieren / Status |
POST |
/api/history/backfill/vrm |
VRM Full/Gap-Backfill |
POST |
/api/history/backfill/prices |
Preis-Backfill via Energy Charts |
GET |
/api/history/viz/<slug> |
Visualisierungs-Karten (14 Slugs) |
GET |
/api/telemetry/series?keys=...&start=... |
Telemetrie-Zeitreihen |
GET POST |
/api/admin/backfill/status, /api/admin/backfill, /api/admin/accuracy-backfill |
Marktwert-/Accuracy-Backfill |
GET POST |
/api/curtailment/preview, /api/curtailment/recalibrate |
Abregelungs-Schätzung |
GET |
/api/eeg/extension |
§51-Förderzeitraum-Verlängerung |
| Methode | Pfad | Beschreibung |
|---|---|---|
GET POST |
/api/forecast, /api/forecast/refresh |
Aktuelle PV-/Last-Prognose / neu rechnen |
GET |
/api/forecast/pvnode/quota |
pvnode.de-Kontingent |
GET POST |
/api/forecast/providers/{solcast,pvnode,eos-akkudoktor}(/probe) |
Cloud-PV-Provider konfigurieren / proben |
POST GET |
/api/forecast/ghi-backfill, /api/forecast/ghi-coverage |
Einstrahlungs-Nachimport (Curtailment-Kalibrierung) |
GET |
/api/forecast/inspector/{eos,ml-correction,stage2,…} |
Forecast-Inspector (teils Pro) |
GET POST |
/api/ml/status, /api/ml/accuracy, /api/ml/retrain |
ML-Status / Accuracy / Retraining |
GET |
/api/optimizer/status, /api/optimizer/runs/latest |
Optimizer-Status / letzter Lauf |
| Methode | Pfad | Beschreibung |
|---|---|---|
GET POST |
/api/schedule, /api/schedule/rules, /api/schedule/rules/toggle |
Schedule-Regeln lesen/setzen/togglen |
POST |
/api/schedule/config |
Default-Werte aktualisieren |
GET POST |
/api/schedule/automation/config |
Kleine Börsenautomatik |
POST |
/api/schedule/automation/replan |
Neuplanung der Börsenautomatik |
POST |
/api/control/write |
Manueller Write (gridSetpoint, chargeCurrent, minSoc, maxDischarge, feedExcessDcPv) |
POST |
/api/control/stop, /api/control/resume |
Not-Halt / Wiederaufnahme |
| Methode | Pfad | Beschreibung |
|---|---|---|
GET |
/api/integrations/status, /api/integrations/health |
Integrations-Übersicht |
GET |
/api/integrations/mqtt/topics |
MQTT-Inspector-Topics |
GET POST |
/api/integrations/notification-providers |
Telegram-/Pushover-/ntfy-Provider |
GET POST |
/api/integrations/uptime-kuma(/test) |
Monitoring-Heartbeat |
GET |
/api/integration/home-assistant, /api/integration/loxone |
HA-JSON / Loxone-Text |
GET POST |
/api/integration/eos(/apply), /api/integration/emhass(/apply) |
EOS/EMHASS Messwerte / Optimierung anwenden |
GET |
/api/integration/evcc |
evcc-Status |
GET POST |
/api/vpn/{status,config,history,config/upload,restart,start,stop} |
VPN-Manager |
POST GET |
/api/license/{activate,state,revalidate,remove} |
DVhub-Pro-Lizenz |
| Methode | Pfad | Beschreibung |
|---|---|---|
GET |
/api/family/status |
Familien-Dashboard-Status |
GET POST |
/api/family/{mqtt-tiles,mqtt-config,presence,settings} |
Kacheln / Präsenz / Einstellungen |
GET |
/api/family/tile-history?id=... |
Verlauf einer MQTT-Kachel |
GET POST |
/api/family/{tesla-history,tesla-sessions,tesla-config} |
Tesla-Daten |
GET POST |
/api/family/shelly-devices, /api/family/device-output |
Shelly-Geräte / Schalten |
POST |
/api/family/evcc/mode |
evcc-Lademodus setzen |
GET |
/api/discovery/systems |
Netzwerk-Systemerkennung |
GET |
/api/devices, /api/devices/<id> |
Erkannte Geräte |
GET POST |
/api/meter/scan |
Modbus Register-Scan |
DVhub wird über eine externe JSON-Config (/etc/dvhub/config.json) konfiguriert.
POST /api/config ersetzt die gesamte Config und lehnt unbekannte Top-Level-
Schlüssel strikt ab — jedes neue Feld muss in ALLOWED_CONFIG_ROOTS.
| Sektion | Beschreibung |
|---|---|
manufacturer / updateChannel |
Aktives Herstellerprofil (victron) und Update-Channel (stable/dev) |
httpPort / httpsPort / tlsCertPath / tlsKeyPath |
Webserver-Ports und TLS (Installer: 80 / 443; Code-Default httpPort 8080) |
modbusListenHost / modbusListenPort / modbusAllowedClients |
DV-Modbus-Server-Bind (Default 0.0.0.0:1502) und Client-Allowlist |
victron |
Anlagenadresse, Transport (Modbus/MQTT), Timeouts, victron.alarms |
meterSource |
Operator-wählbare Netz-Zähler-Quelle (profile/modbus/mqtt/http) |
dvControl |
DV-Steuerung, PV-Export-Flags und Negativpreis-Schutz |
dcExportMode |
DC-PV-Überschuss-Einspeisung (100 %) mit Hauslast-Abzug und SOC-/Deadline-Schutz |
schedule |
Zeitplan-Regeln, Defaults und Kleine Börsenautomatik (smallMarketAutomation) |
userEnergyPricing |
Preislogik (fix/dynamisch), Tarif-Perioden, §14a Modul 3, Marktwert, PV-Anlagen |
epex |
EPEX aktiviert, Preiszone (bzn), Zeitzone, priceSource (dvhub/public), priceApiUrl |
optimizer |
Optimizer (intern/EOS), optimizer.tariff (Einspeise-Modus, Marktprämie) |
ml |
ML-Prognose-Korrektur (mlEnabled, Training, statsforecast-Schalter) |
forecast |
Prognose-Provider, Standort, GHI-Kalibrierung |
telemetry / dbBackup |
PostgreSQL, TimescaleDB, Retention, VRM-Import; geplantes DB-Backup (lokal/SMB) |
evcc |
evcc-Integration (Akku-Hold während EV-Ladung) |
notifications / monitoring |
Telegram/Pushover/ntfy-Provider; Uptime-Kuma-Heartbeat |
vpn |
VPN-Tunnel — Protokoll, Auto-Connect, Watchdog |
security / allowedHosts / corsAllowedOrigins / trustProxy |
Härtung (LAN-Trust, Host-/CORS-/Proxy-Allowlists) |
licensing |
DVhub-Pro (keygenAccount) |
support |
Fern-Support (Login-User, Tunnel-Relay) |
scan |
Modbus Scan-Parameter |
Die
schedule.smallMarketAutomation-Sektion enthält die zweistufige Forecast-aware-Logik:forecastAwareaktiviert Stufe 1, derpredictivePreEmpty-Unterblock (mitenabled,akkuHardLimitW,akkuSoftLimitW, Confidence-Faktoren) steuert Stufe 2 („Forecast Aware++").
Zusätzlich erwartet DVhub ein Herstellerprofil neben der Betriebs-Config:
| Datei | Zweck |
|---|---|
/etc/dvhub/hersteller/victron.json |
Victron-spezifische Kommunikations- und Registerwerte |
- Änderungen an Victron-Registern, Port, Unit-ID oder Timeout erfolgen nur in
/etc/dvhub/hersteller/victron.json userEnergyPricingerlaubt festen Endkundenpreis oder dynamische Preisbestandteile auf Basis von EPEXuserEnergyPricing.periodserlaubt mehrere, sich nicht überschneidende Tarifzeiträume (fixedoderdynamic); ein nicht abgedeckter Tag fällt auf den globalen Standard-Tarif zurück- im MQTT-Modus wird
victron.mqtt.portalIdbenötigt; ohne eigenen Broker nutzt DVhub den GX-Host - EPEX-Preise werden primär von
dvhub.onlinegeholt (Fallback Energy Charts); impublic-Modus direkt von Energy Charts - TimescaleDB ist optional (
telemetry.database.timescaledb); aktiviert ersetzt es App-Rollups/Retention, bei fehlender Extension fällt DVhub darauf zurück - ein
POST /api/configersetzt die gesamte Config — immer das vollständige Objekt senden
Die vollständige Versionshistorie steht in CHANGELOG.md
(Keep-a-Changelog-Format, SemVer).
Erstes öffentliches v1.0-Release. Konsolidiert den HEMS-Funktionsumfang aus 0.8.0 (Prognose-Engine, MILP-/EOS-Optimierung, Forecast-aware Börsenautomatik, Aurora-UI, Familien-Dashboard, Integrationen, Lizenz-Gating) und ergänzt fünf Go-Live- Härtungswellen:
- Deploy-Blocker — Frischinstall läuft sauber durch (gegatete Migrationen, fehlertoleranter Migrations-Runner)
- Sichere Defaults — gehärtete LAN-Trust-/Host-/Proxy-Defaults, Bootstrap-Token constant-time, Redaction-Lücken geschlossen,
family.htmlhinter Pro-Gate - Steuerpfad-Korrektheit — EEG-Gate verfeinert, atomare Not-Halt-Persistenz, konfigurierbarer Modbus-Connect-Timeout
- Forecast-Qualität — VRM/forecast_solar/open_meteo im gewichteten Ensemble, Slot-Renorm, Zeitzonen-Guard
- Test-Fundament & CI — reparierte Test-Suite, GitHub-Actions-CI (Fast-Lane + ephemeres Postgres + e2e)
Hinweis zur Versionierung:
package.json/app-version.jsführen1.0.0; derv1.0.0-Git-Tag wird operator-gated beim Go-Live gesetzt. Ältere Einträge (0.8.0, 0.4.x, 0.3.x) stehen vollständig inCHANGELOG.md.
DVhub steht unter der Energy Community License (ECL-1.0) — siehe
LICENSE.md. Ziel der Lizenz ist es, die Energie-Community zu
unterstützen und gleichzeitig den kommerziellen Weiterverkauf der Software zu
verhindern.
- Betrieb von Energieanlagen mit dieser Software, inkl. Einnahmen aus der Energieerzeugung
- Beauftragung von Dienstleistern für Installation, Konfiguration oder Administration
- Studium, Modifikation, Forks und Weitergabe modifizierter Versionen
- Verkauf der Software selbst oder abgeleiteter Versionen
- Verkauf von Hardware mit vorinstallierter Software
- kommerzielle SaaS-Angebote auf Basis dieser Software
- Bündelung der Software in kommerziellen Produkten
Wer die Software in ein kommerzielles Produkt integrieren möchte, fordert eine
kommerzielle Lizenz an — siehe COMMERCIAL_LICENSE.md.
DVhub Pro (Lizenzschlüssel) und die ECL-1.0 sind zwei verschiedene Dinge: Pro schaltet einzelne Komfort-Features frei (siehe DVhub Pro), die ECL-1.0 regelt die rechtliche Nutzung der gesamten Software.
DVhub bündelt und nutzt Software Dritter. Alle eingebundenen Komponenten stehen
unter permissiven Lizenzen (MIT, Apache-2.0, ISC, BSD-3-Clause, 0BSD) — die
vollständige Auflistung mit Lizenztexten steht in
THIRD-PARTY-LICENSES.md.
Sushi was a young cat who accompanied the development of this software. He spent countless hours inspecting keyboards, monitoring logs and ensuring that no developer became too productive. This release is dedicated to him.


