Seit dem Frühjahr hat mir der Stromversorger einen elektronischen Stromzähler vom Typ Easymeter Q3MA eingebaut. Die Integration ins Smarthome lief eigentlich schon wenig später, aber nach einem Fehler beim Firmware-Upgrade der NodeMCU musste ich sie neu aufsetzen.
Was mir entfallen war: die Smartmeter-Unterstützung, oder besser gesagt das SML-Protokoll, ist nicht Bestandteil der vorkompilierten Images, sondern muss über die Tasmota-Datei user_config_override.h
aktiviert und mit PlatformIO selbst kompiliert werden. Das klingt aber komplizierter, als es letztlich ist, wobei ein wenig Erfahrung mit Visual Studio Code (vscode) nicht schaden kann.
Alternativ kann auch PlatformIO im Atom Editor oder von der Kommandozeile oder sogar ein online-Dienst benutzt werden. Ausführlich ist das Kompilieren hier beschrieben.
Als Hardware nutze ich übrigens eine billiges NodeMCU-kompatibles Board aus China. Der optische Tastkopf wird als Bausatz von einem Mitglied des Photovoltaikforums angeboten. Am NodeMCU-Board wird er an 3.3V (3V), GND (G) und GPIO13 (D7) angeschlossen (Pin 1,2,6 von hinten links gesehen).
Tasmota muss dann mit diesen Schritten kompiliert werden:
- Wenn nicht schon vorhanden, vscode installieren
- Wenn nicht schon vorhanden, PlatformIO Extension installieren
- Aktuelle Tasmota-Quellen von https://github.com/arendst/Tasmota downloaden und im vscode directory auspacken
- Folder in vscode öffnen
- platformio.ini editieren
- upload port eintragen (bei mir:
/dev/ttyUSB0
) - Sprache auskommentieren (bei mir:
DE
)
- upload port eintragen (bei mir:
- tasmota/user_config_override.h editieren
- WLAN SSID/Passwort eintragen
- MQTT Server/Port/User/Password eintragen
- folgendes an die Datei anhängen:
#ifndef USE_SCRIPT
#define USE_SCRIPT
#endif
#ifndef USE_SML_M
#define USE_SML_M
#endif
#ifdef USE_RULES
#undef USE_RULES
#endif
#define SML_MAX_VARS 20
- Alle Files speichern
- Mit
Ctrl + Alt + U
oder→
(Fußzeile) kompilieren und hochladen - bei Erfolg wird am Ende folgendes ausgegeben:
Environment Status Duration ------------- -------- ------------ tasmota-DE SUCCESS 00:01:08.758
- Im Tasmota-Web-Interface bei
Einstellungen
→Gerät Konfigurieren
den ModultypGeneric (0)
auswählen - Keine Module bei den GPIOs auswählen! (alles auf
None
belassen); der Port wird unten im Script definiert. - unter
Einstellungen
→Skript konfigurieren
den Haken beiSkript aktivieren
setzen - folgendes Skript eingeben
>D >B ->sensor53 r tper=10 >M +1,13,s,1,9600,SML 1,77070100010800ff@1000,Verbrauch,KWh,Power_in,1 1,77070100020800ff@1000,Einspeisung,KWh,Power_out,1 1,77070100100700ff@1,Akt. Verbrauch,W,Power_act,1 1,77070100240700ff@1,Wirkleistung L1,W,Power_p1,1 1,77070100380700ff@1,Wirkleistung L2,W,Power_p2,1 1,770701004c0700ff@1,Wirkleistung L3,W,Power_p3,1 #
- Speichern
- Das Ergebnis sieht dann so aus:
Die Verbrauchswerte stehen bei jedem Zählermodell an etwas anderer Stelle. Die Adressen für meinen Q3M kann man aus folgender Tabelle ablesen:
Easymeter Q3M
OBIS-Kennzahl | Bezeichung | Kanaltyp | Auflösung | Hinweis |
---|---|---|---|---|
1-0:1.8.0*255 | Zählerstand Bezug | El. Energie (Zählerstände) | 1000 | |
1-0:1.8.1*255 | Zählerstand Bezug | El. Energie (Zählerstände) | 1000 | Tarif 1 |
1-0:1.8.2*255 | Zählerstand Bezug | El. Energie (Zählerstände) | 1000 | Tarif 2 |
1-0:2.8.0*255 | Zählerstand Lieferung | El. Energie (Zählerstände) | 1000 | |
1-0:16.7.0*255 | Leistung (Momentan) | El. Energie (Leistungswerte) | Summe aus P_L1, P_L2, P_L3 | |
1-0:36.7.0*255 | Leistung an L1 (Momentan) | El. Energie (Leistungswerte) | ||
1-0:56.7.0*255 | Leistung an L2 (Momentan) | El. Energie (Leistungswerte) | ||
1-0:76.7.0*255 | Leistung an L3 (Momentan) | El. Energie (Leistungswerte) |
Aus der Obis-Kennzahl 1-0:1.8.0*255
interessiert nur die 1.8.0*255
, die in Hex umgewandelt 010800ff
und an 77070100
angehängt zu 77070100010800ff
wird. @1000
definiert die Skalierung. Es folgen Label, Einheit, Variablenname und Nachkommastellen. Wer es genau wissen will, kann in den angehängten Quellen weiterlesen.
Quellen
https://tasmota.github.io/docs/Smart-Meter-Interface/
https://forum.iobroker.net/topic/27999/stromz%C3%A4hler-per-sonoff-esp8266-auslesen
Moin!
Super Beitrag.
Kurze Frage;
Bei volkszaehler steht das ohne pin nur ohne Nachkommastellen ausgegeben wird.
Hast du die Pin eingegeben bzw. Im Script aktiviert.
Mir ist leider auch nicht klar ob das eine einmal Eingabe oder eine wiederholende Intervaleingabe ist.
https://wiki.volkszaehler.org/hardware/channels/meters/power/edl-ehz/easymeter_q3m
Grüsse
Chris
Hallo Chris,
ja, die Pin muss eingegeben bzw. gemorst, d.h. als Blinksignal per Taschenlampe eingegeben werden. Erfreulicherweise merkt sich das der Zähler, die Pin muss also nur ein mal eingegeben werden.
Gruß
Jörg
Kurz zur Info: das ist leider von der Konfiguration des Netzbeteibers abhängig. In München (SWM) ist der EasyMerer Zähler leider so kastriert, dass der PIN Schutz nicht abgeschaltet werden kann - und der Zähler nach 120 sek Inaktivität (kein blinken)
In den geschützten Modus zurück geht.
Werde das Skript für eine blinkende LED ergänzen, damit durch die nachkommastelle des Gesamtverbrauchs der aktuelle Verbrauch berechnet werden kann (auch der ist von der SWM weg-kasteiert und lässt sich gar nicht anzeigen/ausgeben).
Hallo,
ich bekomme beim Compilieren immer fplgende Fehlermeldung:
command ‘platformio-ide.upload’ not found
Ich stehe auf dem Schlauch, habe 0 Erfahrung mit der rogrammierumgebung VSCode
Hört sich so an, als ob im vscode das PlatformIO Plugin nicht oder nicht vollständig installiert wurde.
Wenn Du keine Erfahrung mit vscode hast, kannst Du auch mit Atom oder dem PlatformIO Web-Service arbeiten. Die ausführliche Anleitung habe ich oben im Text verlinkt (https://tasmota.github.io/docs/Compile-your-build/).
Hallo Leute,
ich bin neu auf diesem Gebiet. Mich beschäftigt zur Zeit eine Frage.
Wie wird aus einer Obis Kennzahl ein Hex string? Gibt es Tabellen oder Umrechnungen?
Beispiel: 1-0:2.8.0*255 = ?????????
Wer kann mir helfen
oben am Zähler, unter einem Aufkleber versteckt, befindet sich noch eine Schnittstelle, die auch ohne PIN alle Werte vollständig ausgibt