Unser Messstellenbetreiber nutzt die „smarten“ Stromzähler der Firma EasyMeter GmbH, speziell den Easy Meter Q3M. Dies ist ein Drehstromzähler, der dahingehend „smart“ ist, dass man einige Daten auslesen kann. Je nach Konfiguration des Messstellenbetreibers können die aktuelle Gesamtleistung, die Leistung pro Phase in Watt und die „verbrauchte“ sowie eingespeiste Energie in Wattstunden ausgelesen werden. Dazu wird eine optische Schnittstelle namens „Info-DSS“ bereitgestellt, die nichts anderes ist als eine unidirektionale Implementierung des SML Protokolls.
Über das SML Protokoll werden mittels sogenannter OBIS-Codes die oben genannten Informationen sekündlich über die Schnittstelle gepusht. Diese Daten muss man „nur“ noch abgreifen und bereitstellen. Dazu benötigt man – zusätzlich zum bestehenden Home Assistant System – ein Gerät direkt am Zähler, dass die Daten der Info-DSS-Schnittstelle entgegennimmt und lesbar umwandelt. Ich nutze dafür einen Raspberry Pi (Zero W), aber auch andere Geräte mit einem Linux funktionieren. Die Anbindung funktioniert bei mir über einen IR-Lesekopf, den man sich aber auch selber bauen kann.
Auf meinem Raspebrry Pi habe ich dann die Software vzlogger installiert – wohlgemerkt ohne die Volkszähler-Middleware, die sonst die Speicherung und Darstellung der Daten übernimmt. Der vzlogger kann die aktuellen Daten problemlos allein auswerten und als json bereitstellen. Dafür ist in /etc/vzlogger.conf folgende Konfiguration notwendig:
{
"retry": 0,
"daemon": true,
"verbosity": 3,
"local": {
"enabled": true,
"port": 8084,
"index": true,
"timeout": 0,
"buffer": -1
},
"meters": [
{
"enabled": true,
"allowskip": true,
"interval": -1,
"aggtime": -1,
"aggfixedinterval": false,
"channels": [
{
"api": "null",
"uuid": "abcdefgh-ijkl-mnop-qrst-uvwxyz012345",
"identifier": "1-0:1.8.0*255",
"aggmode": "max",
"duplicates": 3600
}
],
"protocol": "sml",
"device": "/dev/ttyUSB0",
"pullseq": "",
"baudrate": 9600,
"parity": "8n1",
"use_local_time": true
}
]
}
Wobei ich die uuid hier unkenntlich gemacht habe und der Übersicht halber nur einen „channel“, nämlich die Energiemenge „Verbrauch“ erfasse. Nachdem die Datei gespeichert ist wird der vzlogger-Daemon neu gestartet:
sudo systemctl restart vzlogger
Und somit kann man die aktuellen Daten unter der IP des Raspberry Pi abrufen: http://[ip_des_pi]:8084 . Das Ganze könnte dann so aussehen:
{
"version": "0.8.0",
"generator": "vzlogger",
"data":[ {
"uuid": "abcdefgh-ijkl-mnop-qrst-uvwxyz012345",
"last": 1634638205040,
"interval": -1,
"protocol": "sml",
"tuples": [ [ 1634638205040, 7418885.2847000007 ] ]
} ]
}
In dem Tuple steht also der aktuelle Zählerstand in Wh. Diesen müssen wir nun über Home Assistant auslesen, dazu wird in der Datei /config/configuration.yaml zuerst folgender Bereich eingefügt:
#Zählerstand Verbrauch
sensor:
- platform: rest
resource: http://192.168.178.202:8084/
value_template: >
{% for i in value_json.data %}
{% if i.uuid == "abcdefgh-ijkl-mnop-qrst-uvwxyz012345" %}
{{ '%.2f'%(i.tuples[0][1]) | float }}
{% endif %}
{% endfor %}
method: GET
name: "Zählerstand Verbrauch"
unit_of_measurement: Wh
device_class: energy
Zu beachten an dieser Stelle: Der String, der aus dem Tuple extrahiert wird, bekommt mittels ‚%.2f’% eine Begrenzung der Kommastellen auf 2. Sonst wird der Float regelmäßig mit einer unterschiedlichen Anzahl Kommastellenangezeigt, was die Lesbarkeit beeinträchtigt. Mittels | float wandel ich den String direkt in einen Float um, damit kann ein PC immer besser umgehen als mit String-Zahlen.
Nun könnte man über sensor.zahlerstand_verbrauch schon den aktuellen Zählerstand in Homeassistandt nutzen, aber unglücklicherweise nicht im neuen Energy-Management. Denn dafür muss der Sensor eine Eigenschaft mit state_class haben – die es aber Stand heute nicht gibt (Featue-Request läuft). Daher müssen einige wenige weitere Anpassungen in der /config/configuration.yaml vorgenommen werden:
homeassistant:
customize:
#grid consumption
sensor.zahlerstand_verbrauch:
state_class: total_increasing
Mit diesen Zeilen teilen wir Home Assistant mit, dass unser Zählerstand eine Gesamtsumme ist, die immer weiter wächst. So kann dann sensor.zahlerstand_verbrauch auch endgültig ins neue Energy-Management eingefügt werden:
Abschließend sei angemerkt, dass diese Integration im Prinzip mit allen Daten funktioniert, die der vzLogger produziert und das ist eine ganze Menge. Implementiert sind unter anderem das OMS-Protokoll, mit dem man funkende Wasserzähler, elektronische Heizkostenverteile und Wärmemengenzähler empfangen kann, aber auch diverse andere sind auf der Info-Seite vermerkt. Von der verfügbaren volkszähler-Implementierung für Home Assistant kann ich leider nur abraten. Diese bietet weder die Performance wie der hier dargestellte Ansatz, noch können die Daten ins Energy-Management einfließen. Auch würde man sich damit eine doppelte Datenhaltung ins Haus holen.
Super Sache. Ich habe nämlich die Volkszähler Integration nicht zum Laufen bekommen.
Da hier ja der Gesamtzählerstand abgefragt wird, müsste sie Bezugseinheit nicht kWh sein? Zumindest ist das bei mir der Fall. Ich habe einen Q3D und das Protokoll ist entsprechend D0.
Der Zähler gibt tatsächlich Wattstunden aus: „tuples“: [ [ 1634638205040, 7418885.2847000007 ] ]
7418885,2847000007 Wh sind 7418,885 kWh und sogar 7,418885 MWh. Wären das 7418885 kWh wäre ich schon arm 😀 Die meisten Zähler geben in SI-Basiseinheiten aus.
PS: ich hab das gerade nochmal quer geprüft: Auf der Anzeige stehen 7xxx kWh, aber per SML kommen 7xxxxxx Wh.
Bei mir läuft es super dank dem Tutorial. Ich habe nur das Problem das ich die Daten nicht in den Energy Tab angezeigt bekomme.
An welcher stelle muss
homeassistant:
customize:
#grid consumption
sensor.zahlerstand_verbrauch:
state_class: total_increasing
in die yaml eingefügt werden?
Bin noch recht neu zu Homeassistant
Hallo Mark!
Das ist etwas schwierig zu sagen, weil ich deine Konfiguration ja nicht kenne. Wenn du ncoh recht am Anfang stehst, wirst du wahrscheinlich deine gesamte Konfiguration in der Datei config/configuration.yaml haben. Dort müsstest du suchen, ob das Stichwort „customize:“ schon irgendwo steht. Es sollte direkt unter „homeassistant:“ stehen. Wenn ja, eine Zeile darunter mit zwei Leerzeichen Einschub
sensor.zahlerstand_verbrauch:
state_class: total_increasing
einfügen.
Ansonsten, wenn das Stichwort „customize:“ bisher nirgendwo auftaucht, kannst du den ganze Block
customize:
#grid consumption
sensor.zahlerstand_verbrauch:
state_class: total_increasing
einfach nach dem „homeassistant“ einfügen. Bei mir ist das bereits am Anfang der Datei und sieht dann so aus:
Hallo, irgendwie stehe ich hier auf dem Schlauch…. wo bekomme ich den die meine uuid her. Wenn ich direkt auf den Raspberry zugreife kann ich zwar eine uuid erzeugen diese erzeugt allerdings keine Werte.
Hallo Marc!
Aus der Datei /etc/vzlogger.conf im Raspberry mit dem IR-Kopf. Da hast du ja eine Vz-Logger Konfiguration angelegt. Daher kommt die uuid.
Gruß
Pascal
Hallo Pascal,
heisst ich kann da irgendetwas eintragen?
Das Problem ist das ich über die IP keinen Tuples ausgelesen bekomme.
Antworte ich mir mal selbst. Es lag an meiner config. Ist für einen EBZ Stromzähler nicht ganz einfach zu finden. Danke dir für die Top Anleitung.
Hallo Marc!
Vielleicht kannst du deine Lösung für deinen speziellen Zähler ja mal hier posten. Da würde sicher der ein oder andere von profotieren.
Gruß Pascal
Danke für die Anleitung.
Bekommt man die aktuelle Leistung (Netzbezug) in W oder kW auch raus?
Ja, wenn man vom Messstellen Betreiber die Pin bekommt und eingibt. Dann gibt der Zähler das auch aus.
Danke für die Anleitung klappt super für Einspeisung und Verbrauch, aber die aktuelle Leistung der PV kann ich mir so nicht anzeigen lassen oder ?
Ist das denn bei deinem Zähler freigeschaltet? Ich musste erst eine Pin mir der Taschenlampe eingeben.
Klappt direkt oben drauf ist ein Siegel das nimmst weg und dann läuft es direkt.
Aber halt das auslesen der PV Anlage was ich produziere sieht man halt nicht sondern nur was ins Netz geht
Vorsicht mit dem entfernen von Siegeln. Mit der oberen Schnittstelle kann man auch Einstellungen ändern, auf die mir der Messstellenbetreiber Zugriff haben sollte.
nö war nicht notwendig, aber wie bekommst du die Daten deiner PV ? also nicht die Einspeisung sondern die was sie tatsächlich produziert?
Dafür nutze ich einen Shelly 1pm. Der Shelly Plug geht auch.
wie denn mit nem shelly plug? den an die pv anlage angeschlossen oder wie?
Also meine Solaranlage ist ein „Balkonkraftwerk“, es hat einen Schuko Stecker. Darüber kann ich gut die Energie messen.
Es gibt auch Shelly’s für die Hutschiene.
Welche Vor-/Nachteile hat diese Methode gegenüber MQTT?
Da ich MQTT nicht gut kenne und bisher nicht einsetzte, kann ich da leider keine qualifizierte Aussage treffen.
Danke für diese Konfiguration!
Kann man das Template anpassen das kW Heraus kommt mit 3 Nachkommastellen?
Hab versucht nach dem |float /1000 einzugeben aber das klappt leidern incht.
an welcher stelle muß ich durch 1000 teilen?
Könnte mit „scale: 0.001“ funktionieren.
Danke für diese super Anleitung! Wie können denn zwei Sensoren integrieren? Momentan zeigt mir Home Assistant bei einem der beiden Werte „Entität nicht definiert“ an.
Hallo Pascal,
super Beitrag den ich schon länger verfolge. Ich habe mich in letzter in das Thema eingearbeitet und bin nun endlich soweit das Homeassistant und Vzlogger laufen. Ich bekomme Zählerwerte und kann diese auch (in meinem Fall über MQTT) abfragen.
Ich habe aber noch das Problem die Daten in HA anzuzeigen? Meine Configuration.yaml habe ich um die notwendigen Angaben ergänzt. Auch die Angabe des Sensors. Danach HA einmal neugestartet. Müsste ich nicht nun schon unter Energie den Sensor aus der Dropdownliste wählen können?
# Loads default set of integrations. Do not remove.
default_config:
# Load frontend themes from the themes folder
frontend:
themes: !include_dir_merge_named themes
# Text to speech
tts:
– platform: google_translate
automation: !include automations.yaml
script: !include scripts.yaml
scene: !include scenes.yaml
sensor:
– platform: mqtt
name: „stromzaehler_oben_gesamtverbrauch_vz“
device_claas: energy
state_claas: total_increasing
state_topic: „vzlogger/data/chn0/raw“
unit_of_measurement: kWh
scan_interval: 10
friendly_name: „Strom Gesamtverbrauch oben“
value_template: ‚{{value | round(2) }}‘
homeassistant:
customize:
#grid consumption
sensor.stromzaehler_oben_gesamtverbrauch_vz:
state_class: total_increasing
Wenn der Sensor nicht in der Energie-Liste auftaucht, fehlt ihm ein Attribut. Ich habe dafür folgendes in der configuration.yaml hinzugefügt:
homeassistant:
customize:
sensor.zahlerstand_verbrauch:
state_class: total_increasing
Hallo Rene,
wäre ja mal spannend – sicherlich nicht nur für mich – zu wissen wie Du die MQTT Integration hinbekommen hast.
Gruß Olaf
Hallo,
habe das mal bei mir ausprobiert 🙂
aber es kommt nix raus
Habe auch das Problem das ich einen 2 Tarifzähler habe also HT und NT wie bekomme ich das unter?
meine configuration ist 1:1 wie oben beschrieben.
Volkszähler laüft einwandfrei und zeigt mir die Grafen an nur ich bekomme das nicht in HA rein .
wo liegt da mein problem?
Ha läuft und die Daten der Tasmotas kommen ja
aber möchte ja die einspeissung haben
cu Makrus
Hi Pascal,
erst mal Danke für diese Lösung. Ich hab das noch nicht am Laufen, bin gerade dran …
ABER: Du hast in Deiner configuration.yaml unter „sensor:“ folgendes stehen:
name: „Zählerstand Verbrauch“
unter customize steht aber „zahlerstand_verbrauch“
Müssten die beiden Einträge nicht gleich heißen (also auch mit Groß- und Kleinschreibung, etc.)?
Danke