Open Source · ZEV & vZEV Schweiz · selbst gehostet · AGPL-3.0

Vom Lastgang zur bezahlten Rechnung.

Lastgänge importieren, den Solarstrom pro 15-Minuten-Intervall auf die Teilnehmenden aufteilen, mit Ihren Tarifen bewerten und eine QR-Rechnung versenden. Ich habe es geschrieben, um meinen eigenen ZEV abzurechnen, und stelle es zur Verfügung, falls es für Ihren nützlich ist.

Energiebilanz · Demo-Gemeinschaft · Q3 2026

PV 1’888.85 kWh Netz 738.9 kWh 625.8 kWh lokal verbraucht 33.1 % Eigenverbrauch 1’263.05 kWh ins Netz eingespeist
Lokaler Verbrauch Netzaustausch Produktion

Dieselbe Aufteilung, die die Abrechnung vornimmt — min(Produktion, Verbrauch) pro 15-Minuten-Intervall — liegt jeder Rechnungsposition zugrunde.

Auflösung
15-Minuten-Intervalle
Dokumente
PDF/A-3b + QR-Rechnung
Sprachen
DE · FR · IT · EN
Betrieb
Docker oder Kubernetes

Was es kann

Messdaten, Tarife, Abrechnung, Dokumente

Einen ZEV für einen Monat abzurechnen ist einfach. Schwieriger wird es, wenn der Tarif des Vorjahres weiterhin existieren muss, wenn jemand, der im März ausgezogen ist, bis März abgerechnet werden muss, und wenn die Rechnung so sein soll, dass die Nachbarin sie akzeptiert, ohne die Tabelle dahinter zu verlangen.

Messdaten & Import

CSV, Excel und SDAT-CH

Die Formate, die Schweizer Netzbetreiber tatsächlich liefern, plus alles, was Ihr eigener Zähler exportiert.

  • CSV und Excel mit konfigurierbarer Spaltenzuordnung, dazu SDAT-CH für Netzbetreiber-Abläufe
  • Validierung mit Vorschau und zeilenweisem Importprotokoll
  • Datenqualitätsprüfungen auf Lücken, Duplikate und unplausible Werte
  • Verbrauchs- und Produktionsanalyse nach Periode oder Tagesprofil
Tarife & Abrechnung

Aufteilung pro 15-Minuten-Intervall

Jedes Intervall wird mit der Tarifversion bewertet, die zu diesem Zeitpunkt galt. Nichts wird über den Monat gemittelt.

  • Versionierte Tarife mit Hoch- und Niedertarif, Saisonzeiten und Gültigkeitszeiträumen
  • Dynamische Preisreihen, einschliesslich des BFE-Referenz-Marktpreises
  • Import der maschinenlesbaren Tarifdatei eines Netzbetreibers (Art. 7b StromVV)
  • Aufteilung des lokalen Stroms pro Zeitstempel auf alle Teilnehmenden
Dokumente

Rechnungen, Abrechnungen und Verträge

Rechnungen werden als PDF/A-3b mit QR-Zahlteil erzeugt und durchlaufen die Stati Entwurf, freigegeben, versendet, bezahlt. Eine Stornierung behält das Dokument und seine Nummer, statt die Zeile zu löschen. Jahresabrechnungen und Teilnahmeverträge entstehen im selben Renderer, und jede ausgestellte Version bleibt so erhalten, wie sie versendet wurde.

Gemeinschaft

Rollen, Geltungsbereich und Umzugsdaten

Admins, ZEV-Eigentümer und Teilnehmende sehen jeweils ihre eigene Sicht auf dieselben Daten. Zuordnungen zwischen Teilnehmenden und Messpunkten tragen Gültigkeitsdaten: Wer am 15. März auszieht, wird bis zum 15. März abgerechnet.

Planung

Machbarkeit, bevor Sie gründen

Schätzt Einsparungen, Amortisation, ROI und Kapitalwert für eine geplante Gemeinschaft. Betreiben Sie bereits eine, lässt sich der Rechner aus deren Teilnehmenden und dem gemessenen Eigenverbrauch vorbefüllen.

Betrieb

Gebaut, um von einer Person betrieben zu werden

  • Audit-Log über alle privilegierten Aktionen, eingeschränkt auf das, was Sie sehen dürfen
  • Asynchroner E-Mail-Versand mit Verlauf pro Rechnung und Wiederholung
  • API-Schlüssel für Skripte, mit Nur-Lese-Zugriff und eigenem Ratenlimit
  • Ganze Gemeinschaft als versioniertes Archiv exportieren oder zwischen Instanzen verschieben

Screenshots

So sieht es aus

Aus der Demo-Gemeinschaft, die zum Projekt gehört und mit einem Befehl angelegt wird. Die Oberfläche selbst ist in vier Sprachen verfügbar; die Screenshots zeigen sie auf Englisch.

Übersicht

Abrechnungsperioden, älteste zuerst

Jede Periode zeigt die Aktion, die sie braucht, sodass Sie direkt mit der Arbeit beginnen, statt sie zu suchen. Die Periode, die noch Daten sammelt, sagt das einfach.

OpenZEV-Übersicht mit Abrechnungsperioden nach Status, jeweils mit der nächsten Aktion (Oberfläche auf Englisch)
Energiebilanz

Wohin der Solarstrom tatsächlich ging.

Produktion, Verbrauch, Eigenverbrauch und Netzaustausch für die gewählte Periode, mit einem Sankey-Diagramm, das jede kWh vom Produzenten bis zum Teilnehmenden verfolgt. Nach Teilnehmenden filtern oder die Auflösung bis auf das Intervall ändern.

Energiebilanz mit Kennzahlen-Kacheln und einem Sankey-Diagramm des Energieflusses zwischen Produzent, Teilnehmenden und Netz (Oberfläche auf Englisch)
Abrechnung

Eine Zeile pro Teilnehmende

Jede Rechnung der Periode mit Vollständigkeit der Messdaten, Status, Total und PDF-Stand, dazu Sammelaktionen für die Schritte, die Sie sonst pro Haushalt wiederholen würden.

Abrechnungsansicht mit der Rechnung jeder teilnehmenden Person, Statusanzeigen, Totalen und Sammelaktionen (Oberfläche auf Englisch)
Tarife

Jede Tarifänderung ist eine neue Version

Ein Tarif ist eine Reihe von Versionen, jede mit eigenen Tarifstufen und Gültigkeitszeitraum. Eine Rechnung vom letzten Jahr wird weiterhin zum Preis des letzten Jahres bewertet, und das Diagramm zeigt, wann jede Änderung in Kraft trat.

Tarifdetails mit Versionsverlauf, Preisverlauf-Diagramm sowie Hoch- und Niedertarif (Oberfläche auf Englisch)

Schnellstart

Drei Wege, es zu betreiben

Wählen Sie den, der dazu passt, wo es laufen soll. Alle drei laden fertige Images von GHCR.

Ausprobieren

Demo-Gemeinschaft

Startet den Stack und legt eine vollständige Gemeinschaft an — Teilnehmende, Zähler, Tarife und Messwerte —, damit es etwas zu sehen gibt.

# klonen, dann:
scripts/start-demo-environment.sh

# → http://localhost:8080
# admin@openzev.local / admin1234
Selbst hosten

Docker Compose

Der komplette Stack — Frontend, API, Celery-Worker und -Beat, PostgreSQL und Redis — ohne Demo-Daten.

docker compose up -d --build

# frontend  :8080
# api       :8001

docker compose down
Kubernetes

Kubernetes mit Helm

Das Chart deployt Frontend, Backend, Worker und Beat in Ihren Cluster, mit Ingress und Media-PVC. PostgreSQL und Redis bringen Sie selbst mit.

helm repo add openzev \
  https://splattner.github.io/openzev
helm repo update
helm install openzev openzev/openzev \
  -n openzev --create-namespace
Images ghcr.io/splattner/openzev-{backend,frontend,fullstack} Signierte Release-Manifeste und SBOM-Attestierungen Datenbanken PostgreSQL, MariaDB oder SQLite über DATABASE_URL

Darunter

Der Stack

Backend
Django, Django REST Framework, SimpleJWT
Frontend
React, TypeScript, Vite, React Query, i18next
Async
Celery-Worker und -Beat auf Redis
Daten
PostgreSQL, MariaDB oder SQLite
API
OpenAPI-Schema mit Swagger und ReDoc
Betrieb
Docker Compose oder Helm auf Kubernetes
Lizenz
AGPL-3.0 — ausführen, ändern, hosten. Wer eine geänderte Version anderen über ein Netzwerk anbietet, gibt auch den Quellcode weiter.

Bitte lesen, bevor Sie damit jemandem eine Rechnung stellen

Ich habe OpenZEV gebaut, um meinen eigenen ZEV zu betreiben, und teile es so, wie es ist, ohne Gewährleistung. Es passt zu Leuten, die gerne ihren eigenen Stack betreiben. Prüfen Sie Importe, Tarife und Rechnungen, bevor sie eine teilnehmende Person erreichen: Die Verantwortung für die Zahlen bleibt bei Ihnen.

Es entsteht ausserdem mit viel KI-Unterstützung, bis hin zu Spezifikationen, ADRs und Benutzerdokumentation. Manche Entscheidungen werden einem erfahrenen Team unkonventionell vorkommen. Das ist der Kompromiss, den ich gewählt habe: Das Projekt ist auf Lernen, Experimentieren und den Betrieb eines echten ZEV ausgelegt, nicht auf Unternehmensprozesse.