Hallo zusammen,
ich versuche um 23:59 ein reading von einem Modul in Logfile schreibe. Ich will immer nur einen Wert pro Tag drinnen stehen haben und nicht bei Änderung des Wertes.
Hat jemand einen Tipp? Ich habe es probiert mit Filelog und addlog aber irgendwie klappt das nicht so...
Danke für die Hilfe
Gruß Adrian
Wenn du nur EINEN Wert pro Tag in einem FileLog haben willst (RawDef):
defmod atLogOnce at *23:59:00 {my $value = ReadingsVal("Device", "OriginalReading", "Ersatzwert");; fhem("setreading Device LogReading $value");;}
Die letzten Strichpunkte können auch weg ;)
(schaden aber nicht)
Das FileLog halt dann nicht auf das "OriginalReading" sondern eben auf das "LogReading"...
Dann hast du in dem FileLog jeden Tag genau EINEN Wert drin stehen und zwar den, den das OriginalReading eben zu der Zeit hatte...
Wenn du alle Werte des OriginalReadings haben willst aber um GENAU DIESE Uhrzeit sicher einen (zusätzlichen) Eintrag willst, dann:
defmod atLogOnce at *23:59:00 {my $value = ReadingsVal("Device", "OriginalReading", "Ersatzwert");; fhem("setreading Device OriginalReading $value");;}
Somit hast du den letzten Wert um genau diese Uhrzeit noch mal drin stehen...
Gruß, Joachim
Ich würde sowas immer über addLog() oder trigger lösen statt über setreading.
Zitat von: MadMax-FHEM am 16 Januar 2022, 01:36:27
Wenn du nur EINEN Wert pro Tag in einem FileLog haben willst (RawDef):
defmod atLogOnce at *23:59:00 {my $value = ReadingsVal("Device", "OriginalReading", "Ersatzwert");; fhem("setreading Device LogReading $value");;}
Die letzten Strichpunkte können auch weg ;)
(schaden aber nicht)
Das FileLog halt dann nicht auf das "OriginalReading" sondern eben auf das "LogReading"...
Dann hast du in dem FileLog jeden Tag genau EINEN Wert drin stehen und zwar den, den das OriginalReading eben zu der Zeit hatte...
Perfekt das hört sich genau nach dem an was ich brauche.
Vielen Dank
Das mit dem atLogOnce funktioniert tadellos und es zeigt mir auch bei meinem FileLog das ganze als reading an aber leider weiß ich nicht was ich in "Def" des FileLog schreiben muss damit es auch hinzugefügt wird?
Vielen Dank für die Hilfe
Willst du ein extra FileLog für nur den einen Wert oder soll der Wert in ein bestehendes FileLog?
Entweder neues FileLog anlegen (geht auch mit Eventmonitor denke ich) oder eben die da gefundene RegEx an ein bestehendes FileLog anhängen...
Ohne lists keine weitere Hilfe möglich...
Gruß, Joachim
Hallo Joachim,
Der Wert soll einem schon bestehendem FileLog hinzugefügt werden.
Ich hoffe das meinst du mit "lists"?
Internals:
DEF logPV.log LogReading
FD 6
FUUID 61cc44f8-f33f-3611-ac57-2aec150fee52e572
NAME LOG_PV_Garten
NR 152
NTFY_ORDER 50-LOG_PV_Garten
REGEXP LogReading
STATE active
TYPE FileLog
addLogMinInterval 86400
currentlogfile logPV.log
logfile logPV.log
OLDREADINGS:
READINGS:
2022-01-22 22:13:00 LogReading 0.016
2022-01-22 21:32:39 linesInTheFile 0
Attributes:
room PV_Anlage
Internals:
CFGFN
COMMAND {my $value = ReadingsVal("Garten_PV", "daily_total", "daily_average"); fhem("setreading LOG_PV_Garten LogReading $value");}
DEF *22:13:00 {my $value = ReadingsVal("Garten_PV", "daily_total", "daily_average"); fhem("setreading LOG_PV_Garten LogReading $value");}
FUUID 61ec5c5c-f33f-3611-5e22-30533fc3de82dffa
NAME atLogOnce
NR 10523
PERIODIC yes
RELATIVE no
REP -1
STATE Next: 22:13:00
TIMESPEC 22:13:00
TRIGGERTIME 1642972380
TRIGGERTIME_FMT 2022-01-23 22:13:00
TYPE at
READINGS:
2022-01-22 22:13:00 state Next: 22:13:00
Attributes:
Danke für die Hilfe
Gruß Adrian
Wo/wie bist du zu dem FileLog gekommen?
Ist es das wo die Daten ZUSÄTZLICH landen sollen?
Sieht etwas eigenartig aus...
...bzw. hast du dann wohl nur EIN Logfile "für immer"...
https://wiki.fhem.de/wiki/FileLog
https://fhem.de/commandref.html#FileLog
https://fhem.de/commandref_DE.html#FileLog
So wie es aussieht (und wie es definiert ist) landet da ja noch gar nichts drin?
Wie geschrieben: Eventmonitor und da dann einfach ein passendes Filelog anlegen lassen.
Die Regex muss ja mindestens mal so sein?:
LOG_PV_Garten:LogReading
evtl. auch:
LOG_PV_Garten:LogReading.*
Damit das "neue" Reading geloggt wird.
Zitat von: commandref
Der Ausdruck unter regexp wird anhand des Gerätenames überprüft und zwar devicename:event oder der timestamp:devicename:event-Kombination. Der regexp muss mit dem kompletten String übereinstimmen und nicht nur teilweise.
Wenn ein bestehendes FileLog die Daten aufnehmen soll, dann eben die bestehende RegEx erweitern:
BestehendeRegEx|NeueRegEx
Gruß, Joachim