FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Ralph am 09 Dezember 2020, 12:35:35

Titel: [GELOEST] FileLog - nur bestimmte Events mit bestimmten Werten / Inhalten loggen
Beitrag von: Ralph am 09 Dezember 2020, 12:35:35
Hallo allerseits,
vorher habe ich mir meine Logdatei selber zusammengebastelt.
Dann kam der Tip eines Hero, ich möge doch Filelog die Arbeit machen lassen. Das erschien mir logisch.
Heraus kam dies:
Internals:
   DEF        1800
   FUUID      5fca818a-f33f-a76b-8869-a6a754e240f3bece
   INTERVAL   1800
   LOCAL      0
   NAME       SpeedT
   NR         650
   STATE      ok
   TYPE       speedtest
   READINGS:
     2020-12-09 12:03:21   Speed           MBit/s 1.0 2.6 ms 61.5   dB -93  -14  -61  18096129
     2020-12-09 12:03:21   download        1.03
     2020-12-09 12:03:21   ping            61.531
     2020-12-09 12:03:21   state           ok
     2020-12-09 12:03:21   upload          2.62
   helper:
Attributes:
   path       /usr/local/bin
   room       Internet
   userReadings Speed {my $count=0;;
my @val=split(/,/,(GetHttpFile("o2.spot", "/cgi-bin/mycgi?ACT=GetLTECellinfo")));;
  foreach('RSRP' , 'RSRQ' , 'RSSI', 'TAC' , 'PCI' , 'CELL-ID' , 'EARFCN'){
    fhem("setreading o2spot $_ $val[$count]");;
    $count++;;
  }
},
Speed {"MBit/s ".sprintf("%.1f", ReadingsNum($name,"download","0"))." \t".sprintf("%.1f", ReadingsNum($name,"upload","0"))." \tms ".sprintf("%.1f", ReadingsNum($name,"ping","0"))."   dB ".ReadingsNum("o2spot","RSRP","0")."  ".ReadingsNum("o2spot","RSRQ","0")."  ".ReadingsNum("o2spot","RSSI","0")."  ".ReadingsNum("o2spot","CELL-ID","0")}
   webCmd     statusRequest

mit Filelog diesem:
Internals:
   DEF        ./log/SpeedT-%Y-%m-%d.log SpeedT:Speed:.*
   FD         89
   FUUID      5fca827b-f33f-a76b-db3f-91355c61b11f582c
   NAME       FileLog_SpeedT
   NOTIFYDEV  SpeedT
   NR         651
   NTFY_ORDER 50-FileLog_SpeedT
   REGEXP     SpeedT:Speed:.*
   STATE      active
   TYPE       FileLog
   currentlogfile ./log/SpeedT-2020-12-09.log
   logfile    ./log/SpeedT-%Y-%m-%d.log
   READINGS:
     2020-12-09 12:15:25   linesInTheFile  112
Attributes:
   room       Internet,OLogs

und der Inhalt des Logs sieht pro Aufruf so aus (bitte revers verstehen):

2020-12-09_12:03:21 SpeedT Speed: MBit/s 1.0 2.6 ms 61.5   dB -93  -14  -61  18096129
2020-12-09_12:03:21 SpeedT Speed:
2020-12-09_12:02:35 SpeedT Speed: MBit/s 13.3 10.9 ms 40.7   dB -93  -10  -65  18096129
2020-12-09_12:02:35 SpeedT Speed:


Das Problem: "speedtest" kennt mehrere "state", jeder wird protokolliert.
Und auch noch jeweils eine Leerzeile, woher die kommt ist mir nicht klar.
Die Werte von 12:02:35 kannte ich schon von vorher.
Haben möchte ich im Log aber nur die im Beispiel oberste Zeile von 12:03:21 , alle anderen nicht.
Und dann wäre es auch noch toll, wenn im Log das "SpeedT Speed:" weg wäre.

Hat bitte wer eine Idee ?
Titel: Antw:FileLog - nur bestimmte Events mit bestimmten Werten / Inhalten loggen ?
Beitrag von: frank am 09 Dezember 2020, 12:49:18
1. attr event-on-change-reading .*
2. du hast 2 userreading die Speed erzeugen, wie es aussieht.
das erste erzeugt sicher den "leerwert".
3. nutze zusätzlich einen trigger im userreading.
Titel: Antw:FileLog - nur bestimmte Events mit bestimmten Werten / Inhalten loggen ?
Beitrag von: Ralph am 09 Dezember 2020, 15:36:55
Danke schön für die prompte Antwort

Zitat von: frank am 09 Dezember 2020, 12:49:18
1. attr event-on-change-reading .*
Das zeigte keine Veränderung des Verhaltens.

Zitat von: frank am 09 Dezember 2020, 12:49:18
2. du hast 2 userreading die Speed erzeugen, wie es aussieht.
das erste erzeugt sicher den "leerwert".
Vollkommen richtig erkannt, ein Dummheitsfehler, für den ich mich nur entschuldigen kann.

Zitat von: frank am 09 Dezember 2020, 12:49:18
3. nutze zusätzlich einen trigger im userreading.
Wäre logisch nur den letzten Event auszufiltern.
Versucht habe ich es, aber habe nicht gerafft wie das geht.
Titel: Antw:FileLog - nur bestimmte Events mit bestimmten Werten / Inhalten loggen ?
Beitrag von: Otto123 am 09 Dezember 2020, 16:59:27
Zitat von: Ralph am 09 Dezember 2020, 15:36:55
Versucht habe ich es, aber habe nicht gerafft wie das geht.
Nimm einfach ein reading aus Deiner Berechnung, wo Du der Meinung bist: das ist "führend" - wenn Du Dich nicht entscheiden kannst, ist das Erste besser als keins :)
Speed:download.* {"MBit/s ".sprintf("%.1f", ReadingsNum($name,"download","0"))." \t".sprintf("%.1f", ReadingsNum($name,"upload","0"))." \tms ".sprintf("%.1f", ReadingsNum($name,"ping","0"))."   dB ".ReadingsNum("o2spot","RSRP","0")."  ".ReadingsNum("o2spot","RSRQ","0")."  ".ReadingsNum("o2spot","RSSI","0")."  ".ReadingsNum("o2spot","CELL-ID","0")}
Also es muss ein Reading sein, wo Du sagst: Wenn sich dies ändert soll das userReading auch neu gemacht werden. Ein Reading was nicht ändert und nur ausgelesen wird wäre nicht zielführend.
Titel: Antw:FileLog - nur bestimmte Events mit bestimmten Werten / Inhalten loggen ?
Beitrag von: Ralph am 09 Dezember 2020, 18:46:19
Speed:download.*

Ich folge Dir total, allein obige Methode fehlte mir. Danke sehr.