Open source · RCP & vRCP suisses · auto-hébergé · AGPL-3.0

Des données de compteur au quart d’heure à la facture payée.

Importez les courbes de charge, répartissez le solaire entre les participant·e·s par intervalle de 15 minutes, valorisez-le selon vos tarifs et envoyez une QR-facture. Je l’ai écrit pour facturer mon propre RCP, et je le publie au cas où il serait utile pour le vôtre.

Bilan énergétique · communauté de démo · T3 2026

PV 1 888,85 kWh Réseau 738,9 kWh 625,8 kWh consommé localement 33,1 % autoconsommés 1 263,05 kWh injecté dans le réseau
Consommation locale Échange avec le réseau Production

La même répartition que celle du moteur de facturation — min(production, consommation) par intervalle de 15 minutes — sert de base à chaque ligne de facture.

Résolution
Intervalles de 15 minutes
Documents
PDF/A-3b + QR-facture
Langues
DE · FR · IT · EN
Déploiement
Docker ou Kubernetes

Ce qu’il fait

Mesures, tarifs, facturation, documents

Facturer un RCP pour un mois est facile. Cela se complique quand le tarif de l’an dernier doit continuer d’exister, quand une personne partie en mars doit être facturée jusqu’en mars, et quand la facture doit être telle qu’un voisin l’accepte sans demander le tableur qui se cache derrière.

Mesures & imports

CSV, Excel et SDAT-CH

Les formats que les gestionnaires de réseau suisses envoient réellement, plus tout ce que votre propre compteur exporte.

  • CSV et Excel avec mappage des colonnes configurable, plus SDAT-CH pour les échanges avec le gestionnaire de réseau
  • Validation avec aperçu et protocole d’import ligne par ligne
  • Contrôles de qualité des données : lacunes, doublons et relevés invraisemblables
  • Analyse de la consommation et de la production par période ou par profil journalier
Tarifs & facturation

Répartition par intervalle de 15 minutes

Chaque intervalle est valorisé avec la version de tarif en vigueur à cet instant. Rien n’est moyenné sur le mois.

  • Tarifs versionnés avec heures pleines et creuses, périodes saisonnières et fenêtres de validité
  • Séries de prix dynamiques, y compris le prix de marché de référence de l’OFEN
  • Import du fichier tarifaire lisible par machine d’un gestionnaire de réseau (art. 7b OApEl)
  • Répartition du pool local entre tous les participants, horodatage par horodatage
Documents

Factures, décomptes et contrats

Les factures sont générées en PDF/A-3b avec section de paiement QR et passent par les statuts brouillon, approuvée, envoyée, payée. Une annulation conserve le document et son numéro au lieu de supprimer la ligne. Les décomptes annuels et les contrats de participation sortent du même moteur de rendu, et chaque version émise est conservée telle qu’elle a été envoyée.

Communauté

Rôles, périmètre et dates de déménagement

Les administrateurs, les propriétaires du RCP et les participants ont chacun leur propre vue des mêmes données. Les affectations entre participants et points de mesure portent des dates de validité : une personne qui déménage le 15 mars est facturée jusqu’au 15 mars.

Planification

La faisabilité avant de se lancer

Estime les économies, le délai de récupération, le ROI et la VAN d’une communauté en projet. Si vous en exploitez déjà une, le calcul peut être prérempli à partir de ses participants et de l’autoconsommation mesurée.

Exploitation

Conçu pour être exploité par une seule personne

  • Journal d’audit de toutes les actions privilégiées, limité à ce que vous avez le droit de voir
  • Envoi d’e-mails asynchrone avec historique par facture et nouvelle tentative
  • Clés d’API pour les scripts, en lecture seule et avec leur propre quota de requêtes
  • Export ou transfert d’une communauté entière entre instances sous forme d’archive versionnée

Captures d’écran

À quoi ça ressemble

Issues de la communauté de démo livrée avec le projet, créée en une commande. L’interface est disponible en quatre langues ; les captures la montrent en anglais.

Aperçu

Périodes de facturation, les plus anciennes d’abord

Chaque période indique l’action qu’elle demande, pour que vous commenciez par le travail à faire au lieu de le chercher. La période qui collecte encore des données le dit simplement.

Écran d’aperçu d’OpenZEV listant les périodes de facturation par statut, chacune avec sa prochaine action (interface en anglais)
Bilan énergétique

Où est réellement passé le solaire.

Production, consommation, autoconsommation et échange avec le réseau pour la période choisie, avec un diagramme de Sankey qui suit chaque kWh du producteur jusqu’au participant. Filtrez par participant ou descendez jusqu’à l’intervalle.

Écran de bilan énergétique avec indicateurs clés et diagramme de Sankey du flux d’énergie entre producteur, participants et réseau (interface en anglais)
Facturation

Une ligne par participant

Toutes les factures de la période avec la complétude des mesures, le statut, le total et l’état du PDF, plus des actions groupées pour les étapes que vous répéteriez sinon pour chaque ménage.

Écran de facturation listant la facture de chaque participant avec badges de statut, totaux et actions groupées (interface en anglais)
Tarifs

Chaque changement de tarif est une nouvelle version

Un tarif est une suite de versions, chacune avec ses propres niveaux et sa fenêtre de validité. Une facture émise l’an dernier reste valorisée au tarif de l’an dernier, et le graphique montre quand chaque changement est entré en vigueur.

Détail d’un tarif avec historique des versions, graphique de l’évolution des prix et tarifs heures pleines et creuses (interface en anglais)

Démarrage rapide

Trois façons de l’exploiter

Choisissez celle qui correspond à l’endroit où vous voulez l’héberger. Les trois récupèrent des images prêtes à l’emploi depuis GHCR.

Essayer

Communauté de démo

Démarre la pile et crée une communauté complète — participants, compteurs, tarifs et relevés — pour avoir quelque chose à regarder.

# cloner, puis :
scripts/start-demo-environment.sh

# → http://localhost:8080
# admin@openzev.local / admin1234
Auto-hébergement

Docker Compose

La pile complète — frontend, API, worker et beat Celery, PostgreSQL et Redis — sans données de démo.

docker compose up -d --build

# frontend  :8080
# api       :8001

docker compose down
Kubernetes

Kubernetes, via Helm

Le chart déploie frontend, backend, worker et beat dans votre cluster avec un Ingress et un PVC pour les médias. PostgreSQL et Redis sont à fournir par vos soins.

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} Signés manifestes de release et attestations SBOM Bases de données PostgreSQL, MariaDB ou SQLite via DATABASE_URL

Sous le capot

La pile technique

Backend
Django, Django REST Framework, SimpleJWT
Frontend
React, TypeScript, Vite, React Query, i18next
Asynchrone
Worker et beat Celery sur Redis
Données
PostgreSQL, MariaDB ou SQLite
API
Schéma OpenAPI avec Swagger et ReDoc
Déploiement
Docker Compose, ou Helm sur Kubernetes
Licence
AGPL-3.0 — l’exécuter, le modifier, l’héberger. Si vous proposez une version modifiée à d’autres via un réseau, ils reçoivent aussi le code source.

À lire avant de facturer quelqu’un avec

J’ai construit OpenZEV pour gérer mon propre RCP, et je le partage tel quel, sans garantie. Il convient aux personnes qui aiment exploiter leur propre pile. Vérifiez vos imports, vos tarifs et vos factures avant qu’elles n’atteignent un participant : la responsabilité de ce que disent les chiffres reste la vôtre.

Il est aussi construit avec beaucoup d’assistance par IA, jusqu’aux spécifications, aux ADR et à la documentation utilisateur. Certains choix sembleront peu conventionnels à une équipe expérimentée. C’est le compromis que j’ai fait : le projet est optimisé pour l’apprentissage, l’expérimentation et l’exploitation d’un vrai RCP, plutôt que pour les processus d’entreprise.