Zum Inhalt springen
Smart laden

Benutzerdefinierte Geräte

Beim Anlegen einer Wallbox, eines Heizgeräts, eines Netzzählers, einer Hausbatterie, einer PV-Anlage, eines weiteren Verbrauchers, eines Fahrzeugs, eines Tarifs, eines Einspeisebegrenzers oder eines Benachrichtigungsdienstes kannst du in der Geräteliste den Eintrag Benutzerdefiniertes Gerät wählen und eine eigene Logik auf Basis des Plugin-Systems beschreiben.

So lassen sich auch Geräte einbinden, für die es keine eingebaute Vorlage gibt, z. B. indem du die aktuelle Leistung über einen HTTP-Endpunkt liest oder einen Zielstrom per Modbus schreibst.

In der Oberfläche steht bei jedem Gerätetyp der Eintrag Benutzerdefiniertes Gerät in der Vorlagenauswahl bereit. Damit öffnet sich der Editor für die eigene Konfiguration. Standardmäßig wird ein Gerät mit type: custom angelegt. Der Typ lässt sich bei Bedarf mit einem anderen Wert überschreiben (z. B. type: heatpump).

power:
source: mqtt
topic: home/current/imsys/chn2/raw

Alternativ kannst du die vollständige Konfiguration mit name, type: custom und den darunterliegenden Attributen direkt in die evcc.yaml schreiben:

meters:
- name: imsys
type: custom
power:
source: mqtt
topic: home/current/imsys/chn2/raw

Alle weiteren Beispiele auf dieser Seite verwenden die flache Attributblock-Form, wie du sie in der Oberfläche eingibst.

Die Liste der verfügbaren Plugin-Quellen (http, mqtt, modbus, …) und Hilfsfunktionen (calc, map, watchdog, …) steht in der Plugin-Referenz.

Jedes benutzerdefinierte Gerät besteht aus drei Arten von Feldern:

  • Leseattribute: Plugins, die evcc regelmäßig abfragt, um einen Wert zu erhalten (z. B. power, soc, status).
  • Schreibattribute: Plugins, die evcc aufruft, um einen Wert zu setzen oder eine Aktion auszulösen (z. B. enable, maxcurrent, wakeup). Der zu schreibende Wert steht im Plugin zur Verfügung.
  • Features: features-Liste, die abweichendes Verhalten freischaltet. Verfügbare Flags hängen vom Gerätetyp ab.

Allgemeine Form:

# Leseattribute
power:
source: http
uri: http://meter.local/power
soc:
source: mqtt
topic: battery/soc
# Schreibattribute
enable:
source: http
uri: "http://charger/relay?turn={{if .enable}}on{{else}}off{{end}}"
maxcurrent:
source: mqtt
topic: charger/maxcurrent
payload: ${maxcurrent:%d}
# Features
features:
- heating
- integrateddevice

Welche Attributnamen und Feature-Flags verfügbar sind, hängt vom Gerätetyp ab und steht in den nachfolgenden Abschnitten.

Stromzähler werden im Abschnitt meters konfiguriert. Zähler unter meters: können in site referenziert werden:

  • grid: Netzzähler
  • pv: PV-Zähler
  • battery: Hausbatteriezähler
  • charge: Zähler für die Ladeleistung der Wallbox
  • aux: Verbrauchszähler für intelligente Verbraucher
  • consumer: Zähler für einen regulären Verbraucher, erfasst für die Verbrauchsstatistik
  • ext: Weiterer Zähler, der weder für die Regelung genutzt noch angezeigt, sondern nur protokolliert und exportiert wird

power ist das einzig erforderliche Attribut. Nicht alle Zählerrollen unterstützen alle Attribute:

  • limitsoc und batterymode werden ausschließlich für Batteriezähler genutzt (referenziert in site.battery).
  • curtail und curtailed werden gemeinsam für pv-Zähler verwendet, die eine Abregelung der Einspeisung unterstützen (§ 9 EEG).
  • currents, voltages und powers sind Phasen-Attribute, die genau drei Plugin-Konfigurationen (als YAML-Array) erwarten und für Netzzähler (grid) und Wallboxen (charge) verwendet werden können.

Plugins müssen den richtigen Datentyp zurückliefern. Zur Konvertierung dienen die Lese-Pipelines.

AttributTypErforderlichKontextBeschreibung
powerfloatjaalleAktuelle Leistung in W
energyfloatneinalleZählerstand in kWh
returnenergyfloatneinalleZählerstand in Gegenrichtung in kWh (siehe unten)
maxpowerintneinpv (hybrid)Maximale AC-Leistung in W
curtailedintneinpvAktuelles Einspeiselimit in % (0 bis 100). Nur zusammen mit curtail.
socintneinbatteryLadestand in %
capacityfloatneinbatteryKapazität in kWh
powers[float,float,float]neinallePhasenleistungen in W. Zur Vorzeichenerkennung bei vorzeichenlosen Strömen.
currents[float,float,float]neinallePhasenströme in A. Zur Erkennung aktiver Phasen.
voltages[float,float,float]neinallePhasenspannungen in V. Zur Anschlusserkennung (1p/3p).

Was ein positiver power-Wert und die beiden Energierichtungen bedeuten, hängt von der Zählerrolle ab:

Rollepower positivenergyreturnenergy
gridNetzbezugBezogenEingespeist
pvErzeugungErzeugtVerbraucht (selten)
batteryEntladen (negativ: Laden)EntladenGeladen
chargeLadenGeladenEntladen (V2X)
aux, ext, consumerVerbrauchVerbrauchtErzeugt (selten)

energy und returnenergy sind steigende Zählerstände in kWh, idealerweise Gesamtwerte wie die Bezugs- und Einspeiseregister eines Netzzählers. Da die Differenzen zwischen den Zählerständen automatisch berechnet werden, muss das Plugin einen Zählerstand liefern, keine Verbrauchswerte pro Intervall. Auch ein Zähler, der sich regelmäßig zurücksetzt (z. B. täglich), funktioniert, da der Rücksprung automatisch erkannt wird. Ein Zählerstand von 0 wird als nicht verfügbar behandelt.

Beide Attribute sind optional. Ohne sie wird die Energiehistorie aus dem zeitlichen Verlauf von power abgeleitet. Echte Zählerstände liefern genauere Langzeitstatistiken.

AttributTypErforderlichKontextBeschreibung
limitsocintneinbatterySetzt das Ladeziel der Batterie in %. Das Ladeziel wird aus den konfigurierten MinSoc, MaxSoc und dem aktuellen Ladestand (Attribut soc) berechnet.
curtailintneinpvSetzt das Einspeiselimit in % der Nennleistung der Erzeugung (0 bis 100, 100 = kein Limit). Nur zusammen mit curtailed. Siehe Einspeisebegrenzer.
batterymodeintneinbatterySetzt den Steuerungsmodus der Batterie direkt. Die Modi sind unten aufgeführt.
WertModusVerhalten
1normalNormaler Betrieb: Laden aus Überschuss, Entladen für den Verbrauch
2holdEntladen verhindern, Laden aus Überschuss bleibt erlaubt
3chargeAus dem Netz laden, kein Entladen
4holdchargeLaden verhindern, Entladen für den Verbrauch bleibt erlaubt
5dischargeIns Netz entladen

Es werden nur die Batteriemodi genutzt, die das Gerät unterstützt. Ist batterymode ein switch, werden die unterstützten Modi aus dessen case-Werten übernommen. Das funktioniert auch, wenn der Switch in einem watchdog steckt. Für alle anderen Plugins müssen die unterstützten Modi in batterymodes angegeben werden, z. B. batterymodes: ["normal", "hold", "charge"]. evcc meter verifybatterymodes schaltet die konfigurierten Modi an der echten Batterie nacheinander durch und zeigt, ob die Batterieleistung wie erwartet reagiert.

Lies die aktuelle Netzleistung über einen HTTP-Endpunkt.

meters:
- name: grid
type: custom
power:
source: http
uri: http://zaehler.network.local:8080/api/data.json?from=now
jq: .data.tuples[0][1]

Lies Leistung und Ladestand einer Hausbatterie und setze ihren Modus über HTTP. Der switch deckt die Modi normal, hold und charge ab, evcc bietet also genau diese drei an.

meters:
- name: battery
type: custom
capacity: 10 # kWh
power:
source: http
uri: http://battery.local/api/power
soc:
source: http
uri: http://battery.local/api/soc
batterymode:
source: switch
switch:
- case: 1 # normal
set:
source: http
uri: http://battery.local/api/mode
method: POST
body: '{"mode": "auto"}'
- case: 2 # hold
set:
source: http
uri: http://battery.local/api/mode
method: POST
body: '{"mode": "hold"}'
- case: 3 # charge
set:
source: http
uri: http://battery.local/api/mode
method: POST
body: '{"mode": "charge"}'

Der Standardtyp type: custom deckt Wallboxen mit stufenloser Stromregelung ab. Für andere Geräte stehen spezialisierte Wallbox-Typen unter schaltbare Steckdosen und Wärmepumpen bereit.

AttributTypErforderlichBeschreibung
statusstringjaStatus (A bis F)
enabledbooljaIst das Laden freigegeben?
powerfloatneinLadeleistung in W
energyfloatneinZählerstand in kWh
returnenergyfloatneinZählerstand in Gegenrichtung in kWh (Entladeenergie, V2X)
identifystringneinAktuelle RFID-Kennung
socintneinLadestand in %
limitsocintneinLadelimit in %
tempfloatneinAktuelle Temperatur in °C (Heizung, Alias für soc)
limittempintneinTemperaturlimit in °C (Heizung, Alias für limitsoc)
finishtimestringneinGeschätztes Ladeende (RFC3339, Go-Duration, Unix-Zeitstempel oder verbleibende Sekunden)
phasesintneinAnzahl der physischen Phasen (1 bis 3)
powers[float,float,float]neinPhasenleistungen in W. Zur Vorzeichenerkennung bei vorzeichenlosen Strömen.
currents[float,float,float]neinPhasenströme in A. Zur Erkennung aktiver Phasen.
voltages[float,float,float]neinPhasenspannungen in V. Zur Anschlusserkennung (1p/3p).
AttributTypErforderlichBeschreibung
enablebooljaLaden freigeben/sperren
maxcurrentintjaSetzt den maximalen Ladestrom in A
maxcurrentmillisfloatneinSetzt den maximalen Ladestrom in A (mit Nachkommastellen)
phases1p3pintneinPhasenumschaltung durchführen (erfordert tos: true)
wakeupboolneinFahrzeug aufwecken
FeatureBeschreibung
integrateddeviceKeine Fahrzeugauswahl. Gerät läuft ohne angeschlossenes Fahrzeug und ohne Ladevorgänge (z. B. Wärmepumpe, Heizstab, fest installierter Verbraucher).
heatingBehandelt das Gerät als Heizung: Ladestand und Limits werden in °C statt in % dargestellt.
continuousGerät läuft im Zustand „deaktiviert“ eigenständig in seinem Normalbetrieb weiter. Statt „Standby“ wird „Normalbetrieb“ angezeigt. Eine Anforderung zur Leistungserhöhung (z. B. bei PV-Überschuss oder günstigem Netzstrom) wird als „Boost“ gekennzeichnet. Die Modi heißen Normal, Smart und Boost statt Aus, Smart und Schnell.
switchdeviceGerät kann nur ein- und ausgeschaltet werden (keine stufenlose Stromregelung). Max-Strom und die Option Dauerhaft laden werden nicht angezeigt. Min-Strom und Phasen legen die PV-Einschaltleistung fest. Ohne continuous heißen die Modi Aus, Smart und Ein.

Häufige Feature-Kombinationen aus den eingebauten Vorlagen:

Heizstab:

features:
- integrateddevice
- heating

Steckdose:

features:
- switchdevice
- integrateddevice # optional, wenn die Steckdose einen festen Verbraucher schaltet
- heating # optional, wenn ein Heizgerät geschaltet wird

Wärmepumpe:

features:
- integrateddevice
- heating
- continuous
- switchdevice # optional, wenn keine Stromregelung vorhanden (SG Ready)

Frage den Ladestatus einer Wallbox per Modbus ab.

features:
- integrateddevice
enabled:
source: modbus
id: 4711
uri: modbus.local:502
rtu: false
register:
address: 100
type: holding
decode: uint16

Schalte eine Tasmota-Steckdose per MQTT-Nachricht.

enable:
source: mqtt
broker: mosquitto.local:883
topic: cmd/unu-switch/Power
payload: ON

type: switchsocket

Für schaltbare Steckdosen und vergleichbare Relais-Geräte, die nur ein-/ausgeschaltet werden können, ohne stufenlose Stromregelung. Der Ladestatus wird aus der aktuellen Leistung abgeleitet (eine Leistung oberhalb von standbypower gilt als Laden). Die vollständige Einrichtung ist unter Schaltbare Steckdosen beschrieben.

AttributTypErforderlichBeschreibung
enabledbooljaStatus der Steckdose (an/aus)
powerfloatjaAktuelle Leistung in W
energyfloatneinZählerstand in kWh
socfloatneinLadestand in %
enablebooljaSteckdose ein-/ausschalten
standbypowerfloatneinSchwellwert in W. Darüber: Laden, darunter: Standby. Negativ: statisch (keine Leistungsmessung)

Für Wärmepumpen und vergleichbare Heizgeräte gibt es eigene Wallbox-Typen mit jeweils eigenen Attributen. Die vollständige Einrichtung ist unter Wärmepumpen, Heizstäbe beschrieben.

type: heatpump

Für wechselrichtergesteuerte Wärmepumpen, die einen kontinuierlichen Leistungs-Sollwert per Modbus, HTTP o. Ä. annehmen. Die Ziel-Heizleistung wird direkt über setmaxpower geschrieben.

AttributTypErforderlichBeschreibung
powerfloatneinAktuelle Leistung in W
energyfloatneinZählerstand in kWh
tempfloatneinAktuelle Temperatur in °C
limittempintneinGeräteinternes Temperaturlimit in °C
setmaxpowerintjaSetzt die maximale Heizleistung in W
getmaxpowerfloatneinAktuelle maximale Heizleistung in W

Fahrzeugparameter können ebenfalls über Plugins ausgelesen werden.

AttributTypErforderlichBeschreibung
socintjaLadestand in %
limitsocintneinLadelimit in %
statusstringneinStatus (A bis F)
rangeintneinReichweite in km
odometerintneinKilometerstand in km
climaterboolneinKlimatisierung aktiv?
getmaxcurrentfloatneinMaximaler Ladestrom in A
finishtimestringneinGeschätztes Ladeende (RFC3339, Go-Duration, Unix-Zeitstempel oder verbleibende Sekunden)
AttributTypErforderlichBeschreibung
wakeupboolneinFahrzeug aufwecken
chargeenableboolneinStartet/stoppt den Ladevorgang
maxcurrentintneinSetzt den maximalen Ladestrom in A
AttributTypErforderlichBeschreibung
titlestringneinAnzeigename des Fahrzeugs
capacityfloatneinBatteriekapazität in kWh
iconstringneinIcon in der Benutzeroberfläche
FeatureBeschreibung
coarsecurrentFahrzeug akzeptiert den Ladestrom nur in ganzen 1-A-Schritten. Die Regelung wird auf grobe 1-A-Stufen beschränkt, auch wenn die Wallbox feiner regeln könnte.
streamingFahrzeug liefert Daten per Push statt per Polling (z. B. BMW Cardata). Ladestand-Updates außerhalb aktiver Ladevorgänge werden als zuverlässig behandelt.
welcomechargeFahrzeug erwartet beim Anschließen eine aktive Wallbox, um die Verbindung als funktionierend zu erkennen. Andernfalls meldet das Fahrzeug einen Fehler.

Lies die aktuelle Reichweite aus MQTT-Nachrichten.

title: Grüner Mazda # Anzeigename (optional)
capacity: 50 # Batteriekapazität in kWh (optional)
features:
- coarsecurrent
range:
source: mqtt
topic: mazda2mqtt/c53/chargeInfo/drivingRangeKm

Wecke das Fahrzeug per HTTP-Ping auf, bevor weitere Abfragen folgen.

wakeup:
source: http
uri: http://teslalogger.local:5000/command/08154711/wake_up

onIdentify setzt den Lademodus automatisch, sobald das Fahrzeug erkannt wird.

soc:
source: mqtt
topic: car/soc
onIdentify:
mode: smart

Verfügbare Modi sind: off, smart, now. Die veralteten Werte pv und minpv werden weiterhin akzeptiert und aktivieren smart mit ausgeschaltetem bzw. eingeschaltetem Dauerhaft laden.

Ein benutzerdefinierter Tarif bindet eine eigene Wertquelle über den Plugin-Mechanismus an. Das Attribut tariff legt fest, was die Quelle liefert und in welcher Einheit.

Genau eines der Attribute price oder forecast muss konfiguriert sein.

AttributTypBeschreibung
pricefloatAktueller Wert. Float-Wert des Plugins.
forecaststringVorhersage als JSON-String mit einer Liste von Zeiträumen und Werten (siehe Schema unten). Wird stündlich abgefragt.
AttributTypErforderlichBeschreibung
tariffstringneinprice (Standard), co2, solar oder temperature. Bestimmt die Einheit der zurückgegebenen Werte: Preis in konfigurierter Währung pro kWh, CO₂-Intensität in g/kWh, PV-Vorhersage in W, Temperatur in °C.
chargesfloatneinFester Aufschlag pro kWh, der zu jedem Wert addiert wird. Standard 0.
chargesZoneslistneinZeitabhängige Aufschläge (z. B. Netzentgelte), die charges für bestimmte Zeiträume überschreiben. Siehe zeitabhängige Netzentgelte.
taxfloatneinProzentualer Steuersatz auf das Ergebnis, z. B. 0.2 für 20%. Standard 0.
formulastringneinGo-Ausdruck für eine eigene Berechnung, in dem price, charges und tax als Variablen zur Verfügung stehen. Siehe Beispiele.
intervaldurationneinAbfrageintervall für forecast. Standard 1h.
cachedurationneinCache-Dauer für price. Standard 15m.
FeatureBeschreibung
averageGlättet feingranulare Preisstufen (z. B. 15-Minuten-Werte) zu Stundenmittelwerten.
cacheableSpeichert abgerufene Werte persistent. Bei Neustart oder Ausfall des Anbieters dienen sie als Fallback (bis zu 24 Stunden).

Aktueller Preis via HTTP:

price:
source: http
uri: https://example.com/api/price

Vorhersage via HTTP:

forecast:
source: http
uri: https://api.allinpower.nl/troodon/api/p/spot_market/prices/?product_type=ELK
jq: '[.timestamps, .prices] | transpose | map({ "start": (.[0] | strptime("%Y-%m-%dT%H:%M:%S.%f%z") | strftime("%Y-%m-%dT%H:%M:%SZ")), "end": (.[0] | strptime("%Y-%m-%dT%H:%M:%S.%f%z") | mktime + 3600 | strftime("%Y-%m-%dT%H:%M:%SZ")), "value": .[1] }) | tostring'

Das Plugin muss eine JSON-Struktur mit einer Liste von Zeiträumen und Preisen zurückgeben. Die Datumsfelder müssen in der Form YYYY-MM-DDTHH:MM:SSZ vorliegen, der Preis in der korrekten Währungseinheit (z. B. EUR). evcc arbeitet intern mit 15-Minuten-Intervallen, Plugins können aber auch stündliche Daten liefern, die automatisch umgerechnet werden.

[
{
"start": "2025-01-01T00:00:00Z",
"end": "2025-01-01T00:15:00Z",
"value": 25.0
},
{
"start": "2025-01-01T00:15:00Z",
"end": "2025-01-01T00:30:00Z",
"value": 26.5
},
{
"start": "2025-01-01T00:30:00Z",
"end": "2025-01-01T00:45:00Z",
"value": 24.8
},
{
"start": "2025-01-01T00:45:00Z",
"end": "2025-01-01T01:00:00Z",
"value": 27.2
}
]

Das formula-Feld akzeptiert einen Go-Ausdruck, in dem price, charges, tax und der Zeitstempel ts des Zeitfensters als Variablen zur Verfügung stehen. Die math-Bibliothek und time.Time-Methoden auf ts stehen zur Verfügung. Die Formel wird für den aktuellen Preis und jedes Zeitfenster der Vorhersage ausgeführt.

Preisobergrenze:

charges: 0.22
tax: 0.19
formula: math.Min(0.5, (price + charges) * (1 + tax))

Deckelt das Ergebnis bei 50 ct/kWh.

Keine Einspeisevergütung bei negativen Börsenpreisen (deutsche PV-Anlagen, Inbetriebnahme nach dem 25. Februar 2025):

formula: factor := 1.0; if price < 0 { factor = 0.0 }; factor * 0.07

Zahlt eine feste Einspeisevergütung von 7 ct/kWh, außer wenn der Börsenstrompreis negativ ist.

Eine benutzerdefinierte Integration für die Externe Begrenzung bindet eine Steuerbox oder ein Energiemanagementsystem an, das nicht durch eine eingebaute Integration abgedeckt ist. Wähle dazu in der Oberfläche unter Konfiguration → Externe Begrenzung die Option Benutzerdefinierte Integration.

Wie das Begrenzungssignal empfangen wird, legst du mit einem von vier Typen fest: relay (einzelner Schaltkontakt), fnn (FNN-Steuerbox mit mehreren Schaltkontakten), eebus (EEBUS-Protokoll) oder custom (dynamische Limitwerte über Plugins). Jedes Signal wird über eine Plugin-Konfiguration ausgelesen (GPIO, MQTT, HTTP, Modbus). Siehe auch die hems-Konfigurationsreferenz.

Die Anbindung über einen einzelnen Schaltkontakt ist die einfachste Lösung. Die Steuerbox aktiviert einen Kontakt, der von deiner evcc-Instanz ausgewertet wird.

AttributTypErforderlichBeschreibung
maxPowerint (W)jaGesamtleistungslimit, das bei aktivem Signal angewendet wird.
limitPluginjaPlugin-Konfiguration zum Auslesen des Schaltkontakts. true/1 = begrenzt, false/0 = normal.
passthroughPluginneinLeitet das Begrenzungssignal an ein externes System weiter.
intervaldurationneinAbfrageintervall für den Schaltkontakt. Standard 10s.

Das Leistungslimit wird dir vom Netzbetreiber mitgeteilt. Bei mehreren steuerbaren Verbrauchseinrichtungen (SteuVE) wird der Gleichzeitigkeitsfaktor berücksichtigt. Du kannst das Limit auch mit folgender Formel selbst berechnen: Gesamtlimit = Anzahl SteuVE × 4,2 kW × Gleichzeitigkeitsfaktor. Details zur Berechnung findest du hier.

Bei Verwendung eines Raspberry Pi kann der GPIO-Pin direkt ausgelesen werden:

type: relay
maxPower: 8400 # Beispiel für 2 SteuVE
limit:
source: gpio
function: read
pin: 17 # GPIO-Pin 17 auslesen
# Rückgabewert: false = nicht begrenzt, true = begrenzt

Schließe den Öffnerkontakt (NC) des Relais zwischen Pin und Masse (GND) an. Ein geöffneter Kontakt oder ein Kabelbruch aktiviert dann die Begrenzung. Weitere Details zum GPIO-Plugin findest du in der Plugin-Dokumentation.

Steuerboxen nach FNN-Standard signalisieren Dimmung und Abregelung über separate Schaltkontakte. Dimmung des Verbrauchs (W4) und Abregelung der Einspeisung (W3, S2, S1) arbeiten unabhängig voneinander. Mindestens eines der Signale w4 oder w3 muss konfiguriert sein.

AttributTypErforderlichBeschreibung
maxDimPowerint (W)ja¹Verbrauchslimit, während das Dimmsignal (W4) aktiv ist.
maxCurtailPowerint (W)ja²Installierte PV-Leistung, Basiswert für die Abregelungsstufen.
w4PluginneinLiest das Dimmsignal. Begrenzt den Verbrauch auf maxDimPower.
w3PluginneinLiest das Abregelungssignal. Begrenzt die Einspeisung auf 0% von maxCurtailPower.
s2PluginneinLiest das Abregelungssignal. Begrenzt die Einspeisung auf 30% von maxCurtailPower.
s1PluginneinLiest das Abregelungssignal. Begrenzt die Einspeisung auf 60% von maxCurtailPower.
intervaldurationneinAbfrageintervall für die Schaltkontakte. Standard 10s.

¹ erforderlich, wenn w4 konfiguriert ist, ² erforderlich, wenn w3 konfiguriert ist.

type: fnn
maxDimPower: 4200 # Verbrauchslimit während Dimmung (in Watt)
maxCurtailPower: 10000 # Installierte PV-Leistung, Basis für Abregelungsstufen (in Watt)
w4:
source: gpio
function: read
pin: 17 # GPIO-Pin 17 auslesen
# Rückgabewert: false = normal, true = aktiv
w3:
source: gpio
function: read
pin: 27
s2:
source: gpio
function: read
pin: 22
s1:
source: gpio
function: read
pin: 23

Verwende bei GPIO den Öffnerkontakt (NC) jedes Relais, damit ein geöffneter Kontakt oder ein Kabelbruch als aktiv erkannt wird. Details findest du beim GPIO-Plugin.

Hier erfolgt die Anbindung digital über das EEBUS-Protokoll. Die Steuerbox kommuniziert direkt mit deiner evcc-Instanz und übermittelt das Leistungslimit automatisch. Steuerbox und evcc müssen einmalig gekoppelt werden.

AttributTypErforderlichBeschreibung
skistringjaSKI (Subject Key Identifier) der Steuerbox.
contractualConsumptionNominalMaxint (W)neinVertragliche maximale Bezugsleistung.
failsafeConsumptionActivePowerLimitint (W)neinFailsafe-Limit für die Bezugsleistung.
productionNominalMaxint (W)neinInstallierte Generatorleistung (Wp).
failsafeProductionActivePowerLimitint (W)neinFailsafe-Limit für die Einspeiseleistung.
failsafeDurationMinimumdurationneinFailsafe-Mindestdauer, z. B. 2h.
passthroughPluginneinLeitet das Begrenzungssignal an ein externes System weiter.
type: eebus
ski: "1234-5678-90AB-CDEF" # SKI der Steuerbox

Diese generische Integration ist für Steuerungssysteme gedacht, die dynamische Limitwerte statt Schaltkontakten liefern. Verbrauchslimit und Abregelung der Einspeisung werden über Plugins ausgelesen und arbeiten unabhängig voneinander. Mindestens eines der Attribute maxConsumptionPower oder curtailedPercent muss konfiguriert sein.

AttributTypErforderlichBeschreibung
maxConsumptionPowerPluginnein¹Liest das Gesamtleistungslimit in W. 0 = kein Limit.
curtailedPercentPluginnein¹Liest die erlaubte Einspeisung in % von productionNominalMax (0 bis 100). 100 = keine Abregelung.
productionNominalMaxint (W)nein²Installierte Generatorleistung (Wp).
intervaldurationneinAbfrageintervall für die Plugins. Standard 10s.

¹ mindestens eines von beiden ist erforderlich, ² erforderlich, wenn curtailedPercent konfiguriert ist.

type: custom
maxConsumptionPower:
source: http
uri: http://steuerbox.local/api/limit
jq: .maxPower # Leistungslimit in Watt, 0 = kein Limit
curtailedPercent:
source: mqtt
topic: hems/curtail/percent # Erlaubte Einspeisung in Prozent, 100 = keine Abregelung
productionNominalMax: 10000 # Installierte Generatorleistung (Wp)

Ein benutzerdefinierter Einspeisebegrenzer begrenzt die Einspeisung der PV-Anlage auf Anforderung des Netzbetreibers (§ 9 EEG), wenn der Wechselrichter nicht über seine Zähler-Konfiguration abgeregelt werden kann. Wähle dazu in der Oberfläche unter Konfiguration → Netzanschluss → Einspeisebegrenzung hinzufügen die Option Benutzerdefiniertes Gerät. Siehe auch die curtailers-Konfigurationsreferenz und Externe Begrenzung.

Das Gerät erhält die erlaubte Einspeisung in Prozent der installierten Generatorleistung und muss sie am Wechselrichter umsetzen. 100 bedeutet kein Limit.

AttributTypErforderlichBeschreibung
curtailPluginjaSetzt das Einspeiselimit in % der Nennleistung der Erzeugung (0 bis 100). Muss Schreibzugriff unterstützen.
curtailedPluginjaLiest das aktuelle Einspeiselimit in %. Kann das Gerät es nicht liefern, wird das error-Plugin verwendet (siehe Beispiel).
curtail:
source: http
uri: http://inverter.local/api/limit?percent={{ .curtail }}
method: POST
curtailed:
source: http
uri: http://inverter.local/api/limit
jq: .percent

Ein benutzerdefinierter Benachrichtigungsdienst verarbeitet Benachrichtigungen über ein beliebiges Plugin mit Schreibzugriff, z. B. ein Shell-Skript, einen HTTP-Aufruf oder eine MQTT-Nachricht. Wähle dazu in der Oberfläche unter Konfiguration → Benachrichtigungen → Dienste die Option Benutzerdefinierter Dienst.

Die Nachricht wird dem Plugin im Parameter ${send} (bzw. als Template-Parameter {{.send}}) bereitgestellt.

AttributTypErforderlichBeschreibung
sendPluginjaPlugin, das für jede Nachricht aufgerufen wird. Muss Schreibzugriff unterstützen.
encodingstringneinFormat des Werts in ${send}. Siehe unten.

Die möglichen Werte für encoding sind:

EncodingInhalt von ${send}
jsonJSON-Objekt { "msg": msg, "title": title }. Das Feld title wird nur hinzugefügt, wenn es für das Ereignis definiert ist.
csvtitle und msg als kommagetrennte Liste
tsvWie csv, jedoch mit Tabulator als Trennzeichen
titleNur der Titel
(nicht gesetzt)Nur die Nachricht (msg)
messaging:
events:
connect:
title: "${vehicleTitle} verbunden"
msg: "${vehicleTitle} wurde verbunden (Lademodus: ${mode})."
services:
- type: custom
encoding: json
send:
# Plugin-Typ
source: script
# Plugin-spezifische Konfiguration;
# {{.send}} enthält die JSON-Nachricht
cmd: /usr/local/bin/evcc_message "{{.send}}"

In diesem Beispiel wird ein Shell-Skript (cmd) mit dem Argument {"title": "...", "msg": "..."} aufgerufen.