Hauptmenü

Logfiles Auswerten

Begonnen von Eddy1983, 04 November 2019, 18:52:59

Vorheriges Thema - Nächstes Thema

Eddy1983

Hallo zusammen,

bestimmt gibt es schon irgendwo die Lösung, ich finde sie nur wieder nicht.

Ich habe folgendes Problem:

Ich habe FHEM auf einem Raspberry laufen. Mit diesem sind eine Fritzbox und AVM DECT-Steckdosen verbunden.
An 2 der Steckdosen habe ich Pumpen hängen die meinen Keller vor dem Grundwasser schützen.

Nun werden bereits Logfiles und Plots erstellt.

Mit den Pumpen gibt es öfter Probleme. Manchmal gehen sie kaputt und laufen nicht mehr, machmal sitzen Sie zu und laufen dauerhaft.

Ich würde nun gerne die Logfiles nach folgendem Schema auswerten:

Die letzten 10 Einträge sind kleiner 200 W --> Pumpe kaputt, mach ein Lämpchen an
Die letzten 10 Einträge sind größer 200 W --> Pumpe sitzt zu, mach ein Lämpchen an

Ein kurzer Auszug aus einem Logfile:

2019-11-04_17:18:48 FBDECT_Fritz.Box_xxxx power: 0.00 W
2019-11-04_17:23:48 FBDECT_Fritz.Box_xxxx power: 0.00 W
2019-11-04_17:28:48 FBDECT_Fritz.Box_xxxx power: 334.95 W
2019-11-04_17:33:48 FBDECT_Fritz.Box_xxxx power: 0.00 W
2019-11-04_17:38:48 FBDECT_Fritz.Box_xxxx power: 0.00 W

Für die Anzeige habe ich mir einen Bilderrahmen mit LED-Streifen gebaut der durch einen ESP angetrieben wird. Das Läuft auch schon gut für ein paar andere Anzeige (Müllkalender, Türen...), nur für das Auswerten der Logfiles habe ich noch keine Lösung.

Natürlich soll das Lämpchen im Fahlerfall nur eingeschaltet werden. Das Rücksetzen des Fehlers würde dann manuell nach der Reparatur passieren.

Hat da vielleicht einer eine einfache Lösung die auch ich nachbauen kann?

Vielen Dank für eure Hilfe.

Eddy1983

evtl. wäre auch das ein Ansatz: https://wiki.fhem.de/wiki/Gleitende_Mittelwerte_berechnen_und_loggen

Vielleicht könnte man damit den Mittelwert der Letzten Stunde oder des letzten Tages auswerten und daraus ein Ereignis erzeugen, dass ich für die Anzeige auswerten kann.

Leider muss ich zugegeben, dass ich das auch nicht verstehen.

Wäre für ein wenig Hilfe sehr Dankbar.

CoolTux

Logfiles auswerten ist der falsche Ansatz. Schau Dir mal watchdog an.
Anscheinend werden alle 5 Minuten Daten aktualisiert. 10 Einträge wären also 50 min.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Eddy1983

Hallo CoolTux,

vielen Dank für deinen Tipp

In der Tat sieht das nach einem besseren Ansatz aus. Aber auch hier muss ich wieder zugeben, dass ich das nur schwer verstehe.
Auch hierzu habe ich nun schon gesucht aber noch nichts gefunden was ich verstehe.

Ich habe über den Event monitor nun mal eine watchdog erstellt. Ich denke ich bräuchte einen für Pumpe kaputt und einen für Pupe sitzt zu.

Das hat der Event monitor  mir erstellt:

define FBDECT_Fritz.Box_08761_xxxx_watchdog_1 watchdog FBDECT_Fritz.Box_08761_xxxx:power:.0.00.W 00:15 SAME {}

Sagen wir, ich möchte, wenn sich der Wert eine Stunde lang nicht unter oder über 200 W bewegt, also entweder 0 W oder 3XX W hält, einen Aktor setzen.

Kann mir das mal jemand zusammen setzen?

Sorry, aber in der Regel programmiere ich nur VBA und da ist alles anders.

Vielen Dank euch.

CoolTux

#4
Ich würde da vielleicht mit kleinen Zwischenschritten arbeiten. Langsam ran tasten.
Als erstes versuche mal zu erkennen wann < 200 und wann > 200.
Das würde ich mit einem userReadings machen.

attr FBDECT_Fritz.Box_08761_xxxx powerAlarm:power:.* { if ( ReadingsNum($name,'power',200) < 200 ) { 'low' } elsif ( ReadingsNum($name,'power',200) > 200 ) { 'high' } else { 'equal' } }
ungetestet und bitte passe die Devicenamen an.

Nun schau erstmal ob hier über haupt etwas gesetzt wird.

Im zweiten Schritt reagierst Du mittels Watchdog auf high und low und sagst Deinem watchdog wenn sich nicht innerhalb einer Stunde der Wert wieder geändert hat löse ein Aktor aus.

defmod wd_FBDECT_Fritz.Box_08761_xxxx watchdog FBDECT_Fritz.Box_08761_xxxx:powerAlarm:.high 0:50:00 FBDECT_Fritz.Box_08761_xxxx:powerAlarm:.(low|equal) set Lampe_Pumpe_sitzt_fest on

Und das selbe mit einem zweiten
defmod wd_FBDECT_Fritz.Box_08761_xxxx watchdog FBDECT_Fritz.Box_08761_xxxx:powerAlarm:.low 0:50:00 FBDECT_Fritz.Box_08761_xxxx:powerAlarm:.(high|equal) set Lampe_Pumpe_kaputt on
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Eddy1983

Vielen Dank schon mal für den neuen Ansatz.

Ich habe die Logzeit erst mal auf eine Minute runter gesetzt.

Folgendes schaltet die LED nun schon mal ein wenn die Pumpe eine Minute aus ist:

define FBDECT_Fritz.Box_08761_xxxx_watchdog_1 watchdog FBDECT_Fritz.Box_08761_xxxx:power:.0.00.W 00:01 SAME set Infotafel pixel 4 255 0 0

Eine Minute natürlich nur zum Test.

Müsste es jetzt nicht auch recht einach gehen, statt SAME > 200 W ab zu fragen.

Ich müsste mir dann noch eine Dummy bauen, der die LED wieder aus macht wenn ich die Pumpe wieder in Gang bekommen habe und ich wenn ich es richtig verstehe müsste der dann auch noch ein trigger auf FBDECT_Fritz.Box_08761_xxxx_watchdog_1 senden, damit dieser wieder aktiv wird.

Was ich noch nicht ganz verstanden habe ist der Teil "FBDECT_Fritz.Box_08761_xxxx:powerAlarm:.(low|equal)".

Bedeutet das, ist Bedingung 1 (SAME 0.00W) erfüllt, läuft der Hund los, oben genanntes ist quasi die Pfeife die den Hund zurück holt, damit er nicht den Nachbarn beißt weil es doch kein Einbrecher ist. Richtig?

Also müsste ich diesen Part noch einfügen und wieder ein <> statt dem "SAME" einbauen, von dem ich wieder nicht weiß wie ich das mache.

Und wieder veilen  vielen Dank für die Hilfe!!

CoolTux

Mein Beispiel war komplett unabhängig von Deinem. Ich habe Quasi Deinen Ansatz nicht weiter gemacht.
Bei Deinem watchdog Beispiel würde er in der Tat erst bei 0.00.W anspringen. Wenn Du sagst das passt so geht es. Weiß jetzt nicht ob er auch ne ganze Weile bei 0.01.W oder 4.00.W verweilen würde. Das musst Du wissen.

Ausgeführt wird der Befehl dann aber in der Tat schon wenn sich der Wert nur Ansatzweise ändert. Aus 0.00.W also 0.01.W wird.
Mein Gedanke war Deine Anforderung mit < 200 und > 200 erstmal im Messdevice selbst in etwas umzuwandeln mit dem man besser arbeiten kann.

Persönlich finde ich Deine Variante sehr starr.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

CoolTux

Hier mal ein einfaches Beispiel zum rumspielen auf Basis von einem Dummy. Damit kannst Du üben



Messaktor
defmod AktorPumpe dummy
attr AktorPumpe event-on-change-reading powerAlarm,power
attr AktorPumpe group Eddy
attr AktorPumpe readingList power
attr AktorPumpe room Test
attr AktorPumpe setList power
attr AktorPumpe stateFormat power
attr AktorPumpe userReadings powerAlarm:power:.* { if ( ReadingsNum($name,'power',200) < 200 ) { 'low' } elsif ( ReadingsNum($name,'power',200) > 200 ) { 'high' } else { 'equal' } }


Watchdog
defmod wd_AktorPumpe watchdog AktorPumpe:powerAlarm:.low 00:00:20 AktorPumpe:powerAlarm:.(high|equal) set Office on
attr wd_AktorPumpe autoRestart 1
attr wd_AktorPumpe group Eddy
attr wd_AktorPumpe room Test



Die Lampe Office im Watchdog kannst Du ja gegen eine Tatsächliche austauschen oder als dummy ein Device Office anlegen. Damit übst Du ohne Deine eigenen Geräte zu belasten.
Das sind Raw Definitionen, Du kannst Du so überall Eintragen wo Du einen Editor für Raw Definitionen hast. Beim f18 Thema zum Beispiel oben auf das Plus klicken und dann dort den Code einfügen. Einzeln für jedes Device.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Eddy1983

Vielen Dank noch mal.

Ich denke ich bin einfach zu dumm.

Ich habe das mal ausprobiert aber wie ich das auf meine Steckdose umgebaut kriege verstehe ich nicht.


attr AktorPumpe userReadings powerAlarm:power:.* { if ( ReadingsNum($name,'power',200) < 200 ) { 'low' } elsif ( ReadingsNum($name,'power',200) > 200 ) { 'high' } else { 'equal' } }


Ich habe mir nun folgenden dummy gebaut:


define di_lamp DOIF ([FBDECT_Fritz.Box_08761_xxx:power:d] > 200) (set PumpeHofStatus An) DOELSEIF ([FBDECT_Fritz.Box_08761_xxx:power:d] < 200) (set PumpeHofStatus Aus)
setuuid di_lamp 5dc1beaa-f33f-98a3-351e-170d0d218f82a40e
attr di_lamp do always

define PumpeHofStatus dummy
setuuid PumpeHofStatus 5dc1c545-f33f-98a3-3f0b-a07cc1d258a016c5
attr PumpeHofStatus room Test
attr PumpeHofStatus setList An Aus


Das funktioniert auch. Hier habe ich jetzt ja das reading "State" in dem Dummy, das An oder Aus annehmen kann.
Das habe ich dann wie folgt versucht in den Aktor zu übernehmen:


define wd_AktorPumpe watchdog PumpeHofStatus:state:.An 00:00:05 PumpeHofStatus:state:.(Aus|equal) set Infotafel pixel 4 255 0 0
setuuid wd_AktorPumpe 5dc1d114-f33f-98a3-3bc3-0b2601b49725bcc2
attr wd_AktorPumpe autoRestart 1
attr wd_AktorPumpe group Eddy


Ich hätte nun erwartet, dass der watchdog wenn PumpeHofStatus den State An bekommt nach 5 Sekunden mein Lämpchen einschaltet.
Der Befehl set Infotafel pixel 4 255 0 0 funktioniert wenn ich ihn von Hand eingebe.

Ist noch mal jemand so freundlich dem blinden Huhn einen Korn zu geben?

Vielen Dank

Eddy1983

#9
OK, hin und wieder findet auch ein blindes Huhn einen Korn.

Das ist sicher nicht die eleganteste Lösung aber bei mir scheint es zu  funktioniert und ich verstehe es zumindest einigermaßen:


define di_PumpeHof DOIF ([FBDECT_Fritz.Box_08761_xxx:power:d] > 200) (set PumpeHofStatus An) DOELSEIF ([FBDECT_Fritz.Box_08761_xxx:power:d] < 200) (set PumpeHofStatus Aus)
setuuid di_PumpeHof 5dc1beaa-f33f-98a3-351e-170d0d218f82a40e
attr di_PumpeHof do always

define PumpeHofStatus dummy
setuuid PumpeHofStatus 5dc1c545-f33f-98a3-3f0b-a07cc1d258a016c5
attr PumpeHofStatus room Test
attr PumpeHofStatus setList An Aus

define wd_PumpeHofAn watchdog PumpeHofStatus:An 01:00:00 PumpeHofStatus:Aus set Infotafel pixel 4 255 0 0
setuuid wd_PumpeHofAn 5dc1d114-f33f-98a3-3bc3-0b2601b49725bcc2
attr wd_PumpeHofAn autoRestart 1
attr wd_PumpeHofAn group Eddy
attr wd_PumpeHofAn room Test

define wd_PumpeHofAus watchdog PumpeHofStatus:Aus 01:00:00 PumpeHofStatus:An set Infotafel pixel 4 255 0 0
setuuid wd_PumpeHofAus 5dc1e303-f33f-98a3-8e3f-a14f43b40d979bb8
attr wd_PumpeHofAus autoRestart 1
attr wd_PumpeHofAus group Eddy
attr wd_PumpeHofAus room Test


Was mich noch wundert, die wd_PumpeHofAus bekommt immer wieder den "STATE Next: 23:31:47" (die Uhrzeit ändert sich).

wd_PumpeHofAn hat immer den "STATE defined".

Hat jemand eine Idee woran das liegen kann?

---Edit---
Nicht aufgepasst. Je nach Zustand der Pumpe ist natürlich immer einer "defined" und einer "NEXT: Uhrzeit"
----------

Ansonsten vielen lieben Dank für die Hilfe.


CoolTux

Das ist auch eine gangbare Lösung. Hauptsache es funktioniert und Du verstehst wie und warum.


Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net