Neues Modul: 98_FREEZEMON Freezes monitoren und Verursacher identifizieren

Begonnen von KernSani, 05 Februar 2018, 23:27:22

Vorheriges Thema - Nächstes Thema

KernSani

Hallo zusammen,

ich empfinde das aufspüren von "possible freezes" mit Hilfe von PERFMON, ggf. verbose 5 und apptime als extrem umständlich. Daher habe ich auf Basis von PERFMON ein Modul geschnitzt.

(zur Entstehungsgeschichte siehe hier https://forum.fhem.de/index.php/topic,83748.msg760053.html#msg760053)

Bitte beachten! FREEZEMON versucht nur intelligent zu erraten, welches Device einen freeze verursacht haben könnte (basierend auf den Timern die laufen sollten). Es gibt eine Menge anderer Faktoren (intern oder extern) die einen Freeze verursachen können. FREEZEMON ersetzt keine detaillierte Analyse. Das Modul versucht nur Hinweise zu geben, was optimiert werden könnte.

FREEZEMON überwacht - ähnlich wie PERFMON mögliche Freezes, allerdings ist FREEZEMON ein echtes Modul und hat daher:

  • Readings - die geloggt werden können und damit viel einfacher ausgewertet werden können
  • Attribute - mit denen das Verhalten von freezemon beeinflusst werden kann
  • zusätzliche Funktionalität - die versucht das den Freeze verursachende Device zu identifizieren

FREEZEMON ist noch in einem sehr frühen Stadium, läuft bei mir aber seit ein paar Tagen stabil, Daher würde ich mich freuen wenn der ein oder andere sich traut zu testen und Feedback gibt.

Ich würde empfehlen, PERFMON zu deaktivieren, wenn FREEZEMON aktiv ist, da beide auf die selbe Art Freezes erkennen und dann nur alles doppelt kommt.

FREEZEMON wird ohne Parameter definiert.

define myFreezemon freezemon

damit ist der Freezemon aktiv (im Log sollte eine entsprechende Meldung geschrieben werden)

Readings (nach dem ersten erkannten Freeze):
freezeTime: Dauer des Freezes
freezeDevice: Liste von möglicherweise den Freeze auslösenden Funktionen(Devices)
fcDay: kumulierte Anzahl der Freezes pro Tag
ftDay: kumulierte Dauer der Freezes pro Tag
fcDayLast: speichert die kumulierte Anzahl der Freezes des vergangenen Tages (um tageweise plots zu erstellen)
fcDayLast: speichert die kumulierte Dauer der Freezes des vergangenen Tages (um tageweise plots zu erstellen)
state: s:<StartZeit> e:<EndeZeit>f:<Dauer> d:<Devices>

Attribute
fm_freezeTime: Wert in Sekunden (Default: 1) - Nur Freezes länger als fmFreezeTime werden als Freeze betrachtet
fm_forceApptime: Wenn FREEZEMON aktiv ist wird automatisch apptime gestartet (falls nicht aktiv)
fm_log: dynamischer Loglevel, nimmt einen String der Form 10:1 5:2 1:3 entgegen, was bedeutet: Freezes > 10 Sekunden werden mit Loglevel 1 geloggt, >5 Sekunden mit Loglevel 2 usw...
disable: aktivieren/deaktivieren der Freeze-Erkennung

Get
freeze: gibt die letzten 20 freezes zurück (in Kompakter Darstellung, wie im state) - Dies dient einem schnellen Überblick, für detailliertere Auswertungen empfehle ich die Daten zu loggen.



RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

KölnSolar

Prima Oli.

Mir fehlte noch der Link zu Ursprungspost, damit neue Nutzer des Moduls vorab ein Gefühl für das Modul bekommen(und gleiche Fragen nicht noch einmal stellen ::))

Grüße Markus
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

Icinger

Verwende deine Zeit nicht mit Erklärungen. Die Menschen hören (lesen) nur, was sie hören (lesen) wollen. (c) Paulo Coelho

binford6000

Moin KernSani,
hab heute morgen ein Update gemacht. Version 0.0.07 ist im svn. Im Changelog steht aber bereits die 0.0.0.8 drin...
Aus der Modulhilfe:
Zitatfm_freezeTime: Wert in Sekunden (Default: 1) - Nur Freezes länger als fmFreezeTime werden als Freeze betrachtet
fmFreezeTime hast Du ja umbenannt in fm_freezeThreshold. Mit fm_freezeThreshold=5 werden troztdem Freezes <=5s als solche gewertet:
freezeTime 2.627 2018-02-06 09:39:02
Ist das so gewollt?
VG Sebastian



KölnSolar

RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

mahowi

Ich kann das Ergebnis von Sebastian nur bestätigen:

freezeTime         1.905
fm_freezeThreshold 4
CUBe (MAX): HT, FK | CUBe (SlowRF): ESA2000WZ
JeeLink: LaCrosse | nanoCUL433: Smartwares SHS-51001-EU, EM1000GZ
ZME_UZB1: GreenWave PowerNode, Popp Thermostat | SIGNALDuino: HE877, X10 MS14A, Revolt NC-5462,  IT Steckdosen + PIR
tado° | Milight | HUE, Lightify | SmarterCoffee

KernSani

Zitat von: binford6000 am 06 Februar 2018, 09:48:38
Aus der Modulhilfe:fmFreezeTime hast Du ja umbenannt in fm_freezeThreshold. Mit fm_freezeThreshold=5 werden troztdem Freezes <=5s als solche gewertet:
Vielen Dank für den Hinweis, das ist wohl seit Version 0.0.2 so  ???
Fix für das nur teilweise umbenannte Attribut fm_freezeThreshold ist eingecheckt und kommt mit dem morgigen update.
Und die Versionsnummer habe ich diesmal auch aktualisiert ;-)


RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

binford6000

Hi Oli,
ich habe heute morgen ein Update ausgeführt und nun greift "fm_freezeThreshold" und alles läuft wie erwartet!
Und die Versionsnummer passt auch  :D
Was ich noch schick finden würde wären set-Befehle wie:
set SystemFreeze active/inactive
set SystemFreeze reset
"active/inactive" um attr disable 0/1 <save> zu vermeiden und "reset" um alle Readings zurückzusetzen.
Was hältst Du davon? Vielleicht steht das ja sogar schon auf deiner ToDo-List  ;)
VG Sebastian


DarkT

Hallo KernSani,

ist es möglich noch ein Beispiel für die LogFile Konfiguration und eine SVG-Grafik beizufügen, das wäre perfekt.

Vielen Dank für das Module.

lg darkT

KernSani

Zitat von: binford6000 am 07 Februar 2018, 11:59:37
Hi Oli,
Was ich noch schick finden würde wären set-Befehle wie:
set SystemFreeze active/inactive
set SystemFreeze reset
"active/inactive" um attr disable 0/1 <save> zu vermeiden und "reset" um alle Readings zurückzusetzen.
Was hältst Du davon? Vielleicht steht das ja sogar schon auf deiner ToDo-List  ;)
Hi Sebastian,
explizit auf der todo-Liste hatte ich es noch nicht, aber im Hinterkopf war der Gedanke schon. Magst du mal kurz angehängte Version testen? (Neue Set Befehle active, inactive und clear)
Todo: Doku aktualisieren

Grüße,

Oli
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

binford6000

Hi Oli,
ZitatMagst du mal kurz angehängte Version testen? (Neue Set Befehle active, inactive und clear)
Klaro: Schon gemacht und keine Fehler festgestellt.
set, get und clear
funktionieren wie gewünscht!  :D

Um die Anfrage von DarkT aufzugreifen:
Zitatist es möglich noch ein Beispiel für die LogFile Konfiguration und eine SVG-Grafik beizufügen, das wäre perfekt.
Man könnte das Modul ja auch nach der Definition in einen Standard-Raum "Freeze" packen und dort per autocreate
durch dein Modul ein Log- und einen Plot-Device erstellen lassen. Wer es nicht braucht, löscht die devices halt wieder raus. Ist nur so eine Idee...

Ein puristischer (Linux)-Ansatz: Die DEFs der Log- und SVG-Devices in die Modulhilfe oder in einen WIKI-Artikel gepackt.
VG Sebastian

Markus Bloch

Hallo Oli,

ein kleiner Hinweis meinerseits:


        #map new Attribute names
        $hash->{AttrRenameMap} = { "fmForceApptime:0,1" => "fm_forceApptime:0,1",
                           "fmFreezeTime" => "fm_freezeThreshold"
                                                        };


Die AttrRenameMap darf nur reine Attributnamen enthalten (ohne Widgets/Wertelisten), da hier nur Attributname alt zu Attributname neu zugeordnet wird. Also bspw. so:


        #map new Attribute names
        $hash->{AttrRenameMap} = { "fmForceApptime" => "fm_forceApptime",
                           "fmFreezeTime" => "fm_freezeThreshold"
                                                        };


Viele Grüße

Markus
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

Rudy

Zitat von: KernSani am 07 Februar 2018, 18:04:56
Todo: Doku aktualisieren
Dort heißt das Attribut "fm_freezeThreshold" auch noch "fm_freezeTime"  ;)

Rudy

Zitat von: Rudy am 07 Februar 2018, 18:58:46
Dort heißt das Attribut "fm_freezeThreshold" auch noch "fm_freezeTime"  ;)
Sorry. Tut es doch nicht.  :-[ Habe wohl trotz update noch eine alte Version davon laufen. Morgen düfte es dann auch bei mir passen.

Fixel2012

Fhem 5.8 auf Raspi 3, HMLAN und 868MHz CUL mit einigen Komponenten, Z-Wave Rollladenaktoren, Tablet UI, 433 MHz CUL mit Baumarktsteckdosen und Temp Sensoren, Amazon Echo, Echo Dot, 2x SONOS  play1, 1x SONOS Connect AMP,  presence, HUE, Lightify