diff --git a/fhem/FHEM/98_freezemon.pm b/fhem/FHEM/98_freezemon.pm index 0e275538e..627b88a53 100644 --- a/fhem/FHEM/98_freezemon.pm +++ b/fhem/FHEM/98_freezemon.pm @@ -22,6 +22,10 @@ # ############################################################################## # Changelog: +# 0.0.11: added date to "get freeze" popup +# fixed readingsbulkupdate behaviour +# fixed that freezemon is inactive after restart +# removed gplots # 0.0.10: added set commands active, inactive and clear # added gplot files # minor bug fixes @@ -51,7 +55,7 @@ ############################################################################## # Todo: # adjust to optimized handleTimeout -# logs/plots +# # ############################################################################## @@ -117,10 +121,11 @@ sub freezemon_Define($$) { $hash->{NAME} = $name; # start the timer + Log3 $name, 5, "[$name] => Define IsDisabled:".IsDisabled($name)." init_done:$init_done"; if (!IsDisabled($name) && $init_done) { freezemon_start($hash) } - else { + elsif (IsDisabled($name)) { $hash->{STATE} = "inactive"; $hash->{helper}{DISABLED} = 1; } @@ -165,6 +170,7 @@ sub freezemon_ProcessTimer($) #Check Freezes if ($freeze > AttrVal($name, "fm_freezeThreshold",1)) { + my $dev = $hash->{helper}{apptime}; my $guys = ""; $dev //= ""; @@ -193,7 +199,7 @@ sub freezemon_ProcessTimer($) # Build hash with 20 last freezes my @freezes = (); push @freezes, split(",", ReadingsVal($name,".fm_freezes",undef)); - push @freezes, "s:$start e:$end f:$freeze d:$dev"; + push @freezes, strftime("%Y-%m-%d",localtime).": s:$start e:$end f:$freeze d:$dev"; while (keys @freezes > 20) { shift @freezes; } @@ -213,12 +219,12 @@ sub freezemon_ProcessTimer($) my $fcDay = ReadingsVal($name,"fcDay",0)+1; my $ftDay = ReadingsVal($name,"ftDay",0)+$freeze; readingsBeginUpdate($hash); - readingsBulkUpdate($hash, ".fm_freezes", $freezelist, 1); - readingsBulkUpdate($hash, "state", "s:$start e:$end f:$freeze d:$dev", 1); - readingsBulkUpdate($hash, "freezeTime", $freeze, 1); - readingsBulkUpdate($hash, "fcDay", $fcDay, 1); - readingsBulkUpdate($hash, "ftDay", $ftDay, 1); - readingsBulkUpdate($hash, "freezeDevice",$dev, 1); + readingsBulkUpdate($hash, ".fm_freezes", $freezelist, 0); + readingsBulkUpdate($hash, "state", "s:$start e:$end f:$freeze d:$dev"); + readingsBulkUpdate($hash, "freezeTime", $freeze); + readingsBulkUpdate($hash, "fcDay", $fcDay); + readingsBulkUpdate($hash, "ftDay", $ftDay); + readingsBulkUpdate($hash, "freezeDevice",$dev); readingsEndUpdate($hash,1); } @@ -227,8 +233,7 @@ sub freezemon_ProcessTimer($) $hash->{helper}{intCount} += 1; if ($hash->{helper}{intCount} >= 60) { $hash->{helper}{intCount} = 0; - Log3 $name, 5, "FreezeMon: $name Checking some stuff"; - + #Update dayLast readings if we have a new day my $last = ReadingsVal($name,".lastDay",""); my $dnow = strftime("%Y-%m-%d",localtime); @@ -240,11 +245,11 @@ sub freezemon_ProcessTimer($) my $fcDay = ReadingsVal($name,"fcDay",0); my $ftDay = ReadingsVal($name,"ftDay",0); readingsBeginUpdate($hash); - readingsBulkUpdate($hash, "fcDayLast", $fcDay, 1); - readingsBulkUpdate($hash, "ftDayLast", $ftDay, 1); - readingsBulkUpdate($hash, "fcDay", 0, 1); - readingsBulkUpdate($hash, "ftDay", 0, 1); - readingsBulkUpdate($hash, ".lastDay", $dnow, 1); + readingsBulkUpdate($hash, "fcDayLast", $fcDay); + readingsBulkUpdate($hash, "ftDayLast", $ftDay); + readingsBulkUpdate($hash, "fcDay", 0); + readingsBulkUpdate($hash, "ftDay", 0); + readingsBulkUpdate($hash, ".lastDay", $dnow, 0); readingsEndUpdate($hash,1); } @@ -440,19 +445,28 @@ foreach my $i (@intAtSort) { $cv = svref_2object($fn); $fnname = $cv->GV->NAME; $ret .= $intAt{$i}{TRIGGERTIME}."-".$fnname; + Log3 undef, 3, "Freezemon: Reference found: ".ref($fn)."/$fnname/$fn"; } else { $ret .= $intAt{$i}{TRIGGERTIME}."-".$fn; } $arg = $intAt{$i}{ARG}; + $shortarg = (defined($arg)?$arg:""); if (ref($shortarg) eq "HASH") { + if (!defined($shortarg->{NAME})) { - $shortarg = "N/A"; + $shortarg = "N/A"; } else { - $shortarg = $shortarg->{NAME}; + $shortarg = $shortarg->{NAME}; + + if( $fn eq 'notify_Exec' || $fn eq "DOIF_TimerTrigger") { + Log3 undef, 3, "Freezemon: found a DOIF or notify $fn".Dumper($arg); + #my $events = deviceEvents($arg[1], AttrVal($arg[0]->{NAME}, "addStateEvent", 0)); + #$shortarg .= ">>".join( ',', @{$events})."<<"; + } } } ($shortarg,undef) = split(/:|;/,$shortarg,2); @@ -547,25 +561,7 @@ if(%prioQueues) {
  • disable: activate/deactivate freeze detection
  • - Additional Information - A Filelog for the device can be created as follows: (Assumption: device is called freezemon, otherwise replace accordingly)

    - define FileLog_freezemon FileLog %L/FileLog_freezemon.log freezemon

    - - In case you're using configDb, import the gplot files:
    - configDB fileimport ./www/gplot/freezemon_gplot.gplot
    - configDB fileimport ./www/gplot/freezemon_day.gplot

    - - In case you're using DbLog, adjust the gplot files accordingly.

    - - Create plot with individual freezes:

    - define SVG_FileLog_freezemon SVG FileLog_freezemon:freezemon:CURRENT
    - attr SVG_FileLog_freezemon plotReplace TL={"Freezes today: ".$data{max1}." - Longest Freeze ".sprintf("%.2f ",$data{max2}) }

    - - Create plot with daily sums:

    - define SVG_FileLog_freezemon_day SVG FileLog_freezemon:freezemon_day:CURRENT
    - attr SVG_FileLog_freezemon_day fixedrange month
    - attr SVG_FileLog_freezemon_day plotReplace TL={"Max Freezes: ".$data{max1}." - Max Freezetime ".sprintf("%.2f ",$data{max2}) }
    - + @@ -637,24 +633,6 @@ if(%prioQueues) {
  • disable: aktivieren/deaktivieren der Freeze-Erkennung
  • - Zusätzliche Infos - Ein Filelog für das Device kann wie folgt angelegt werden: (Annahme: Das Device heisst freezemon, ansonsten entsprechend ersetzen)

    - define FileLog_freezemon FileLog %L/FileLog_freezemon.log freezemon

    - - Bei Verwendung von configDb, die gplot files importieren:
    - configDB fileimport ./www/gplot/freezemon_gplot.gplot
    - configDB fileimport ./www/gplot/freezemon_day.gplot

    - - Bei Verwendung von DbLog, die gplot files entsprechend anpassen.

    - - Ein plot mit den einzelnen Freezes:

    - define SVG_FileLog_freezemon SVG FileLog_freezemon:freezemon:CURRENT
    - attr SVG_FileLog_freezemon plotReplace TL={"Freezes today: ".$data{max1}." - Longest Freeze ".sprintf("%.2f ",$data{max2}) }

    - - Ein Plot mit den Tageswerten:

    - define SVG_FileLog_freezemon_day SVG FileLog_freezemon:freezemon_day:CURRENT
    - attr SVG_FileLog_freezemon_day fixedrange month
    - attr SVG_FileLog_freezemon_day plotReplace TL={"Max Freezes: ".$data{max1}." - Max Freezetime ".sprintf("%.2f ",$data{max2}) }
    diff --git a/fhem/www/gplot/freezemon_day.gplot b/fhem/www/gplot/freezemon_day.gplot deleted file mode 100644 index 4036ccaa6..000000000 --- a/fhem/www/gplot/freezemon_day.gplot +++ /dev/null @@ -1,20 +0,0 @@ -# Simple plot for Freezemon daily view -# Created by KernSani 2018-02-07 19:21:40 - -set terminal png transparent size crop -set output '.png' -set xdata time -set timefmt "%Y-%m-%d_%H:%M:%S" -set xlabel " " -set title '' -set ytics -set y2tics -set grid -set ylabel "Freezecount" -set y2label "Freezetime" - -#FileLog_freezemon 4:freezemon.fcDayLast\x3a:: -#FileLog_freezemon 4:freezemon.ftDayLast\x3a:: - -plot "" using 1:2 axes x1y1 title 'FreezeCount' ls l1fill lw 1 with bars,\ - "" using 1:2 axes x1y2 title 'FreezeTime' ls l0fill lw 1 with bars \ No newline at end of file diff --git a/fhem/www/gplot/freezemon_gplot.gplot b/fhem/www/gplot/freezemon_gplot.gplot deleted file mode 100644 index c2f72c754..000000000 --- a/fhem/www/gplot/freezemon_gplot.gplot +++ /dev/null @@ -1,22 +0,0 @@ -# Simple plot for Freezemon -# Created by KernSani 2018-02-07 19:21:40 - -set terminal png transparent size crop -set output '.png' -set xdata time -set timefmt "%Y-%m-%d_%H:%M:%S" -set xlabel " " -set title '' -set ytics -set y2tics -set grid -set ylabel "Freezecount" -set y2label "Freezetime" - -#FileLog_freezemon 4:freezemon.fcDay\x3a:: -#FileLog_freezemon 4:freezemon.ftDay\x3a:: -#FileLog_freezemon 4:freezemon.freezeTime\x3a:: - -plot "" using 1:2 axes x1y1 title 'FreezeCount' ls l1 lw 1 with lines,\ - "" using 1:2 axes x1y2 title 'FreezeTime' ls l0 lw 1 with lines,\ - "" using 1:2 axes x1y2 title 'Freeze' ls l2 lw 1 with points \ No newline at end of file