Viessmann VX3 in Homeassistant

,

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

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.