Hallo,
ich mal wieder 8)
Mit dem Modul SYSMON logge ich mir die Daten meines RasPi in die Datenbank.
Nun wollte ich mir gestern einen Plot bauen der die load des RasPi im Raster 1 Minute, 5 Minuten und 15 Minuten plottet.
Die Daten sind auch vorhanden nur weiß ich nicht wie ich da am besten dran komme da alle 3 Werte in einer Reihe stehen.
Der Plot für 1 Minute funktioniert nur die anderen beiden Werte werden nicht geplottet.
Im Screenshot mal der Auszug aus der Datenbank und wie der Plot zur Zeit aussieht.
Und hier meine gplot-Datei.
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 grid xtics y2tics
set ylabel "Last"
set y2label "Last"
#DbLog <SPEC1>:loadavg::
plot \
"< awk '/load avg:/ {print $1, $4}' <IN>" \
using 1:2 ls l0fill axes x1y1 title '1 min' lw 0 with lines \
"< awk '/load avg5:/ {print $1, $4}' <IN>" \
using 1:2 ls l1 axes x1y1 title '5 min' lw 2 with lines \
"< awk '/load avg15:/ {print $1, $4}' <IN>" \
using 1:2 ls l2 axes x1y1 title '15 min' lw 3 with lines
Ich vermute das ich noch 2 #DBLog <SPEC1>:loadavg:: benötige die mir die Daten passend extrahieren.
Kann damit aber auch total falsch liegen und es geht noch viel einfacher.
Wenn sich also mal jemand erbarmen könnte (mal wieder) und mir einen kleinen Schupps in die richtige Richtung geben würde wäre ich dankbar.
Grüße
z.b. so:#DbLog <SPEC1>:loadavg:::$val =~ s/([\d.].*) [\d.].* [\d.].*/$1/eg
#DbLog <SPEC1>:loadavg:::$val =~ s/[\d.].* ([\d.].*) [\d.].*/$1/eg
#DbLog <SPEC1>:loadavg:::$val =~ s/[\d.].* [\d.].* ([\d.].)*/$1/eg
gruss
andre
Hallo,
und danke für die Hilfe.
Hast du die Codes irgendwo abgespeichert oder schüttelst du sowas einfach so aus dem Ärmel :o
Aber zurück zum Thema.
Das:
#DbLog <SPEC1>:loadavg:::$val =~ s/([\d.].*) [\d.].* [\d.].*/$1/eg
#DbLog <SPEC1>:loadavg:::$val =~ s/[\d.].* ([\d.].*) [\d.].*/$1/eg
#DbLog <SPEC1>:loadavg:::$val =~ s/[\d.].* [\d.].* ([\d.].)*/$1/eg
ich vermute in der letzten Zeile am Schluss sollte es so aussehen ([\d.].*) - hab ich aber auch versucht.
Sowie das:
#DbLog <SPEC1>:loadavg:::$val =~ s/(\d.).* [\d.].* [\d.].*/$1/eg
#DbLog <SPEC1>:loadavg:::$val =~ s/[\d.].* (\d.).* [\d.].*/$1/eg
#DbLog <SPEC1>:loadavg:::$val =~ s/[\d.].* [\d.].* (\d.).*/$1/eg
sowie das:
#DbLog <SPEC1>:loadavg:::$val =~ s/([\d.]).* [\d.].* [\d.].*/$1/eg
#DbLog <SPEC1>:loadavg:::$val =~ s/[\d.].* ([\d.]).* [\d.].*/$1/eg
#DbLog <SPEC1>:loadavg:::$val =~ s/[\d.].* [\d.].* ([\d.]).*/$1/eg
brachte leider keinen Erfolg.
Wenn ich nur ansatzweise verstünde was die ganzen Klammern machen würde ich ja selbst weiter probieren.
Ich werd mal Onkel Google bemühen - ich vermute es geht hier um Perl-Expressions?
Grüße und danke mal wieder für deine Geduld ;D
na wenn ich es abgespeichert hätte würde es ja immer gehen :)
da ist beim eingeben und kopieren was verrutsch.
der zweite fehler war das keine leerzeichen drin sein dürfen. sonst kommt dblog beim parsen durcheinander. also so:
#DbLog <SPEC1>:loadavg:::$val=~s/([\d.]*).[\d.]*.[\d.]*/$1/eg
#DbLog <SPEC1>:loadavg:::$val=~s/[\d.]*.([\d.]*).[\d.]*/$1/eg
#DbLog <SPEC1>:loadavg:::$val=~s/[\d.]*.[\d.]*.([\d.]*)/$1/eg
eine ganz nette einführung zu den reges findest du hier:
http://www.troubleshooters.com/codecorn/littperl/perlreg.htm (http://www.troubleshooters.com/codecorn/littperl/perlreg.htm)
die idee oben ist den eingrabe string durch den teil zu ersetzten der gerade relevant ist. dazu wird der erst mal in die drei teile zerlegt. jeder teil kann aus zahlen (\d) und dem Punkt bestehen. die [] geben an welche zeichen erlaubt sind. jeweils mit * dahinter. d.h. beliebig oft. dazwischen kommen dann jeweils leerzeichen. weil die nicht erlaubt sind ein '.'. der bedeutete ausserhalb der [] aber nicht punkt sondern ein beliebiges zeichen. statt dessen könnte man auch \s für whitespace verwenden. die () merkt sich das was in den klammern steht um es später wieder zu verwenden -> beim ersetzen. also wird in jeder zeile jeweils wird der komplette string durch das was in der ersten runden klammer steht ersetzt.
gruss
andre
Hallo,
aha :o
Danke für die Erklärung und den Link.
Meine Lesezeichensammlung nimmt schön langsam Gestalt an 8)
Nu hat es funktioniert.
Jetzt kann ich mich mit der Darstellung anfangen zu spielen damit man auch was erkennt.
Vielen Dank nochmal.
Grüße
Hallo,
soviel zum Thema gelöst. ::)
Anhand der Links wollte ich mich nun mal dran machen und das
Zitat2013-11-21_00:00:27 CUM_DAY: 13.695 CUM: 38482.875 COST: 0.74
2013-11-22_00:03:32 CUM_DAY: 14.505 CUM: 38497.380 COST: 0.78
2013-11-23_00:01:38 CUM_DAY: 10.710 CUM: 38508.090 COST: 0.58
#Gas:cum_day:::
in einen Plot werfen der mir den täglichen Verbrauch CUM_DAY aufzeichnet.
Das ist dabei heraus gekommen und ... funktioniert natürlich nicht ::)
#DbLog <SPEC1>:cum_day::$val=~s/[\D_:]*.([\d.]*).[\D:]*.[\d.]*.[\D:]*.[\d.]*/$1/eg
Ausgehend von der Erklärung über die [] und () und . und * und \d war ich der Meinung das ich mit \D (für nicht-Zahlen) mit _ und : im Namen beliebig oft anfangen müsste usw. usw. :o
Könnte mir hier nochmal jemand auf die Sprünge helfen bitte.
Perl regexp sind doch nicht so einfach zum zusammen bauen - zumindest für mich
Danke mal wieder - das nächste Mal geb ich einen aus ;D
Grüße
Edith: Was ein : so alles ausmacht ::)
#DbLog <SPEC1>:cum_day:::$val=~s/[\D.*]*.([\d.]*).[\D.]*.[\d.]*.[\D.]*.[\d.]*/$1/eg
und klappt.
das sollte auch noch ein bischen einfacher gehen :)
#DbLog <SPEC1>:cum_day:::$val=~s/^CUM_DAY..([\d.]*)/$1/eg
alles was nach dem teil kommt der dich interessiert brauchst du ja nicht mehr matchen. und den anfang kannst du in diesem fall ganz genau hinschreiben.
gruss
andre
Hallo,
wobei aber dann 2 unterschiedliche Plots dabei rauskommen :o
Screenshot 1 ist die umständliche Variante (mit der ich schon froh bin das ich die überhaupt hinbekommen habe).
Screenshot 2 ist die "vereinfachte" Variante (von der ich schon froh bin das du mir immer wieder hilfst :D ).
Grüße
Edith: Wobei deine Variante die richtige ist - wie nicht anders zu erwarten ;D
Nu frag ich mich aber wo ich den Fehler habe :o
Edith2: Sieht so aus als ob ich die erste Ziffer abschneide :(
ich tippe mal das liegt daran das deine version die erste stelle des wertes noch abschneidet :)
[\D_:]* matched alles bis zur ersten ziffer (das ginge übrigens auch einfacher als \D* weil _ und : auch keine ziffern sind, bzw als korrekt als [\w:]*) dann kommt ein . der matched die erste ziffer dann erst kommt deine () mit dem was dann zurück gegeben wird.
gruss
andre
Hallo,
jep
Zitatich tippe mal das liegt daran das deine version die erste stelle des wertes noch abschneidet
Da hast du haarscharf ins schwarze getippt.
Ich habs nun mal so versucht:
#DbLog <SPEC1>:cum_day:::$val=~s/[\D*]*([\d.]*).[\D.]*.[\d.]*.[\D.]*.[\d.]*/$1/eg
#DbLog <SPEC2>:cum_day:::$val=~s/[\D*]*([\d.]*).[\D.]*.[\d.]*.[\D.]*.[\d.]*/$1/eg
(Die erste Variante mit \D_: hatte ich wieder verworfen als ich die Fehlermeldungen im FHEM-LogFile gesehen habe).
Das "unschöne" an deiner Variante ist das im Titel nicht nur die einzelnen CUM_DAY angezeigt werden sondern immer noch der gesamte String.
Aber ich vermute mal das ich da wieder einen copy&paste Fehler hatte.
Grüße
nö. ich war mal wieder zu schnell :)
#DbLog <SPEC1>:cum_day:::$val=~s/^CUM_DAY..([\d.]*).*/$1/eg
das ist ja die suchen und ersetzen variante. da muss man natürlich auch bis zum ende matchen um alles zu ersetzen.
wenn du nur mit m/.../ ein teil rausholen willst reicht es nicht bis zum ende zu suchen. etwa so:#DbLog <SPEC1>:cum_day:::$val=($val=~m/^CUM_DAY..([\d.]*)/)[0];
gruss
andre
Hallo,
wenn das
Zitat#DbLog <SPEC1>:cum_day:::$val=~s/^CUM_DAY..([\d.]*).*/$1/eg
nicht geklappt hääte hätt mich das auch gewundert ::)
Wen du jetzt noch einen Tipp hast wie ich in der sqlite3-DB einen Wert zu einem bestimmten Datum "verändern" kann wäre das die Krönung.
Problem - siehe Screenshot.
Der EM1000WZ und -GZ haben mir da wohl "etwas" falsche Werte geliefert - die würde ich an diesem Datum gerne änder damit der Rest des Plots "sichtbar" wird.
Grüße
Hallo Puschel74,
mich würde Deine Plots für SYSMON mit DbLog interessieren. Wenn Du nichts dagegen hast, würde ich diese zu dem Modul selbst in GitHub einchecken, das wird bestimmt auch andere Nutzer erfreuen ;)
Grüße,
Alexander
mit select * from history where device='xxx';
bekommst du alle einträge aufgelistet, mit delete from history where timestamp='xxx';
und xxx durch einen timestamp aus der ersten liste kannst du eine zeile löschen.
oder mit delete from history where value>'xxx';
du solltest fhem dabei anhalten. sqlite mag keine gleichzeitigen zugriffe.
gruss
andre
Hallo,
Zitatselect * from history where device='xxx';
kenn ich schon - das listet mir aber ALLES von Anbeginn der Aufzeichnung auf.
In meinen Fall laufen da jede Menge Daten durch - ich bin leider nicht so der Datenbank-Crack.
Ich hab schon gesehen das man bei select auch mehr <Bedingungen> angegeben kann.
Das schöne ist nur das das über die FHEM-Befehlszeile auch klappt - mit <get mydbLog ________>
Ich möcht jetzt nur nicht einen bestimmten timestamp löschen sondern manipulieren - wenn das geht.
Klar geht das - wenn man weiß wie ;D
Und da bist du wieder mal gefordert ;D
Grüße
Hallo,
@hexenmeister
Die Plotfiles kannst du gerne haben - wenn ich helfen kann 8)
Die DEF häng ich dann auch mit dran.
Grüße
wenn du verbose auf 4 oder 5 stellst siehst du beim get die SQL commandos.
den bereich kannst du mit
... and timestamp >'xxx' and tiemstanp <'xxx' ;
einschränken. wenn es nur ein ausreißer ist geht auch etwas in der art:
update history set value='neu' where value='alt';
am besten nach dem runterfahren erst mal eine kopie der db machen.
gruss
andre
@Puschel74
Hallo!
ZitatDie Plotfiles kannst du gerne haben - wenn ich helfen kann 8)
Cool ;), danke. Hängst Du die Dateien hier an, oder wie komme ich daran am besten?
Gruß,
Alexander
Hallo,
ZitatHängst Du die Dateien hier an, oder wie komme ich daran am besten?
Wollte ich eigentlich nicht aber da es im Beitrag ja auch um die Darstellung von Plots aus DBLog geht werf ich sie dir doch mal hier dran.
Für eth0 und ram bin ich noch am basteln.
Ob du den Plot für alle Daten auch mit aufnimmst bleibt dir überlassen ;D
Da FHEM unter der GPLv2 steht stehen diese Dateien natürlich auch zur freien Verfügung und dürfen durch jeden geändert und/oder angepasst werden 8)
Exemplarisch die Definition für Load:
define wl_sysmon_load SVG myDbLog:loaddb:CURRENT
attr wl_sysmon_load label "Load Min: $data{min1}, Max: $data{max1}, Aktuell: $data{currval1}"
attr wl_sysmon_load plotfunction sysmon
attr wl_sysmon_load room RaspberryPi
Wie man sieht macht der Plot für die Taktfrequenz bei mir nicht viel Sinn ;D
Undn icht zu vergessen:
Nochmal ein riesengrosses DANKESCHÖN für die Hilfe (und die Geduld mit mir) an andreIch werd mal schauen ob ich eine Kopie meiner DB anlege oder ob ich die "falschen" Werte einfach nicht beachte.
Noch eine kurze Frage am Rande:
Die "Manipulation" der DB muss aber in sqlite3 gemacht werden oder kann ich das auch über die FHEM-Befehlszeile machen?
Daten für Plots schau ich mir lieber über die FHEM-Befehlszeile an.
Grüße
die kopie ist nur temporär zur sicherheit. nicht das plötzlich zu viel gelöscht oder geändert wird.
du musst es per sqlite cmd line machen. deshalb sollte fhem nicht gleichzeitig laufen.
gruss
andre
Vielen Dank, werde heute aben auf GitHub pusten ;D
ZitatOb du den Plot für alle Daten auch mit aufnimmst bleibt dir überlassen ;D
Klar doch, wer nicht will, man kann ihn auch dann _nicht_ nutzen, wenn er da ist ;)
Grße,
Alexander
Hi!
Zitatdu musst es per sqlite cmd line machen. deshalb sollte fhem nicht gleichzeitig laufen.
Da wäre doch ein Modul hilfreich, der die SQL-Befehlzeile in FEHM bietet. Villeicht gibt es so etwas schon?
nein. gibt es nicht. ein extra modul funktioniert auch nicht weil z.b. sqlite nicht mit mehreren schreibenden verbindungen klar kommt. also wenn dann muss es ins dblog modul direkt mit rein.
gruss
andre
Hallo!
@Puschel74
Habe die Dateien etwas umbenannt und bei GitHub hochgeladen:
https://github.com/hexenmeister/MyFHEM/blob/master/www/gplot/SMAllDB.gplot
https://github.com/hexenmeister/MyFHEM/blob/master/www/gplot/SMCPUFreqDB.gplot
https://github.com/hexenmeister/MyFHEM/blob/master/www/gplot/SMCPUTempDB.gplot
https://github.com/hexenmeister/MyFHEM/blob/master/www/gplot/SMLoadDB.gplot
Nochmals danke! :D
Gruß
Alexander
Hallo,
und mal wieder - jetz geb ich dann aber wirklich bald mal einen aus 8)
Ich hab das
Zitat2013-12-11_00:00:58 RX: 0.04 MB, TX: 0.06 MB, Total: 0.10 MB
in der DB stehen und habe nun versucht das so
#DbLog <SPEC1>:eth0_diff:::$val=~s/^RX..([\d.]*).*/$1/eg
#DbLog <SPEC1>:eth0_diff:::$val=~s/^TX..([\d.]*).*/$1/eg
#DbLog <SPEC1>:eth0_diff:::$val=~s/^Total..([\d.]*).*/$1/eg
zu teilen.
RX wird mir auch richtig geplottet aber TX und Total sind 0
Nu dacht ich mir ich kann das Beispiel mit CUM_DAY abwandeln aber wieder mal zuviel gedacht :o
andre bitte Hilfe :-\Grüße
bei TX und Total muss das ^ am anfang durch ein .* ersetzt werden. die beiden stehen ja nicht am anfang.
gruss
andre
Hallo,
Zitatmuss das ^ am anfang durch ein .* ersetzt werden.
War mir vollkommen klar. ::)
Nichts anderes hatte ich erwartet. ;D
:o :o :o :o
Jetzt wo du das sagst macht das Sinn - vielen Dank mal wieder.
Grüße
Anbei noch die beiden GPlot-Files für eth0 und ram
Hi Puschel74!
ZitatAnbei noch die beiden GPlot-Files für eth0 und ram
Vielen Dank, die Dateien sind umbenannt und bei GitHub hochgeladen.
https://github.com/hexenmeister/MyFHEM/blob/master/www/gplot/SMNetworkEth0DB.gplot
https://github.com/hexenmeister/MyFHEM/blob/master/www/gplot/SMRAMDB.gplot
Die DBLog-Sammlung wird langsam komplett ;)
VG
Alexander
Hallo,
ZitatDie DBLog-Sammlung wird langsam komplett
Was fehlt noch?
Grüße
Hi!
ZitatWas fehlt noch?
eigentlich nur die Plots für die Belegung der Flash-Karte und des USB-Stricks
Gruß,
Alexander
Hallo,
wenn du mir einen Auszug aus der DB gibst kann andre das ja anpassen 8)
Nein Blödsinn.
Mit dem Wissen das mir andre beigebracht hat sollte ich das schaffen.
Also einfach mit get myDbLog - - 2013-12-11 2013-12-12 sysmon:cpu_freq
(Namen und Parameter bitte anpassen) in die FHEM-Befehlszeile und eine oder 2 Rückgabezeilen daraus posten.
Grüße
Hallo,
würde ich ja gerne helfen, habe sogar mein DbLog wieder reaktiviert.
Leider liefert mir die Anweisung
get myDbLog - - 2013-12-14 2013-12-15 sysmon:cpu_freq
nur folgendens
#sysmon:cpu_freq:::
Dabei sind die Daten in der DB vorhanden:
mysql> select * from current where device = 'sysmon' and reading = 'cpu_freq';
+---------------------+--------+--------+---------------+----------+-------+------+
| TIMESTAMP | DEVICE | TYPE | EVENT | READING | VALUE | UNIT |
+---------------------+--------+--------+---------------+----------+-------+------+
| 2013-12-15 15:45:44 | sysmon | SYSMON | cpu_freq: 700 | cpu_freq | 700 | |
+---------------------+--------+--------+---------------+----------+-------+------+
1 row in set (0.60 sec)
mysql> select * from history where device = 'sysmon' and reading = 'cpu_freq';
+---------------------+--------+--------+------------------+----------+--------+------+
| TIMESTAMP | DEVICE | TYPE | EVENT | READING | VALUE | UNIT |
+---------------------+--------+--------+------------------+----------+--------+------+
| 2013-12-15 15:43:44 | sysmon | SYSMON | cpu_freq: 700 | cpu_freq | 700 | |
| 2013-12-15 15:44:44 | sysmon | SYSMON | cpu_freq: 700 | cpu_freq | 700 | |
| 2013-12-15 15:45:44 | sysmon | SYSMON | cpu_freq: 700 | cpu_freq | 700 | |
| 2013-12-15 15:46:44 | sysmon | SYSMON | cpu_freq: 700 | cpu_freq | 700 | |
| 2013-12-15 15:47:44 | sysmon | SYSMON | cpu_freq: 700 | cpu_freq | 700 | |
| 2013-12-15 15:48:44 | sysmon | SYSMON | cpu_freq: 700 | cpu_freq | 700 | |
+---------------------+--------+--------+------------------+----------+--------+------+
Was mache ich falsch?
Grüße,
Alexander
Hallo,
ZitatmyDbLog
heisst es bei dir auch myDbLog?
Grüße
Zitatheisst es bei dir auch myDbLog?
jo,
sonst schimpft er anders.
Beispiel:
get DbLog - - 2013-12-14 2013-12-15 sysmon:cpu_freq
Please define DbLog first
:(
Hallo,
eigenartig.
Da kann ich dir dann leider nicht weiter helfen.
Ich bekomm damit
get myDbLog - - 2013-12-11 2013-12-12 sysmon:cpu_freq
die Readings in dieser Form geliefert:
Zitat2013-12-11_00:00:58 700
2013-12-11_00:01:58 700
2013-12-11_00:02:58 700
2013-12-11_00:03:58 700
2013-12-11_00:04:58 700
2013-12-11_00:05:58 700
2013-12-11_00:06:58 700
2013-12-11_00:07:58 700
2013-12-11_00:08:58 700
2013-12-11_00:09:58 700
2013-12-11_00:10:58 700
2013-12-11_00:11:58 700
2013-12-11_00:12:58 700
Aber egal.
Du kannst mir die Werte für die fehlenden GPlot auch so posten - ich muss nur wissen wie sich die Readings zusammen setzen.
Grüße
Hi!
Reicht die Ausgabe aus Log?
2013-11-30_23:58:55 sysmon cpu_freq: 700
2013-11-30_23:58:55 sysmon ~ /: Total: 7404 MB, Used: 3630 MB, 52 %, Available: 3448 MB
2013-11-30_23:58:55 sysmon eth0_diff: RX: 3.02 MB, TX: 0.06 MB, Total: 3.08 MB
2013-11-30_23:58:55 sysmon cpu_temp_avg: 49.0
2013-11-30_23:58:55 sysmon cpu_temp: 48.69
2013-11-30_23:58:55 sysmon loadavg: 0.09 0.09 0.13
2013-11-30_23:58:55 sysmon ~ /media/usb1: Total: 30942 MB, Used: 6886 MB, 23 %, Available: 24057 MB
2013-11-30_23:58:55 sysmon ram: Total: 485 MB, Used: 129 MB, 26.60 %, Free: 356 MB
Der Wert für Root-Partition ist demnach:
Total: 7404 MB, Used: 3630 MB, 52 %, Available: 3448 MB
Für FileLog habe schon ich Plots hier:
https://github.com/hexenmeister/MyFHEM/blob/master/www/gplot/mySMFS_Root.gplot
https://github.com/hexenmeister/MyFHEM/blob/master/www/gplot/mySMFS_usb1.gplot
Die Abfrage mus aber doch auf Deinem System auch funktionieren:
get DbLog - - 2013-12-14 2013-12-15 sysmon:~ /
Oder kommt DbLog mit solchen Namen nicht klar?
Hallo,
Zitatget myDbLog - - 2013-12-14 2013-12-15 sysmon:~ /
klappt bei mir nicht.
Zitat
#sysmon:~:::
bekomme ich dann als Antwort.
Ich hab mir mal die Readings von sysmon angeschaut:
Die Readings sind da nur komme ich mit ~ nicht dran - oder ich mach wieder was falsch.
Grüße
Hm. Möglicherweise habe ich einen unglücklichen Namen gewählt (mit ~ und Leerzeichen). Wer könnte klären, ob dies zulässig ist?
Ich könnte sie auch umbenennen, aber mir fällte keine gute Namenskonvention ein. Ich würde gerne (auch programmtechnisch) die FileSystem-Readings unterscheiden können.
Hallo,
ich habe da ein ähnliches Problem.
2014-01-08_23:59:01 1W_S0Zaehler_Gas day: D08 Gas: 6.1 m^3 Gasm: 0.0 m^3 B: 109.0 cts Bm: 0.0 cts
Ich würde gerne aus dem DBLog den Gas-Tageswert plotten. Aber irgendwie komme ich mit den Ausdrücken noch nicht klar.
Ich habe mal probiert:
#DbLog 1W_S0Zaehler_Gas:day:::$val=($val=~m/.*Gas..([\d.]*)/)[0];
aber es wird nichts angezeigt. Kann mir da wer den Entscheidenen Input geben?
Gruß Christian
Hallo,
ich hab ja leider immer noch zuwenig Ahnung mit den regexp aber so
Zitat#DbLog 1W_S0Zaehler_Gas:day:::$val=($val=~m/.*Gas..([\d.]*)/)[0];
dürfte das auch nicht klappen.
Die Zeile in meiner powerdbday.gplot sieht so aus:
#DbLog <SPEC1>:cum_day:::$val=~s/^CUM_DAY..([\d.]*).*/$1/eg
Vielleicht kannst du darauf ja aufbauen.
Grüße
Hallo Puschel,
leider nicht.
Ich hatte zwischenzeitlich schon mal weiter experimentiert .. leider ohne Ergebnis.
Dein Code hatte ich in ganz ähnlicher Weise. Ich weiß halt nicht, wie er D08 interpretiert
Aktuell habe ich
Zitat#DbLog 1W_S0Zaehler_Gas:day:::$val=~s/.*Gas..([\d.]*).*/$1/eg
Das .* vor Gas, weil es ja nicht das Erste ist.
Hallo,
Zitatweil es ja nicht das Erste ist.
Dann mal bitte den gesamten Beitrag hier durchlesen.
andre hat in einem Beitrag erklärt wie das funktioniert wenn ein Reading nicht das erste ist.
Grüße
Edith:
ZitatIch weiß halt nicht, wie er D08 interpretiert
Ist auch egal.
du willst nur das Reading aus der DB auswerten und plotten.
Wenn das so wie von dir gepostet in der DB steht kannst du den gewünschten Wert auch plotten lassen.
Hi,
2014-01-07_23:56:44 D07 Gas: 5.5 m^3 Gasm: 0.0 m^3 B: 109.0 cts Bm: 0.0 cts
2014-01-08_23:59:01 D08 Gas: 6.1 m^3 Gasm: 0.0 m^3 B: 109.0 cts Bm: 0.0 cts
habe ich eben direkt via FHEM
get myDbLog - - 2014-01-07 2014-01-09 1W_S0Zaehler_Gas:day
ausgelesen aus der Datenbank.
mein .gplot habe ich noch mal angefasst.
#DbLog 1W_S0Zaehler_Gas:day:::$val=~s/.*Gas..([\d.]*).*/$1/eg
es wird aber nix angezeigt .. irgendwie steig ich da nicht durch.
Ich hab diesen Thread schon hoch und runter gelesen, auch die verlinkte Seite, sonst hätte ich ja hier nicht gefragt :)
deine regex passt auf das wort Gas mit zwei beliebigen zeichen danach und dann der zahl.
wenn ich mir dein log ansehe gibt es ein mal Gas mit doppelpunkt und zwei leerzeichen und ein mal Gas mit m doppelpunkt und zwei leerzeichen. das passt beides nicht auf deine regex...
gruss
andre
Hallo,
versuch mal
#DbLog 1W_S0Zaehler_Gas:day:::$val=~s/.*Gas...([\d.]*).*/$1/eg
nach Gas ... (3 Punkte).
Dein Auszug scheint zwischen Gas: und dem Wert 3 Leerzeichen zu haben.
Grüße
Puh .. schwere Geburt
er will
#DbLog 1W_S0Zaehler_Gas:day:::$val=~s/.*Gas:...([\d.]*).*/$1/eg
haben. Also den doppelpunkt nach Gas.
Danke Euch
Gruß Christian
Hallo,
ZitatAlso den doppelpunkt nach Gas.
Oder einfach einen vierten .
Der Doppelpunkt ist auch einfach nur "irgendein Zeichen" ;)
Grüße
oder :\s* für beliebig viele leerzeichen nach einem doppelpunkt.
Zitatoder :\s* für beliebig viele leerzeichen nach einem doppelpunkt.
Hach du wieder ;D
... und wenn man, wie ich, mit RegEx nicht so fit ist, kann man sich notfalls auch von Tools wie http://regex101.com/#PCRE helfen lassen und das benötigte Pattern "zusammenbasteln".
Peter
Zitat von: justme1968 am 09 Januar 2014, 16:50:36
oder :\s* für beliebig viele leerzeichen nach einem doppelpunkt.
Ohne Witz, das klappt nicht, er will tatsächlich den Doppelpunkt haben.
Oder
\s* nach dem Doppelpunkt, das klappt.Gruß Christian
Ich würde [^\d]*? nehmen, dann filtert er sicher alles vor den Zahlen heraus, das sollte auch minimal besser von der Performance sein ;-?
Gleichzeitig wird dieser Ausdruck fast "universell" einsetzbar.
Also:
#DbLog 1W_S0Zaehler_Gas:day:::$val=~s/.*Gas[^\d]*?([\d.]+).*/$1/eg
Zitat von: JoeALLb am 10 Januar 2014, 12:02:31
Ich würde [^\d]*? nehmen, dann filtert er sicher alles vor den Zahlen heraus, das sollte auch minimal besser von der Performance sein ;-?
Gleichzeitig wird dieser Ausdruck fast "universell" einsetzbar.
Also:
#DbLog 1W_S0Zaehler_Gas:day:::$val=~s/.*Gas[^\d]*?([\d.]+).*/$1/eg
Liefert mir dann nur noch den tagesaktuellen Wert, also sprich einen :(
Gruß Christian
Hallo Community,
weiss jemand, warum bei mir die 1 min load avg nicht geplottet wird?
Mit freundlichen Grüßen