Logfile von reading um bestimmte Uhrzeit

Begonnen von Adrian08642, 15 Januar 2022, 22:05:16

Vorheriges Thema - Nächstes Thema

Adrian08642

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

MadMax-FHEM

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
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

betateilchen

Ich würde sowas immer über addLog() oder trigger lösen statt über setreading.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Adrian08642

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

Adrian08642

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

MadMax-FHEM

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
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Adrian08642

#6
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

MadMax-FHEM

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
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)