mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-04-20 13:26:02 +00:00
00_HMLAN: loadlevel handling
git-svn-id: https://svn.fhem.de/fhem/trunk@8885 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
c30b586564
commit
ad87cf9b5f
@ -77,6 +77,7 @@ sub HMLAN_Initialize($) {
|
|||||||
"respTime " .
|
"respTime " .
|
||||||
"hmProtocolEvents:0_off,1_dump,2_dumpFull,3_dumpTrigger ".
|
"hmProtocolEvents:0_off,1_dump,2_dumpFull,3_dumpTrigger ".
|
||||||
"hmMsgLowLimit ".
|
"hmMsgLowLimit ".
|
||||||
|
"loadLevel ".
|
||||||
"hmLanQlen:1_min,2_low,3_normal,4_high,5_critical ".
|
"hmLanQlen:1_min,2_low,3_normal,4_high,5_critical ".
|
||||||
"wdTimer:5,10,15,20,25 ".
|
"wdTimer:5,10,15,20,25 ".
|
||||||
"logIDs ".
|
"logIDs ".
|
||||||
@ -134,6 +135,7 @@ sub HMLAN_Define($$) {#########################################################
|
|||||||
HMLAN_condUpdate($hash,253);#set disconnected
|
HMLAN_condUpdate($hash,253);#set disconnected
|
||||||
readingsSingleUpdate($hash,"state","disconnected",1);
|
readingsSingleUpdate($hash,"state","disconnected",1);
|
||||||
$hash->{owner} = "";
|
$hash->{owner} = "";
|
||||||
|
HMLAN_Attr("delete",$name,"loadLevel");
|
||||||
|
|
||||||
my $ret = DevIo_OpenDev($hash, 0, "HMLAN_DoInit");
|
my $ret = DevIo_OpenDev($hash, 0, "HMLAN_DoInit");
|
||||||
return $ret;
|
return $ret;
|
||||||
@ -220,10 +222,22 @@ sub HMLAN_Attr(@) {############################################################
|
|||||||
}
|
}
|
||||||
elsif($aName eq "hmMsgLowLimit"){
|
elsif($aName eq "hmMsgLowLimit"){
|
||||||
if ($cmd eq "set"){
|
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+)$/
|
if ( $aVal !~ m/^(\d+)$/
|
||||||
||$aVal<10
|
||$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"){
|
elsif($aName eq "hmId"){
|
||||||
@ -274,6 +288,40 @@ sub HMLAN_Attr(@) {############################################################
|
|||||||
return "logging set to $attr{$name}{$aName}"
|
return "logging set to $attr{$name}{$aName}"
|
||||||
if ($aVal && $attr{$name}{$aName} ne $aVal);
|
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"){
|
elsif($aName eq "dummy"){
|
||||||
if ($cmd eq "set" && $aVal != 0){
|
if ($cmd eq "set" && $aVal != 0){
|
||||||
RemoveInternalTimer( "keepAliveCk:".$name);
|
RemoveInternalTimer( "keepAliveCk:".$name);
|
||||||
@ -319,6 +367,9 @@ sub HMLAN_UpdtMsgLoad($$) {####################################################
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
$hash->{msgLoadCurrent} = $val;
|
$hash->{msgLoadCurrent} = $val;
|
||||||
|
|
||||||
|
my ($r) = grep { $_ <= $val } @{$hash->{helper}{loadLvl}{a}};
|
||||||
|
readingsSingleUpdate($hash,"loadLvl",$hash->{helper}{loadLvl}{h}{$r},1);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1110,15 +1161,11 @@ sub HMLAN_getVerbLvl ($$$$){#get verboseLevel for message
|
|||||||
<b>sys</b> will log system related messages like keep-alive<br>
|
<b>sys</b> will log system related messages like keep-alive<br>
|
||||||
in order to enable all messages set "<b>all,sys</b>"<br>
|
in order to enable all messages set "<b>all,sys</b>"<br>
|
||||||
</li>
|
</li>
|
||||||
<li><a name="HMLANhmMsgLowLimit">hmMsgLowLimit</a><br>
|
<li><a name="HMLANloadLevel">loadLevel</a><br>
|
||||||
max messages level of HMLAN allowed for low-level message queue
|
loadlevel will be mapped to reading vaues. <br>
|
||||||
to be executed. Above this level processing will be postponed.<br>
|
0:low,30:mid,40:batchLevel,90:high,99:suspended<br>
|
||||||
HMLAN will allow a max of messages per hour, it will block sending otherwise.
|
the batchLevel value will be set to 40 if not entered. This is the level at which
|
||||||
After about 90% messages the low-priority queue (currently only CUL_HM autoReadReg)
|
background message generation e.g. for autoReadReg will be stopped<br>
|
||||||
will be delayed until the condition is cleared. <br>
|
|
||||||
hmMsgLowLimit allowes to reduce this level further.<br>
|
|
||||||
Note that HMLAN transmitt-level calculation is based on some estimations and
|
|
||||||
has some tolerance. <br>
|
|
||||||
</li>
|
</li>
|
||||||
<li><a href="#hmId">hmId</a></li>
|
<li><a href="#hmId">hmId</a></li>
|
||||||
<li><a name="HMLANhmKey">hmKey</a></li>
|
<li><a name="HMLANhmKey">hmKey</a></li>
|
||||||
@ -1165,7 +1212,7 @@ sub HMLAN_getVerbLvl ($$$$){#get verboseLevel for message
|
|||||||
<li><B>msgLoadCurrent</B><br>
|
<li><B>msgLoadCurrent</B><br>
|
||||||
Current transmit load of HMLAN. When capacity reaches 100% HMLAN stops sending and waits for
|
Current transmit load of HMLAN. When capacity reaches 100% HMLAN stops sending and waits for
|
||||||
reduction. See also:
|
reduction. See also:
|
||||||
<a href="#hmMsgLowLimit">hmMsgLowLimit</a><br></li>
|
<a href="#HMLANloadLevel">loadLevel</a><br></li>
|
||||||
<li><B>msgLoadHistory</B><br>
|
<li><B>msgLoadHistory</B><br>
|
||||||
Historical transmition load of HMLAN.</li>
|
Historical transmition load of HMLAN.</li>
|
||||||
<li><B>msgParseDly</B><br>
|
<li><B>msgParseDly</B><br>
|
||||||
@ -1252,17 +1299,11 @@ sub HMLAN_getVerbLvl ($$$$){#get verboseLevel for message
|
|||||||
<b>sys</b> zeichnet alle systemrelevanten Meldungen wie keep-alive auf.<br>
|
<b>sys</b> zeichnet alle systemrelevanten Meldungen wie keep-alive auf.<br>
|
||||||
<b>all,sys</b> damit wird die Aufzeichnung aller Meldungen eingeschaltet<br>
|
<b>all,sys</b> damit wird die Aufzeichnung aller Meldungen eingeschaltet<br>
|
||||||
</li>
|
</li>
|
||||||
<li><a name="HMLANhmMsgLowLimit">hmMsgLowLimit</a><br>
|
<li><a name="HMLANloadLevel">loadLevel</a><br>
|
||||||
maximale Anzahl der Meldungen, die HMLAN für weniger wichtige Meldungen zur
|
loadlevel mapped den Auslastungslevel auf die Namen in ein Reading. <br>
|
||||||
Ausführung zulässt. Bei darüber hinaus gehenden Meldungen wird die Verarbeitung aufgeschoben. <br>
|
0:low,30:mid,40:batchLevel,90:high,99:suspended<br>
|
||||||
HMLAM erlaubt eine maximale Anzahl von Meldungen pro Stunde. Wird diese überschritten,
|
Der batchLevel Wert wird auf 40 gesetzt., sollte er fehlen.
|
||||||
wird die Aussendung der Meldungen blockiert. Nach ungefähr 90% der maximalen Anzahl
|
Das ist der Levelbei dem die Hintergrundnachrichten z.B. durch autoReadReg gestoppt werden<br>
|
||||||
wird die Liste der weniger wichtigen Meldungen (momentan nur CUL_HM autoReadReg)
|
|
||||||
solange verzögert abgearbeitet, bis die Rahmenbedingungen eine weitere Verarbeitung
|
|
||||||
wieder zulassen. <br>
|
|
||||||
hmMsgLowLimit ermöglicht eine weitere Reduzierung dieses Grenzwertes.<br>
|
|
||||||
Hinweis: Der HMLAN berechnet die maximale Anzahl der auszusendenden Meldungen
|
|
||||||
auf Basis einiger Annahmen und ist deshalb mit einer Toleranz behaftet.<br>
|
|
||||||
</li><br>
|
</li><br>
|
||||||
<li><a href="#hmId">hmId</a></li><br>
|
<li><a href="#hmId">hmId</a></li><br>
|
||||||
<li><a name="HMLANhmKey">hmKey</a></li><br>
|
<li><a name="HMLANhmKey">hmKey</a></li><br>
|
||||||
@ -1316,7 +1357,7 @@ sub HMLAN_getVerbLvl ($$$$){#get verboseLevel for message
|
|||||||
<li><B>msgLoadCurrent</B><br>
|
<li><B>msgLoadCurrent</B><br>
|
||||||
Aktuelle Funklast des HMLAN. Da HMLAN nur eine begrenzte Kapzität je Stunde hat
|
Aktuelle Funklast des HMLAN. Da HMLAN nur eine begrenzte Kapzität je Stunde hat
|
||||||
Telegramme abzusetzen stellt es bei 100% das Senden ein. Siehe auch
|
Telegramme abzusetzen stellt es bei 100% das Senden ein. Siehe auch
|
||||||
<a href="#hmMsgLowLimit">hmMsgLowLimit</a><br></li>
|
<a href="#loadLevel">loadLevel</a><br></li>
|
||||||
<li><B>msgLoadHistory</B><br>
|
<li><B>msgLoadHistory</B><br>
|
||||||
Funklast vergangener Zeitabschnitte.</li>
|
Funklast vergangener Zeitabschnitte.</li>
|
||||||
<li><B>msgParseDly</B><br>
|
<li><B>msgParseDly</B><br>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user