messaging
evcc unterstützt die Übermittlung von Status-Informationen über Telegram, PushOver, ntfy und viele weitere Dienste über das System shoutrrr. Die Konfiguration ermöglich es eigene Nachrichten für bestimmte Ereignisse und Systeme zu definieren.
messaging definiert in Subelementen was und wie es verschickt wird. Unter events müssen die Ereignisse definiert werden, für welche Nachrichten verschickt werden sollen. Und unter services die Dienste über welche die Nachrichten verschickt werden sollen.
Beispiel:
messaging:
events: ...
services: ...
events
events definiert den Nachrichteninhalt für verschiedene vordefinierte Ereignisse.
Die verfügbaren Ereignisse sind:
start: Laden hat begonnenstop: Laden wurde beendetconnect: Fahrzeug angeschlossendisconnect: Fahrzeug entferntsoc: Fahrzeug Akku-Ladestandsänderungguest: Unbekanntes Fahrzeug erkanntasleep: Fahrzeug lädt nicht trotz Ladefreigabe
Beispiel:
start: # charge start event
title: Charge started
msg: Started charging in "${mode}" mode
title
title definiert den Text für den Nachrichtentitel.
Beispiel:
title: Charge started
msg
msg definiert den Text für den Nachrichteninhalt.
Im Text können verschiedene Variablen zur Anzeige von evcc Informationen verwendet werden.
Es gibt zwei Schreibweisen:
- Einfach:
${<Variablenname>}— z. B.${vehicleTitle}, mit optionaler Formatierung wie${pvPower:%.1fk} - Go-Template:
{{.variablenname}}— ermöglicht Berechnungen, Bedingungen und sprig-Funktionen
Bei Nutzung der Variablen ist auf die korrekte Schreibweise (groß/klein) zu achten!
Verfügbare Variablen
Die verfügbaren Variablen entsprechen den Daten der evcc REST API unter http://evcc.local:7070/api/state.
Beim Versand einer Nachricht werden die Daten des jeweiligen Ladepunkts und die globalen Daten in einer flachen Struktur zusammengeführt.
D. h. sowohl globale Werte (z. B. pvPower, grid.Power) als auch ladepunktspezifische Werte (z. B. mode, chargedEnergy, vehicleTitle) sind direkt verfügbar.
Eine Auswahl nützlicher Variablen findest du am Ende dieser Seite.
Beispiel (einfache Syntax):
messaging:
events:
start:
title: Laden gestartet
msg: >-
${title} lädt ${vehicleTitle} im Modus ${mode}
stop:
title: Laden beendet
msg: >-
${title}: ${vehicleTitle} geladen mit ${chargedEnergy:%.1fk}kWh in ${chargeDuration}.
Sonnenanteil: ${sessionSolarPercentage:%.0f}%
connect:
title: Fahrzeug verbunden
msg: >-
${vehicleTitle} verbunden an ${title} bei ${pvPower:%.1fk}kW PV
disconnect:
title: Fahrzeug getrennt
msg: >-
${vehicleTitle} getrennt von ${title} nach ${connectedDuration}
Zum Rendern der msg-Texte kann auch die go-Text-Template-Syntax in Kombination mit sprig-Funktionen genutzt werden.
Damit sind Berechnungen (z. B. Umrechnung W → kW) und Bedingungen möglich.
messaging:
events:
start:
title: "{{.vehicleTitle}}: Laden gestartet"
msg: |
{{.title}} lädt {{.vehicleTitle}} im Modus {{ toString .mode | upper }}.
PV: {{round (divf .pvPower 1000) 1 }} kW
Netz: {{round (divf .grid.Power 1000) 1 }} kW
{{if .battery}}Batterie: {{round (divf .battery.Power 1000) 1 }} kW ({{.battery.Soc }} %){{end}}
stop:
title: "{{.vehicleTitle}}: Laden beendet"
msg: |
{{.title}}: {{round (divf .chargedEnergy 1000) 1 }} kWh in {{.chargeDuration}}.
Sonnenanteil: {{round .sessionSolarPercentage 0 }}%
{{- if .sessionPrice}}
Kosten: {{round .sessionPrice 2 }} {{.currency}} ({{round .sessionPricePerKWh 2 }} {{.currency}}/kWh)
{{- end}}
connect:
title: "{{.vehicleTitle}} verbunden"
msg: |
{{.vehicleTitle}} verbunden an {{.title}}.
Ladestand: {{.vehicleSoc }}% ({{.vehicleRange }} km)
PV: {{round (divf .pvPower 1000) 1 }} kW
disconnect:
title: "{{.vehicleTitle}} getrennt"
msg: |
{{.vehicleTitle}} getrennt von {{.title}} nach {{.connectedDuration}}.
services
services definiert eine Liste von zu verwendeten Nachrichtendiensten.
Beispiel:
services:
- type: pushover
app: 12345
recipients:
- 234567
Im folgenden werden nun alle erforderlichen Parameter erklärt.
type
type definiert den Nachrichtendienst der verwendet werden soll.
Mögliche Werte:
pushover: Pushover. SiehepushoverDefinitiontelegram: Telegram Messenger. SiehetelegramDefinitionemail: Email. SieheemailDefinitionshout: shoutrrr. SieheshoutDefinitionntfy: ntfy. SiehentfyDefinitioncustom: Ermöglicht die Nutzung von allen Plugins, die einen Schreibzugriff erlauben. SiehecustomDefinition.
Unterstützte Dienste
pushover
pushover verwendet den Dienst Pushover. Details siehe Pushover API.
Beispiel:
- type: pushover
app: # API Token/Key der in Pushover angelegten Aplication
recipients:
- # Liste der Empfänger: entweder User Key or Delivery Group. In Pushover angelegte Gruppen können auf bestimmte Geräte eingeschränkt werden.
devices:
- Johns phone
- Mias ticker
telegram
telegram verwendet den Dienst Telegram Messenger.
Beispiel:
- type: telegram
token: # bot id : jede laufende Instanz von evcc benötigt eine eigene bot id
chats:
- # Liste von Chat oder Group IDs. Jeder Eintrag benötigt ein - Zeichen am Anfang und muss in einer eigenen Zeile sein.
- -GroupID #Achtung Group IDs in Telegram haben ein -Zeichen
- ChatID
email
email verwendet den Dienst shoutrrr.
Hier wird der Parameter uri mit dem Wert smtp://<user>:<password>@<host>:<port>/?fromAddress=<from>&toAddresses=<to> erwartet. Die Platzhalter sind wie folgt zu ersetzen:
<host>: Adresse (hostname oder IP Adresse) des Email Servers<port>: Port Adresse des Email Servers<user>: Benutzername für den Email Server<password>: Passwort des Benutzers<from>: Email Adresse des Absenders<to>: Email Adresse des Empfängers
Beispiel:
- type: email
uri: smtp://benutzername:passwort@emailserver.domäne:1234/?fromAddress=absender@mail.com&toAddresses=empfänger@mail.com
shout
shout verwendet den Dienst shoutrrr und unterstützt alle seine Dienste.
Die Konfiguration wird im folgenden Beispiel anhand von Gotify gezeigt und funktioniert bei den anderen Möglichkeiten über den gleichen Weg.
Beispiel:
- type: shout
uri: gotify://gotify.example.com:443/AzyoeNS.D4iJLVa/?priority=1
Weitere Informationen sind in der shoutrrr Dokumentation zu den unterstützten Diensten zu finden.
ntfy
ntfy verwendet den Dienst ntfy.
Hier wird der Parameter uri mit dem Wert https://<host>/<topics> erwartet. Die Platzhalter sind wie folgt zu ersetzen:
<host>: Adresse (hostname oder IP Adresse) des ntfy Servers<topics>: Abonniertes Thema oder abonnierte Themen
Optionale Parameter sind priority, tags und authtoken. Alle Parameter werden als Strings übergeben.
Beispiel:
- type: ntfy
uri: https://ntfy.sh/evcctestalerts
priority: default
tags: electric_plug,blue_car
authtoken: 61RgoYLOsi8S318j6ycU2qEsleC2p9njoyw4890121412JloH7rMPaqQwi5KWTit
Weitere Informationen sind in der ntfy Dokumentation zu finden.
custom
Der Typ custom ermöglicht es, beliebige Plugins für die Verarbeitung von Nachrichten zu verwenden. Das Plugin muss den Schreibmodus unterstützen. Die Nachricht selbst wird in der Plugin Konfiguration mit dem Parameter ${send} (bzw. als Template Parameter {{.send}}) bereitgestellt.
Mögliche Werte:
-
send: Definiert das zu verwendende Plugin mit dem Feldsourceund plugin-spezifische Parameter. Siehe das Beispiel weiter unten. -
encoding: Definiert das Format, in dem der Wert für${send}bereitgestellt wird. Die möglichen Werte sind:json: Der Wert wird als JSON-Objekt im Format{ "msg": msg, "title": title }bereitgestellt. Das Feldtitlewird nur hinzugefügt, wenn es im Abschnitteventsdefiniert ist.csv: Die Feldertitleundmsgwerden als kommaseparierte Liste bereitgestellt (title, msg)tsv: Ähnlich wiecsv, jedoch mit Tabulator als Trennzeichen.title: Nur der Titel (title) wird bereitgestellt.
Wenn
encodingnicht definiert ist, wird die Nachrichtmsgohne Titel direkt verwendet. Dabei wird nur die inmsgdefinierte Nachricht ohne Titel in${send}verwendet.
Beispiel:
messaging:
events:
connect:
title: "Evcc: ${vehicleName} hat sich verbunden"
msg: "${vehiclTitle} 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-Script (cmd) mit dem Argument {"title": "...", "msg": "...."} aufgerufen.
Variablen-Referenz
Die folgende Liste zeigt eine Auswahl häufig genutzter Variablen.
Die vollständige Liste aller verfügbaren Felder findest du in der API-Antwort unter http://evcc.local:7070/api/state.
Ladepunkt (loadpoint)
Die Ladepunkt-Daten stammen aus dem loadpoints-Array der API-Antwort, werden aber in der Nachricht direkt (ohne Präfix) bereitgestellt.
title- Name des Ladepunktsloadpoint- Nummer des Ladepunkts 1, 2, ...mode- Lademodus:off/now/minpv/pvcharging- Ladevorgang aktivenabled- Ladefreigabe erteiltconnected- Fahrzeug angeschlossenchargedEnergy- Geladene Energie der Sitzung in WhchargeDuration- LadedauerchargePower- Aktuelle Ladeleistung in WconnectedDuration- AnschlussdauerchargeRemainingDuration- Restladezeit bis ZielchargeRemainingEnergy- Restenergie bis Ziel in WhphasesActive- Aktuell aktive PhasenvehicleTitle- Name des FahrzeugsvehicleName- Technischer Name des FahrzeugsvehicleSoc- Fahrzeug-Ladestand in %vehicleRange- Fahrzeug-Reichweite in kmvehicleOdometer- Kilometerstand in kmsessionSolarPercentage- Sonnenanteil der Ladesitzung in %sessionPrice- Kosten der LadesitzungsessionPricePerKWh- Durchschnittspreis pro kWhsessionCo2PerKWh- Durchschnittliche CO₂-Emissionen pro kWhplanActive- Ladeplan aktivsmartCostActive- Günstiges Laden aktiv
Global (site)
Die globalen Daten stammen aus der obersten Ebene der API-Antwort.
siteTitle- Name der evcc-InstanzpvPower- Aktuelle PV-Leistung in WhomePower- Aktueller Hausverbrauch in Wgrid.Power- Netzbezug (+) / Einspeisung (-) in Wbattery.Power- Batterieleistung in Wbattery.Soc- Batterie-Ladestand in %currency- Tarif-WährungtariffGrid- Aktueller Netzpreis pro kWhtariffFeedIn- Einspeisevergütung pro kWhtariffCo2- Aktuelle CO₂-Intensitätstatistics- Ladestatistiken, verfügbar für die Zeiträume30d,365d,thisYearundtotalstatistics.<zeitraum>.avgCo2- Durchschnittliche CO₂-Emissionen pro kWhstatistics.<zeitraum>.avgPrice- Durchschnittspreis pro kWhstatistics.<zeitraum>.chargedKWh- Geladene Energie in kWhstatistics.<zeitraum>.solarPercentage- Sonnenanteil in %