[gelöst] Daten von sysmon aus DbLog plotten

Begonnen von joshi04, 24 Juli 2014, 21:19:28

Vorheriges Thema - Nächstes Thema

joshi04

Hallo zusammen,

ich probieren ein paar Daten des Moduls sysmon aus meiner DbLog zu plotten.

Dabei sehen die Readings des Moduls beispielshalber so aus:
ram: Total: 1825.36 MB, Used: 308.29 MB, 16.89 %, Free: 1517.07 MB


Dieses landet so auch in der Spalte "EVENTS", in der Spalte "VALUE" steht allerdings nur:
Total: 1825.36 MB, Used: 308.29


Ich vermute, das Modul DbLog versucht, die Daten in Werte und Einheit zu trennen und daher landet nur ein Teil in der Spalte "VALUES". Kann jemand meine Vermutung bestätigen?

Wie sieht mein Anwendungsfall aus:
Mit der Verwendung der gplot Datei SM_DB_RAM.gplot sollte mit
.*Free..([\d.]*).*

eigentlich der passende Wert ausgeschnitten werden, was entsprechend rubular.com auch funktioniert. Mit den Definitionen für "Total" und "Used" funktioniert es.

So sieht die komplette Definition aus:

#DbLog <SPEC1>:ram:::$val=~s/^Total..([\d.]*).*/$1/eg
#DbLog <SPEC1>:ram:::$val=~s/.*Used..([\d.]*).*/$1/eg
#DbLog <SPEC1>:ram:::$val=~s/.*Free..([\d.]*).*/$1/eg


Eine weitere Vermutung ist daher, dass die Definition im gplot auf die Spalte Value zugreift, in der die Daten für "Free" gar nicht vorhanden sind. Das wäre zumindest das naheliegenste. Kann das ebenfalls bitte jemand bestätigen?
Im Plot erscheint für "Free" leider nur eine Null-Linie.
Eigentlich kann ich mir nicht vorstellen, dass das Problem nicht schon jemand anders hatte, also mal wieder nicht richtig gesucht und gefunden?   ???

Mir ist bewusst, das diese Verhalten wieder die wohl schon ältere Fragestellung berührt, die Readings als einzelne Values zur Verfügung zustellen, oder nicht, sorry dafür.
Aber eine richtige Antwort darauf, die Werte zu Plotten, wenn sich nicht einzeln zur Verfügung stehen, habe ich noch nicht gefunden. Soweit ich gefunden habe sind die Diskussionen immer im Sande verlaufen, bzw. vielleicht konnte ich es nicht deuten, wie ich es anwenden soll. :-\
http://forum.fhem.de/index.php/topic,17201.msg166116.html#msg166116

Ich gehe damit schon eine ganze Zeit lang schwanger und ich bin im Forum nicht wirklich fündig geworden. Dieser Thread hat mir sehr weitergeholfen, was die Definition der RegExpr angeht.
http://forum.fhem.de/index.php/topic,17329.msg113409.html#msg113409
Und erst dadurch bin ich drauf gekommen, dass ggf. garnichts da sein könnte, um es zum Plotten...  ;)

Könnte mir bitte jemand einen Tipp geben, wie ich die Werte im hinteren Teil des Readings plotten kann, bzw. meinen Vermutungen widersprechen?

Ich weiß nicht weiter, wo ich hier noch ansetzen könnte.

Danke und schöne Grüße,
John

PS: Anbei ein Screenshot der Readings, Plot, DbLog-Eintrag und die gplot-Datei
PPS: Und ich wusste nicht genau, ob das hier oder eher in "Automatisierung" wg. DbLog richtig gewesen wäre. Bitte bei Bedarf verschieben.
NUC: 2xJeeLink, PCA301/TX35DTH; HueBridge, LivingColors; vair-monitor (CO2); HMLan, Winmatic, HM-CC-RT-DN, HM-TC-IT-WM-W-EU, HM-ES-TX-WM, HM-WDS10-TH-O, HM-ES-PMSw1-Pl, HM-SEC-SC-2, HM-SEC-SCo; AVM DECT 200; panStamp; smartVISU

nesges

Dieser Thread ist zwar schon etwas älter, das Problem scheint aber noch offen zu sein (fhem ist auf aktuellem Stand). Ich habe grade das gleiche festgestellt: Die Spalte VALUE wird im DbLog nicht vollständig gefüllt und deshalb funktioniert die dritte Zeile im Plot SM_DB_RAM.gplot nicht. Zur Verdeutlichung im Anhang ein Screenshot aus phpMyAdmin.


vuffiraa

Das liegt an der Tabellendefinition. Für MySQL wird die Value-Spalte nur als Varchar(32) definiert. Damit landen halt nur die ersten 32 Zeichen in der DB. Wenn man die Spalte auf Varchar(64) ändert, funktioniert alles. :)
FHEM 5.8 auf Cubietruck, Raspi B+

Weinzierl KNX IP BAOS 770, Homematic, EnOcean

nesges

Autsch, das war zu offensichtlich. Danke! :-)

joshi04

Von mir ebenfalls, danke!  :)

Bin gerade mal wieder ein wenig am Basteln und habe festgestellt, dass die Länge von 32 Zeichen über das Script db_create_mysql.sql in fhem/contrib/dblog  derzeit standardmäßig konfiguriert wird.
NUC: 2xJeeLink, PCA301/TX35DTH; HueBridge, LivingColors; vair-monitor (CO2); HMLan, Winmatic, HM-CC-RT-DN, HM-TC-IT-WM-W-EU, HM-ES-TX-WM, HM-WDS10-TH-O, HM-ES-PMSw1-Pl, HM-SEC-SC-2, HM-SEC-SCo; AVM DECT 200; panStamp; smartVISU

JLacky

Zitat von: joshi04 am 24 Juli 2014, 21:19:28
Könnte mir bitte jemand einen Tipp geben, wie ich die Werte im hinteren Teil des Readings plotten kann, bzw. meinen Vermutungen widersprechen?
Hi,

ich gehe wie folgt  vor...

Das Reading RAM aus sysmon ...

Total: 927.08 MB, Used: 180.18 MB, 19.44 %, Free: 746.89 MB

.. zerlege ich mit UserReadings in einzelne Werte. Z.B.das UserReading ...

ram_pct { my @values=split(/,/,ReadingsVal("sysmonRasPi1","ram",0));;my $val = $values[2];; $val =~ s/\%//g;;$val;; }

.. erzeugt ein neues Reading ram_pct aus dem ram-Reading des sysmon device sysmonRasPi1, das dan nur aus dem Wert 19.44 besteht. Und der einzelne Wert lässt sich dann problemlos platten.

Alles weiter zu UserReadings steht in der Hem-Commandref.

Mit freundlichen Grüßen
JLackxy

joshi04

Zitat von: vuffiraa am 26 Januar 2015, 22:30:16
Das liegt an der Tabellendefinition. Für MySQL wird die Value-Spalte nur als Varchar(32) definiert. Damit landen halt nur die ersten 32 Zeichen in der DB. Wenn man die Spalte auf Varchar(64) ändert, funktioniert alles. :)

Habe das endlich ins Wiki übernommen.
NUC: 2xJeeLink, PCA301/TX35DTH; HueBridge, LivingColors; vair-monitor (CO2); HMLan, Winmatic, HM-CC-RT-DN, HM-TC-IT-WM-W-EU, HM-ES-TX-WM, HM-WDS10-TH-O, HM-ES-PMSw1-Pl, HM-SEC-SC-2, HM-SEC-SCo; AVM DECT 200; panStamp; smartVISU

fhemjan

#7
Ich hätte hier noch einmal eine Frage zu. Wenn ich jetzt mehrere Userreadings erzeugen will um unterschiedliche Werte zu plotten wird es (für mich) langsam unübersichtlich.
Mit einfachem userReading ist alles klar, danke an dieser Stelle für diesen Beitrag:
Zitat von: JLacky am 23 Februar 2015, 20:03:34ram_pct { my @values=split(/,/,ReadingsVal("sysmon","ram",0));;my $val = $values[2];; $val =~ s/\%//g;;$val;; }

Genauso könnte ich mir jetzt den Wert für die Festplatten separieren. Das müsste dann so aussehen:
fs_root_pct { my @values=split(/,/,ReadingsVal("sysmon","fs_root",0));;my $val = $values[2];; $val =~ s/\%//g;;$val;; }
Aber wie setze ich hier nun beide, bzw. noch mehr zusammen? Ich habe hier ein Beispiel gefunden: https://forum.fhem.de/index.php?topic=86529.0
Aber ich komme nicht klar mit dem "Bandwurm-Code"... gibt es auch eine Möglichkeit das übersichtlicher zu schreiben?

Ich danke euch

edit:
In der Doku hab ich grade gelesen, das es eigentlich klappen müsste das ich beide mit Komme getrennt hintereinander hänge:
ram_pct { my @values=split(/,/,ReadingsVal("sysmon","ram",0));;my $val = $values[2];; $val =~ s/\%//g;;$val;; },
fs_root_pct { my @values=split(/,/,ReadingsVal("sysmon","fs_root",0));;my $val = $values[2];; $val =~ s/\%//g;;$val;; }
Das klingt großartig einfach, aber bisher erkennt er die Variable fs_root_pct nicht.. Hab ich da was falsch gedacht?