Hallo,
ich bekomme von einem DHT22 die Werte für Temperatur und Luftfeuchtigkeit über einen ESP8266.
Diese Werte werden dann in einem Logfile gespeichert und sollen in einem Plot visualisiert werden.
Da meine beiden Werte im Logfile in einer Zeile stehen kann ich beim svgplot nur den Temperaturwert auswählen. Wie kann ich das Logfile filtern so das ich beide Werte weiter verarbeiten kann?
So sieht mein Logfile aus:
2016-02-22_20:12:05 esp8266temp T: 20.40 H: 46.60
2016-02-22_20:12:38 esp8266temp T: 20.40 H: 46.60
2016-02-22_20:13:10 esp8266temp T: 20.40 H: 46.60
Wobei T und H für Temperatur und Luftfeuchtigkeit stehen.
Gruß
Cubiator
Hi Cubiator,
wie schaut's dein Filelog_esp8266temp aus? Du kannst da mehrere regular expressions einstellen.
Sent from my SM-G903F using Tapatalk
Spalte 4 oder 6 einstellen.
LG
pah
Hallo Ihr Zwei,
danke für Eure Mühe!
@Chanky
Der Auszug oben ist ein direkter Auszug aus meinem Logfile aber hier mal ein aktueller von nun gerade:
2016-02-23_18:12:39 esp8266temp T: 20.00 H: 45.60
2016-02-23_18:13:11 esp8266temp T: 19.90 H: 45.20
2016-02-23_18:13:44 esp8266temp T: 19.90 H: 44.90
2016-02-23_18:14:16 esp8266temp T: 19.90 H: 45.00
2016-02-23_18:14:48 esp8266temp T: 19.90 H: 46.00
2016-02-23_18:15:21 esp8266temp T: 19.80 H: 45.10
2016-02-23_18:15:53 esp8266temp T: 19.80 H: 45.10
2016-02-23_18:16:25 esp8266temp T: 19.80 H: 45.30
2016-02-23_18:16:57 esp8266temp T: 19.90 H: 45.30
2016-02-23_18:17:30 esp8266temp T: 20.00 H: 45.10
2016-02-23_18:18:02 esp8266temp T: 20.00 H: 45.00
2016-02-23_18:18:34 esp8266temp T: 20.00 H: 45.50
2016-02-23_18:19:07 esp8266temp T: 20.10 H: 45.00
2016-02-23_18:19:39 esp8266temp T: 20.10 H: 46.50
2016-02-23_18:20:11 esp8266temp T: 20.20 H: 45.10
Nach dem Begriff "regular expressions" muss ich gleich mal googlen, das sagt mir nichts.
Evtl. ist das ja zielführend.
@Prof. Dr. Peter Henning
Mir ist leider nicht ganz klar wie das gemeint ist, wo stelle ich das ein?
Dort wo ich das SVG Plot einstelle? (Siehe Bild)
Wenn ich den Wer von 4 auf etwas anderes ändere Merke ich kein Unterschied, auch kann ich die Luftfeuchte nicht auswählen.
Ich glaube hier brauche ich ein etwas grösseren Zaunpfahl.
Danke Cubiator
2016-02-23_18:20:11 esp8266temp T: 20.20 H: 45.10
-->>
Spalte 1: 2016-02-23_18:20:11
Spalte 2: esp8266temp
Spalte 3: T:
Spalte 4: 20.20
Spalte 5: H:
Spalte 6: 45.10
Alles klar?
Ich nehme alles zurück!
Die Spalte auf 6 zu stellen hat wirklich geholfen, keine Ahnung warum das gestern nicht ging.
Aber was habe ich damit eingestellt?
Gruß
Cubiator
Ihr seid Spitze!
Und die Trennung ist dann jeweils an den Leerzeichen?
Danke Euch für Eure Hilfe.
Zitat von: cubiator am 23 Februar 2016, 18:31:00
...Ich glaube hier brauche ich ein etwas grösseren Zaunpfahl.
Dein Screenshot für den SVG-Plot sieht schon ganz okay aus.
Wie hast Du das Logfile definiert?
Hier solltest Du sowas in der Art bei der Regexp haben:
REGEXP Sensor_02:T:.*
Damit loggst Du quasi nur die Zeile mit Temperatur - und Luftfeuchte-Angabe; wie auch von Dir gepostet.
Der "Trick" für die Unterscheidung ist der:
logtype temp4hum6:Temp/Hum,text
Im Plot-Editor wählst Du dann den selben Log-Eintrag aus (hast ja auch nichts anderes) und dann die Spalten.
Evtl. musst Du nach der Auswahl des Logfiles erst einmal speichern, damit das übernommen wird.
Du erkennst das eigentlich daran, dass Dir sonst kein Inhalt Deines Logfiles als "Exampel lines for input" angeboten wird.
(//)
Ich glaube mit dem Regexp muss ich mich einmal befassen...
Dazu Habe ich einmal einen Screenshot angehängt was bei mir unter dem Logfile abgelegt ist.
Aber mit den Spalten habe ich es dann ja hinbekommen.
Regexp brauchst Du im Prinzip nur, wenn Du etwas eingrenzen oder verändern möchtest.
Also beispielsweise wie bei meinem Sensor im Logfile nur alle Events abspeichern, die mit "T:" beginnen und irgendetwas (.*) dahinter haben dürfen.
Damit speicher ich also alle anderen Events (state, temperature, humidity, battery) nicht ab.
Das hält das Logfile schlank, vermindert die Schreibzugriffe, und macht die Ploterstellung schneller.
Wenn eine Angabe nicht "passend" ist, kannst Du mittels Regexp auch Veränderungen vornehmen; zum Beispiel bei einem Temperaturwert aus dem Punkt ein Komma machen, damit die Sprachausgabe funktioniert.
Ahhh!
Langsam wird es klarer, da lese ich mich noch einmal ein.
Danke Cubiator
Zitat von: cubiator am 23 Februar 2016, 18:41:45
Und die Trennung ist dann jeweils an den Leerzeichen?
So ist es!
Zu Regexp (http://www.fhemwiki.de/wiki/Regul%C3%A4rer_Ausdruck)- an vielen Stellen (notify und co) kannst Du Dir mit dem Regexp Wizards etwas zusammen klicken. Beim Plot ist das etwas komplexer und schwieriger als Anfänger. Wenn Du im Wiki (http://www.fhemwiki.de/wiki/Hauptseite) mal nach $fld suchst findest Du ein bisschen was zum lesen. Hier (http://heinz-otto.blogspot.de/2015/01/fhem-im-svg-plot-die-kurve-verschieben.html)habe ich auch mal was ganz simples aufgeschrieben.
Gruß Otto
Na, da empfehle ich aber doch eine anerkannte Quelle, um sich das selbst beizubringen:
https://wiki.selfhtml.org/wiki/Perl/Regul%C3%A4re_Ausdr%C3%BCcke
LG
pah
Hallo Zusammen.
habe da ein ähnliches Problem !!
Ich bekomme von einem Sensor folgende Einträge, die auch entsprechend gelogt werden !
2016-03-06_10:19:29 Temp.Sens.s02 T: 1.6 H: 90.0
2016-03-06_10:19:29 Temp.Sens.s02 temperature: 1.9
2016-03-06_10:30:23 Temp.Sens.s02 T: 1.9 H: 90.0
2016-03-06_10:30:23 Temp.Sens.s02 humidity: 90.0
2016-03-06_10:31:25 Temp.Sens.s02 T: 1.9 H: 90.0
2016-03-06_10:31:25 Temp.Sens.s02 humidity: 90.0
2016-03-06_10:32:21 Temp.Sens.s02 T: 1.9 H: 90.0
2016-03-06_10:32:21 Temp.Sens.s02 temperature: 2.3
Ich möchte den LOG Eintrag auf die Zeile mit T: und H: begrenzen.
Hier meine folgende LOG defeinition, die ich aus einem Beispiel übernommen habe.
Internals:
DEF ./log/Temp.Sens.s02-%Y-%m.log Temp.Sens.s02
NAME FileLog_Temp.Sens.s02
NOTIFYDEV Temp.Sens.s02
NR 143
NTFY_ORDER 50-FileLog_Temp.Sens.s02
REGEXP Temp.Sens.s02
STATE active
TYPE FileLog
currentlogfile ./log/Temp.Sens.s02-2016-03.log
logfile ./log/Temp.Sens.s02-%Y-%m.log
Attributes:
createGluedFile 1
logtype logtype temp4hum6:Temp/Hum,text
room _Logs
Könntet Ihr mir ein bischen unter die Arme greifen anhand eines Beispieles ?
Vieel Grüße
Sascha
Hallo Sascha,
bei meinem Aussensensor sieht das so aus:
./log/SensorAussen-%Y.log SensorAussen:T:.*
Gruß Otto
Hallo otto.
D.h. hier muss die weitere Definition erfolgen ?
DEF ./log/Temp.Sens.s02-%Y-%m.log Temp.Sens.s02
Einfach so:
Zitat von: sash.sc am 06 März 2016, 10:52:05
DEF ./log/Temp.Sens.s02-%Y-%m.log Temp.Sens.s02:T:.*
Danke für die Hilfe.
Auf der Seite vom LogFile gibt es einen Punkt. Siehe Bild 1
Dort habe ich den Eintrage auf State:* geändert, da die Werte die ich habe will im State gespeichert/übergeben werden !
Habe dann die alte RegExpression gelöscht.
Muss jetzt nur noch den SVG Plot anpassen.
Hoffe so das LOG File kleiner zu bekommen !
Danke für die Hilfe
Grüße
Sascha
Zitat von: sash.sc am 06 März 2016, 11:01:36
Dort habe ich den Eintrage auf State:* geändert, da die Werte die ich habe will im State gespeichert/übergeben werden !
Habe dann die alte RegExpression gelöscht.
Warum hast Du nicht einfach die RegExp geändert?
Wird so sicher auch gehen...
Viele Wege ....
Ein Paar Button´s drücken ist einfacher, als es direkt einzugeben !! ;-)
naja aber genau dort hättest Du auch T:.* auswählen können. 8)
Geht natürlich auch! Ist ein bisschen kürzer!
;)
Macht sich mit Sicherheit über die Zeit in der Größe des Logfile bemerkbar
Hallo zusammen!
Ich muss nochmal des Verständnisses halber nachfragen.
Mit dem filtern der Werte klappt soweit. Jetzt möchte ich das ganze nur aufzeichnen, wenn sich die Werte im state ändern!
Habe dafür
event-on-change .*
eingesetzt.
Habe noch dazu ein
event-min-intervall. *:300
Eingebaut, damit, wenn sich nix ändert, trotzdem geloggt wird.
Müsste dann aber feststellen, dass manchmal über eine Stunde nix geloggt wird.
Würde das auch mit einem even-on-update gehen?
Die commandref_DE.html ist da nicht wirklich hilfreich.
Irgendwie fehlt Skizze ein bisschen an Beispielen und Erklärung was da passiert bzw nicht passiert.
Gruß Sascha
Gesendet von meinem SM-T560 mit Tapatalk
Du hast aber gesehen das du hier
event-min-intervall. *:300
den Punkt direkt nach intervall stehen hast und dann ein Leerzeichen und dann erst der Stern kommt?
Hier https://forum.fhem.de/index.php/topic,54682.msg462544.html#msg462544 (https://forum.fhem.de/index.php/topic,54682.msg462544.html#msg462544) wurde selbiges mit den Attributen gelöst - nur leider geschlossen und nicht mit gelöst gekennzeichnte.
Vermutlich ist es zu schwer angepinnte Beiträge zu lesen und zu verstehen.
Das war ein Schreibfehler von mir. Natürlich kommt erst eineLeerzeichen, dann Punkt und der Stern mit dem Doppelpunkt und der Zeit dahinter.
Hätte das Event-on-change .* und event-min-intervall in Kombination gehabt. Es sollen auch alle 10 Minuten (event-min-intervall .*:600) ein Wert geloggt werden wurde es aber nicht. Deshalb frage ich nochmal nach.
Danke für die Unterstützung
Gruß Sascha
Gesendet von meinem SM-T560 mit Tapatalk