Du willst deine Viessmann PV Anlage endlich in Homeassistant eingebunden haben und keine langsame Cloudanbindung benutzen? Du benötigst hier lediglich folgende Bauteile:
Solltet ihr euren Pi dann noch direkt per Lan anstecken wollen (was ich empfehle wenn es möglich ist) dann benötigt ihr hier noch ein zusätzliches Netzwerkkabel.
Machen wir uns nun an die Verkabelung.


Raspberry Pi Installation
Als nächstes setzen wir unsere SD Karte für den Pi auf. Ich nutze dafür den Raspberry Pi Imager.
Wählt eueren Pi aus und das Betriebssystem Raspberry Pi OS Lite.

Jetzt noch die Einstellungen bearbeiten…

Füllt hier bitte einen Benutzernamen und ggf. das Wifi aus.
Benutzername: pi
Passwort: raspberry
WICHTIG: unter Dienste SSH aktivieren
Nachdem die SD fertig ist ab in den Pi und diesen booten lassen.
Jetzt müsst ihr hier die IP Adresse raus finden und dann können wir mit der Installation beginnen. Die IP solltet ihr in eurem Router finden oder ihr schließt beim ersten Boot eine Tastatur und einen Monitor an und gebt sobald die Befehlszeile kommt:
ifconfig
ein und bekommt dann die IP Adresse angezeigt.

Jetzt könnt ihr euch mit einem SSH Tool (Putty / Mobaxterm) auf den Pi verbinden.

jetzt noch den Zugriff mit yes bestätigen:

CAN Adapter einrichten
Ich werde euch hier die Befehle Stück für Stück einfügen die ihr einfach nur abschicken müsst.
Nach Updates suchen:
sudo apt update
Updates installieren:
sudo apt upgrade -y
Überprüfen ob can0 erkannt wird
ifconfig -a
Hier solltet ihr etwa folgendes stehen haben:

CAN Interface starten
sudo ip link set can0 up type can bitrate 250000
CAN Utils installieren
sudo apt-get install can-utils
CAN Verbindung testen
candump can0
Hier sollten nun die CAN „Mitteilungen“ eintrudeln.

Diesen Vorgang einfach mit STRG + C stoppen.
CAN Status abfragen
ip -details link show can0
hier sollte nun soetwas kommen:

Lasst euch nicht irritieren ERROR-ACTIVE ist absolut korrekt.
Wir wollen diese Verbindung mit jedem Systemneustart wieder starten und dafür geben wir folgende Befehle ein:
sudo systemctl start systemd-networkd
sudo systemctl enable systemd-networkd
sudo nano /etc/systemd/network/80-can.network
Jetzt müssen wir in diese Datei folgendes einfügen:
[Match] Name=can0 [CAN] BitRate=250K RestartSec=100ms
Mit STRG + X können wir diese Datei schließen und werden aufgefordert mit Y den Speichervorgang zu bestätigen.
Jetzt noch den Dienst neustarten:
sudo systemctl restart systemd-networkd
Perfekt somit haben wir das CAN erfolgreich aktiviert und können mit der Installation von Open3e weitermachen.
Installation Open3e
Wir benutzen hier das Github Projekt Open3e – hier auch nochmal vielen herzlichen Dank an die Contributors des Projekts!!!
Es gibt hier auch eine deutsche Anleitung die euch schon mal weiterhelfen kann aber ich musste noch viele Punkte selbst herausfinden.
Installation Pythonenv
sudo apt install python3-virtualenv
Verzeichnis erstellen
mkdir ~/open3e && cd ~/open3e
Virtuelle Umgebung erstellen
python3 -m venv .venv && source .venv/bin/activate
Git installieren
sudo apt install git
Open3e installieren
pip install git+https://github.com/open3e/open3e.git
Erster Communications Test
open3e -c can0 -v -r 256
Hier sollte nun etwa folgendes stehen:

Jetzt führen wir einen Scan des Systems aus dieser hat bei uns wirklich sehr sehr lange gedauert also macht euch was zu essen oder holt euch einen Kaffee
Ins richtige Verzeichnis springen:
cd ~/open3e && source .venv/bin/activate
Scan starten:
open3e_depictSystem -c can0
Wenn der Scan fertig ist erstellen wir uns eine „Config File“ die wir nutzen um Open3e zu sagen welche Datenpunkte er uns wohin schicken soll.
nano args.txt
hier kannst du nun den Inhalt generieren und einfügen und anpassen:
Generierter Code:
Jetzt wieder mit STRG + X und Y schließen und speichern.
Als nächstes erstellen wir einen Service der euch bei einem Reboot immer diesen Dienst startet:
sudo nano /etc/systemd/system/open3e.service
hier tragen wir folgendes ein:
[Unit] Description=Open3e MQTT Bridge After=network.target [Service] WorkingDirectory=/home/pi/open3e ExecStart=/home/pi/open3e/.venv/bin/open3e @/home/pi/open3e/args.txt Restart=always User=pi [Install] WantedBy=multi-user.target
Speichern und Schließen mit STRG + X und Y
Jetzt aktivieren wir den Service und starten ihn:
sudo systemctl daemon-reexec sudo systemctl daemon-reload sudo systemctl enable open3e sudo systemctl start open3e
Status prüfen
sudo systemctl status open3e
Hier sollte nun etwa folgendes stehen:

Perfekt du hast es fast geschafft!!! Deine Daten sollten nun sauber an deinen MQTT Broker übermittelt werden!
Homeassistant Sensoren anlegen
Jetzt wollen wir diese Werte noch in unseren Homeassistant bringen und dafür könnt ihr einfach eine kleine YAML anlegen.
Wir starten in der configuration.yaml und fügen dort folgendes ein:
mqtt: !include mqtt.yaml
Jetzt erstellen wir uns eine mqtt.yaml im selben Verzeichnis.
Dort fügen wir nun diesen Code ein:
sensor: - name: "Batterie Power" state_topic: "open3e/VitochargeVX3_680_1836_ElectricalEnergyStorageCurrentPower" unit_of_measurement: "W" device_class: power state_class: measurement unique_id: vx3_battery_charge_power device: identifiers: ["vitocharge_vx3"] name: "Vitocharge VX3" manufacturer: "Viessmann" model: "Vitocharge VX3" - name: "Batterie Strom" state_topic: "open3e/VitochargeVX3_680_1837_ElectricalEnergyStorageCurrent/Current" unit_of_measurement: "A" device_class: current state_class: measurement unique_id: vx3_battery_current device: identifiers: ["vitocharge_vx3"] name: "Vitocharge VX3" manufacturer: "Viessmann" model: "Vitocharge VX3" - name: "Batterie Spannung" state_topic: "open3e/VitochargeVX3_680_1838_ElectricalEnergyStorageVoltage" unit_of_measurement: "V" device_class: voltage state_class: measurement unique_id: vx3_battery_voltage device: identifiers: ["vitocharge_vx3"] name: "Vitocharge VX3" manufacturer: "Viessmann" model: "Vitocharge VX3" - name: "Batterie SoC" state_topic: "open3e/VitochargeVX3_68F_1664_ElectricalEnergyStorageStateOfCharge" unit_of_measurement: "%" device_class: battery state_class: measurement unique_id: vx3_battery_soc device: identifiers: ["vitocharge_vx3"] name: "Vitocharge VX3" manufacturer: "Viessmann" model: "Vitocharge VX3" - name: "Grid Power" state_topic: "open3e/VitochargeVX3_680_1603_PointOfCommonCouplingPower/ActivePower" unit_of_measurement: "W" device_class: power state_class: measurement unique_id: vx3_house_power device: identifiers: ["vitocharge_vx3"] name: "Vitocharge VX3" manufacturer: "Viessmann" model: "Vitocharge VX3" - name: "PV Power Gesamtleistung" state_topic: "open3e/VitochargeVX3_680_1690_ElectricalEnergySystemPhotovoltaicStatus/ActivePower cumulated" unit_of_measurement: "W" device_class: power state_class: measurement unique_id: vx3_pv_total_power device: identifiers: ["vitocharge_vx3"] name: "Vitocharge VX3" manufacturer: "Viessmann" model: "Vitocharge VX3" - name: "PV String 1 Power" state_topic: "open3e/VitochargeVX3_680_1831_PhotovoltaicCurrentStringPower/String1" unit_of_measurement: "W" device_class: power state_class: measurement unique_id: vx3_pv_string1_power device: identifiers: ["vitocharge_vx3"] name: "Vitocharge VX3" manufacturer: "Viessmann" model: "Vitocharge VX3" - name: "PV String 2 Power" state_topic: "open3e/VitochargeVX3_680_1831_PhotovoltaicCurrentStringPower/String2" unit_of_measurement: "W" device_class: power state_class: measurement unique_id: vx3_pv_string2_power device: identifiers: ["vitocharge_vx3"] name: "Vitocharge VX3" manufacturer: "Viessmann" model: "Vitocharge VX3" - name: "PV String 3 Power" state_topic: "open3e/VitochargeVX3_680_1831_PhotovoltaicCurrentStringPower/String3" unit_of_measurement: "W" device_class: power state_class: measurement unique_id: vx3_pv_string3_power device: identifiers: ["vitocharge_vx3"] name: "Vitocharge VX3" manufacturer: "Viessmann" model: "Vitocharge VX3" - name: "PV String 1 Spannung" state_topic: "open3e/VitochargeVX3_680_1833_PhotovoltaicStringVoltage/String1" unit_of_measurement: "V" device_class: voltage state_class: measurement unique_id: vx3_pv_string1_voltage device: identifiers: ["vitocharge_vx3"] name: "Vitocharge VX3" manufacturer: "Viessmann" model: "Vitocharge VX3" - name: "PV String 2 Spannung" state_topic: "open3e/VitochargeVX3_680_1833_PhotovoltaicStringVoltage/String2" unit_of_measurement: "V" device_class: voltage state_class: measurement unique_id: vx3_pv_string2_voltage device: identifiers: ["vitocharge_vx3"] name: "Vitocharge VX3" manufacturer: "Viessmann" model: "Vitocharge VX3" - name: "PV String 3 Spannung" state_topic: "open3e/VitochargeVX3_680_1833_PhotovoltaicStringVoltage/String3" unit_of_measurement: "V" device_class: voltage state_class: measurement unique_id: vx3_pv_string3_voltage device: identifiers: ["vitocharge_vx3"] name: "Vitocharge VX3" manufacturer: "Viessmann" model: "Vitocharge VX3"
Einmal Homeassistant neustarten und die MQTT Integration überprüfen.
Hier sollte nun der Vitocharge VX3 ersichtlich sein:

Jetzt legen wir uns noch ein paar Helfer und Sensoren an die uns das Leben einfacher machen und alle notwendigen Daten bringen die wir für unser Energy Dashboard benötigen!
Hierfür gehen wir unter Einstellungen – Geräte & Dienste auf den Helfer TAB

Dann können wir unten auf Helfer erstellen klicken. Ich werde euch jetzt hier alle Muster für die jeweiligen Sensoren hinterlegen.
Template Sensoren:


Batterie Entladung
Name: Batterie Entladung Power
Template:
{% set val = states('sensor.batterie_ladeleistung') | float(0) %} {{ val if val > 0 else 0 }}
Maßeinheit: W
Geräteklasse: Leistung
Gerät: Vitocharge VX3
Batterie Ladung
Name: Batterie Ladung Power
Template:
{% set val = states('sensor.batterie_ladeleistung') | float(0) %} {{ (val * -1) if val < 0 else 0 }}
Maßeinheit: W
Geräteklasse: Leistung
Gerät: Vitocharge VX3
Grid Einspeisung
Name: Grid Einspeisung Power
Template:
{% set val = states('sensor.hausverbrauch_netzanschlusspunkt') | float(0) %} {{ (val * -1) if val < 0 else 0 }}
Maßeinheit: W
Geräteklasse: Leistung
Gerät: Vitocharge VX3
Grid Netzbezug
Name: Grid Netzbezug Power
Template:
{% set val = states('sensor.hausverbrauch_netzanschlusspunkt') | float(0) %} {{ val if val > 0 else 0 }}
Maßeinheit: W
Geräteklasse: Leistung
Gerät: Vitocharge VX3
Integralsensoren
jetzt machen wir uns noch die Sensoren fürs Energy Dashboard

Batterie Entladung Energy
Name: Batterie Entladung Energy
Metrisches Präfix: k
Zeiteinheit: Stunden
Eingangssensor: sensor.batterie_entladung_power
Integrationsmethode: Linke Riemannsche Summe
Genauigkeit: 2
Batterie Ladung Energy
Name: Batterie Ladung Energy
Metrisches Präfix: k
Zeiteinheit: Stunden
Eingangssensor: sensor.batterie_ladung_power
Integrationsmethode: Linke Riemannsche Summe
Genauigkeit: 2
Grid Einspeisung Energy
Name: Grid Einspeisung Energy
Metrisches Präfix: k
Zeiteinheit: Stunden
Eingangssensor: sensor.grid_einspeisung_power
Integrationsmethode: Linke Riemannsche Summe
Genauigkeit: 2
Grid Netzbezug Energy
Name: Grid Netzbezug Energy
Metrisches Präfix: k
Zeiteinheit: Stunden
Eingangssensor: sensor.grid_netzbezug_power
Integrationsmethode: Linke Riemannsche Summe
Genauigkeit: 2
PV Energy Gesamtleistung
Name: PV Energy Gesamtleistung
Metrisches Präfix: k
Zeiteinheit: Stunden
Eingangssensor: sensor.pv_gesamtleistung
Integrationsmethode: Linke Riemannsche Summe
Genauigkeit: 2
Kostensensoren
jetzt machen wir uns noch die Kostensensoren fürs Energy Dashboard. Sobald sich euer Strompreis ändert könnt ihr diesen dann einfach abändern und euer Energy Dashboard passt ab diesem Moment dann eure Berechnung für die Zukunft an. Die bestehenden Werte bleiben natürlich erhalten.

Strompreis
Name: Strompreis
Maximalwert: 1
Anzeigemodus: Eingabefeld
Schrittweite: 0,0001
Maßeinheit: EUR /kWh
Einspeisevergütung
Name: Strompreis
Maximalwert: 1
Anzeigemodus: Eingabefeld
Schrittweite: 0,0001
Maßeinheit: EUR /kWh
Einrichtung Energy Dashboard
jetzt fügt ihr hier noch wie folgt eure Sensoren ein:

Beim Netzbezug und Netzeinspeisung bitte noch die Kosten Sensoren hinterlegen:

Falls euch dieses Tutorial weitergeholfen hat würde ich mich riesig über ein Abo, Like und Kommentar unter dem Youtube Video dazu freuen.
Solltest du noch ein Dankeschön da lassen wollen kannst du das gerne unter dem Menüpunkt „Spenden“ tun – damit unterstützt du das gesamte Projekt und diese Wiki.