FHEM Forum

FHEM => Frontends => SVG / Plots / logProxy => Thema gestartet von: edvsk am 15 Februar 2017, 13:05:11

Titel: SVG über dblog mit function (Zusammenspiel DBLog / regex / awk)
Beitrag von: edvsk am 15 Februar 2017, 13:05:11
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.
Titel: Antw:SVG über dblog mit function
Beitrag von: betateilchen am 15 Februar 2017, 13:08:56
$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.
Titel: Antw:SVG über dblog mit function
Beitrag von: edvsk am 16 Februar 2017, 10:11:38
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
...
Titel: Antw:SVG über dblog mit function
Beitrag von: Thorsten Pferdekaemper am 17 Februar 2017, 08:44:44
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
Titel: Antw:SVG über dblog mit function
Beitrag von: edvsk am 19 Februar 2017, 17:14:57
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.
Titel: Antw:SVG über dblog mit function
Beitrag von: Thorsten Pferdekaemper am 19 Februar 2017, 22:56:38
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
Titel: Antw:SVG über dblog mit function
Beitrag von: edvsk am 20 Februar 2017, 11:15:44
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!
Titel: Antw:SVG über dblog mit function (regex Parameterübergabe)
Beitrag von: Thorsten Pferdekaemper am 21 Februar 2017, 08:02:02
Hi,
vielleicht verschiebst Du das mal in den Forenbereich, in dem DbLog diskutiert wird. Dort wird Dir vielleicht geholfen.
Gruß,
   Thorsten
Titel: Antw:SVG über dblog mit function (regex Parameterübergabe)
Beitrag von: edvsk am 24 Februar 2017, 13:00:36
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
Titel: Antw:SVG über dblog mit function (Zusammenspiel DBLog / regex / awk)
Beitrag von: edvsk am 27 Februar 2017, 17:21:14
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