Dieses Projekt verbindet ein EEBUS-kompatibles HEMS (Energy Management System) mit einem MQTT-Broker und stellt Leistungsdaten, Grenzwerte und Failsafe-Informationen über MQTT bereit. Damit kann z. B. Home Assistant oder jede andere MQTT-basierte Automatisierung über EEBUS-Geräte gesteuert weden.
Die Einhaltung der rechtlichen Rahmenbedingungen für die Regelbarkeit der einzelnen Geräte obligt dem Anwender! Diese Anwendung stellt nur Informationen bereit. Deren Verwendung und Verwertung liegt nicht im Verantwortungsbereich des Autors.
-
Automatische Erstellung von Zertifikat & Schlüssel beim ersten Start
-
Automatische Erstellung/Verwaltung von
config.json -
MQTT-Passwort wird verschlüsselt gespeichert
-
Verarbeitung und Bereitstellung folgender EEBUS-Use-Cases:
- LPP (Limited Power Production)
- LPC (Limited Power Consumption)
-
Failsafe-Handling inkl. Countdown & Speicherung im Config-File
-
Heartbeat-Überwachung → automatisches Umschalten in Failsafe-Modus
-
MQTT-Output für alle relevanten Daten
Wichtigste Dateien:
main.go
config.json (wird automatisch erzeugt)
status.log (wird automatisch erzeugt)
Die Datei wird beim ersten Start automatisch erzeugt.
{
"hems": {
"certFile": "",
"keyFile": "",
"remoteSki": "",
"port": 4713,
"pv_max": 10000,
"failsafe": "",
"failsafe_duration": "",
"failsafe_lpc": "",
"failsafe_duration_lpc": "",
"serial_number": "1234567890"
},
"mqtt": {
"mqttBroker": "192.168.1.10",
"mqttPort": 1883,
"mqttUsername": "user",
"mqttPassword": "encrypted"
}
}| Feld | Beschreibung |
|---|---|
remoteSki |
SKI des EEBUS-Gerätes, mit dem gekoppelt werden soll |
port |
Port auf dem gelauscht wird. |
pv_max |
Maximale PV-Produktion (W) |
failsafe |
Wird automatisch gesetzt: Failsafe-Grenze |
failsafe_duration |
Wird automatisch gesetzt: Failsafe Dauer |
failsafe_lpc |
Wird automatisch gesetzt: Failsafe-Grenze (LPC) |
failsafe_duration_lpc |
Wird automatisch gesetzt: Failsafe Dauer (LPC) |
serial_number |
10-stellige ID, wird automatisch generiert |
mqttBroker |
IP des Mqtt Brokers |
mqttPort |
Port des Mqtt Brockers |
mqttUsername |
Benutzername für Mqtt Broker |
mqttPassword |
Mqtt Passwort. Wird beim Start verschlüsselt. |
Beim ersten Start erzeugt das Programm automatisch:
- ein ECDSA-Zertifikat
- den Private Key
- speichert beide Base64-PEM-encoded in
config.json
Das Programm veröffentlicht u. a. folgende MQTT-Topics:
| Topic | Beispiel | Beschreibung |
|---|---|---|
eebus2mqtt/hems/lpp/allowed_production |
4200 |
Erlaubte Einspeiseleistung (W) |
eebus2mqtt/hems/lpp/limit_activ |
true/false |
Aktiver Limitmodus |
eebus2mqtt/hems/lpp/LimitCountdown |
56 |
Countdown (s) für aktives Limit |
eebus2mqtt/hems/lpp/FailsafeCountdown |
3600 |
Failsafe-Restdauer |
eebus2mqtt/hems/lpp/last_heartbeat |
3 |
Sekunden seit letztem EEBUS Heartbeat |
| Topic | Beispiel | Beschreibung |
|---|---|---|
eebus2mqtt/hems/lpc/allowed_consumption |
4200 |
Erlaubte Produktion (W) |
eebus2mqtt/hems/lpc/limit_activ |
true/false |
Aktiver Limitmodus |
eebus2mqtt/hems/lpc/LimitCountdown |
56 |
Countdown (s) für aktives Limit |
eebus2mqtt/hems/lpc/FailsafeCountdown |
3600 |
Failsafe-Restdauer |
eebus2mqtt/hems/lpc/last_heartbeat |
3 |
Sekunden seit letztem EEBUS Heartbeat |
Das HEMS überwacht Heartbeats der EEBUS-Gegenstelle.
- Wenn >120 Sekunden kein Heartbeat kommt → Failsafe aktiv
- Limit & Dauer werden aus
config.jsonentschlüsselt, diese dürfen vom Nutzer nicht geändert werden! - Countdown wird ständig über MQTT ausgegeben
- Ende des Failsafe → erneuerter Heartbeat, oder Mindestdauer abgelaufen
Failsafe-Einstellungen kommen vom Netzbetreiber und werden automatisch verschlüsselt in config.json gespeichert.
Es wird AES-256-GCM verwendet.
- MQTT-Passwort
- Failsafe-Wert
- Failsafe-Dauer
go run ./devices/hems/main.godocker build -t eebus2mqtt .
docker run -it --net=host -v $(pwd)/config.json:/config/config.json eebus2mqttDatei: status.log
Wird automatisch generiert Speichert den System Status.
Beispiel:
2025-01-01 12:00:00 | limited | 4200 W
2025-01-01 12:10:00 | unlimitedControlled |
2025-01-01 12:12:30 | failsafe | 3000 W
Das Programm sucht automatisch einen freien Port ab dem konfigurierten Startport:
port → port+100
Falls keiner frei ist → OS wählt automatisch (:0).
Das Remote-Gerät muss den Trust akzeptieren. Bei "RemoteDeniedTrust" wird:
- Pairing abgebrochen
- SKI deregistriert
- Programm beendet
- eebus-go
- spine-go
- ship-go
- Eclipse Paho MQTT
- Argon2id
- AES-GCM
Lizenz: MIT License
All credits to https://github.com/enbility/eebus-go ! 99% of this project is their work.