SVG über dblog mit function (Zusammenspiel DBLog / regex / awk)

Begonnen von edvsk, 15 Februar 2017, 13:05:11

Vorheriges Thema - Nächstes Thema

edvsk

Mein Problem ist das manipulieren eines Wertes aus einer Datenbank.

Mittels :
#ld_mysql fhem_01:stat_cpu_percent:::$val=~s/[\d.]*.[\d.]*.[\d.]*.([\d.]*).[\d.]*.[\d.]/$1/eg
kann ich den entsprechenden Wert aus der Liste der Werte dieses readings filtern.
Mien Problem ist nun, wie ich den Wert vor dem Plotten von einem Festwert abziehe.

betateilchen

$val=5000-($val=~s/[\d.]*.[\d.]*.[\d.]*.([\d.]*).[\d.]*.[\d.]/$1/eg)

wobei 5000 der Festwert ist.

Sowas steht übrigens in der Doku zu FHEM.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

edvsk

Auf die Idee bin ich auch schon gekommen:

get ld_mysql - - - - sm_fhem_01:stat_cpu_percent:::$val=~s/[\d.]*.[\d.]*.[\d.]*.([\d.]*).[\d.]*.[\d.]/$1/eg

liefert:

2017-02-09_00:09:12 97.86
2017-02-09_00:55:29 97.92
2017-02-09_01:18:29 97.84
...

wobei aber:

get ld_mysql - - - - sm_fhem_01:stat_cpu_percent:::$val=100-($val=~s/[\d.]*.[\d.]*.[\d.]*.([\d.]*).[\d.]*.[\d.]/$1/eg)

liefert:
2017-02-09_00:09:12 98
2017-02-09_00:55:29 98
2017-02-09_01:18:29 98
...

Thorsten Pferdekaemper

Hi,
ich habe mir mal die commandref zu DbLog angesehen und da sieht man tatsächlich ähnliche Konstrukte. Mir ist aber nicht klar, wie man da solche Berechnungen herauslesen kann.
Vielleicht kann man bei der Erstellung der Plots selbst etwas machen. Dort sollte es auch möglich sein, für die einzelnen Kurven Funktionen anzugeben.
Gruß,
   Thorsten
FUIP

edvsk

Hallo,

im .gplot steht folgendes (mit alternativem RegEx-Ausdruck):

#ld_zion_mysql sm_fhem_01:stat_cpu_percent:::$val=~s/\d{1,}.\d{1,}\s\d{1,}.\d{1,}\s\d{1,}.\d{1,}\s(\d{1,}.\d{1,})\s\d{1,}.\d{1,}\s\d{1,}.\d{1,}\s\d{1,}.\d{1,}/$1/eg
#ld_zion_mysql sm_fhem_01:cpu_temp:0:

plot "<IN>" using 1:2 axes x1y1 title 'Auslastung' ls l0 lw 2 with lines,\
     "<IN>" using 1:2 axes x1y2 title 'Temperatur' ls l2 lw 1 with lines

Im Plot wird dann auch sauber die "98" dargestellt.

Thorsten Pferdekaemper

Zitat von: edvsk am 19 Februar 2017, 17:14:57
Im Plot wird dann auch sauber die "98" dargestellt.
Ist das jetzt gut oder schlecht?
Gruß,
   Thorsten
FUIP

edvsk

#6
Hallo,

ich konnte das Problem ein wenig eingrenzen:

get ld_mysql - - - - sm_fhem_01:cpu_core_count:0: liefert beispielsweise 256 (ok)
get ld_mysql - - - - sm_fhem_01:cpu_core_count:::$val=(1000-$val) liefert 744 (ok)

Prinzipiell funktioniert es also, d.h. mein Problem liegt irgendwo in der Kombination aus regulärem Ausdruck für das Extrahieren des relevanten Zahlenwertes und der Übergabe an die aufzurufende Funktion. Gibt es hierfür irgendwo ein Beispiel an dem ich mich orientieren kann?

Danke schon mal!

Thorsten Pferdekaemper

Hi,
vielleicht verschiebst Du das mal in den Forenbereich, in dem DbLog diskutiert wird. Dort wird Dir vielleicht geholfen.
Gruß,
   Thorsten
FUIP

edvsk

#8
Hallo,

um nochmals zusammenzufassen:

get ld_mysql - - - - sm_fhem_01:stat_cpu_percent:::$val=~s/\d{1,}.\d{1,}\s\d{1,}.\d{1,}\s\d{1,}.\d{1,}\s(\d{1,}.\d{1,})\s\d{1,}.\d{1,}\s\d{1,}.\d{1,}\s\d{1,}.\d{1,}/$1/eg
liefert:
2017-02-09_00:09:12 97.86
2017-02-09_00:55:29 97.92
2017-02-09_01:18:29 97.84

Auf Kommandozeile (Linux) mittels: awk '{print $1, 100.0-$2}' <<< '2017-02-09_00:09:12 97.86'
liefert:
2017-02-22_11:41:14 12.14

wie bekomme ich das in meiner .gplot verheiratet?

Aktueller Auszug aus .gplot (es werden weiterhin anscheinend die originalen Werte geplottet):

#ld_mysql <SPEC1>:stat_cpu_percent:::$val=~s/\d{1,}.\d{1,}\s\d{1,}.\d{1,}\s\d{1,}.\d{1,}\s(\d{1,}.\d{1,})\s\d{1,}.\d{1,}\s\d{1,}.\d{1,}\s\d{1,}.\d{1,}/$1/eg
plot "<awk '{print $1, 100.0-$2}'<IN>" using 1:2 axes x1y1 title 'Auslastung' ls l0 lw 1 with lines

Ich verstehe im Moment noch nicht, wie ich die Ausgabe aus dem DbLog "ld_mysql ..." in plot "...<IN>" integriere.

Grüße

edvsk

Workaround:

mittels set y2range [100:0]

wird die Kurve schon mal richtig gezeichnet (plot "<IN>" using 1:2 axes x1y2 title 'Auslastung' ls l1 lw 1 with lines).

Damit ist das ursprüngliche Problem aber nicht gelöst. Des weiteren will es mir nicht mittels set ytics eine invertierte Skala darzustellen, d.h. 0..100.
Gibt es hier einen Tip?

Grüße