diff --git a/fhem/FHEM/98_freezemon.pm b/fhem/FHEM/98_freezemon.pm index 2a5ff281e..fcdac71aa 100644 --- a/fhem/FHEM/98_freezemon.pm +++ b/fhem/FHEM/98_freezemon.pm @@ -22,6 +22,8 @@ # ############################################################################## # Changelog: +# 0.0.14: Issue with prioQueues (#769427) +# Fixed German Umlauts in German Commandref # 0.0.13: added extended Details attribute # optimization of logging # 0.0.12: problem with older perl versions (Forum #764462) @@ -30,7 +32,7 @@ # 0.0.11: added date to "get freeze" popup # fixed readingsbulkupdate behaviour # fixed that freezemon is inactive after restart -# removed gplots +# removed gplots # 0.0.10: added set commands active, inactive and clear # added gplot files # minor bug fixes @@ -73,7 +75,8 @@ use POSIX; use Time::HiRes qw(gettimeofday); use B qw(svref_2object); -my $version = "0.0.13"; + +my $version = "0.0.14"; ################################### sub freezemon_Initialize($) { @@ -82,7 +85,9 @@ sub freezemon_Initialize($) { # Module specific attributes my @freezemon_attr = - ("fm_forceApptime:0,1 fm_freezeThreshold disable:0,1 fm_log fm_ignoreDev fm_ignoreMode:off,single,all fm_extDetail:0,1"); + ( +"fm_forceApptime:0,1 fm_freezeThreshold disable:0,1 fm_log fm_ignoreDev fm_ignoreMode:off,single,all fm_extDetail:0,1" + ); $hash->{GetFn} = "freezemon_Get"; $hash->{SetFn} = "freezemon_Set"; @@ -179,8 +184,11 @@ sub freezemon_ProcessTimer($) { # Find the internal timers that are still in the hash my @olddev = split( " ", $dev ); + #Log3 $name, 5, "FreezeMon $name passing olddevs: $dev"; + my @newdev = split( " ", freezemon_apptime($hash) ); - + #Log3 $name, 5, "FreezeMon $name passing newdevs: ".join(" ",@newdev); + my %nd = map { $_ => 1 } @newdev; foreach my $d (@olddev) { if ( !exists( $nd{$d} ) ) { @@ -517,21 +525,22 @@ sub freezemon_apptime($) { $shortarg = ( defined($arg) ? $arg : "" ); if ( ref($shortarg) eq "HASH" ) { if ( !defined( $shortarg->{NAME} ) ) { - if (AttrVal($name,"fm_extDetail",0) == 1) { - if ( $fn eq "BlockingKill" ) { - $shortarg = $shortarg->{abortArg}{NAME}; - } - elsif ( $fn eq "HttpUtils_Err" ) { - $shortarg = $shortarg->{hash}{hash}{NAME}; - } - else { - Log3 $name, 5, "Freezemon: found something without a name $fn" . Dumper($shortarg); - $shortarg = "N/A"; - } - } - else { - $shortarg = "N/A"; - } + if ( AttrVal( $name, "fm_extDetail", 0 ) == 1 ) { + if ( $fn eq "BlockingKill" or $fn eq "BlockingStart") { + $shortarg = $shortarg->{abortArg}{NAME}; + Log3 $name, 5, "Freezemon: found $fn " . Dumper($shortarg) ; + } + elsif ( $fn eq "HttpUtils_Err" ) { + $shortarg = $shortarg->{hash}{hash}{NAME}; + } + else { + Log3 $name, 5, "Freezemon: found something without a name $fn" . Dumper($shortarg); + $shortarg = "N/A"; + } + } + else { + $shortarg = "N/A"; + } } else { $shortarg = $shortarg->{NAME}; @@ -560,26 +569,35 @@ sub freezemon_apptime($) { $ret .= ":" . $shortarg . " "; } if (%prioQueues) { - my $nice = minNum( keys %prioQueues ); - my $entry = shift( @{ $prioQueues{$nice} } ); - Log3 $name, 5, "Freezemon: found a prioQueue" . Dumper($entry); - $cv = svref_2object( $entry->{fn} ); - $fnname = $cv->GV->NAME; - $ret .= ":" . $shortarg; - $shortarg = ( defined( $entry->{arg} ) ? $entry->{arg} : "" ); - if ( ref($shortarg) eq "HASH" ) { - - if ( !defined( $shortarg->{NAME} ) ) { - $shortarg = "N/A"; - } - else { - $shortarg = $shortarg->{NAME}; - } - } - ( $shortarg, undef ) = split( /:|;/, $shortarg, 2 ); - $ret .= ":" . $shortarg . " "; + + foreach my $prio (keys %prioQueues) { + foreach my $entry (@{$prioQueues{$prio}}) { + #Log3 $name, 5, "Freezemon: entry is ".Dumper($entry); + $cv = svref_2object( $entry->{fn}); + $fnname = $cv->GV->NAME; + $ret .= "prio-" . $fnname; + + $shortarg = ( defined( $entry->{arg} ) ? $entry->{arg} : "" ); + #Log3 $name, 5, "Freezemon: found a prioQueue arg ".ref($shortarg); + if ( ref($shortarg) eq "HASH" ) { + if ( !defined( $shortarg->{NAME} ) ) { + $shortarg = "N/A"; + } + else { + $shortarg = $shortarg->{NAME}; + } + } + elsif ( ref($shortarg) eq "ARRAY" ) { + $shortarg = $entry->{arg}; + } + + ( $shortarg, undef ) = split( /:|;/, $shortarg, 2 ); + $ret .= ":" . $shortarg . " "; + #Log3 $name, 5, "Freezemon: found a prioQueue, returning $ret"; + } + } } - + return $ret; } @@ -658,7 +676,7 @@ sub freezemon_apptime($) { - + =end html @@ -669,14 +687,14 @@ sub freezemon_apptime($) {

freezemon

Get @@ -708,7 +726,7 @@ sub freezemon_apptime($) {