Hallo Zusammen,
bin gerade dabei mein Logging ein wenig am überarbeiten. Soll heißen ich möchte für einen Temperatursensor, der alle 4 Sekunden Daten sendet einen festen "Log-Intervall" von 15 Minuten einstellen. Aber irgendwie funktioniert das nicht.
Hier mal ein List vom Device:
Internals:
CFGFN
DEF 0A
IODev LaCrosseGateway
LASTInputDev LaCrosseGateway
LaCrosseGateway_MSGCNT 21152
LaCrosseGateway_TIME 2018-10-06 07:13:29
LaCrosse_lastRcv 2018-10-06 07:13:29
MSGCNT 21151
NAME Temp_Zimmer_Svenja
NR 301
STATE T: 19.6 H: 52 D: 9.5
TYPE LaCrosse
addr 0A
battery_new 0
bufferedH
bufferedT
corr1 0
corr2 0
previousH 52
previousT 19.6
sensorType 0=T(H)
Helper:
DBLOG:
battery:
logdb:
TIME 1538802409.63025
VALUE ok
dewpoint:
logdb:
TIME 1538802409.63025
VALUE 9.5
humidity:
logdb:
TIME 1538802409.63025
VALUE 52
state:
logdb:
TIME 1538802788.96021
VALUE T: 19.6 H: 52 D: 9.5
temperature:
logdb:
TIME 1538802409.63025
VALUE 19.6
READINGS:
2018-10-06 07:13:29 battery ok
2018-10-06 07:13:29 dewpoint 9.5
2018-10-06 07:13:29 humidity 52
2018-10-06 07:13:08 state T: 19.6 H: 52 D: 9.5
2018-10-06 07:13:29 temperature 19.6
Attributes:
DbLogExclude .*
DbLogInclude state
IODev LaCrosseGateway
doAverage 1
doDewpoint 1
event-min-interval state:20
event-on-change-reading state
event-on-update-reading .*
room 105_LaCrosse
Die hier im Beispiel angegebenen 20 Sekunden werden nicht berücksichtigt. Es wird bei jeder Änderung von "state" ein Eintrag in die Datenbank gemacht. Ich glaube ich sehe im Moment den Wald vor lauter Bäumen nicht. Hoffe es kann mich jemand mal in die richtige Richtung schubsen. Mit der Commandref und den entsprechenden Wechselwirkungen habe ich mich schon beschäftigt. :-(
Gruß
Markus
Hallo Markus,
wenn ich es richtig verstanden habe, hast du zwei Teilprobleme.
1. willst du regelmäßig Readings des Tempsensors in einem festen Intervall alle 15 Minuten loggen
2. soll "state" nicht bei jeder Änderung,sondern mit einem Mindestabstand von 20 Sekunden geloggt werden.
Ist das so richtig verstanden ?
LG,
Heiko
Vermute die 20sek sind zum testen und werden wenn es funktioniert auf 900 hochgezogen.
Ich vermute das Problem hängt an dem event-on-update .*
Dadurch wird bei jedem reading Update ein Event erzeugt.
Nimm das mal raus.
Gesendet von meinem Doogee S60 mit Tapatalk
Zitat von: Frank_Huber am 06 Oktober 2018, 07:54:56
Vermute die 20sek sind zum testen und werden wenn es funktioniert auf 900 hochgezogen.
Ich vermute das Problem hängt an dem event-on-update .*
Dadurch wird bei jedem reading Update ein Event erzeugt.
Nimm das mal raus.
Gesendet von meinem Doogee S60 mit Tapatalk
Ja genau die 20 Sekunden sind nur zum testen. Wenn es funktioniert will ich auf 900 oder so hoch.
Habs jetzt so
DbLogExclude battery,dewpoint,hunidity,temperature
IODev LaCrosseGateway
doAverage 1
doDewpoint 1
event-min-interval state:20
event-on-change-reading state
room 105_LaCrosse
Aber nun wird jedesmal geloggt wenn state sich ändert. die 20 Sekunden bleiben unberücksichtigt.
Gruß
Markus
Zitat von: Markus. am 06 Oktober 2018, 07:59:34
Ja genau die 20 Sekunden sind nur zum testen. Wenn es funktioniert will ich auf 900 oder so hoch.
Habs jetzt so
DbLogExclude battery,dewpoint,hunidity,temperature
IODev LaCrosseGateway
doAverage 1
doDewpoint 1
event-min-interval state:20
event-on-change-reading state
room 105_LaCrosse
Aber nunwird nichts mehr geloggt
Gruß
Markus
Mach mal DbLogExclude .* und DbLogInclude state
Gesendet von meinem Doogee S60 mit Tapatalk
dann macht er wieder alle 4 Sekunden einen Logeintrag... :-(
2018-10-06 07:33:52|Temp_Zimmer_Svenja|LACROSSE|state: T: 19.5 H: 52 D: 9.4|state|T: 19.5 H: 52 D: 9.4|
2018-10-06 07:59:05|Temp_Zimmer_Svenja|LACROSSE|state: T: 19.5 H: 52.3 D: 9.5|state|T: 19.5 H: 52.3 D: 9.5|
2018-10-06 07:59:09|Temp_Zimmer_Svenja|LACROSSE|state: T: 19.5 H: 52.8 D: 9.6|state|T: 19.5 H: 52.8 D: 9.6|
2018-10-06 07:59:13|Temp_Zimmer_Svenja|LACROSSE|state: T: 19.5 H: 52 D: 9.4|state|T: 19.5 H: 52 D: 9.4|
2018-10-06 08:01:48|Temp_Zimmer_Svenja|LACROSSE|state: T: 19.5 H: 52.3 D: 9.5|state|T: 19.5 H: 52.3 D: 9.5|
2018-10-06 08:01:52|Temp_Zimmer_Svenja|LACROSSE|state: T: 19.5 H: 52.8 D: 9.6|state|T: 19.5 H: 52.8 D: 9.6|
2018-10-06 08:01:57|Temp_Zimmer_Svenja|LACROSSE|state: T: 19.5 H: 52 D: 9.4|state|T: 19.5 H: 52 D: 9.4|
2018-10-06 08:03:10|Temp_Zimmer_Svenja|LACROSSE|state: T: 19.5 H: 52.3 D: 9.5|state|T: 19.5 H: 52.3 D: 9.5|
2018-10-06 08:03:14|Temp_Zimmer_Svenja|LACROSSE|state: T: 19.5 H: 52.8 D: 9.6|state|T: 19.5 H: 52.8 D: 9.6|
2018-10-06 08:03:18|Temp_Zimmer_Svenja|LACROSSE|state: T: 19.5 H: 52 D: 9.4|state|T: 19.5 H: 52 D: 9.4|
2018-10-06 08:03:34|Temp_Zimmer_Svenja|LACROSSE|state: T: 19.5 H: 52.3 D: 9.5|state|T: 19.5 H: 52.3 D: 9.5|
2018-10-06 08:03:38|Temp_Zimmer_Svenja|LACROSSE|state: T: 19.5 H: 52.8 D: 9.6|state|T: 19.5 H: 52.8 D: 9.6|
2018-10-06 08:03:43|Temp_Zimmer_Svenja|LACROSSE|state: T: 19.5 H: 52 D: 9.4|state|T: 19.5 H: 52 D: 9.4|
sqlite>
Gruß
MArkus
Ja, durch das event-on-change-reading.
Nimm den mal noch raus, dann sollte es passen.
Wenn du kuckst hast alle 4 Sekunden ne Änderung.
Da greift das on-change.
Gesendet von meinem Doogee S60 mit Tapatalk
Naja, weil es zwei Teilprobleme sind hatte ich nach meinem richtigen Verständnis gefragt ;)
1. event-min-interval und event-on-change-reading state zusammen beeinflussen sich.
In der Commandref ist dazu ausgeführt:
ZitatEin Event wird nur dann generiert, falls seit dem letzten Auftreten des gleichen Events mindestens minInterval Sekunden vergangen sind.
Falls event-on-change-reading auch spezifiziert ist, dann werden sie mit ODER kombiniert, d.h. wenn einer der beiden Bedingungen wahr
ist.
Lösung wäre die beiden Attribute event-min-interval und event-on-change-reading löschen und DbLogExclude .* zu setzen.
Damit wird erstmal gar nichts geloggt.
2. Um jetzt deinen gewünschten Rythmus von 15 Minuten zu finden, kannst du addLog im DbLog benutzen:
set <dblog> addLog TYPE=LaCrosse:.* !useExcludes
Den obigen Aufruf alle 900 s mit einem AT eingeplant sollte deine Anforderung erfüllen.
LG,
Heiko
mmmh werde das mal testen, da der andere Weg irgendwie nicht funktioniert.
Als Attribute für das Device habe ich nun:
Attributes:
DbLogExclude .*
DbLogInclude state
IODev LaCrosseGateway
doAverage 1
doDewpoint 1
event-min-interval state:20
room 105_LaCrosse
Aber da wird wieder nichts geloggt.
Gruß
Markus
ZitatAber da wird wieder nichts geloggt.
Schrieb ich doch ;) Und das event-min-interval state:20 bitte auch raus.
Wäre aber etwas komplex die Losung Heiko. [emoji6]
Denke der Knackpunkt war dass er beides gleichzeitig angepackt hat. Das "was" und das "wie oft"
Das würde ich immer nacheinander realisieren.
Erst das "was" mit exclude und include,
Dannach das "wie oft" mit den event-on
Evtl gibt es auch ein Attribut für die LaCrosse um den Interval zu setzen.
Gesendet von meinem Doogee S60 mit Tapatalk
nee bin noch ohne den AT dran.
Will das erstmal vestehen wenn ich das nur lokal auf dem device löse...
War nicht richtig meine aussage das Garnichts geloggt wird, es wird bei Änderung von state geloggt. Aber die 20 Sekunden greifen nicht.
Wie oft wird denn geloggt?
Zitat von: Markus. am 06 Oktober 2018, 08:23:58
nee bin noch ohne den AT dran.
Will das erstmal vestehen wenn ich ich nur lokal auf dem device löse...
War nicht richtig meine aussage das Garnichts geloggt wird, es wird bei Änderung von state geloggt. Aber die 20 Sekunden greifen nicht.
Gesendet von meinem Doogee S60 mit Tapatalk
ZitatWäre aber etwas komplex die Losung Heiko.
Hast recht :)
Er kann ja gerne noch verschiedene Wege probieren. Das übt und wenn Markus es dann simpler hinbekommt wäre es um so besser.
Aber dann hat er wieder Möglichkeiten von DbLog kennengelernt an die er sich bei Gelegenheit wieder erinnern kann.
@Markus, das Reading state hat immer eine besondere Rolle weil der Readingname nicht unbedingt im Event vorkommt. Das sieht man mit einem verbose 4 oder 5 vom DbLog recht gut. Das state-Problem würde ich erstmal ausklammern.
Zitat von: Frank_Huber am 06 Oktober 2018, 08:26:01
Wie oft wird denn geloggt?
Gesendet von meinem Doogee S60 mit Tapatalk
Bei jeder Änderung von State wird geloggt ...
Und wie es der Zufall nun Will sind es etwa 20 Sekunden meistens ...
2018-10-06 08:23:33|Temp_Zimmer_Svenja|LACROSSE|state: T: 19.7 H: 64.8 D: 12.9|state|T: 19.7 H: 64.8 D: 12.9|
2018-10-06 08:23:54|Temp_Zimmer_Svenja|LACROSSE|state: T: 19.7 H: 62 D: 12.2|state|T: 19.7 H: 62 D: 12.2|
2018-10-06 08:24:14|Temp_Zimmer_Svenja|LACROSSE|state: T: 19.7 H: 60.8 D: 11.9|state|T: 19.7 H: 60.8 D: 11.9|
2018-10-06 08:24:34|Temp_Zimmer_Svenja|LACROSSE|state: T: 19.7 H: 59.8 D: 11.7|state|T: 19.7 H: 59.8 D: 11.7|
2018-10-06 08:24:59|Temp_Zimmer_Svenja|LACROSSE|state: T: 19.7 H: 58.8 D: 11.4|state|T: 19.7 H: 58.8 D: 11.4|
2018-10-06 08:25:19|Temp_Zimmer_Svenja|LACROSSE|state: T: 19.6 H: 58 D: 11.1|state|T: 19.6 H: 58 D: 11.1|
2018-10-06 08:25:40|Temp_Zimmer_Svenja|LACROSSE|state: T: 19.7 H: 57.8 D: 11.1|state|T: 19.7 H: 57.8 D: 11.1|
2018-10-06 08:26:00|Temp_Zimmer_Svenja|LACROSSE|state: T: 19.7 H: 57 D: 10.9|state|T: 19.7 H: 57 D: 10.9|
2018-10-06 08:26:21|Temp_Zimmer_Svenja|LACROSSE|state: T: 19.6 H: 57 D: 10.9|state|T: 19.6 H: 57 D: 10.9|
2018-10-06 08:26:45|Temp_Zimmer_Svenja|LACROSSE|state: T: 19.7 H: 56 D: 10.7|state|T: 19.7 H: 56 D: 10.7|
2018-10-06 08:27:26|Temp_Zimmer_Svenja|LACROSSE|state: T: 19.7 H: 56 D: 10.7|state|T: 19.7 H: 56 D: 10.7|
2018-10-06 08:28:03|Temp_Zimmer_Svenja|LACROSSE|state: T: 19.6 H: 55.8 D: 10.5|state|T: 19.6 H: 55.8 D: 10.5|
Das passt doch. Es sind immer mindestens 20sek.
Zieh jetzt auf einen höheren Wert und du wirst sehen es tut.
Gesendet von meinem Doogee S60 mit Tapatalk
bin jetzt mal auf "event-min-interval state:300" gegangen und seit 7 Minuten nix geloggt...
Ich lass das mal so laufen um eventuell eine Regelmäßigkeit zu sehen...
Irgendwie passt das noch nicht so ganz.
READINGS:
2018-10-06 08:40:08 battery ok
2018-10-06 08:40:08 dewpoint 9.8
2018-10-06 08:40:08 humidity 53
2018-10-06 08:39:40 state T: 19.6 H: 53 D: 9.8
2018-10-06 08:40:08 temperature 19.6
Attributes:
DbLogExclude .*
DbLogInclude state
IODev LaCrosseGateway
doAverage 1
doDewpoint 1
event-min-interval state:300
room 105_LaCrosse
scheint wirklich so zu sein, das nur geloggt wird wenn state sich ändert und der Zeitintervall unberücksichtigt bleibt.
Das heißt nur DBLoginclude wird berücksichtigt.
Zitat von: Markus. am 06 Oktober 2018, 08:49:17
scheint wirklich so zu sein, das nur geloggt wird wenn state sich ändert und der Zeitintervall unberücksichtigt bleibt.
Das heißt nur DBLoginclude wird berücksichtigt.
? Wie meinst das?
Ne andere Frage, was hast du denn mit den geloggten Daten vor? Zum Plotter ist das ungeeignet.
Gesendet von meinem Doogee S60 mit Tapatalk
Wieso sind die geloggten Daten ungeeignet zum Plotten?
Mit state habe ich nur einen Datensatz im Gegensatz zu einzelnen Readings.
Was ich mit dem DBloginclude gemeint habe ist, das es ja nur bei jeder Änderung geloggt wird. Also das Reading welches darüber definiert wird und event-min-interval garnicht zieht.
Aber kann es sein das ich das event-min-interval falsch verstehe und dafür zwei Bedingungen erfüllt sein müssen?
Zeitintervall UND Änderung von state müssen erfüllt sein?
Und das event-min-interval NICHT einen Eintrag im Log erzwingt?
Weil alles in einem Datensatz steht. Wüsste jetzt nicht wie der plot das wieder trennen kann.
Es wird geloggt bei einer Änderung aber frühestens nach 300 Sek. So ist es doch auch definiert.
Wenn es EXAKT alle 300 Sekunden sein soll dann nimm Heikos Weg mit dem at und addlog.
Gesendet von meinem Doogee S60 mit Tapatalk
so trennt man es im plot
#lp DbLog:logdb,predict,extend=24*60*60:Temp_Zimmer_Svenja:state:::$val=~s/.*H..([\d.]*).*/$1/eg
#lp DbLog:logdb,predict,extend=24*60*60:Temp_Zimmer_Svenja:state:::$val=~s/^T..([\d.]*).*/$1/eg
#lp DbLog:logdb,predict,extend=48*60*60:Temp_Zimmer_Svenja:state:::$val=~s/.*D..([\d.]*).*/$1/eg
mmh denke dann hab ich Event-min wirklich falsch verstanden ;-)
Gruß
Markus
Ah, danke. Wieder was gelernt. [emoji1360][emoji16]
Zitat von: Markus. am 06 Oktober 2018, 09:09:14
so trennt man es im plot
#lp DbLog:logdb,predict,extend=24*60*60:Temp_Zimmer_Svenja:state:::$val=~s/.*H..([\d.]*).*/$1/eg
#lp DbLog:logdb,predict,extend=24*60*60:Temp_Zimmer_Svenja:state:::$val=~s/^T..([\d.]*).*/$1/eg
#lp DbLog:logdb,predict,extend=48*60*60:Temp_Zimmer_Svenja:state:::$val=~s/.*D..([\d.]*).*/$1/eg
Gesendet von meinem Doogee S60 mit Tapatalk
ZitatUnd das event-min-interval NICHT einen Eintrag im Log erzwingt?
Das ist richtig ! :)
event-min-interval erzwingt nichts, das macht der addLog-Befehl.
Deswegen heißt es auch event-MIN-interval und nicht event-Interval.
Einen definierten Intervall gibt es höchstens vom Erzeuger selbst, bei dir also das LaCrosse Device, oder per addLog.
Zitat von: DS_Starter am 06 Oktober 2018, 09:21:50
Das ist richtig ! :)
event-min-interval erzwingt nichts, das macht der addLog-Befehl.
Gesendet von meinem Doogee S60 mit Tapatalk
Danke Euch für eure Hilfe !!!
Werde das mal mit addlog testen :-)
Viele Grüße
Markus
mit addlog funktioniert es so weit nun ;-)
2018-10-06 14:45:25|Temp_Zimmer_Svenja|LACROSSE|addLog|battery|ok|
2018-10-06 15:08:17|Temp_Zimmer_Svenja|LACROSSE|addLog|battery|ok|
2018-10-06 14:45:25|Temp_Zimmer_Svenja|LACROSSE|addLog|dewpoint|11.9|
2018-10-06 15:08:17|Temp_Zimmer_Svenja|LACROSSE|addLog|dewpoint|11.9|
2018-10-06 14:45:25|Temp_Zimmer_Svenja|LACROSSE|addLog|humidity|56|%
2018-10-06 15:08:17|Temp_Zimmer_Svenja|LACROSSE|addLog|humidity|56|%
2018-10-06 14:45:25|Temp_Zimmer_Svenja|LACROSSE|addLog|state|T: 21 H: 56 D: 11.9|
2018-10-06 15:08:17|Temp_Zimmer_Svenja|LACROSSE|addLog|state|T: 21 H: 56 D: 11.9|
2018-10-06 14:45:25|Temp_Zimmer_Svenja|LACROSSE|addLog|temperature|21|°C
2018-10-06 15:08:17|Temp_Zimmer_Svenja|LACROSSE|addLog|temperature|21|°C
Noch eine frage.... Wenn ich statt aller exkludierten readings nur ein reading loggen will...
Wie sieht denn der set Befehl dann aus ?
set logdb addLog TYPE=LaCrosse:state
funkioniert nicht
Gruß
Markus
Zitat
Noch eine frage.... Wenn ich statt aller exkludierten readings nur ein reading loggen will...
Wie sieht denn der set Befehl dann aus ?
Code: [Auswählen]
set logdb addLog TYPE=LaCrosse:state
funkioniert nicht
Ja, Markus ... war da nicht der Zusatz "!useExcludes" dran ? ;)
Wenn du in der Commandref liest wirst du feststellen dass dieser Zusatz immer dann wichtig ist wenn du in den Devices zunächst DbLogExclude verwendest.
Damit addLog dieses Attribut nicht berücksichtigt, braucht man diesen Zusatz.
Also müsstest du schreiben:
set logdb addLog TYPE=LaCrosse:state !useExcludes
Damit sollte es gehen. Das "!" ist die Anlehnung an Perls NICHT. Nur damit man sich das evtl. auch herleiten kann.
LG
Heiko
Hallo Heiko,
jetzt sieht es perfekt aus :-)
2018-10-06 15:31:25|Temp_Zimmer_Svenja|LACROSSE|addLog|state|T: 20.9 H: 55 D: 11.6|
2018-10-06 15:36:25|Temp_Zimmer_Svenja|LACROSSE|addLog|state|T: 21 H: 55 D: 11.6|
2018-10-06 15:41:25|Temp_Zimmer_Svenja|LACROSSE|addLog|state|T: 21 H: 55 D: 11.6|
2018-10-06 15:46:25|Temp_Zimmer_Svenja|LACROSSE|addLog|state|T: 21 H: 55 D: 11.6|
2018-10-06 15:51:25|Temp_Zimmer_Svenja|LACROSSE|addLog|state|T: 21 H: 55 D: 11.6|
2018-10-06 15:56:25|Temp_Zimmer_Svenja|LACROSSE|addLog|state|T: 21 H: 55 D: 11.6|
2018-10-06 16:01:25|Temp_Zimmer_Svenja|LACROSSE|addLog|state|T: 21 H: 55 D: 11.6|
2018-10-06 16:06:25|Temp_Zimmer_Svenja|LACROSSE|addLog|state|T: 21 H: 55 D: 11.6|
2018-10-06 16:11:25|Temp_Zimmer_Svenja|LACROSSE|addLog|state|T: 21 H: 55 D: 11.6|
2018-10-06 16:16:25|Temp_Zimmer_Svenja|LACROSSE|addLog|state|T: 21 H: 55 D: 11.6|
Vielen 1000 Dank nochmal an alle Beteiligten !!!!
Gruß
Markus
Hallo Markus,
prima .... und noch ein Tipp.
Du loggst sehr oft gleiche Werte. Mit der DbRep-Funktion "delSeqDoublets" kannst du überflüssige Datensätze wieder loswerden ohne die Plots zu stören.
Das hat ein anderer User insbesondere in Verbindung mit LaCrosse Thermometern erfolgreich umgesetzt.
Schau mal hier: https://forum.fhem.de/index.php/topic,88388.msg808833.html#msg808833
DbRep ist etwas gewöhnungsbedürftig am Anfang wenn man noch nichts damit gemacht hat, aber das gibt sich schnell denke ich.
LG,
Heiko
Hallo Heiko,
ja das Problem ist meistens, man werkelt bis es funktioniert, will es anschließend optimieren und dann fehlt einem die Zeit :-)
Aber ich werde nun meine ganzen Loggings mal überprüfen und auch delSeqDoublets verwenden.
Nur ist mir noch nicht klar wo und wie seqDoubletsVariance eingesetzt wird..
Und danke für den Tipp !!!!! :-)
Gruß
Markus
Morgen Markus,
ja, Zeit ist immer so ein Problem und eigentlich nie genug davon vorhanden. ;)
Das DbRep Attribut seqDoubletsVariance ist etwas optionales was man aber nur einsetzen kann wenn man rein numerische Werte verarbeitet, also der Readingswert z.B. 11.50 ist.
Bei dir ist es ja ein alphanumerischer String. Dadurch ist seqDoubletsVariance nicht einsetzbar bzw. wirkungslos. Ist aber auch nicht schlimm, solange du diese spezielle Funktion nicht brauchst.
Was macht es ?
Stelle dir vor, du hast aufeinanderfolgende Datensätze mit Werten der Art:
5.0
6.0
3.3
3.0
2.9
2.8
3.2
3.1
3.3
8.5
4.5
usw. Nun möchtest du diese Daten mit delSeqDoublets bereinigen. Im Normalfall würde nichts gelöscht, weil jeder auf den Vorgänger folgende Wert ungleich dem Vorgänger ist. Du möchtest aber dass einander ähnliche Werte als gleich angesehen und gelöscht werden. Dann würdest du z.B. im DbRep
seqDoubletsVariance = 0.4
einstellen und damit erreichen, dass die aufeinanderfolgenden Zahlenwerte
3.3
3.0
2.9
2.8
3.2
3.1
3.3
als gleich angesehen (immer +/- 0.4 zum Vorgänger) und beim delSeqDoublets-Lauf gelöscht werden. In dem Beispiel würden nur die erste und letzte 3.3 verbleiben, die Werte dazwischen gelöscht.
Lg,
Heiko