From ad87cf9b5f61e364908365b43f8127bc784b760f Mon Sep 17 00:00:00 2001
From: martinp876 <>
Date: Sat, 4 Jul 2015 08:45:34 +0000
Subject: [PATCH] 00_HMLAN: loadlevel handling
git-svn-id: https://svn.fhem.de/fhem/trunk@8885 2b470e98-0d58-463d-a4d8-8e2adae1ed80
---
fhem/FHEM/00_HMLAN.pm | 97 ++++++++++++++++++++++++++++++-------------
1 file changed, 69 insertions(+), 28 deletions(-)
diff --git a/fhem/FHEM/00_HMLAN.pm b/fhem/FHEM/00_HMLAN.pm
index f2403c749..8b35c2432 100755
--- a/fhem/FHEM/00_HMLAN.pm
+++ b/fhem/FHEM/00_HMLAN.pm
@@ -77,6 +77,7 @@ sub HMLAN_Initialize($) {
"respTime " .
"hmProtocolEvents:0_off,1_dump,2_dumpFull,3_dumpTrigger ".
"hmMsgLowLimit ".
+ "loadLevel ".
"hmLanQlen:1_min,2_low,3_normal,4_high,5_critical ".
"wdTimer:5,10,15,20,25 ".
"logIDs ".
@@ -116,8 +117,8 @@ sub HMLAN_Define($$) {#########################################################
my @arr = ();
@{$hash->{helper}{q}{apIDs}} = \@arr;
- $hash->{helper}{q}{scnt} = 0;
- $hash->{helper}{q}{loadNo} = 0;
+ $hash->{helper}{q}{scnt} = 0;
+ $hash->{helper}{q}{loadNo} = 0;
$hash->{helper}{q}{loadLast} = 0;
$hash->{msgLoadHistory} = (60/$HMmlSlice)."min steps: "
.join("/",("-") x $HMmlSlice);
@@ -128,12 +129,13 @@ sub HMLAN_Define($$) {#########################################################
my @al = ();
@{$hash->{helper}{log}{ids}} = \@al;
- $hash->{assignedIDsCnt} = 0;#define hash
+ $hash->{assignedIDsCnt} = 0;#define hash
$hash->{helper}{assIdRep} = 0;
$hash->{helper}{assIdCnt} = 0;
HMLAN_condUpdate($hash,253);#set disconnected
readingsSingleUpdate($hash,"state","disconnected",1);
$hash->{owner} = "";
+ HMLAN_Attr("delete",$name,"loadLevel");
my $ret = DevIo_OpenDev($hash, 0, "HMLAN_DoInit");
return $ret;
@@ -220,10 +222,22 @@ sub HMLAN_Attr(@) {############################################################
}
elsif($aName eq "hmMsgLowLimit"){
if ($cmd eq "set"){
- return "hmMsgLowLimit:please add integer between 10 and 120"
+ return "hmMsgLowLimit:please add integer between 10 and 100"
if ( $aVal !~ m/^(\d+)$/
||$aVal<10
- ||$aVal >120 );
+ ||$aVal >100 );
+ delete $defs{$name}{helper}{loadLvl}{h}{$aVal};
+ my %lvlHr = reverse %{$defs{$name}{helper}{loadLvl}{h}};
+ $lvlHr{batchLevel} = $aVal;
+ my %lvlH = reverse %lvlHr;
+ $defs{$name}{helper}{loadLvl}{h} = \%lvlH;
+ my @a = sort { $b <=> $a } keys %lvlH;
+ $defs{$name}{helper}{loadLvl}{a} = \@a;
+ $attr{$name}{loadLevel} = join(",",map{"$_:$lvlH{$_}"}sort keys%lvlH);
+ $defs{$name}{helper}{loadLvl}{bl} = $aVal;
+ }
+ if ($init_done){
+ return "better use loadLevel batchLevel";
}
}
elsif($aName eq "hmId"){
@@ -274,6 +288,40 @@ sub HMLAN_Attr(@) {############################################################
return "logging set to $attr{$name}{$aName}"
if ($aVal && $attr{$name}{$aName} ne $aVal);
}
+ elsif($aName eq "loadLevel"){
+ my %lvlH;
+ my $batchLevel = 40;#defailt batch level
+ if ($cmd eq "set"){
+ foreach my $lvl(sort split(",",$aVal)){
+ next if(!$lvl);
+ my @lvlSp = split(":",$lvl);
+ return "$lvl not parsed. Only one Level per Entry:".scalar @lvlSp if (scalar @lvlSp != 2);
+ return "$lvlSp[0] must be between 0 and 100" if ( $lvlSp[0] !~ m/^(\d+)$/
+ ||$lvlSp[0]<0
+ ||$lvlSp[0] >100 );
+ $lvlH{$lvlSp[0]+0} = $lvlSp[1];
+ }
+ my %lvlHr = reverse %lvlH;
+ $lvlH{0} = "low" if (!defined $lvlH{0});
+ if (!defined $lvlHr{batchLevel}){
+ $lvlH{$batchLevel} = "batchLevel";
+ }
+ else{
+ $batchLevel = $lvlHr{batchLevel};
+ }
+ }
+ else{#delete
+ $lvlH{0} = "low";
+ $lvlH{$batchLevel} = "batchLevel";
+ $lvlH{90} = "high";
+ $lvlH{99} = "suspended";
+ }
+ $defs{$name}{helper}{loadLvl}{h} = \%lvlH;
+ my @a = sort { $b <=> $a } keys %lvlH;
+ $defs{$name}{helper}{loadLvl}{a} = \@a;
+ $defs{$name}{helper}{loadLvl}{bl} = $batchLevel;
+ $attr{$name}{loadLevel} = join(",",map{"$_:$lvlH{$_}"}sort keys%lvlH) if ($cmd ne "set");
+ }
elsif($aName eq "dummy"){
if ($cmd eq "set" && $aVal != 0){
RemoveInternalTimer( "keepAliveCk:".$name);
@@ -319,6 +367,9 @@ sub HMLAN_UpdtMsgLoad($$) {####################################################
}
}
$hash->{msgLoadCurrent} = $val;
+
+ my ($r) = grep { $_ <= $val } @{$hash->{helper}{loadLvl}{a}};
+ readingsSingleUpdate($hash,"loadLvl",$hash->{helper}{loadLvl}{h}{$r},1);
return;
}
@@ -1110,15 +1161,11 @@ sub HMLAN_getVerbLvl ($$$$){#get verboseLevel for message
sys will log system related messages like keep-alive
in order to enable all messages set "all,sys"
-