Messwert aus Datei einlesen

Begonnen von aficianado, 09 Juli 2015, 12:22:58

Vorheriges Thema - Nächstes Thema

aficianado

Hallo zusammen,

ich bin absolut unerfahren mit FHEM und versuche schon seit geraumer Zeit einen Temperatur Messwert (22.51) aus einer Datei (es steht nur der Wert drin, der sich ab und zu mal ändert) einzulesen und als plot darzustellen. Nachdem ich damit nicht weiter kam, habe ich über GPIO4 an einem Raspberry ein paar 1wire-Sensoren angeschlossen und konnte nach wenigen intuitiven Klicks auch die Plots sehen - wunderbar! Nach vielem erfolglosen googeln und ausprobieren habe ich nun FHEM neu aufgesetzt und stehe immer noch vor dem Problem eine Datei einzulesen. Mit FileLog wird offensichtlich ein Log-File erwartet, aber eben kein einzelner Wert?

Danke und Gruß
RaPi3, esp8266, LoRa, Tasmota

Otto123

Hallo,

ZitatMit FileLog wird offensichtlich ein Log-File erwartet, aber eben kein einzelner Wert?
genau so ist es. Der Plot entsteht ja direkt aus dem Werten im Log.
Du müsstest also am einfachsten anstatt den Wert in der Textdatei zu überschreiben genau in das Logfile schreiben. Das Logfile ist einfach Text Elemente hintereinander, Zeilenweise.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

aficianado

danke Otto, für die schnelle Antwort.
Wo könnte ich bitte zum Aufbau der Logdatei Infos in FHEM finden? Ich vermute mal, da wird auch ein Zeitstempel benötigt.
Auch habe ich bei Google ein Beeispiel gefunden, wie man mit FHEM eine Logdatei erstellen kann:
define FileLog_CUL_WS_1_AVG FileLog /var/log/fhem/CUL_WS_1_AVG-%Y.log CUL_WS_1:temperature_avg_day.*
aber ich habe in der CommadRef zu Filelog nichts gefunden. Mein Messwert ist unter /tmp/t0.txt und mir ist nicht klar, wie ich CUL_WS_1 definiere für meinen Zweck.

Ich könnte ein Logfile erzeugen über die crontab alle 5 Minuten, aber wenn es mit fhem ginge wäre das natürlich einfacher.

Danke + Gruß
RaPi3, esp8266, LoRa, Tasmota

Otto123

#3
Na Du hast doch einen FileLog gemacht mit Deinem 1wire Sensor?
Bei mir sieht der eine Sensor so aus:

2015-01-01_00:02:09 SensorWG temperature: 7.5
2015-01-01_00:02:09 SensorWG battery: ok
2015-01-01_00:02:09 SensorWG humidity: 79
2015-01-01_00:02:09 SensorWG T: 7.5 H: 79
2015-01-01_00:04:27 SensorWG temperature: 7.5
2015-01-01_00:04:27 SensorWG battery: ok
2015-01-01_00:04:27 SensorWG humidity: 79
2015-01-01_00:04:27 SensorWG T: 7.5 H: 79
2015-01-01_00:06:30 SensorWG temperature: 7.5
2015-01-01_00:06:30 SensorWG battery: ok
2015-01-01_00:06:30 SensorWG humidity: 79
2015-01-01_00:06:30 SensorWG T: 7.5 H: 79

Vorne Zeitstempel und dann der Name, was danach kommt kannst Du im Plot filtern.
Was  Du da gefunden hast ist die definition eines FileLog für einen Sensor CUL_WS_1 , d.h. FHEM empfängt Werte und schreibt diese in ein FileLog.
Du kannst das auch im FHEM machen in dem Du zyklisch einen system Befehl aufrufst. Aber den system Befehl wirst Du brauchen, also irgendwas mit date >> Logdatei.txt
cat /tmp/t0.txt >> Logdatei.txt 


Schau Dir mal in der CommandRef FileLog an, da gibt es eine get Funktion
ZitatGet
get <name> <infile> <outfile> <from> <to> <column_spec>

Read data from the logfile, used by frontends to plot data without direct access to the file.

Vielleicht bekommst Du das damit hin. Ich habe leider keine Erfahrung damit.

Du kannst auch was in Perl schreiben und in 99_myUtils packen.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

aficianado

super, Danke!
Mit:
define SensorHZ FileLog /home/pi/fhem-log.txt Temperatur:
bekomme ich im FHEM-Frontend unter "SensorHZ fhem-log.txt text" wenn ich auf text klicke:
2015-07-09_10:10:01 iT0 SensorHZ Temperatur: 24.000 Stromzaehler: 325
2015-07-09_15:10:01 iT0 SensorHZ Temperatur: 23.875 Stromzaehler: 380
somit sit das Logfile erkannt. Und wenn ich auf SensorHZ klicke komme ich auf die Einstellungspage mit dem Link "Create SVG Plot".
Ich würde neben dre Temperatur gerne den Stromverbrauch darstellen. Aber wie muss ich was da wo eingeben oder vermutlich vorher noch definieren?

Vielen Dank für Deine Geduld und Hilfe,

Gruß

RaPi3, esp8266, LoRa, Tasmota

aficianado

#5
Danke, das mit dem Dateieinlesen funktioniert nun!
Die Lösung war folgend:
a) ein Messwert wird alleine von einem Linux-System in eine Textdatei geschrieben und soll mit FHEM eingelesen und als plot dargestellt werden
b) entweder man erzeugt aus dem Messwert eine Log-Datei in FHEM oder gleich in LINUX
c) ich habe das in Linux gelöst und in /etc/crontab alle 5 Minuten eine bash aufgerufen, die aus dem Messwert eine Logdatei erzeugt:
   # write Logfile fuer FHEM
   dat=$(date +"%Y-%m-%d_%H:%M:%S")
   echo "$dat SensorHZ Temperatur: $TEMP Stromzaehler: $CNT" >> fhem-log.txt

   wobei $dat der Zeitstempel ist im FHEM-Format, $TEMP der aktuelle Messwert 22.54 und $CNT ein Stromzählerstand 670 in Watt und SensorHZ ist der Device-Name für FHEM
d) die Logdatei fhem.log.txt schaut nach 15 Minuten auszugsweise so aus:
   2015-07-09_15:15:01 SensorHZ Temperatur: 24.000 Stromzaehler: 325
   2015-07-09_15:20:01 SensorHZ Temperatur: 24.000 Stromzaehler: 382
   2015-07-09_15:25:01 SensorHZ Temperatur: 23.938 Stromzaehler: 405
e) in die fhem.cfg wird die Logdatei bekannt gegeben:
   define SensorHZ FileLog /home/pi/fhem-log.txt Temperatur:
   und wird nun im Menü "Unsorted" gelistet als "SensorHZ"

und das war es schon. Will man die Daten als Diagramm sehen, sieht man mit klicken auf "SensorHZ" dessen Eigenschaften und kann mit klicken auf "Create SVG plot" ein Diagramm erzeugen.

Ich danke für die freundliche Unterstützung!


RaPi3, esp8266, LoRa, Tasmota