|
Hallo zusammen, nachdem evcc bei mir im Zusammenspiel mit PV / Batterie / Elektrofahrzeug gut läuft, plane ich, die vorhandene Wärmepumpe einzubinden. Diese hat eine Modbus/TCP-Schnittstelle und bietet eine Betriebsart für die Verwertung von Überschussenergie an. Dazu muss der Wärmepumpe in einem Modbus-Parameter mitgeteilt werden, auf welche Soll-Aufnahmeleistung zu regeln ist. Die Wärmepumpe regelt dann mit der Verdichterdrehzahl soweit nach oben bzw. nach unten, bis der Sollwert erreicht wird. Selbstverständlich wird dieses Verfahren wegen einer gewissen Trägheit der Wärmepumpe (zB Verstreichen einer Vorregelzeit) nicht zu einer exakten Leistungsaufnahme führen. Jedenfalls hoffe ich, dass aufgrund des vorhandenen beschreibbaren Parameters der Soll-Aufnahmeleistung eine Einbindung der Wärmepumpe als zweiter Charger in evcc neben der bereits eingerichteten Wallbox möglich sein sollte. Bislang habe ich evcc nur anhand vorhandener Templates konfiguriert und die Parameter entsprechend versorgt. Dadurch bin ich mir über die genauen Schritte bei der Erzeugung eines Charger mit Modbus-Parameter nicht ganz im Klaren. Gibt es vielleicht eine vorhandene Definition, die diesen Anforderungen schon sehr nahe kommt und die ich abändern könnte? Viele Grüße |
Replies: 5 comments 23 replies
|
Was genau für eine WP ist es denn? |
Das ist ja sexy! Würde super zu #6301 passen. |
|
Anhand der Hinweise von @premultiply in #7313 konnte ich eine funktionstüchtige Konfiguration erstellen, die unter Einbeziehung von Shell-Scripten funktioniert. Extrakt aus der evcc.yaml: DIe obige Definition eines charger erfordert noch externe Scripte, die unter /home/evccsvr installiert sind. Das folgende Script get_heatpump_enabled.sh gibt den Status der Wärmepumpe zurück, ob sie durch evcc zur Leistungsaufnahme aktiviert worden ist oder nicht. Dieser Zustand wird hier nicht direkt von der Wärmepumpe abgefragt, sondern entsprecht dem Zustand, ob zuvor eine Leistungsanforderung an die Wärmepumpe gestellt worden ist oder nicht. Dieser Zustand wird in einer Textdatei lokal gemerkt und wird vom Script set_heatpump_enable.sh geschrieben. get_heatpump_enabled.sh: Das folgende Script get_heatpump_status.sh gibt den Status der Wärmepumpe in der Parametrierung eines Wallbox ChargingStatus und unterscheidet dabei die Zustände B (PV-Anforderung nicht aktiv), C (PV-Anforderung aktiv), F (Fehler). Die Wärmepumpe kann PV-Überschuss durch Vorgabe einer Aufnahmeleistung in Watt verarbeiten. Hier wird von der Wärmepumpe der aktuell anliegende Vorgabewert der Aufnahmeleistung abgefragt und in Abhängigkeit des Ergebnisses der Abfrage der Zustand entsprechend gesetzt. Bei einer angebotenen Aufnahmeleistung von 0 Watt wird B ausgegeben, bei einer Aufnahmeleistung ungleich 0 wird C ausgegeben, und wenn die Kommunikation zur Wärmepumpe gestört ist, wird F ausgegeben. get_heatpump_status.sh: Das Script set_heatpump_enable.sh wird aufgerufen, wenn evcc die Wärmepumpe zwecks Leistungsaufnahme aktiveren oder deaktivieren möchte. Dabei gilt es zu berücksichtigen, dass evcc zum Zeitpunkt des Aktivierens dernmaximal zur Verfügung stehenden Strom (maxcurrent) nicht ausgibt. Der maximal zur Verfügung stehende Strom wird von evcc unabhängig von der Aktivierung zu anderen Zeitpunkten berechnet. Nun kann man aber nicht das Aktivieren der Wärmepumpe einzig und allein vom Vorliegen eines maxcurrent ungleich null abhängig machen, da maxcurrent auch dann ausgerechnet wird, wenn keine Leistung verbraucht werden soll. Schließlich sind auch andere Bedingungen einzuhalten. Deshalb muss maxcurrent "gepuffert" werden, wenn die Wärmepumpe wie in meinem Fall das Schreiben eines Vorgabewertes der Leistung sofort als eine Aktivierung versteht. Deshalb liest das vorliegende Script den gepufferten Wert aus einer Textdatei und schreibt diesen in die Wärmepumpe, sobald evcc die Wärmepumpe aktivieren will. set_heatpump_enable.sh: Das Script set_heatpump_maxcurrent.sh dient zum Puffern des aktuell berechneten maximalen Stroms, den die Wärmepumpe verbrauchen darf, sofern evcc die Wärmepumpe aktiviert hat. Wenn man eine Wärmepumpe hat, die über separate Register verfügt, um einen Vorgabewert einer Leistungsaufnahme zu schreiben und ein separates Register, um die Leistungsaufnahme zu starten oder zu beenden, kann man den Vorgabewert sofort in die Wärmepumpe schreiben. Wenn man jedoch wie in meinem Fall eine Wärmepumpe hat, die den Vorgabewert sofort aktiv umsetzt, muss dieser Wert außerhalb der Wärmepumpe gepuffert werden, was das Script hier macht. set_heatpump_maxcurrent.sh: Das Script set_heatpump_soc.sh ermöglicht es, den über die evcc GUI eingestellten Wert von targetSoc in die Wärmepumpe zu schreiben. Die obige evcc.yaml definiert den SOC der Wärmepumpe (dargestellt von 0% bis 100%) als Soll-Brauchwassertemperatur in °C. Meine Wärmepumpe erlaubt es, für das Verwerten von PV-Überschuss eine erhöhte Soll-Brauchwassertemperatur zu konfigurieren. evcc stellt die Wärmepumpe als vehicle mit einem einstellbaren Ziel-Ladezustand (targetSoc) dar. Bewegt man den Schieberegler in der GUI, soll der gewünschte Ziel-Ladezustand die gewünschte Soll-Brauchwassertemperatur in der Wärmepumpe beeinflussen. Das Script liest den aktuellen Wert von evcc aus und schreibt ihn in die Wärmepumpe, wobei Grenzwerte geprüft werden, damit nicht unbrauchbare Werte geschrieben werden. Das Script wird aktuell nur dann getriggert, wenn eine PV-Anforderung aktiviert oder deaktiviert wird, da es aus dem Script set_heatpump_enable.sh angesprochen wird. Das ist aber nicht nachteilig, da die aktuell in der evcc GUI eingestellte Temperatur (targetSoc) ohnehin erst bei einer Aktivierung der Wärmepumpe relevant ist. set_heatpump_soc.sh: Damit die Scripte auch ablauffähig sind, werden noch folgende Anpassungen benötigt (noch ohne Sicherheitsaspekte zu berücksichtigen): |
|
Sehr interessanter Ansatz! Würde es nicht auch schon reichen, einfach nur die von evcc ermittelte Einspeiseleistung via ModbusTCP in das entsprechende Register der Wärmepumpe zu schreiben? Genau diesen Gedanken verfolge ich derzeit, um meiner Lambda Wärmepumpe (Installation kommende KW) mitzuteilen, ob bzw. wie viel Überschuss gerade da ist. Alles weitere würde die Lambda dann eigenständig regeln. Allerdings lässt sich diese nur über "write multiple registers" beschreiben. Anhand der evcc-modbus-Doku lässt sich für mich bisher aber noch nicht erkennen, ob das überhaupt durch evcc möglich wäre. Vielleicht kann das jemand beantworten. |
|
Hallo an alle. Ich versuche gerade dieses gesamt im Homeassistant umzusetzen. Nur dass ich nicht mit Modbus arbeiten kann sondern per MQTT die daten abholen muss. @herrep es ist ja gesamt schon etwas älter. Gibt es eine einfache Erklärung, wie es eventuell nur mit der GUI eingerichtet werden kann? Die .yaml habe ich verstanden, aber die Scripte sind mir doch ein wenig zu hoch. Vllt kann mir hier einer etwas helfen. Eventuell ist ja auch mit der aktuellen EVCC-Version so gar nicht mehr nötig. Wie könnte ich nun weiter vorgehen? Welche Datenpunkte werden dringend benötigt? Über ein bisschen Hilfe wäre ich echt dankbar. |
Anhand der Hinweise von @premultiply in #7313 konnte ich eine funktionstüchtige Konfiguration erstellen, die unter Einbeziehung von Shell-Scripten funktioniert.
Extrakt aus der evcc.yaml: