userReadings mehrere Readings spliten

Begonnen von neyzen, 07 Februar 2020, 21:35:52

Vorheriges Thema - Nächstes Thema

neyzen

Hallo,

ich splite aktuell folgendes reading:
stat_cpu_percent
1.23 0.00 0.31 98.42 0.01 0.00 0.03


mit folgendem userReading
Cpu_Prozent {round(100 - (split ' ',ReadingsVal("sysmon","stat_cpu_percent",0))[3],1)}

Das funktioniert auch.
Jetzt möchte ich ein weiteres reading im device sysmon spliten
dieses reading:
fs_root
Total: 14846 MB, Used: 6917 MB, 50 %, Available: 7156 MB at /


ich möchte gerne den letzten Wert 7156 MB in ein neues reading mit dem namen Speicher reinschreiben.

folgendes habe ich versucht,funktioniert aber nicht

Cpu_Prozent {round(100 - (split ' ',ReadingsVal("sysmon","stat_cpu_percent",0))[3],1)},
Speicher { (split ' ',ReadingsVal("sysmon","fs_root",0))[2],1)}

CoolTux

"funktioniert aber nicht" ist keine Fehlerbescgreibung.

Was genau steht denn statt dessen oder steht nicht?
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

neyzen

Ja klar, das steht drin

Speicher
Error evaluating sysmon userReading Speicher: syntax error at (eval 375664) line 1, near "1)"

Otto123

#3
Auf die Schnelle fällt mir ein: Schau mal in die svg Files SM_DB_ usw (Edit Files)
Da stehen die regExp drin für den Sysmon wenn man in DBLog loggt. So in der Art:
$val=~s/^T:\s([-\d.]+).*H:\s([-\d.]+)/$1/eg

Damit testen auf regex101.com , damit bekommst Du das hin.
Hier hab ich mir das mal aufgeschrieben.

Edit: So wäre der richtige Suchstring
s/.*Available:\s([-\d.]+)/$1/egIn $1 steht Dein Wert

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

neyzen

also so?


Speicher { (split ' s/.*Available:\s([-\d.]+)/$1/eg',ReadingsVal("sysmon","fs_root",0))[2],1)}?

Otto123

#5
nein, hat eigentlich nix mit split zu tun... Ob das funktioniert?
Eher so, ich hab es nicht probiert!!!
{my $val = ReadingsVal("sysmon","fs_root",0); $val=~s/.*Available:\s([-\d.]+)/$1/eg}

Edit:
So kann ich das auf FHEM Kommandozeile testen: Achtung bei mir root bei Dir fs_root!
{my $val = ReadingsVal("sysmon","root",0);; $val=~s/.*Available:\s([-\d.]+)/$1/eg;;return $1}
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

crusader

Oder kürzer:

(ReadingsVal("sysmon","fs_root",0) =~ "Available:.(.*MB).*")[0]

Otto123

ok, da steht auch MB mit drin, das ist besser :)
Ich bin nicht so fit
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

neyzen



Edit:
So kann ich das auf FHEM Kommandozeile testen: Achtung bei mir root bei Dir fs_root!
{my $val = ReadingsVal("sysmon","root",0);; $val=~s/.*Available:\s([-\d.]+)/$1/eg;;return $1}
[/quote]

Ja damit bekomme ich den Wert, aber ich würde das gerne mit userreding machen. da ich ja schon eins hab. Ich dachte das das zweite auch so ähnlich wäre. ich weis jetzt nicht was ich in dem userreading reinschreiben soll.

neyzen

Zitat von: crusader am 07 Februar 2020, 22:07:10
Oder kürzer:

(ReadingsVal("sysmon","fs_root",0) =~ "Available:.(.*MB).*")[0]


und wie kombiniere ich das in userReadings damit er ein neues reading mit dem namen Speicher erzeugt und den Wert reinschreibt?

crusader

Genau so wie Du es in Deinem ersten Beitrag beschrieben hast, also hinter den Namen des Userreadings.
Übrigens kannst Du auch Ottos Vorschlag komplett in die Perl-Klammern des Userreadings setzen.

neyzen

#11
folgendes hab ich probiert mit Ottos code


Cpu_Prozent {round(100 - (split ' ',ReadingsVal("sysmon","stat_cpu_percent",0))[3],1)},
Speicher {my $val = ReadingsVal("sysmon","fs_root",0);; $val=~s/.*Available:\s([-\d.]+)/$1/eg;;return $1}


funktioniert






crusader

Weil dein reading fs_root heisst. Hat Otto doch extra geschrieben.

neyzen

Ja mist, hab ich gerade gemerkt, jetzt tuts. Super

ich danke dir crusader
ich danke dir Otto

:)

Otto123

ein Userreading ist doch nix weiter als ein Stück Perlcode {} und ein Name davor :)
Nur in der Kommandozeile muss man die ; doppelt machen, in der DEF vom userreadings reicht eins. In der Raw Def müssen es wieder zwei sein :)

Also geht auch
Speicher {(ReadingsVal("sysmon","fs_root",0) =~ "Available:.(.*MB).*")[0]}da hat man das Problem mit den ; nicht :)
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz