[schwere Geburt, aber gelöst] DbLog und SVG

Begonnen von andies, 02 Mai 2017, 13:51:41

Vorheriges Thema - Nächstes Thema

andies

Kann mir mal jemand bei SVG und DbLog helfen? Wenn da nur ein Eintrag in der Datenbank steht, schaffe ich das. Ich habe aber Einträge der Form
get DbLog HISTORY INT 2017-05-01_14:00:00 2017-05-02_14:00:01 sysmon:wlan0_diff:0:: sysmon:wlan0_diff:3::
2017-05-02_09:57:03 RX: 0.19 MB, TX: 0.28 MB, Total:
2017-05-02_10:00:03 RX: 0.18 MB, TX: 0.24 MB, Total:
2017-05-02_10:03:04 RX: 0.08 MB, TX: 0.08 MB, Total:

und das kriege ich dann nicht hin. Meine Definition des SVG lautet
# Created by FHEM/98_SVG.pm, 2017-05-02 13:43:42
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
set y2tics
set grid y2tics
set ylabel ""
set y2label "Traffic in MB"

#DbLog sysmon:wlan0_diff:0::
#DbLog sysmon:wlan0_diff:3::

plot "<IN>" using 1:2 axes x1y2 title 'Empfangen' ls l1 lw 2 with lines,\
     "<IN>" using 1:2 axes x1y2 title 'Gesendet' ls l0 lw 2 with lines

Und es wird und wird nichts. Ich habe inzwischen keine Idee mehr, was ich probieren soll - und leider habe ich keine vernünftige Anleitung gefunden.

Die originale Datenbank sieht so aus:
| 2017-05-02 10:00:03 | sysmon       | SYSMON   | cpu_freq: 600                                                           | cpu_freq         | 600                              |      |
| 2017-05-02 10:00:03 | sysmon       | SYSMON   | cpu_temp: 42.39                                                         | cpu_temp         | 42.39                            |      |
| 2017-05-02 10:00:03 | sysmon       | SYSMON   | fs_root: Total: 29867 MB, Used: 3012 MB, 11 %, Available: 25613 MB at / | fs_root          | Total: 29867 MB, Used: 3012 MB,  |      |
| 2017-05-02 10:00:03 | sysmon       | SYSMON   | cpu_temp_avg: 41.6                                                      | cpu_temp_avg     | 41.6                             |      |
| 2017-05-02 10:00:03 | sysmon       | SYSMON   | stat_cpu_percent: 2.69 0.00 0.25 97.00 0.04 0.00 0.02                   | stat_cpu_percent | 2.69 0.00 0.25 97.00 0.04 0.00 0 |      |
| 2017-05-02 10:00:03 | sysmon       | SYSMON   | wlan0_diff: RX: 0.18 MB, TX: 0.24 MB, Total: 0.42 MB                    | wlan0_diff       | RX: 0.18 MB, TX: 0.24 MB, Total: |      |
| 2017-05-02 10:00:03 | sysmon       | SYSMON   | fs_boot: Total: 63 MB, Used: 22 MB, 35 %, Available: 42 MB at /boot     | fs_boot          | Total: 63 MB, Used: 22 MB, 35 %, |      |
| 2017-05-02 10:00:03 | sysmon       | SYSMON   | loadavg: 0.35 0.13 0.05                                                 | loadavg          | 0.35 0.13 0.05                   |      |
| 2017-05-02 10:00:03 | sysmon       | SYSMON   | ram: Total: 859.92 MB, Used: 116.31 MB, 13.53 %, Free: 743.61 MB        | ram              | Total: 859.92 MB, Used: 116.31 M |      |
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

igami

Für Sysmon gibt es gplot files. Davon kannst du ja eines für dich umstricken.
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

andies

Leider klappt genau das nicht, deshalb meine nachricht. Wenn ich den vorgegebenen File nehme, dann sieht es so grandios aus wie im Anhang ;-)

Die Daten sind in der Datenbank, aber die commandref erklärt mir nicht, was ich eigentlich tun muss. Ich verstehe, dass es da ein RegEx ist, aber nicht, wie ich den manipuliere und wo mein Fehler ist.

PS Hier der Code der Datei
# SYSMON
#
# Network-Traffic ETH0 (DbLog)
#

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 ylabel "Traffic RX / TX"
set y2label "Traffic Total"
set grid
set ytics
set y2tics
set format y "%.2f"
set format y2 "%.2f"

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

plot \
   "< awk '/wlan0_diff:/ {print $1, $4}' <IN>" \
   using 1:2 ls l0 axes x1y1 title 'RX' lw 1 with lines \
   "< awk '/wlan0_diff:/ {print $1, $4}' <IN>" \
   using 1:2 ls l1 axes x1y1 title 'TX' lw 1 with lines \
   "< awk '/wlan0_diff:/ {print $1, $4}' <IN>" \
   using 1:2 ls l2 axes x1y2 title 'Total' lw 1 with lines \
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

Muschelpuster

Mir erschließt sich noch nicht so ganz, warum man dazu in den Files rumfummeln muss. Einfach auf der GUI das Plot aufrufen, entspannt die Einstellungen zusammenklicken und fertig.
Ok, vielleicht mache ich es mir zu einfach, klappt aber wunderbar  8)

vereinfachte Grüße
Niels
fhem @ ZBOX mit 1,6MHz Celeron, 4GB RAM & 120GB SSD mit Debian Bullseye # MiLight # Homematic via CCU3 # W&T WebIO # Rademacher DuoFern # ESPeasy # logdb@mysql # configdb@mysql # Shelly @ MQTT2 # go-eCharger mit PV-Überschussladung via DOIF

andies

Habe ich gemacht - ohne Ergebnis. Daraufhin bin ich dann in die Datei gegangen. Auch ohne Ergebnis :-(


Gesendet von iPhone mit Tapatalk Pro
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

Muschelpuster

Ok, mir erschließt sich erst einmal, warum es nicht geht: Sysmon schreibt mehrere Informationen in eine Zeile, das kann SVG nicht darstellen. Daher auch die regulären Ausdrücke. Finde ich ja hochgradig unsauber, aber sei es erst einmal drum.
Ich probier das gerade mal aus, finde das Feature interessant, weiß nur noch nicht, ob ich meine DB damit zumüllen will ...

interessierte Grüße
Niels
fhem @ ZBOX mit 1,6MHz Celeron, 4GB RAM & 120GB SSD mit Debian Bullseye # MiLight # Homematic via CCU3 # W&T WebIO # Rademacher DuoFern # ESPeasy # logdb@mysql # configdb@mysql # Shelly @ MQTT2 # go-eCharger mit PV-Überschussladung via DOIF

nesges

Zitat von: andies am 02 Mai 2017, 16:31:08
Die Daten sind in der Datenbank, aber die commandref erklärt mir nicht, was ich eigentlich tun muss

Du erklärst uns auch nicht, was du überhaupt tun willst :) In wlan0_diff steht kein plotbarer Wert (dein Beispiel "RX: 0.18 MB, TX: 0.24 MB, Total:") und in deinem gplot-File experimentierst du mit unterschiedlichen Defaultwerten (einmal 0, einmal 3). Da werde ich nicht schlau draus. Aber schau dir mal in  https://fhem.de/commandref.html#DbLog unter Get die column_spec an. Das ist das, was du auch im gplot-File notierst.

andies

Zitat von: nesges am 02 Mai 2017, 17:35:45
In wlan0_diff steht kein plotbarer Wert (dein Beispiel "RX: 0.18 MB, TX: 0.24 MB, Total:")
Korrekt. Daher muss (in diesem Beispiel) die Zahl 0.18 extrahiert werden, damit man sie zeichnen kann.

Zitat von: nesges am 02 Mai 2017, 17:35:45
und in deinem gplot-File experimentierst du mit unterschiedlichen Defaultwerten (einmal 0, einmal 3). Da werde ich nicht schlau draus.
Das waren meine ersten hilflosen Versuche. Jetzt habe ich ja ein wenig dazugelernt, danke für den Link. Ich nehme jetzt
#DbLog DbLog:wlan0_diff:::$val=~s/^RX..([\d.]*).*/$1/eg

plot \
   "< awk '/wlan0_diff:/ {print $1}' <IN>" \
   using 1:2 ls l0 axes x1y1 title 'RX' lw 1 with lines

und eigentlich passt das (den Code habe ich aus der Datei, die ursprünglich sysmon beigefügt war): Auf RX folgen zwei Zeichen, die uninteressant sind, dann kommt eine Zahl (bestehend aus digit und .), die zudem erfasst wird und dann geht es mit irgendwas weiter.

Ich verstehe noch nicht ganz, wieso hier substituiert wird, aber so stand das in der Originaldatei. Leider erscheint aber keine Abbildung, in der dann die 0.18 zu sehen wäre. (Ich verstehe auch nicht, was $1 und das g da soll, es gibt RX nur einmal in dem String?).

Zitat von: nesges am 02 Mai 2017, 17:35:45
Du erklärst uns auch nicht, was du überhaupt tun willst :)
Na einfach nur die empfangene und gesendete Menge in einem Diagramm anzeigen  :'( Trotzdem dank für Deine Hilfe! 
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

andies

Ich habe was. Das hier
get DbLog - - - - sysmon:wlan0_diff:::$val=~s/RX..([\d.]*).*/$1/eg
gibt mir eine Liste mit Zahlen in FHEM. Wie kriege ich das nun in gplot hin? Es ist zum Verzweifeln >:(
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

andies

Geschafft und danke an alle, die hier mitgemacht haben. So geht es
# Created by FHEM/98_SVG.pm, 2017-05-02 16:37:26
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
set y2tics
set grid
set ylabel "Traffic Receiv / Transm"
set y2label ""

#DbLog sysmon:wlan0_diff:::$val=~s/RX..([\d.]*).*/$1/e
#DbLog sysmon:wlan0_diff:::$val=~s/TX..([\d.]*).*/$1/e

plot \
   "< awk '/wlan0_diff:/ {print $1}' <IN>" \
   using 1:2 ls l0 axes x1y1 title 'Receiv' lw 1 with lines \
   "< awk '/wlan0_diff:/ {print $val}' <IN>" \
   using 1:2 ls l1 axes x1y1 title 'Transm' lw 1 with lines

Abr jetzt mal ehrlich: Wie soll man denn darauf kommen?! Das muss mal im Wiki erläutert werden. Ist es wirklich so, dass substituiert wird? Und kann man statt $1 eine beliebige Variablenbezeichnung nehmen? Das g konnte weg, weil ja RX und TX nur einmal vorkommen.
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

Muschelpuster

Zitat von: andies am 02 Mai 2017, 18:34:20Abr jetzt mal ehrlich: Wie soll man denn darauf kommen?! Das muss mal im Wiki erläutert werden.
Selbst dann bleibt das IMHO noch ein richtiges Expertending. Ich schreibe gerne Wiki, denn bei der Programmierung kann ich eh nichts beisteuern, aber bei dem Plot-Part bin ich gerade raus  :'(

Zitat von: andies am 02 Mai 2017, 18:34:20Ist es wirklich so, dass substituiert wird? Und kann man statt $1 eine beliebige Variablenbezeichnung nehmen?
$1 ist doch nicht der Variablenbezeichner, sondern IMHO der Platzhalter für die erste Klammer. Ich zerlege das mal nach meinem bescheidenen Verständnis:
$val -> Variable. die es zu befummeln gilt (also das gelieferte Value)
=~   -> wird mit regulärem Ausdruck befummelt
s    -> Substitution
/    -> Trenner innerhalb des regEx -> es folgt Suchstring
RX.. -> es wird nach RX gefolgt von 2 beliebigen Zeichen gesucht (in diesem Fall Doppelpunkt und Leerzeichen), gefolgt von
(    -> Klammer markiert, dass der geklammerte Bereich wieder verwendet werden kann, erste Klammerung = $1, zweite $2 usw.
[    -> Markierung für Zeichengruppe
\d   -> Zahlen werden gesucht
.    -> und ein Punkt wird gesucht
]    -> Zeichengruppe fertig
*    -> die Treffermenge aus der Zeichengruppe kann beliebig oft auftreten
)    -> Ende des Bereiches zur Wiederverwendung
.*   -> es können beliebige Zeichen folgen
/    -> Trenner in der regEx -> es folgt der Ersetzenstring
$1   -> Treffer aus der ersten Klammerung in suche verwenden
/    -> Trenner in regEx -> es folgen die Optionen
e    -> Option e

Aber warum verdammt nochmal muss das im plot darunter nochmal so exxessiv befummelt werden?

zerpflückte Grüße
Niels
fhem @ ZBOX mit 1,6MHz Celeron, 4GB RAM & 120GB SSD mit Debian Bullseye # MiLight # Homematic via CCU3 # W&T WebIO # Rademacher DuoFern # ESPeasy # logdb@mysql # configdb@mysql # Shelly @ MQTT2 # go-eCharger mit PV-Überschussladung via DOIF

LuckyDay

You made my day  ;D

"befummeln" triffts genau  ;D

Omega

Super erklärt - bis auf: was macht die Option "e" bzw. "eg", die ich auch aus vielen Beispielen kenne?

Noch ein kleiner Tipp, den ich hier auch schon mehrfach gefunden habe:
Online RegEx-Tester: https://regex101.com/#PCRE

Bei RegEx kommt nur ein Auschnitt rein (z.B. "RX..([\d.]*).*" bei TEST STRING dann "2017-05-02_09:57:03 RX: 0.19 MB, TX: 0.28 MB, Total: 0.10 MB"

Ach ja: lange gesucht habe ich auch, als es darum ging, den ermittelten Wert noch nachzubearbeiten. An den RegEx wird dann noch ;;$val=$val/1000 (oder was man sonst benötigt) drangehängt.

LG
Holger
NUC6i3SYH (FHEM 5.8 in VM)
Homematic: HMLAN, HMUSB, HM-Sec-SD, HM-CC-RT-DN, HM-TC-IT, ... + diverse weitere
LaCrosseGateway, ESPEasy
ZWave

Muschelpuster

Zitat von: Omega am 02 Mai 2017, 21:02:19Super erklärt - bis auf: was macht die Option "e" bzw. "eg", die ich auch aus vielen Beispielen kenne?
Verdammt, ich dachte ich kann mich da durchmogeln  ;D
Mir hat das hier ganz gut geholfen: https://de.wikibooks.org/wiki/Perl-Programmierung:_Regul%C3%A4re_Ausdr%C3%BCcke
Aber da steht e=evaluate:'Das Ersetzmuster wird als Perl-Code interpretiert und ausgeführt.' Unter evaluate hätte ich nun eher eine Syntaxprüfung verstanden. Aber schauen wir mal hier: http://www.ims.uni-stuttgart.de/institut/mitarbeiter/zinsmeis/Perl/material/uebersicht_regex.pdf 'bewertet Ersetzung als Perl-Ausdruck (nur Substitution mit s///) evaluate right sides as expression'

Die Option 'g' steht für 'Global'. Normalerweise wird die regEx-Suche mit einem Treffer beendet, mit g wird weiter gesucht und alle Vorkommen ersetzt.

Und wer erklärt uns jetzt den plot-Teil?

ergänzende Grüße
Niels
fhem @ ZBOX mit 1,6MHz Celeron, 4GB RAM & 120GB SSD mit Debian Bullseye # MiLight # Homematic via CCU3 # W&T WebIO # Rademacher DuoFern # ESPeasy # logdb@mysql # configdb@mysql # Shelly @ MQTT2 # go-eCharger mit PV-Überschussladung via DOIF

andies

FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann