[Erledigt] Teil aus Zeichenkette extrahieren

Begonnen von Wiesel, 22 Oktober 2016, 12:48:40

Vorheriges Thema - Nächstes Thema

Wiesel

Hallo Zusammen,

ich nutze das Modul sysmon um mir diverse Informationen zu meinem System anzeigen zu lassen. Soweit so gut.
Alle Daten werden bei mir über dbLog aufgezeichnet.
Nun möchte ich in meinem Tablet-Ui Diagramme zur RAM Nutzung erstellen. Das Reading für RAM sieht so aus
Total: 925.80 MB, Used: 282.98 MB, 30.57 %, Free: 642.81 MB

Ich möchte jetzt nur die einzelnen Werte in einem neuen Reading haben. Folgender Code unterteilt das Reading in 3 Arrays und entfernt dann jeweils eine Zeichenkette. Bei der Prozentangabe funktioniert das auch einwandfrei aber die anderen sind aus [Name] [Wert] [Einheit] zusammengestellt. Hier bekomme ich es nicht hin [Name] und [Wert] aus dem Array zu entfernen.
Ich hoffe ihr habt verstanden was ich machen möchte :-)
Hier der Code für userReadings:


ram_tot { my @values = split(/,/,ReadingsVal("sysmon","ram",0));;my $val = $values[0];; $val =~ s/\Total://g;; return $val;; },

ram_use { my @values = split(/,/,ReadingsVal("sysmon","ram",0));;my $val = $values[1];; $val =~ s/\MB//g;; return $val;; },

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

ram_fre { my @values = split(/,/,ReadingsVal("sysmon","ram",0));;my $val = $values[3];; $val =~ s/\MB//g;; return $val;; },



P.S. Ich bin so vorgegangen weil ich nicht weiß ob man bei den Diagrammen von Tablet-UI perl-Code zulässig ist. Hier ein mein Beispiel-Code für das Chart.


<div id="ram-container"
                 data-type="chart"
                 data-device="sysmon"
                 data-logdevice="logdb"
data-logfile="HISTORY"
         data-columnspec='["sysmon:ram[PERL-CODE]"                 <-- Um diese Zeile geht es
                 data-linenames='["total","used","free"]'
                 data-linetypes='["area","area","line"]'
                 data-minvalue="0"
                 data-maxvalue="1024"
                 data-height="300"
                 data-title="Speichernutzung"
                 data-xunit="Heute"
                 data-yunit="RAM"
                 data-tooltip="{series.name} <b>{point.y:,.0f}</b> MB of RAM"
                 data-tickInterval="1800000"
                 data-tickAmount="10" >
</div>



Grüße vom Wiesel  ;)
Raspi 4 mit FHEM und CUL / Conbee2

CoolTux

Vielleicht hilft Dir das


fs_rootFree { my @a = split ' ',ReadingsVal($name,'fs_root',0);$a[6] }


Ich mache das selbe nur vom fs_root Reading.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

igami

Hallo Wiesel,

ich würde einfach zwei mal splitten:

ram_tot {return (split(" ", (split(", ", ReadingsVal($name, "ram", undef)))[0]))[1]}

Der erste split gibt dann "Total: 925.80 MB" aus.
Der zweite split gibt "925.80" aus.
Ist aber ungetestet.

Grüße
igami
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

Wiesel

Hallo,

Das von CoolTux ist genau das was ich gesucht habe. Warum einfach wenn es auch kompliziert geht ? :-D

@igami
Deine Lösung funtkioniert ebenfalls.

Vielen Dank euch beiden.
Raspi 4 mit FHEM und CUL / Conbee2