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 ?
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.
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.
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.
Speed:download.*
Ich folge Dir total, allein obige Methode fehlte mir. Danke sehr.