diff --git a/fhem/FHEM/98_freezemon.pm b/fhem/FHEM/98_freezemon.pm
index 0af7127bf..84595a39c 100644
--- a/fhem/FHEM/98_freezemon.pm
+++ b/fhem/FHEM/98_freezemon.pm
@@ -22,6 +22,9 @@
#
##############################################################################
# Changelog:
+# 0.0.27: Slightly improved device detection
+# added set Command getFreezes to enable usage of webCmd
+# fixed some commandref typos
# 0.0.26: Get command for Statistics
# remove trailing/leading whitespace for ignored devices
# 0.0.25: Further improved statistics function and clear statistics
@@ -106,7 +109,7 @@ use B qw(svref_2object);
use Blocking;
use vars qw($FW_CSRF);
-my $version = "0.0.26";
+my $version = "0.0.27";
my @logqueue = ();
my @fmCmd = ();
@@ -583,7 +586,7 @@ sub freezemon_ProcessTimer($) {
sub freezemon_Set($@) {
my ( $hash, $name, $cmd, @args ) = @_;
my $usage =
- "Unknown argument $cmd, choose one of active:noArg inactive:noArg clear:statistics_all,statistics_low,all";
+"Unknown argument $cmd, choose one of getFreezes:noArg active:noArg inactive:noArg clear:statistics_all,statistics_low,all";
return "\"set $name\" needs at least one argument" unless ( defined($cmd) );
@@ -638,6 +641,34 @@ sub freezemon_Set($@) {
return "unknown argument $args[0]";
}
}
+ elsif ( $cmd eq "getFreezes" ) {
+ my $ret = "";
+ my @colors = ( "red", "yellow", "green", "white", "gray" );
+ my @freezes = split( ",", ReadingsVal( $name, ".fm_freezes", "" ) );
+ foreach (@freezes) {
+ my $loglevel = 1;
+ my $freeze = $_;
+ if ( $freeze =~ /f:(.*)d:/ ) {
+ $freeze = $1;
+ }
+ my %params = map { split /\:/, $_ } ( split /\ /, AttrVal( $name, "fm_log", "" ) );
+ foreach my $param ( reverse sort { $a <=> $b } keys %params ) {
+ if ( $freeze > $param ) {
+ $loglevel = $params{$param};
+ last;
+ }
+ }
+ $_ =~ s/(?<=.{240}).{1,}$/.../;
+ $_ =~ s/&%%CSRF%%/$FW_CSRF/;
+ $_ =~ s/#&%/,/g;
+ $ret .= "" . $loglevel . " - " . $_ . "
";
+
+ }
+
+ return "" . $ret . "";
+
+ }
+
else {
return $usage;
}
@@ -1035,13 +1066,24 @@ sub freezemon_getDevice($$) {
#Log3 $name, 5, "[Freezemon] $name found a REF $fn " . Dumper( ${$arg} );
}
}
+ elsif ( ref($shortarg) eq "" ) {
+ Log3 $name, 5,
+ "[Freezemon] $name found something that's not a REF $fn " . ref($shortarg) . " " . Dumper($shortarg);
+
+ ( undef, $shortarg ) = split( /:|;/, $shortarg, 2 );
+ }
+
else {
- #Log3 $name, 3, "[Freezemon] $name found something that's not a HASH $fn ".ref($shortarg)." ".Dumper($shortarg);
+ Log3 $name, 5,
+ "[Freezemon] $name found something that's a REF but not a HASH $fn "
+ . ref($shortarg) . " "
+ . Dumper($shortarg);
+
$shortarg = "N/A";
}
if ( !defined($shortarg) ) {
- #Log3 $name, 5, "Freezemon: something went wrong $fn " . Dumper($arg);
+ Log3 $name, 5, "Freezemon: something went wrong $fn " . Dumper($arg);
$shortarg = "N/A";
}
else {
@@ -1502,14 +1544,14 @@ sub freezemon_getLogPath($) {
freezemon
- FREEZEMON Überwacht - Ähnlich wie PERFMON mögliche Freezes, allerdings ist FREEZEMON ein echtes Modul und hat daher:
+ 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
+ - 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
+ - zusätzliche Funktionalität - die versucht das den Freeze verursachende Device zu identifizieren
- 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.
- 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.
+ 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.
+ 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.
@@ -1524,12 +1566,12 @@ sub freezemon_getLogPath($) {
Set
- - inactive: deaktiviert das Device (identisch zum Attribut "disable", aber ohne die Notwendigkeit su "saven".
+ - inactive: deaktiviert das Device (identisch zum Attribut "disable", aber ohne die Notwendigkeit zu "saven".
- active: reaktiviert das Device nachdem es auf inactive gesetzt wurde
- clear:
-
- statistics_all: löscht die Statistik (d.h. löscht alle readings die für die statistics erzeugt wurden)
- - statistics_low: löscht Statistiken mit geringer Bedeutung (siehe Attribut fm_statistics_low)
- - all: Löscht alle readings (inklusive der Liste der letzten 20 Freezes).
+ - statistics_all: löscht die Statistik (d.h. löscht alle readings die für die statistics erzeugt wurden)
+ - statistics_low: löscht Statistiken mit geringer Bedeutung (siehe Attribut fm_statistics_low)
+ - all: Löscht alle readings (inklusive der Liste der letzten 20 Freezes).
@@ -1538,9 +1580,9 @@ sub freezemon_getLogPath($) {
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.
+ - 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.
- log: gibt Zugriff auf die Logfiles die geschrieben werden, wenn fm_logFile aktiv ist
- - statistic: Stellt eine schöner formatierte Übersicht der top 20 Freeze Devices aus der Freeze Statistik zur Verfügung
+ - statistic: Stellt eine schöner formatierte übersicht der top 20 Freeze Devices aus der Freeze Statistik zur Verfügung
@@ -1549,13 +1591,13 @@ sub freezemon_getLogPath($) {
- freezeTime: Dauer des Freezes
- - freezeDevice: Liste von möglicherweise den Freeze auslösenden Funktionen(Devices)
+ - 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). Aus technischen gründen werden Freezes, die sehr kurz nach Mitternacht auftreten möglicherweise noch zum Vortag gezählt.
- - ftDayLast: speichert die kumulierte Dauer der Freezes des vergangenen Tages (um tageweise plots zu erstellen). Aus technischen gründen werden Freezes, die sehr kurz nach Mitternacht auftreten möglicherweise noch zum Vortag gezählt.
- - fs_.*_c: freeze Statistik - Anzahl der freezes bei denen das Device möglicherweise beteiligt war
- - fs_.*_t: freeze Statistik - kumulierte Dauer der freezes bei denen das Device möglicherweise beteiligt war
+ - fcDayLast: speichert die kumulierte Anzahl der Freezes des vergangenen Tages (um tageweise plots zu erstellen). Aus technischen gründen werden Freezes, die sehr kurz nach Mitternacht auftreten möglicherweise noch zum Vortag gezählt.
+ - ftDayLast: speichert die kumulierte Dauer der Freezes des vergangenen Tages (um tageweise plots zu erstellen). Aus technischen gründen werden Freezes, die sehr kurz nach Mitternacht auftreten möglicherweise noch zum Vortag gezählt.
+ - fs_.*_c: freeze Statistik - Anzahl der freezes bei denen das Device möglicherweise beteiligt war
+ - fs_.*_t: freeze Statistik - kumulierte Dauer der freezes bei denen das Device möglicherweise beteiligt war
- state: s:<StartZeit> e:<EndeZeit> f:<Dauer> d:<Devices>
@@ -1565,25 +1607,25 @@ sub freezemon_getLogPath($) {
Attribute
- - fm_CatchFnCallsfm_CatchFnCalls: wenn aktiviert, werden zusätzlich FHEM-interne Funktionsaufrufe überwacht, in einigen Fällen kann das zusätzliche Hinweise auf den Freeze-Verursacher geben, 0 bedeuted disabled, Zahlen >= 1 geben den Loglevel für des logging lang laufender Funktionsaufrufe an.
- - fm_CatchCmds: wenn aktiviert, werden zusätzlich FHEM-Kommandos überwacht, in einigen Fällen kann das zusätzliche Hinweise auf den Freeze-Verursacher geben, 0 bedeuted disabled, Zahlen >= 1 geben den Loglevel für des logging lang laufender Kommandos an.
- - fm_extDetail: stellt in einigen Fällen zusätzliche Details bei erkannten Freezes zur Verfügung. In wenigen Fällen wurde berichtet, dass FHEM crasht, also vorsichtig verwenden.
- - fm_freezeThreshold: Wert in Sekunden (Default: 1) - Nur Freezes länger als fm_freezeThreshold werden als Freeze betrachtet
+ - fm_CatchFnCallsfm_CatchFnCalls: wenn aktiviert, werden zusätzlich FHEM-interne Funktionsaufrufe überwacht, in einigen Fällen kann das zusätzliche Hinweise auf den Freeze-Verursacher geben, 0 bedeuted disabled, Zahlen >= 1 geben den Loglevel für des logging lang laufender Funktionsaufrufe an.
+ - fm_CatchCmds: wenn aktiviert, werden zusätzlich FHEM-Kommandos überwacht, in einigen Fällen kann das zusätzliche Hinweise auf den Freeze-Verursacher geben, 0 bedeuted disabled, Zahlen >= 1 geben den Loglevel für des logging lang laufender Kommandos an.
+ - fm_extDetail: stellt in einigen Fällen zusätzliche Details bei erkannten Freezes zur Verfügung. In wenigen Fällen wurde berichtet, dass FHEM crasht, also vorsichtig verwenden.
+ - fm_freezeThreshold: Wert in Sekunden (Default: 1) - Nur Freezes länger als fm_freezeThreshold werden als Freeze betrachtet
- fm_forceApptime: Wenn FREEZEMON aktiv ist wird automatisch apptime gestartet (falls nicht aktiv)
- - fm_ignoreDev: Liste von Komma-getrennten Devices. Wenn einzelne möglicherweise einen Freeze verursachenden Device in dieser Liste sind, wird der Freeze ignoriert (nicht geloggt). Bitte das Attribut fm_ignoreMode beachten
+ - fm_ignoreDev: Liste von Komma-getrennten Devices. Wenn einzelne möglicherweise einen Freeze verursachenden Device in dieser Liste sind, wird der Freeze ignoriert (nicht geloggt). Bitte das Attribut fm_ignoreMode beachten
- fm_ignoreMode: Kann die Werte off,single oder all annehmen. Wenn in fm_ignoreDev Devices angegeben sind wirken sich der ignoreMode wie folgt aus:
- all: Ein Freeze wird nur dann ignoriert, wenn alle möglicherweise den Freeze verursachenden Devices in der Ignore-Liste enthalten sind. Dies führt unter Umständen dazu, dass mehr Freezes geloggt werden als erwartet.
- single: Ein Freeze wird ignoriert, sobald ein möglicher Verursacher in der Ignorierliste enthalten ist. Dies führt möglicherweise dazu, dass Freezes übersehen werden.
+ all: Ein Freeze wird nur dann ignoriert, wenn alle möglicherweise den Freeze verursachenden Devices in der Ignore-Liste enthalten sind. Dies führt unter Umständen dazu, dass mehr Freezes geloggt werden als erwartet.
+ single: Ein Freeze wird ignoriert, sobald ein möglicher Verursacher in der Ignorierliste enthalten ist. Dies führt möglicherweise dazu, dass Freezes übersehen werden.
off: Alle Freezes werden geloggt.
Sofern das Attribut nicht gesetzt ist, aber Ignore-Devices angegeben sind, wird im Modus "all" ignoriert.
- 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...
- - fm_logFile: ist ein gültiger Filename (wie z.B. ./log/freeze-%Y%m%d-%H%M%S.log). Wenn gesetzt, werdn Meldungen auf Loglevel 5 (auch wenn global Loglevel < 5 ist) vor einem Freeze in einem seperaten File geloggt.
- - fm_logExtraSeconds: dobsoletes Attribut, wird nicht mehr genutzt und sollte gelöscht werden
- - fm_logKeep: Eine Zahl, die angibt wieviele Logfiles behalten werden sollen. Wenn gesetzt, werden alle Logfiles ausser den letzten n Freezemon Logfiles regelmäßig gelöscht.
- - fm_statistics: EXPERIMENTELL! Erstellt ein reading für jedes Device, das "probably" einen Freeze verursacht hat und zählt, wie oft es möglicherweise an einem Freeze beteiligt war.
- - fm_whitelistSub: Komma-getrennte Liste von Subroutinen wo du sicher bist, dass sie keinen Freeze verursachen. Whitelisted Subs erscheinen nicht in der "possibly caused by" Liste. Typischerweise listet man hier Subroutinen, die regelmäßig in der "possibly caused by" Liste auftauchen, wo du aber wirklich sicher bist, dass sie nicht die Ursache sind. Anmerkung: Die Subroutine ist der initiale Teil (vor dem devicename in Klammern) in Freezemon Logmeldungen.
- - fm_statistics: aktivieren/deaktivieren der Freeze Statistik. Erzeugt Readings für jedes Device, das möglicherweise an einem Freeze beteiligt war und Summiert die Häufigkeit und Dauer dieser Freezes
- - fm_statistics_low: Parametrisierung des clear statistics_low set Kommandos, im Format c:t. Bei clear statistics_low werden alle Statistics-Readings gelöscht deren Count kleiner oder gleich "c" ist UND deren kumulierte Dauer kleiner oder gleich "t" ist
+ - fm_logFile: ist ein gültiger Filename (wie z.B. ./log/freeze-%Y%m%d-%H%M%S.log). Wenn gesetzt, werdn Meldungen auf Loglevel 5 (auch wenn global Loglevel < 5 ist) vor einem Freeze in einem seperaten File geloggt.
+ - fm_logExtraSeconds: dobsoletes Attribut, wird nicht mehr genutzt und sollte gelöscht werden
+ - fm_logKeep: Eine Zahl, die angibt wieviele Logfiles behalten werden sollen. Wenn gesetzt, werden alle Logfiles ausser den letzten n Freezemon Logfiles regelmäßig gelöscht.
+ - fm_statistics: EXPERIMENTELL! Erstellt ein reading für jedes Device, das "probably" einen Freeze verursacht hat und zählt, wie oft es möglicherweise an einem Freeze beteiligt war.
+ - fm_whitelistSub: Komma-getrennte Liste von Subroutinen wo du sicher bist, dass sie keinen Freeze verursachen. Whitelisted Subs erscheinen nicht in der "possibly caused by" Liste. Typischerweise listet man hier Subroutinen, die regelmäßig in der "possibly caused by" Liste auftauchen, wo du aber wirklich sicher bist, dass sie nicht die Ursache sind. Anmerkung: Die Subroutine ist der initiale Teil (vor dem devicename in Klammern) in Freezemon Logmeldungen.
+ - fm_statistics: aktivieren/deaktivieren der Freeze Statistik. Erzeugt Readings für jedes Device, das möglicherweise an einem Freeze beteiligt war und Summiert die Häufigkeit und Dauer dieser Freezes
+ - fm_statistics_low: Parametrisierung des clear statistics_low set Kommandos, im Format c:t. Bei clear statistics_low werden alle Statistics-Readings gelöscht deren Count kleiner oder gleich "c" ist UND deren kumulierte Dauer kleiner oder gleich "t" ist
- disable: aktivieren/deaktivieren der Freeze-Erkennung