HM-CFG-LAN: Überwachung der 1%-Regel: Unterschied zwischen den Versionen
Sailor (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
K (%M -> %m nach https://forum.fhem.de/index.php/topic,92608.0.html) |
||
(13 dazwischenliegende Versionen von 5 Benutzern werden nicht angezeigt) | |||
Zeile 4: | Zeile 4: | ||
In solchen Situationen kann es von Nutzen sein, mittels Plot einen Überblick über die aktuelle Auslastung zu bekommen, um eigene Codefehler von dem werksseitig eingebauten Sendestopp zu unterscheiden. Am Beispiel eines [[HomeMatic]]-Gerätes wird im Folgenden gezeigt, wie eine derartige "Überwachung" erreicht werden kann. | In solchen Situationen kann es von Nutzen sein, mittels Plot einen Überblick über die aktuelle Auslastung zu bekommen, um eigene Codefehler von dem werksseitig eingebauten Sendestopp zu unterscheiden. Am Beispiel eines [[HomeMatic]]-Gerätes wird im Folgenden gezeigt, wie eine derartige "Überwachung" erreicht werden kann. | ||
=== "ERROR-Overload" und "Warning-HighLoad" === | |||
Der Sendestopp der HMLAN-unit wird durch die Werte "ERROR-Overload" angezeigt bzw. durch "Warning-HighLoad" vorgewarnt. Dabei handelt es sich um direkte Readings der HMLAN-unit und sie sind auf alle Fälle als richtig bzw. "absolut" anzusehen. Sollte die HMLAN-unit in diesem Zustand sein, wird sie keine Telegramme mehr senden, jedoch wird sie weiterhin alle Telegramme empfangen. | |||
== Einschränkungen == | == Einschränkungen == | ||
* Die AES Verschlüsselung, die weitere Telegramme sendet, kann derzeit nicht berücksichtigt werden | |||
== Versions Updates == | |||
* {{Link2Forum|Topic=21678|Message=151621|LinkText=Version 5278}}: Die Länge des Nachrichtentelegrams wird berücksichtigt. | |||
* {{Link2Forum|Topic=43834|Message=357346|LinkText=FirmWare 0.964}}: msgLoadEst ist veraltet und war ein von FHEM erwarteter Wert. msgLoadCurrent ist neu und der tatsächliche Wert, der vom HMLAN versendet wurde. | |||
== | |||
== Plot von Highload/Overload und msgLoadCurrent-Werten == | |||
[[Datei:Msgloadest_2_2.png|mini|350px|rechts|Beispiel-Plot mit einer Auslastung von ca. 80%]] | [[Datei:Msgloadest_2_2.png|mini|350px|rechts|Beispiel-Plot mit einer Auslastung von ca. 80%]] | ||
Dazu muss im Einzelnen wie folgt vorgegangen werden: | Dazu muss im Einzelnen wie folgt vorgegangen werden: | ||
* Um einen Plot erzeugen zu können, wird ein Log benötigt. | * Um einen Plot erzeugen zu können, wird ein [[FileLog|Log]] benötigt. | ||
* Um ein Log erzeugen zu können, wird ein Event benötigt, | * Um ein Log erzeugen zu können, wird ein Event benötigt, das geloggt werden kann. | ||
* Um das Event loggen zu können, wird ein [http://de.wikipedia.org/wiki/Cronjob CronJob] benötigt, der dieses Event wiederholt im Abstand x bereitstellt. | * Um das Event loggen zu können, wird ein [http://de.wikipedia.org/wiki/Cronjob CronJob] benötigt, der dieses Event wiederholt im Abstand x bereitstellt. | ||
Der CronJob wird mittels | Der CronJob wird mittels [[at]] im Zeitabstand x= 1 Minute als Reading bereitgestellt, das den Wert von "msgLoadCurrent" erhält. Hierdurch werden 60 Werte pro Stunde in die Logdatei geschrieben. Sollte dies zu Performanceeinbußen auf Seiten des [[Systemübersicht#Server|FHEM-Trägersystems]] führen, kann der "+*00:01:00"-Wert entsprechend erhöht werden. | ||
Erforderliche Definition in der [[Konfiguration]] (fhem.cfg): | Erforderliche Definition in der [[Konfiguration]] (fhem.cfg): | ||
<pre> | <pre> | ||
define a_hmlan_internals at +*00:01:00 {\ | define a_hmlan_internals at +*00:01:00 {\ | ||
my $ | my $traffic = InternalVal("HMLAN1","msgLoadCurrent","???");;\ | ||
fhem("setreading HMLAN1 hmTrf ".$traffic." %" );;\ | |||
fhem("setreading HMLAN1 | |||
} | } | ||
</pre> | </pre> | ||
Zeile 42: | Zeile 33: | ||
Dadurch wird ein Event ausgelöst, das (z.B. mit den folgenden Definitionen) geloggt werden kann: | Dadurch wird ein Event ausgelöst, das (z.B. mit den folgenden Definitionen) geloggt werden kann: | ||
<pre> | <pre> | ||
define FileLog_Technik_IO FileLog %L/Technik_IO-%Y-% | define FileLog_Technik_IO FileLog %L/Technik_IO-%Y-%m.log global:.*|HMLAN1:cond:.*|HMLAN1:hmTrfHour:.* | ||
attr FileLog_Technik_IO logtype text | attr FileLog_Technik_IO logtype text | ||
attr FileLog_Technik_IO room Log | attr FileLog_Technik_IO room Log | ||
</pre> | </pre> | ||
Bei Verwendung von [[DbLog]] kann der vorangehende Abschnitt entfallen, da die Readings automatisch ins DbLog geschrieben werden. | |||
Die graphische Darstellung (Plot) wird durch die Definition | Die graphische Darstellung (Plot) wird durch die Definition | ||
<pre> | <pre> | ||
define SVG_FileLog_Technik_IO_1 SVG FileLog_Technik_IO:SVG_FileLog_Technik_IO_1:CURRENT | define SVG_FileLog_Technik_IO_1 SVG FileLog_Technik_IO:SVG_FileLog_Technik_IO_1:CURRENT | ||
attr SVG_FileLog_Technik_IO_1 alias 10. hmlan attr SVG_FileLog_Technik_IO_1 label "traffic: min [$data{min1}] - avg [$data{avg1}] - max [$data{max1}] - last [$data{currval1}] ----- [".localtime()."]" | # attr SVG_FileLog_Technik_IO_1 alias 10. hmlan | ||
attr SVG_FileLog_Technik_IO_1 label "traffic: min [$data{min1}] - avg [$data{avg1}] - max [$data{max1}] - last [$data{currval1}] ----- [".localtime()."]" | |||
attr SVG_FileLog_Technik_IO_1 room 90_Technik | attr SVG_FileLog_Technik_IO_1 room 90_Technik | ||
</pre> | </pre> | ||
Zeile 73: | Zeile 66: | ||
"<IN>" using 1:2 axes x1y1 title 'shutdown' ls l2fill lw 1 with steps | "<IN>" using 1:2 axes x1y1 title 'shutdown' ls l2fill lw 1 with steps | ||
</pre> | </pre> | ||
Die ''SVG'' und ''gplot'' Definitionen gelten bei Verwendung von FileLog und müssen für DbLog entsprechend angepasst werden. | |||
== Links == | == Links == | ||
* Beitrag / Diskussion zu diesem Thema im | * Beitrag / Diskussion zu diesem Thema im {{Link2Forum|Topic=21678|Message=151772|LinkText=FHEM Forum}} | ||
[[Kategorie:HOWTOS]] | [[Kategorie:HOWTOS]] | ||
[[Kategorie:Code Snippets]] | [[Kategorie:Code Snippets]] |
Aktuelle Version vom 30. Oktober 2018, 09:21 Uhr
Einleitung
Gerade in der Entwicklungsphase kann es passieren, dass z.B. durch den Einsatz von Testroutinen der Bereich der 1% Regel erreicht wird und dadurch ein Gerät vorübergehend nicht mehr senden kann.
In solchen Situationen kann es von Nutzen sein, mittels Plot einen Überblick über die aktuelle Auslastung zu bekommen, um eigene Codefehler von dem werksseitig eingebauten Sendestopp zu unterscheiden. Am Beispiel eines HomeMatic-Gerätes wird im Folgenden gezeigt, wie eine derartige "Überwachung" erreicht werden kann.
"ERROR-Overload" und "Warning-HighLoad"
Der Sendestopp der HMLAN-unit wird durch die Werte "ERROR-Overload" angezeigt bzw. durch "Warning-HighLoad" vorgewarnt. Dabei handelt es sich um direkte Readings der HMLAN-unit und sie sind auf alle Fälle als richtig bzw. "absolut" anzusehen. Sollte die HMLAN-unit in diesem Zustand sein, wird sie keine Telegramme mehr senden, jedoch wird sie weiterhin alle Telegramme empfangen.
Einschränkungen
- Die AES Verschlüsselung, die weitere Telegramme sendet, kann derzeit nicht berücksichtigt werden
Versions Updates
- Version 5278: Die Länge des Nachrichtentelegrams wird berücksichtigt.
- FirmWare 0.964: msgLoadEst ist veraltet und war ein von FHEM erwarteter Wert. msgLoadCurrent ist neu und der tatsächliche Wert, der vom HMLAN versendet wurde.
Plot von Highload/Overload und msgLoadCurrent-Werten
Dazu muss im Einzelnen wie folgt vorgegangen werden:
- Um einen Plot erzeugen zu können, wird ein Log benötigt.
- Um ein Log erzeugen zu können, wird ein Event benötigt, das geloggt werden kann.
- Um das Event loggen zu können, wird ein CronJob benötigt, der dieses Event wiederholt im Abstand x bereitstellt.
Der CronJob wird mittels at im Zeitabstand x= 1 Minute als Reading bereitgestellt, das den Wert von "msgLoadCurrent" erhält. Hierdurch werden 60 Werte pro Stunde in die Logdatei geschrieben. Sollte dies zu Performanceeinbußen auf Seiten des FHEM-Trägersystems führen, kann der "+*00:01:00"-Wert entsprechend erhöht werden.
Erforderliche Definition in der Konfiguration (fhem.cfg):
define a_hmlan_internals at +*00:01:00 {\ my $traffic = InternalVal("HMLAN1","msgLoadCurrent","???");;\ fhem("setreading HMLAN1 hmTrf ".$traffic." %" );;\ }
Dadurch wird ein Event ausgelöst, das (z.B. mit den folgenden Definitionen) geloggt werden kann:
define FileLog_Technik_IO FileLog %L/Technik_IO-%Y-%m.log global:.*|HMLAN1:cond:.*|HMLAN1:hmTrfHour:.* attr FileLog_Technik_IO logtype text attr FileLog_Technik_IO room Log
Bei Verwendung von DbLog kann der vorangehende Abschnitt entfallen, da die Readings automatisch ins DbLog geschrieben werden.
Die graphische Darstellung (Plot) wird durch die Definition
define SVG_FileLog_Technik_IO_1 SVG FileLog_Technik_IO:SVG_FileLog_Technik_IO_1:CURRENT # attr SVG_FileLog_Technik_IO_1 alias 10. hmlan attr SVG_FileLog_Technik_IO_1 label "traffic: min [$data{min1}] - avg [$data{avg1}] - max [$data{max1}] - last [$data{currval1}] ----- [".localtime()."]" attr SVG_FileLog_Technik_IO_1 room 90_Technik
... in Verbindung mit folgenden Plot-Anweisungen (im vorgestellten Beispiel in der SVG_FileLog_Technik_IO_1.gplot Datei) erzeugt:
# Created by FHEM/98_SVG.pm, 2014-03-22 12:11:58 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 '<L1>' set ytics "init" 6,"err" 4,"wng" 3,"?" 1,"ok" 0 set y2tics set grid y2tics set ylabel "condition" set y2label "msgLoadEst % / hr" set yrange [0:7] #FileLog 4:HMLAN1.hmTrfHour\x3a:: #FileLog 4:HMLAN1.cond\x3a::$fld[3]=~"init"?6:$fld[3]=~"ERROR-Overload"?4:$fld[3]=~"Warning-HighLoad"?3:$fld[3]=~"ok"?0:1 #FileLog 3:global.*::$fld[2]=~"SHUTDOWN"?6:$fld[2]=~"INITIALIZED"?0:0 plot "<IN>" using 1:2 axes x1y2 title 'msgLoadEst' ls l6fill lw 1 with steps,\ "<IN>" using 1:2 axes x1y1 title 'condition' ls l0 lw 1 with steps,\ "<IN>" using 1:2 axes x1y1 title 'shutdown' ls l2fill lw 1 with steps
Die SVG und gplot Definitionen gelten bei Verwendung von FileLog und müssen für DbLog entsprechend angepasst werden.
Links
- Beitrag / Diskussion zu diesem Thema im FHEM Forum