Script

Tasmota Script Sensor Daten auf SPI SD Karte speichern

EI-OT Tasmota 8 Kanal PRO Relais SPI SD Kartenleser bestücken
Tasmota  SD Kartenleser Konfiguration

Dieses Beispiel basiert auf dem EI-OT 8 Kanal PRO Relais Modul, im Detail auf die Modulerweiterung mittels einem herkömmlichen Micro SD Kartenleser Modul.

Das EI-OT 8 Kanal Relais Modul verfügt über ein für den SPI Kartenleser passendes Pinout, sodass dieser direkt mit der Controller Platine verbunden werden kann. Generell kann dieses Beispiel für jedwedes ESP8266 Modul verwendet werden, jedoch gilt es dabei die SPI GPIO Konfiguration entsprechend zu berücksichtigen.

Basierend auf dem EI-OT 8 Kanal Relais erfolgt die Konfiguration wie folgt

  • GPIO12 = SPI MISO
  • GPIO13 = SPI MOSI
  • GPIO14 = SPI CLK
  • GPIO15 = SD CARD CS

Details zur kompletten Integration eines SD Kartenleser haben wir hier.

Als “Quelle”  notwendiger Sensordaten wird ein AM2301 Temperatur und Luftfeuchte Sensor verwendet. Der AM2301 wurde mittels eines PullUp Widerstands auf

  • GPIO3 = AM2301

gesetzt, hier einfaches Anschlussschema.

Tasmota  Script für einen Sensor Datenlogger

Gleich vorab, Tasmota Script ist sehr umfassend und hier sehr kompakt dokumentiert. Selbstredend bedarf es einer entsprechenden Tasmota Firmware mit Tasmota Script (ist nicht in üblichen Binaries enthalten).

Zunächst das Vorhaben in wenigen Worten zusammengefasst:

Tasmota erfasst die AM2301 Messwerte, im Detail
Temperatur
Luftfeuchtigkeit
Taupunkt

zum konfigurierten Intervall (siehe Einstellungen > Logging-Einstellungen Eintrag Telemetrieperiode) üblicherweise 300 Sekunden.

Mittels Tasmota Script sollen die Sensorwerte des AM2301

1 mal pro Sekunde abgefragt werden

ein Mittelwert für 60 Sekunden erstellt werden

jede Minute sollen, WENN* die Messwerte zum vorherigen Wert abweichen
ein String mit dem Inhalt
Zeitstempel Temperatur Luftfeuchtigkeit Taupunkt
erstellt werden
die “Datenfelder” werden dabei durch Tabulatoren getrennt

es werden die auf der SD Karte vorhandenen Daten mittels Schleife abgefragt
die Datei AM2301-log.txt wird geöffnet
der obige String wird der AM2301-log.txt Datei angehängt
die AM2301-log.txt wird gespeichert
die AM2301-log.txt wird geschlossen

* Ergänzend bleibt zu erwähnen, es ist etwas “sinnfrei” eine if Anweisung – nur bei abweichenden Werten – bei einem AM2301, da 3 Messwerte und insbesondere die Luftfeuchte stetig variieren… aber hier geht es um ein Tasmota Script Beispiel, im Bezug von beispielsweise Temperaturwerten kann hier einiges an Daten gespart werden.

Tasmota Script für Sensordaten auf einer SD Karte speichern

Die Zeilen mit vorangestelltem Semikolon dienen lediglich der Dokumentation und können gelöscht werden. Selbstredend werden die Daten, wenn keine SD Karte verwendet wir im Flashspeicher des ESP8266 abgelegt.

>D 48
; Variablen für aktuelle Sensorwerte
temp=0
otemp=0
hum=0
; Variablen für alte Sensorwerte
ohum=0
dew=0
odew=0

fr=0
res=0
cnt=0
; Durchschnittswerte für 60 Sekunden
M:mtemp=0 60
M:mhum=0 60
M:mdew=0 60
str=""

>B
; Konsolen Kommandos deaktiviert
; download Verweis
;fl1("AM2301-log.txt")
; aktuelle Log-Datei löschen
;fd("AM2301-log.txt")

; mittels einer Schleife im Dateisystem die vorhanden Dateien abfragen (Limit 20)
fr=fo("/" 0)
for cnt 1 20 1
res=fr(str fr)
if res>0
then
print %cnt% : %str%
else
break
endif
next
fc(fr)

>T
; beim Sensorevent die Werte erfassen
temp=AM2301#Temperature
hum=AM2301#Humidity
dew=AM2301#DewPoint

>S
; Durchschnittswerte für 60 Sekunden erzeugen
mtemp=temp
mhum=hum
mdew=dew

; Durchschnittswerte alle 60 Sekunden in AM2301-log.txt ablegen
if ((upsecs%60==0 and ((mtemp!=otemp) or (mhum!=ohum) or (mdew!=odew))
then
; Durchschnittswerte der AM2301-log.txt anhängen, diesbezüglich 2
fr=fo("AM2301-log.txt" 2)
; String mit Tabulator erzeugen
str=tstamp+"\t"+s(mtemp)+"\t"+s(mhum)+"\t"+s(mdew)+"\n"
; die zuletzt gespeicherten Sensorwerte in Variable der alten Sensorwerte ablegen
otemp=mtemp
ohum=mhum
odew=mdew
; str in die AM2301-log.txt schreiben
res=fw(str fr)
; AM2301-log.txt schliessen
fc(fr)
endif

>R

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert