Hallo,
ich lese mein Smartmeter über den Volkszähler Lesekopf problemlos aus.
Es werden die Werte über den Browser immer aktuell angezeigt.
Diese Werte möchte ich nun auf eine SD-Karte speichern.
Eine SD-Karte habe ich auch erfolgreich eingebunden, diese kann über ein kopiertes Script Temperatur- und Feuchtigkeitswerte alle 60sec speichern.
Ich habe bereits die Script-Language für Tasmota durchgearbeitet komme aber nicht dorthin wo ich will:
Ich hätte gerne die Werte vom Smartmeter, die mir ja im Browser gezeigt werden, auf die SD-Karte gespeichert mit Datum und Zeitangabe (Minutenrhythmus)
Kann mir jemand die entsprechende Lösung oder Lösungsansatz für die Binärdatei geben?
Vielen Dank
Hallo,
nun habe ich nach vielem Ausprobieren und Lesen der Tasmota Dokumentation eine Lösung für mich gefunden:
Wichtig ist dass
die Binärdatei die notwendigen Definitionen beinhaltet und
die Memorycard, bzw das Modul richtig angeschlossen ist und in Tasmota konfiguriert wird, bei mir :
am D1 Mini (=ESP8266):
D2 GPIO04 SD Card CS
D6 GPIO12 SPI MISO
D7 GPIO13 SPI MOSI
D5 GPIO14 SPI CLK
und
das so im Tasmota Menü so angegeben wird.
Wichtige Ergänzungen in die Standard- Tasmota-Binärdatei, bei mir folgende:
#ifndef USE_SCRIPT
#define USE_SCRIPT
#endif
#ifndef USE_SML_M
#define USE_SML_M
#endif
#ifdef USE_RULES
#undef USE_RULES
#define SDCARD_DIR
#define USE_SCRIPT_FATFS_EXT
#define USE_SCRIPT_FATFS
#define USE_UFILESYS
#define USE_SDCARD
#define SDCARD_CS_PIN 4
#define USE_FEXTRACT
#define USE_SPI
#endif
Diese Funktionen sind in den meisten vorkompilierten Binärdateien nicht enthalten (Es gibt spezielle Binärdateien für Smartmeter, welche sie schon haben?)
Diese defs werden in die user_config_override.h z.B. `` über das Programm Visual Studio code eingebracht und kompiliert , wie das geht wird z.B. in mehreren Videos auf Youtube gezeigt.
USE_SCRIPT ist wichtig um ein Script zu schreiben und zu speichern
USE_SML ist wichtig zum Einlesen eines Smartmeters ... etc etc ...,
ob alle ergänzten defs notwendig sind, kann ich nicht sagen, aber mit diesen Erweiterungen funktionierts bei mir.
Wie Tasmota dann aufgerufen wird setze ich als bekannt voraus oder muß wieder über youtube gefunden werden.
In der Tasmotaoberfäche muss nun unter Configuration —> Configure Module Generic(0) ausgewählt werden, damit nach dem Neustart alle GPIOS gesteuert werden können.
Also nach Neustart und Configure Module kann man die GPIOs wie folgt besetzen:

(Anmerkung: einen eigenen Namen für den Tasmota Sensor kann man unter Configuration — Configure other – vergeben.)
Wenn alles passt und der Sensor restartet wurde müßte nach Aufruf von Tasmota folgendes Menü auftauchen:

Nun können über Tools Aufruf folgende Punkte aufgerufen werden ------>

über Console können direkte Befehle eingegeben werden,
Edit Script öffnet das Script Menü ---->

in welches man das unten angegebene Script eingeben kann, bzw angepasst für den jeweiligen Smartmeter (passende Scripte findet man im Github für Tasmota)
mein Script ohne Gewähr (mein Smartmeter ist ein eHZM, Zweirichtungszähler!
D 32
;Variablendefinitionen und Anfangswertsetzung 0
ener=0
verb=0
eing=0
fr=0
res=0
cnt=0
Ende=0
; Variablen alle 60 sec
ener=0 60
verb=0 60
eing=0 60
str=„“
B
;Smartmeteraufruf nach Booten
->sensor53 r
M 1
; M1 Deklaration Meter 1, M2=Meter2 etc
+1,3,s,0,9600,SM01
;= 1=SM1, 3=RX an GPIO3, s bedeutet smartmeter, 0=Flag, 9600 Baud Übertragungsrate,
;SM01 Smartmetername kann frei gewählt oder weggelassen werden
1,77070100600100FF@#,Zaehlernummer, ,serialnr ,16
1,77070100010800FF@1000,Gesamtverbrauch,kWh,pos_wirk_tariflos,1
1,77070100100700FF@1,Momentanverbrauch,W,momentanwirkleistung,0
1,77070100020800FF@1000,eingespeiste Energie,kWh,neg_wirk_tariflos,1
1,77070100020802FF@1,Momentaneinspeisung,W,momentanwirkleistung,0
1,7707010001080061@1000,Wochenwert,kWh,pos_wirk_week_tariflos,1
; Festlegen des Namens der Speicherdatei
fl2(„SMeter121.txt“)
; zeigt alle Dateien im Ursprungsverzeichnis nach Aufruf (Manage file system)
fr=fo(„/“ 0)
for cnt 1 100 1
res=fr(str fr)
if res>0
then
print %cnt% : %str%
else
break
endif
next
fc(fr)
T
; Benennen und Sammeln der Werte
ener=SM01#pos_wirk_tariflos
verb=SM01#momentanwirkleistung
eing=SM01#neg_wirk_tariflos
S
; alle 60 sec
if upsecs%60==0
then
; Datei öffnen zum schreiben
fr=fo(„SMeter121.txt“ 2)
; Zusammenstellung des Strings
str=s(time)+„\t“+s(ener)+„\t“+s(verb)+„\t“+s(eing)+„\t“+„\n“
; welcher an das Ende der Datei geschrieben wird
res=fw(str fr)
; Datei wird geschlossen
fc(fr)
endif
; löscht file wenn sie nicht mehr gebraucht wird. hierfür muss ; entfernt werden
;fd(„test.txt“)
Wenn das Script über Edit Script eingegeben wurde, oben das Häckchen bei – enable script — aktiviert wurde, dann auf save gedrückt wurde, am besten restart system betätigen im Main Menu.
Übrigens dauert es , wenn man auf manage file system drückt ca 10-20sec! bis das Untermenü mit den Dateien auftaucht!
Im Main Menu werden -wenn das Script enabled und gespeichert wurde- sekundenweise die aktuellen Daten des Smartmeters angezeigt.
Wenn man im Dateien-Menü eine Datei anklickt wird die Speicherung im Downloadverzeichnis angeboten. Es ist eine Textdatei mit erster Zahl für die Zeit, entspricht Minuten nach Mitternacht (600=10 Uhr, keine Sommerzeit!), die 2.Zahl ist der Gesamtverbrauch, die 3. Zahl der Momentanverbrauch, die 4. Zahl die eingespeiste Energie. Wegen Balkonkraftwerk bei mir kommen negative Zahlen bei Momentanverbrauch vor.
Beispiel:
660.00 1611.90 -943.00 126.00
661.00 1611.90 -907.00 126.00
662.00 1611.90 -961.00 126.00
663.00 1611.90 -962.00 126.00
664.00 1611.90 -953.00 126.00
665.00 1611.90 -948.00 126.00
666.00 1611.90 -947.00 126.00
667.00 1611.90 -942.00 126.10
668.00 1611.90 -950.00 126.10
669.00 1611.90 -963.00 126.10
---->660 = 11Stunden nach Mitternacht = 11 Uhr=12 Sommerzeit
—>1611.90 = Gesamtverbrauch in kWh (Zählerstand)
---->-943 = Momentanverbrauch in Watt, negativ ist Einspeisung (Balkonkraftwerk)
—>126.10 = eingespeiste Energie in kWh (aus Balkonkraftwerk)
Vielleicht kanns jemand brauchen.
Viel Erfolg damit