Files
hilman2andClaude Opus 5 75ab1e6a7f Sprachumschalter mit Flaggen, CLAUDE.md und CHANGELOG.md
Der Umschalter sitzt jetzt oben in der Kopfzeile statt unten im Fuss, mit
Flagge und Sprachkuerzel je Sprache. Die Flaggen sind eingebettete SVG, keine
Emoji: Windows stellt die Regional-Indicator-Paare nicht als Flagge dar,
sondern als Buchstabenpaar. Eine Flagge bezeichnet ausserdem ein Land und keine
Sprache, darum steht das Kuerzel daneben und title wie aria-label nennen die
Sprache aus. Die Rechtsseiten bekommen denselben Umschalter, jeweils auf ihr
Gegenstueck in der anderen Sprache.

Dabei ist ein Fehler aus der ersten Fassung aufgefallen: die Mobil-Regel
`.bar { padding: .75rem 0 }` hat den seitlichen Rand von `.wrap` aufgehoben,
wodurch die Navigation am Displayrand klebte. Jetzt werden nur noch oben und
unten gesetzt.

CLAUDE.md haelt die Regeln fest, die in diesem Repo gelten und die man sonst
jedes Mal neu erklaeren muesste: Changelog auf Englisch fuer Anwender,
Migrationen sind nach Veroeffentlichung unveraenderlich, docs/ ist erzeugt und
wird nicht von Hand bearbeitet, alle Texte in vier Sprachen, keine
Gedankenstriche.

CHANGELOG.md beschreibt 0.2.0 bis 0.4.0 aus Sicht der Anwender. Kein
Dateiname, kein Funktionsname, sondern was jemand jetzt tun kann und was er
beim Update beachten muss.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-01 12:59:58 +02:00

215 lines
17 KiB
HTML
Raw Permalink 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.
<!doctype html>
<html lang="de">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Selbst gehostetes OCPP-CSMS für KMU | easy-ocpp</title>
<meta name="description" content="Open-Source-CSMS für OCPP 1.6J / 2.0.1 und 1–10 Wallboxen: RFID-Chips, Ladelimits, Live-Messwerte, Auswertungen. Ein Rust-Binary, eine SQLite-Datei.">
<link rel="canonical" href="https://hilman2.github.io/easy-ocpp/de/">
<link rel="alternate" hreflang="en" href="https://hilman2.github.io/easy-ocpp/">
<link rel="alternate" hreflang="de" href="https://hilman2.github.io/easy-ocpp/de/">
<link rel="alternate" hreflang="fr" href="https://hilman2.github.io/easy-ocpp/fr/">
<link rel="alternate" hreflang="es" href="https://hilman2.github.io/easy-ocpp/es/">
<link rel="alternate" hreflang="x-default" href="https://hilman2.github.io/easy-ocpp/">
<meta property="og:type" content="website">
<meta property="og:site_name" content="easy-ocpp">
<meta property="og:title" content="Selbst gehostetes OCPP-CSMS für KMU | easy-ocpp">
<meta property="og:description" content="Open-Source-CSMS für OCPP 1.6J / 2.0.1 und 1–10 Wallboxen: RFID-Chips, Ladelimits, Live-Messwerte, Auswertungen. Ein Rust-Binary, eine SQLite-Datei.">
<meta property="og:url" content="https://hilman2.github.io/easy-ocpp/de/">
<meta property="og:locale" content="de_DE">
<meta property="og:image" content="https://opengraph.githubassets.com/1/hilman2/easy-ocpp">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="Selbst gehostetes OCPP-CSMS für KMU | easy-ocpp">
<meta name="twitter:description" content="Open-Source-CSMS für OCPP 1.6J / 2.0.1 und 1–10 Wallboxen: RFID-Chips, Ladelimits, Live-Messwerte, Auswertungen. Ein Rust-Binary, eine SQLite-Datei.">
<meta name="twitter:image" content="https://opengraph.githubassets.com/1/hilman2/easy-ocpp">
<meta name="theme-color" content="#0b1220">
<link rel="icon" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Crect width='32' height='32' rx='7' fill='%230b1220'/%3E%3Cpath d='M18 5 L9 18 h6 l-2 9 9-13 h-6 z' fill='%2322d3ee'/%3E%3C/svg%3E">
<link rel="stylesheet" href="../assets/style.css">
<script type="application/ld+json">{"@context": "https://schema.org", "@type": "SoftwareApplication", "name": "easy-ocpp", "applicationCategory": "BusinessApplication", "applicationSubCategory": "Charging Station Management System (CSMS)", "operatingSystem": "Windows, Linux", "description": "Open-Source-CSMS für OCPP 1.6J / 2.0.1 und 1–10 Wallboxen: RFID-Chips, Ladelimits, Live-Messwerte, Auswertungen. Ein Rust-Binary, eine SQLite-Datei.", "url": "https://hilman2.github.io/easy-ocpp/de/", "codeRepository": "https://github.com/hilman2/easy-ocpp", "programmingLanguage": "Rust", "license": "https://opensource.org/licenses/MIT", "isAccessibleForFree": true, "offers": {"@type": "Offer", "price": "0", "priceCurrency": "EUR"}, "inLanguage": ["de", "en", "fr", "es"]}</script>
<script type="application/ld+json">{"@context": "https://schema.org", "@type": "FAQPage", "mainEntity": [{"@type": "Question", "name": "Was ist ein CSMS?", "acceptedAnswer": {"@type": "Answer", "text": "Ein Charging Station Management System ist das Backend, mit dem eine Ladestation spricht. Es autorisiert RFID-Karten, zeichnet Ladevorgänge und Zählerstände auf und kann Ladungen aus der Ferne starten oder beenden. OCPP ist das Protokoll, über das die beiden sich unterhalten."}}, {"@type": "Question", "name": "Funktioniert das mit meiner Wallbox?", "acceptedAnswer": {"@type": "Answer", "text": "Jeder Ladepunkt, der OCPP 1.6J über WebSocket spricht, sollte laufen. Das trifft auf die große Mehrheit der in den letzten Jahren verkauften Geräte zu. Ältere Hardware, die nur OCPP 1.5 SOAP kann, verbindet sich für Boot und Heartbeat."}}, {"@type": "Question", "name": "Brauche ich eine Internetverbindung?", "acceptedAnswer": {"@type": "Answer", "text": "Nein. Die Wallboxen verbinden sich über das lokale Netz mit Ihrem Server. Internet brauchen Sie nur, wenn Sie die Oberfläche von außen erreichen wollen."}}, {"@type": "Question", "name": "Wie sehe ich, wer wie viel geladen hat?", "acceptedAnswer": {"@type": "Answer", "text": "Jede Ladung hängt an dem RFID-Chip, mit dem sie gestartet wurde, und jeder Chip gehört zu einer Person. Ladungsliste, Statistik und Monats-PDF sind entsprechend gruppiert. Ladungen auf nicht zugeordneten Chips laufen als Gast-Ladung."}}, {"@type": "Question", "name": "Sehen Mitarbeiter die Ladungen der anderen?", "acceptedAnswer": {"@type": "Answer", "text": "Nein. Ein Mitarbeiter sieht ausschließlich die Ladungen, die mit seinen eigenen Chips gestartet wurden. Nur ein Administrator sieht alles."}}, {"@type": "Question", "name": "Was kostet es?", "acceptedAnswer": {"@type": "Answer", "text": "Nichts. easy-ocpp ist Open Source unter der MIT-Lizenz. Es gibt keine kostenpflichtige Variante und keine Gebühr je Ladepunkt."}}]}</script>
</head>
<body>
<a class="skip" href="#main">Skip to content</a>
<header class="site">
<div class="wrap bar">
<a class="brand" href="https://hilman2.github.io/easy-ocpp/de/">
<svg viewBox="0 0 32 32" width="26" height="26" aria-hidden="true"><rect width="32" height="32" rx="7" fill="#0f172a"/><path d="M18 5 L9 18 h6 l-2 9 9-13 h-6 z" fill="#22d3ee"/></svg>
easy-ocpp
</a>
<nav class="sections" aria-label="Sections">
<a href="#features">Funktionen</a>
<a href="#roles">Rollen</a>
<a href="#limits">Ladelimits</a>
<a href="#start">Loslegen</a>
<a href="#faq">Fragen</a>
</nav>
<nav class="langbar" aria-label="Language">
<a href="https://hilman2.github.io/easy-ocpp/" hreflang="en" lang="en" title="English" aria-label="English"><svg viewBox="0 0 60 30" width="18" height="12" aria-hidden="true"><clipPath id="ukclip"><path d="M30,15 h30 v15 z v15 h-30 z h-30 v-15 z v-15 h30 z"/></clipPath><rect width="60" height="30" fill="#00247d"/><path d="M0,0 L60,30 M60,0 L0,30" stroke="#fff" stroke-width="6"/><path d="M0,0 L60,30 M60,0 L0,30" clip-path="url(#ukclip)" stroke="#cf142b" stroke-width="4"/><path d="M30,0 v30 M0,15 h60" stroke="#fff" stroke-width="10"/><path d="M30,0 v30 M0,15 h60" stroke="#cf142b" stroke-width="6"/></svg><span>EN</span></a>
<a href="https://hilman2.github.io/easy-ocpp/de/" hreflang="de" lang="de" title="Deutsch" aria-label="Deutsch" aria-current="true"><svg viewBox="0 0 5 3" width="18" height="12" aria-hidden="true"><rect width="5" height="3" fill="#000"/><rect y="1" width="5" height="2" fill="#d00"/><rect y="2" width="5" height="1" fill="#ffce00"/></svg><span>DE</span></a>
<a href="https://hilman2.github.io/easy-ocpp/fr/" hreflang="fr" lang="fr" title="Français" aria-label="Français"><svg viewBox="0 0 3 2" width="18" height="12" aria-hidden="true"><rect width="3" height="2" fill="#fff"/><rect width="1" height="2" fill="#002395"/><rect x="2" width="1" height="2" fill="#ed2939"/></svg><span>FR</span></a>
<a href="https://hilman2.github.io/easy-ocpp/es/" hreflang="es" lang="es" title="Español" aria-label="Español"><svg viewBox="0 0 6 4" width="18" height="12" aria-hidden="true"><rect width="6" height="4" fill="#c60b1e"/><rect y="1" width="6" height="2" fill="#ffc400"/></svg><span>ES</span></a>
</nav>
</div>
</header>
<main id="main">
<section class="hero">
<div class="wrap">
<p class="eyebrow">OCPP 1.6J &middot; 2.0.1 &middot; 1.5 SOAP</p>
<h1>Ihr eigener OCPP-Server für bis zu zehn Wallboxen</h1>
<p class="lede">easy-ocpp ist ein selbst gehostetes Ladepunkt-Management-System (CSMS) für kleine und mittlere Unternehmen. Es spricht OCPP 1.6J, 2.0.1 und 1.5 SOAP. Ein Programm, eine SQLite-Datei, kein Cloud-Abo und keine dauerhafte Internetverbindung.</p>
<p class="actions">
<a class="btn primary" href="https://github.com/hilman2/easy-ocpp/releases/latest">Release herunterladen</a>
<a class="btn" href="https://github.com/hilman2/easy-ocpp">Quellcode auf GitHub</a>
</p>
</div>
</section>
<section class="wrap grid-3">
<article class="card">
<h3>Keine Cloud, kein Abo</h3>
<p>Alles läuft auf einem Rechner, der Ihnen gehört. Ein kleiner Server reicht, ein NUC, notfalls ein übriger Büro-PC. Ladedaten verlassen Ihr Netz nicht.</p>
</article>
<article class="card">
<h3>Ein Programm, eine Datei</h3>
<p>Kein Datenbankserver, kein Message-Broker, kein Container-Stack. Entpacken, starten, fertig. Der gesamte Datenbestand ist eine SQLite-Datei, die Sie zum Sichern einfach kopieren.</p>
</article>
<article class="card">
<h3>Gebaut für 1–10 Wallboxen</h3>
<p>Bewusst keine Konzern-Plattform. Das, was ein Betrieb mit einer Handvoll Ladepunkte wirklich braucht, ohne den Betriebsaufwand drumherum.</p>
</article>
</section>
<section id="features" class="wrap">
<h2>Was es kann</h2>
<div class="grid-4">
<article class="feature">
<h3>Wallbox-Inventar</h3>
<p>Online-Status, Connectors, Firmware und Seriennummer je Ladepunkt, direkt aus der OCPP-Verbindung.</p>
</article>
<article class="feature">
<h3>Chip-Verwaltung</h3>
<p>Neue Chips werden über ein Lernfenster von zwei Minuten angelernt: Chip an die Wallbox halten, der Server fängt den Tag ab.</p>
</article>
<article class="feature">
<h3>Chips und Personen</h3>
<p>Ein Chip gehört entweder zu einer Person oder er ist ein Gast-Chip. Die Kategorie folgt der Zuordnung und kann ihr nicht widersprechen.</p>
</article>
<article class="feature">
<h3>Live-Messwerte</h3>
<p>Geladene kWh, aktuelle Leistung und Ladestand während der Ladung, alle zehn Sekunden aktualisiert.</p>
</article>
<article class="feature">
<h3>Ladelimits</h3>
<p>Automatische Abschaltung bei erreichter Ziel-Energie oder abgelaufener Zeit, je nachdem was zuerst eintritt.</p>
</article>
<article class="feature">
<h3>Gast-Ladungen</h3>
<p>Für Besucher aus der Ferne freischalten und auf ein Gast-Label buchen.</p>
</article>
<article class="feature">
<h3>Auswertungen</h3>
<p>Ladungsliste mit CSV-Export, Statistik nach Monat, Quartal und Jahr sowie ein Monats-PDF je Person.</p>
</article>
<article class="feature">
<h3>Vier Sprachen</h3>
<p>Die gesamte Oberfläche auf Deutsch, Englisch, Französisch und Spanisch, pro Benutzer umschaltbar.</p>
</article>
</div>
</section>
<section id="roles" class="wrap">
<h2>Zwei Rollen, sauber getrennt</h2>
<p class="lede-2">Es gibt genau eine Sorte Person im System: den Benutzer. Ein Mitarbeiter ist ein Benutzer, und seine Chips, Ladungen und Limits hängen direkt an diesem Konto. Was ein Mitarbeiter darf, ist bewusst eng gefasst.</p>
<div class="tablewrap">
<table>
<thead><tr><th scope="col"></th><th scope="col">Admin</th><th scope="col">Mitarbeiter</th></tr></thead>
<tbody>
<tr><th scope="row">Wallboxen, Chips, Benutzerverwaltung</th><td class="yes" aria-label="yes">&#10003;</td><td class="no" aria-label="no">&ndash;</td></tr>
<tr><th scope="row">Ladungen aller Personen</th><td class="yes" aria-label="yes">&#10003;</td><td class="no" aria-label="no">&ndash;</td></tr>
<tr><th scope="row">Eigene Ladungen, CSV, Statistik, Monats-PDF</th><td class="yes" aria-label="yes">&#10003;</td><td class="yes" aria-label="yes">&#10003;</td></tr>
<tr><th scope="row">Eigene laufende Ladung sehen und beenden</th><td class="yes" aria-label="yes">&#10003;</td><td class="yes" aria-label="yes">&#10003;</td></tr>
<tr><th scope="row">Ziel-kWh und Timer an der eigenen Ladung</th><td class="yes" aria-label="yes">&#10003;</td><td class="yes" aria-label="yes">&#10003;</td></tr>
<tr><th scope="row">Standardvorgaben für jeden Mitarbeiter</th><td class="yes" aria-label="yes">&#10003;</td><td class="no" aria-label="no">&ndash;</td></tr>
</tbody>
</table>
</div>
<p class="note">Die Einschränkungen greifen auf dem Server. Etwas in der Oberfläche auszublenden würde nicht genügen. Nach dem Anmelden landet ein Mitarbeiter auf seiner eigenen Seite, und die Navigation zeigt ihm nur, was er auch öffnen darf.</p>
</section>
<section id="limits" class="wrap">
<h2>Ladelimits, die tatsächlich abschalten</h2>
<p>Eine Ladung endet von selbst, sobald sie eine Ziel-Energie oder einen Timer erreicht, je nachdem was zuerst eintritt. Beides ist optional. Jede Person hat Standardvorgaben, die für jede neue Ladung gelten und die entweder der Mitarbeiter selbst oder ein Administrator setzt; an der laufenden Ladung lassen sich die Werte weiterhin ändern.</p>
<p class="note">Ein Watchdog prüft alle 15 Sekunden und schickt RemoteStopTransaction. Das Energielimit wird zusätzlich sofort beim Eintreffen neuer Messwerte geprüft, damit nicht bis zum nächsten Takt über das Ziel hinaus geladen wird. Lehnt eine Wallbox den Stop ab, wird es erneut versucht.</p>
</section>
<section id="start" class="wrap">
<h2>Loslegen</h2>
<p>Ein Release für Windows oder Linux holen, entpacken, starten. Die Oberfläche liegt dann auf Port 8080; der erste Login ist admin / admin.</p>
<p>Oder selbst aus dem Quellcode bauen:</p>
<pre><code>git clone https://github.com/hilman2/easy-ocpp.git
cd easy-ocpp
cargo run --release</code></pre>
<h3>Wallbox verbinden</h3>
<p>Den Ladepunkt auf Ihren Server zeigen lassen. Die Subprotokolle werden automatisch ausgehandelt, und ein unbekannter Ladepunkt trägt sich beim ersten Verbinden selbst ein.</p>
<pre><code>ws://&lt;host&gt;:8080/ocpp/&lt;ChargePointId&gt;</code></pre>
<p>Für ältere OCPP-1.5-Geräte über SOAP:</p>
<pre><code>POST http://&lt;host&gt;:8080/ocpp15</code></pre>
</section>
<section id="compat" class="wrap">
<h2>Protokoll-Unterstützung</h2>
<div class="tablewrap">
<table>
<thead><tr><th scope="col">Version</th><th scope="col">Transport</th><th scope="col">Stand</th></tr></thead>
<tbody>
<tr><th scope="row">OCPP 1.6J</th><td>WebSocket</td><td>Vollständig (Boot, Heartbeat, Status, Authorize, Transaktionen, Messwerte, Remote-Start/Stop, Konfiguration)</td></tr>
<tr><th scope="row">OCPP 2.0.1</th><td>WebSocket</td><td>Gerüst (BootNotification und TransactionEvent)</td></tr>
<tr><th scope="row">OCPP 1.5</th><td>SOAP</td><td>Gerüst (Boot und Heartbeat)</td></tr>
</tbody>
</table>
</div>
</section>
<section id="faq" class="wrap">
<h2>Häufige Fragen</h2>
<details class="faq">
<summary><h3>Was ist ein CSMS?</h3></summary>
<p>Ein Charging Station Management System ist das Backend, mit dem eine Ladestation spricht. Es autorisiert RFID-Karten, zeichnet Ladevorgänge und Zählerstände auf und kann Ladungen aus der Ferne starten oder beenden. OCPP ist das Protokoll, über das die beiden sich unterhalten.</p>
</details>
<details class="faq">
<summary><h3>Funktioniert das mit meiner Wallbox?</h3></summary>
<p>Jeder Ladepunkt, der OCPP 1.6J über WebSocket spricht, sollte laufen. Das trifft auf die große Mehrheit der in den letzten Jahren verkauften Geräte zu. Ältere Hardware, die nur OCPP 1.5 SOAP kann, verbindet sich für Boot und Heartbeat.</p>
</details>
<details class="faq">
<summary><h3>Brauche ich eine Internetverbindung?</h3></summary>
<p>Nein. Die Wallboxen verbinden sich über das lokale Netz mit Ihrem Server. Internet brauchen Sie nur, wenn Sie die Oberfläche von außen erreichen wollen.</p>
</details>
<details class="faq">
<summary><h3>Wie sehe ich, wer wie viel geladen hat?</h3></summary>
<p>Jede Ladung hängt an dem RFID-Chip, mit dem sie gestartet wurde, und jeder Chip gehört zu einer Person. Ladungsliste, Statistik und Monats-PDF sind entsprechend gruppiert. Ladungen auf nicht zugeordneten Chips laufen als Gast-Ladung.</p>
</details>
<details class="faq">
<summary><h3>Sehen Mitarbeiter die Ladungen der anderen?</h3></summary>
<p>Nein. Ein Mitarbeiter sieht ausschließlich die Ladungen, die mit seinen eigenen Chips gestartet wurden. Nur ein Administrator sieht alles.</p>
</details>
<details class="faq">
<summary><h3>Was kostet es?</h3></summary>
<p>Nichts. easy-ocpp ist Open Source unter der MIT-Lizenz. Es gibt keine kostenpflichtige Variante und keine Gebühr je Ladepunkt.</p>
</details>
</section>
</main>
<footer class="site">
<div class="wrap">
<p class="muted">MIT-Lizenz. Nicht mit der Open Charge Alliance verbunden. &middot; <a href="https://github.com/hilman2/easy-ocpp">GitHub</a></p>
<p class="muted"><a href="https://hilman2.github.io/easy-ocpp/de/impressum/">Impressum</a> &middot; <a href="https://hilman2.github.io/easy-ocpp/de/datenschutz/">Datenschutz</a></p>
</div>
</footer>
</body>
</html>