mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-03-03 16:56:54 +00:00
98_freezemon: bug fixes, removed gplot files
git-svn-id: https://svn.fhem.de/fhem/trunk@16146 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
51c638b537
commit
149368eaa3
@ -22,6 +22,10 @@
|
|||||||
#
|
#
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Changelog:
|
# 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
|
# 0.0.10: added set commands active, inactive and clear
|
||||||
# added gplot files
|
# added gplot files
|
||||||
# minor bug fixes
|
# minor bug fixes
|
||||||
@ -51,7 +55,7 @@
|
|||||||
##############################################################################
|
##############################################################################
|
||||||
# Todo:
|
# Todo:
|
||||||
# adjust to optimized handleTimeout
|
# adjust to optimized handleTimeout
|
||||||
# logs/plots
|
#
|
||||||
#
|
#
|
||||||
##############################################################################
|
##############################################################################
|
||||||
|
|
||||||
@ -117,10 +121,11 @@ sub freezemon_Define($$) {
|
|||||||
$hash->{NAME} = $name;
|
$hash->{NAME} = $name;
|
||||||
|
|
||||||
# start the timer
|
# start the timer
|
||||||
|
Log3 $name, 5, "[$name] => Define IsDisabled:".IsDisabled($name)." init_done:$init_done";
|
||||||
if (!IsDisabled($name) && $init_done) {
|
if (!IsDisabled($name) && $init_done) {
|
||||||
freezemon_start($hash)
|
freezemon_start($hash)
|
||||||
}
|
}
|
||||||
else {
|
elsif (IsDisabled($name)) {
|
||||||
$hash->{STATE} = "inactive";
|
$hash->{STATE} = "inactive";
|
||||||
$hash->{helper}{DISABLED} = 1;
|
$hash->{helper}{DISABLED} = 1;
|
||||||
}
|
}
|
||||||
@ -165,6 +170,7 @@ sub freezemon_ProcessTimer($)
|
|||||||
#Check Freezes
|
#Check Freezes
|
||||||
if ($freeze > AttrVal($name, "fm_freezeThreshold",1))
|
if ($freeze > AttrVal($name, "fm_freezeThreshold",1))
|
||||||
{
|
{
|
||||||
|
|
||||||
my $dev = $hash->{helper}{apptime};
|
my $dev = $hash->{helper}{apptime};
|
||||||
my $guys = "";
|
my $guys = "";
|
||||||
$dev //= "";
|
$dev //= "";
|
||||||
@ -193,7 +199,7 @@ sub freezemon_ProcessTimer($)
|
|||||||
# Build hash with 20 last freezes
|
# Build hash with 20 last freezes
|
||||||
my @freezes = ();
|
my @freezes = ();
|
||||||
push @freezes, split(",", ReadingsVal($name,".fm_freezes",undef));
|
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) {
|
while (keys @freezes > 20) {
|
||||||
shift @freezes;
|
shift @freezes;
|
||||||
}
|
}
|
||||||
@ -213,12 +219,12 @@ sub freezemon_ProcessTimer($)
|
|||||||
my $fcDay = ReadingsVal($name,"fcDay",0)+1;
|
my $fcDay = ReadingsVal($name,"fcDay",0)+1;
|
||||||
my $ftDay = ReadingsVal($name,"ftDay",0)+$freeze;
|
my $ftDay = ReadingsVal($name,"ftDay",0)+$freeze;
|
||||||
readingsBeginUpdate($hash);
|
readingsBeginUpdate($hash);
|
||||||
readingsBulkUpdate($hash, ".fm_freezes", $freezelist, 1);
|
readingsBulkUpdate($hash, ".fm_freezes", $freezelist, 0);
|
||||||
readingsBulkUpdate($hash, "state", "s:$start e:$end f:$freeze d:$dev", 1);
|
readingsBulkUpdate($hash, "state", "s:$start e:$end f:$freeze d:$dev");
|
||||||
readingsBulkUpdate($hash, "freezeTime", $freeze, 1);
|
readingsBulkUpdate($hash, "freezeTime", $freeze);
|
||||||
readingsBulkUpdate($hash, "fcDay", $fcDay, 1);
|
readingsBulkUpdate($hash, "fcDay", $fcDay);
|
||||||
readingsBulkUpdate($hash, "ftDay", $ftDay, 1);
|
readingsBulkUpdate($hash, "ftDay", $ftDay);
|
||||||
readingsBulkUpdate($hash, "freezeDevice",$dev, 1);
|
readingsBulkUpdate($hash, "freezeDevice",$dev);
|
||||||
readingsEndUpdate($hash,1);
|
readingsEndUpdate($hash,1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -227,7 +233,6 @@ sub freezemon_ProcessTimer($)
|
|||||||
$hash->{helper}{intCount} += 1;
|
$hash->{helper}{intCount} += 1;
|
||||||
if ($hash->{helper}{intCount} >= 60) {
|
if ($hash->{helper}{intCount} >= 60) {
|
||||||
$hash->{helper}{intCount} = 0;
|
$hash->{helper}{intCount} = 0;
|
||||||
Log3 $name, 5, "FreezeMon: $name Checking some stuff";
|
|
||||||
|
|
||||||
#Update dayLast readings if we have a new day
|
#Update dayLast readings if we have a new day
|
||||||
my $last = ReadingsVal($name,".lastDay","");
|
my $last = ReadingsVal($name,".lastDay","");
|
||||||
@ -240,11 +245,11 @@ sub freezemon_ProcessTimer($)
|
|||||||
my $fcDay = ReadingsVal($name,"fcDay",0);
|
my $fcDay = ReadingsVal($name,"fcDay",0);
|
||||||
my $ftDay = ReadingsVal($name,"ftDay",0);
|
my $ftDay = ReadingsVal($name,"ftDay",0);
|
||||||
readingsBeginUpdate($hash);
|
readingsBeginUpdate($hash);
|
||||||
readingsBulkUpdate($hash, "fcDayLast", $fcDay, 1);
|
readingsBulkUpdate($hash, "fcDayLast", $fcDay);
|
||||||
readingsBulkUpdate($hash, "ftDayLast", $ftDay, 1);
|
readingsBulkUpdate($hash, "ftDayLast", $ftDay);
|
||||||
readingsBulkUpdate($hash, "fcDay", 0, 1);
|
readingsBulkUpdate($hash, "fcDay", 0);
|
||||||
readingsBulkUpdate($hash, "ftDay", 0, 1);
|
readingsBulkUpdate($hash, "ftDay", 0);
|
||||||
readingsBulkUpdate($hash, ".lastDay", $dnow, 1);
|
readingsBulkUpdate($hash, ".lastDay", $dnow, 0);
|
||||||
readingsEndUpdate($hash,1);
|
readingsEndUpdate($hash,1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -440,19 +445,28 @@ foreach my $i (@intAtSort) {
|
|||||||
$cv = svref_2object($fn);
|
$cv = svref_2object($fn);
|
||||||
$fnname = $cv->GV->NAME;
|
$fnname = $cv->GV->NAME;
|
||||||
$ret .= $intAt{$i}{TRIGGERTIME}."-".$fnname;
|
$ret .= $intAt{$i}{TRIGGERTIME}."-".$fnname;
|
||||||
|
Log3 undef, 3, "Freezemon: Reference found: ".ref($fn)."/$fnname/$fn";
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$ret .= $intAt{$i}{TRIGGERTIME}."-".$fn;
|
$ret .= $intAt{$i}{TRIGGERTIME}."-".$fn;
|
||||||
}
|
}
|
||||||
$arg = $intAt{$i}{ARG};
|
$arg = $intAt{$i}{ARG};
|
||||||
|
|
||||||
|
|
||||||
$shortarg = (defined($arg)?$arg:"");
|
$shortarg = (defined($arg)?$arg:"");
|
||||||
if (ref($shortarg) eq "HASH") {
|
if (ref($shortarg) eq "HASH") {
|
||||||
|
|
||||||
if (!defined($shortarg->{NAME})) {
|
if (!defined($shortarg->{NAME})) {
|
||||||
$shortarg = "N/A";
|
$shortarg = "N/A";
|
||||||
}
|
}
|
||||||
else {
|
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);
|
($shortarg,undef) = split(/:|;/,$shortarg,2);
|
||||||
@ -547,24 +561,6 @@ if(%prioQueues) {
|
|||||||
<li>disable: activate/deactivate freeze detection</li>
|
<li>disable: activate/deactivate freeze detection</li>
|
||||||
</ul>
|
</ul>
|
||||||
</ul>
|
</ul>
|
||||||
<b>Additional Information</b>
|
|
||||||
A Filelog for the device can be created as follows: (Assumption: device is called freezemon, otherwise replace accordingly)<br><br>
|
|
||||||
<code>define FileLog_freezemon FileLog %L/FileLog_freezemon.log freezemon</code><br><br>
|
|
||||||
|
|
||||||
In case you're using configDb, import the gplot files:<br>
|
|
||||||
<code>configDB fileimport ./www/gplot/freezemon_gplot.gplot</code><br>
|
|
||||||
<code>configDB fileimport ./www/gplot/freezemon_day.gplot</code><br><br>
|
|
||||||
|
|
||||||
In case you're using DbLog, adjust the gplot files accordingly.<br><br>
|
|
||||||
|
|
||||||
Create plot with individual freezes:<br><br>
|
|
||||||
<code>define SVG_FileLog_freezemon SVG FileLog_freezemon:freezemon:CURRENT</code><br>
|
|
||||||
<code>attr SVG_FileLog_freezemon plotReplace TL={"Freezes today: ".$data{max1}." - Longest Freeze ".sprintf("%.2f ",$data{max2}) }</code><br><br>
|
|
||||||
|
|
||||||
Create plot with daily sums:<br><br>
|
|
||||||
<code>define SVG_FileLog_freezemon_day SVG FileLog_freezemon:freezemon_day:CURRENT</code><br>
|
|
||||||
<code>attr SVG_FileLog_freezemon_day fixedrange month</code><br>
|
|
||||||
<code>attr SVG_FileLog_freezemon_day plotReplace TL={"Max Freezes: ".$data{max1}." - Max Freezetime ".sprintf("%.2f ",$data{max2}) }</code><br>
|
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
@ -637,24 +633,6 @@ if(%prioQueues) {
|
|||||||
<li>disable: aktivieren/deaktivieren der Freeze-Erkennung</li>
|
<li>disable: aktivieren/deaktivieren der Freeze-Erkennung</li>
|
||||||
</ul>
|
</ul>
|
||||||
</ul>
|
</ul>
|
||||||
<b>Zusätzliche Infos</b>
|
|
||||||
Ein Filelog für das Device kann wie folgt angelegt werden: (Annahme: Das Device heisst freezemon, ansonsten entsprechend ersetzen)<br><br>
|
|
||||||
<code>define FileLog_freezemon FileLog %L/FileLog_freezemon.log freezemon</code><br><br>
|
|
||||||
|
|
||||||
Bei Verwendung von configDb, die gplot files importieren:<br>
|
|
||||||
<code>configDB fileimport ./www/gplot/freezemon_gplot.gplot</code><br>
|
|
||||||
<code>configDB fileimport ./www/gplot/freezemon_day.gplot</code><br><br>
|
|
||||||
|
|
||||||
Bei Verwendung von DbLog, die gplot files entsprechend anpassen.<br><br>
|
|
||||||
|
|
||||||
Ein plot mit den einzelnen Freezes:<br><br>
|
|
||||||
<code>define SVG_FileLog_freezemon SVG FileLog_freezemon:freezemon:CURRENT</code><br>
|
|
||||||
<code>attr SVG_FileLog_freezemon plotReplace TL={"Freezes today: ".$data{max1}." - Longest Freeze ".sprintf("%.2f ",$data{max2}) }</code><br><br>
|
|
||||||
|
|
||||||
Ein Plot mit den Tageswerten:<br><br>
|
|
||||||
<code>define SVG_FileLog_freezemon_day SVG FileLog_freezemon:freezemon_day:CURRENT</code><br>
|
|
||||||
<code>attr SVG_FileLog_freezemon_day fixedrange month</code><br>
|
|
||||||
<code>attr SVG_FileLog_freezemon_day plotReplace TL={"Max Freezes: ".$data{max1}." - Max Freezetime ".sprintf("%.2f ",$data{max2}) }</code><br>
|
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
@ -1,20 +0,0 @@
|
|||||||
# Simple plot for Freezemon daily view
|
|
||||||
# Created by KernSani 2018-02-07 19:21:40
|
|
||||||
|
|
||||||
set terminal png transparent size <SIZE> crop
|
|
||||||
set output '<OUT>.png'
|
|
||||||
set xdata time
|
|
||||||
set timefmt "%Y-%m-%d_%H:%M:%S"
|
|
||||||
set xlabel " "
|
|
||||||
set title '<TL>'
|
|
||||||
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 "<IN>" using 1:2 axes x1y1 title 'FreezeCount' ls l1fill lw 1 with bars,\
|
|
||||||
"<IN>" using 1:2 axes x1y2 title 'FreezeTime' ls l0fill lw 1 with bars
|
|
@ -1,22 +0,0 @@
|
|||||||
# Simple plot for Freezemon
|
|
||||||
# Created by KernSani 2018-02-07 19:21:40
|
|
||||||
|
|
||||||
set terminal png transparent size <SIZE> crop
|
|
||||||
set output '<OUT>.png'
|
|
||||||
set xdata time
|
|
||||||
set timefmt "%Y-%m-%d_%H:%M:%S"
|
|
||||||
set xlabel " "
|
|
||||||
set title '<TL>'
|
|
||||||
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 "<IN>" using 1:2 axes x1y1 title 'FreezeCount' ls l1 lw 1 with lines,\
|
|
||||||
"<IN>" using 1:2 axes x1y2 title 'FreezeTime' ls l0 lw 1 with lines,\
|
|
||||||
"<IN>" using 1:2 axes x1y2 title 'Freeze' ls l2 lw 1 with points
|
|
Loading…
x
Reference in New Issue
Block a user