Heute habe ich mal ein bisschen an meiner Fhem Installation aufgeräumt.
Ich habe u.a. 1 Homematic Temperatur- /Feuchtesonsor und 4 Lacrosse-Sensoren.
Bisher bin ich leidlich gut mit folgender config gefahren:
define TempHum_Bad LaCrosse 07
attr TempHum_Bad IODev myJeeLink
attr TempHum_Bad event-min-interval temperature:300,humidity:300,battery:3600
attr TempHum_Bad event-on-change-reading temperature:0.2,humidity:2,battery
attr TempHum_Bad room LaCrosse
define FileLog_TempHum_Bad FileLog ./log/TempHum_Bad-%Y.log TempHum_Bad
attr FileLog_TempHum_Bad logtype text
attr FileLog_TempHum_Bad room LaCrosse
Was mich daran stört sind die auf zwei Zeilen verteilten readings pro Messung. Wenn ich jetzt noch mit dewpoint anfange habe ich 4 Zeilen pro Messvorgang:
2017-03-05_18:41:44 TempHum_Bad temperature: 20.2
2017-03-05_18:41:44 TempHum_Bad humidity: 53
2017-03-05_18:41:44 TempHum_Bad absFeuchte: 9.3
2017-03-05_18:41:44 TempHum_Bad dewpoint: 10.3
Ich hätte gerne im Logfile ein kurzes Logformat à la:
2017-03-05_14:12:39 TempHum_Bad T: 20.2 H: 53 D: 10.3 A:9.300
Sobald man aber mit event-on-change-reading anfängt kriegt man dieses Format nicht mehr ins Log.
Wenn ich event-on-change-reading weglasse ersaufe ich in Log-Nachrichten.
Wie kriege ich sowohl die Reduktion der Logmenge mittels event-on-change-reading als auch das gewünschte einzeilige Logformat hin?
Momentan habe ich:
define dew_state dewpoint dewpoint .* temperature humidity dewpoint
attr dew_state absFeuchte 1
define TempHum_Bad LaCrosse 07
attr TempHum_Bad IODev myJeeLink
attr TempHum_Bad event-min-interval temperature:300,humidity:300,battery:3600
attr TempHum_Bad event-on-change-reading temperature:0.2,humidity:2,battery
attr TempHum_Bad room LaCrosse
define FileLog_TempHum_Bad FileLog ./log/TempHum_Bad-%Y.log TempHum_Bad
attr FileLog_TempHum_Bad logtype text
attr FileLog_TempHum_Bad room LaCrosse
Danke + Gruß
Also in der Regel ist dieses Logfile dazu da um Plots damit zu erstellen, nicht damit Du da Schönschrift Dir anschauen kann kannst. Also wofür genau brauchst Du das im Log?
Hallo,
Du kannst doch wenn Du willst im Filelog explizit angeben welches Reading geloggt wird. Und wenn es kein Reading gibt das alle Infos enthält, dann erstelle ein userreading.
Gruß Rolf
Erstmal danke für die zwei Rückmeldungen.
@CoolTux: Weil ich damit bei gleichem Informationsgehalt nur ein Drittel der Logmenge brauche. Mein Homematic-Sensor hat seit Januar schon 7MB logs produziert. Außerdem ist das für mich zeilenweise dann besser zu parsen, wenn ich irgendwas damit machen möchte.
@rvideobaer:
Ich glaub damit komme ich meiner Lösung näher. Ich weiß nur noch nicht, wie ich es ihm beibringen soll, dass er nur meinen Wunschwert ins Log schreibt. Wie geht das?
Ein userreading hätte ich so erzeugt:
attr TempHum_Bad userReadings logfriendlyreading {"T: ".ReadingsVal("TempHum_Bad","temperature","")." H: ".ReadingsVal("TempHum_Bad","humidity","")." D: ".ReadingsVal("TempHum_Bad","dewpoint","")." A: ".ReadingsVal("TempHum_Bad","absFeuchte","") }
wobei ich beim Stöbern gesehen habe, dass manche sagen, man solle lieber stateFormat nehmen und das Internal STATE verändern:
attr TempHum_Bad stateFormat {sprintf("T: %.1f H: %.1f D: %.1f A: %.1f", ReadingsVal("TempHum_Bad","temperature",""), ReadingsVal("TempHum_Bad","humidity",""), ReadingsVal("TempHum_Bad","dewpoint",""), ReadingsVal("TempHum_Bad","absFeuchte","") )}
Beides läuft, aber ich weiß nicht, wie ich ihm beibringe, dass er entweder nur den Inhalt von STATE oder eben mein userreading ins log schreiben soll.
Danke nochmal.
Hallo,
das ist eigentlich der einfache teil, wenn Du im Filelog "Regexp parts" und hier das gewünschte auswählst und den teil der alles loggt wegnimmst.
Siehe Bild.
Gruß Rolf
Da bin ich (grad) zu blöd dafür.
Das sieht bei mir ein bißchen anders aus und er bietet mir die neuen userreadings auch gar nicht im Dropdown an...?
Wie poste ich meinen Screenshot richtig, d.h. nicht nur als attachment?
@CoolTux... hier kommt das Popcorn *fang auf*
Popcorn? Ist das irgendein Insider mit dem sich betateilchen und CoolTux gegenseitig signalisieren, dass sie die dollsten Hechte im Teich sind? Nützliches hat keiner von beiden beigetragen.
Zurück zur Sache.
Ich glaube mittlerweile, dass der Ansatz mit addRegexpPart nichts bringt. Ich verstehe das so, dass ich damit den unnützen Rest wegfiltere, aber ich hatte niemals mein userreading im log. Immer nur die readings temperature, humidity, dewpoint, absFeuchte und battery.
Wenn ich es wie folgt so mache bin ich schon relativ nah an dem dran, was ich will,
attr TempHum_Bad userReadings logfriendlyreading {"T: ".ReadingsVal("TempHum_Bad","temperature","")." H: ".ReadingsVal("TempHum_Bad","humidity","")." D: ".ReadingsVal("TempHum_Bad","dewpoint","")." A: ".ReadingsVal("TempHum_Bad","absFeuchte","") }
attr TempHum_Bad event-min-interval logfriendlyreading:300,battery:3600
attr TempHum_Bad event-on-change-reading logfriendlyreading,battery
allerdings spamt mich den Sensor dann immer noch voll, wenn er sich nicht entscheiden kann, ob es nun 19.8 oder 19.9 Grad sind. D.h. die Flexibilität von Thresholds der alten Syntax (temperature:0.2,humidity:2) ist weg.
Noch Ideen / Ansätze?
Danke + Gruß
Zitat von: cb2sela am 06 März 2017, 09:42:29
Popcorn? Ist das irgendein Insider mit dem sich betateilchen und CoolTux gegenseitig signalisieren, dass sie die dollsten Hechte im Teich sind? Nützliches hat keiner von beiden beigetragen.
Nein das bedeutet das wir beide nicht verstehen was das eigentlich bezwecken soll, mal ab von der Idee der geringeren Logmenge.
Wir warten dann einfach auf die Frage wie Du Dein Logfile in nen Plot bekommst. Da fängt dann das Theater nämlich von vorne an.
Auf gut Deutsch, diejenigen die den Sinn dieser Art Logs kennen, verstehen nicht wieso Du das nun unbedingt anders machen willst als das wofür es mal gedacht war.
Naja und so lange wie wir warten bis Du auch zu der Erkenntnis kommst, essen wir halt Popcorn. Unterhaltungswert ist vorhanden.
Grüße
Pfff... okay... ;)
Aber nur weil ich jetzt schon über 4 Stunden mit dem Sch... rumzacker und die investierte Zeit den Wert der gesparten MBs an Logfiles schon lange übersteigt.
Meine Plots mach ich mir übrigens eh selber per gnuplot und bash. Ob ich mir den Wert da jetzt per grep oder sed raushole wär egal. Da hättest Du also lange Popcorn essen können, bis ich deswegen nochmal angekommen wäre - ätsch! ;)
Falls doch noch jemand eine Lösung hat - und sei's zum Spaß - dann nach wie vor gerne her damit.
Hallo,
Dein userreading sollte aber auftauchen. Ich habe 3 bei mir und die werden alle angezeigt. Vielleicht mal ein getconfig ausführen.
Gruß Rolf