FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: neyzen am 07 Februar 2020, 21:35:52

Titel: userReadings mehrere Readings spliten
Beitrag von: neyzen am 07 Februar 2020, 21:35:52
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)}
Titel: Antw:userReadings mehrere Readings spliten
Beitrag von: CoolTux am 07 Februar 2020, 21:47:21
"funktioniert aber nicht" ist keine Fehlerbescgreibung.

Was genau steht denn statt dessen oder steht nicht?
Titel: Antw:userReadings mehrere Readings spliten
Beitrag von: neyzen am 07 Februar 2020, 21:48:30
Ja klar, das steht drin

Speicher
Error evaluating sysmon userReading Speicher: syntax error at (eval 375664) line 1, near "1)"
Titel: Antw:userReadings mehrere Readings spliten
Beitrag von: Otto123 am 07 Februar 2020, 21:48:47
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  (https://heinz-otto.blogspot.com/2019/10/file-log-und-gut.html)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
Titel: Antw:userReadings mehrere Readings spliten
Beitrag von: neyzen am 07 Februar 2020, 21:58:01
also so?


Speicher { (split ' s/.*Available:\s([-\d.]+)/$1/eg',ReadingsVal("sysmon","fs_root",0))[2],1)}?
Titel: Antw:userReadings mehrere Readings spliten
Beitrag von: Otto123 am 07 Februar 2020, 22:02:30
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}
Titel: Antw:userReadings mehrere Readings spliten
Beitrag von: crusader am 07 Februar 2020, 22:07:10
Oder kürzer:

(ReadingsVal("sysmon","fs_root",0) =~ "Available:.(.*MB).*")[0]
Titel: Antw:userReadings mehrere Readings spliten
Beitrag von: Otto123 am 07 Februar 2020, 22:09:43
ok, da steht auch MB mit drin, das ist besser :)
Ich bin nicht so fit
Titel: Antw:userReadings mehrere Readings spliten
Beitrag von: neyzen am 07 Februar 2020, 22:12:19


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.
Titel: Antw:userReadings mehrere Readings spliten
Beitrag von: neyzen am 07 Februar 2020, 22:13:33
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?
Titel: Antw:userReadings mehrere Readings spliten
Beitrag von: crusader am 07 Februar 2020, 22:19:17
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.
Titel: Antw:userReadings mehrere Readings spliten
Beitrag von: neyzen am 07 Februar 2020, 22:27:17
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





Titel: Antw:userReadings mehrere Readings spliten
Beitrag von: crusader am 07 Februar 2020, 22:29:26
Weil dein reading fs_root heisst. Hat Otto doch extra geschrieben.
Titel: Antw:userReadings mehrere Readings spliten
Beitrag von: neyzen am 07 Februar 2020, 22:30:55
Ja mist, hab ich gerade gemerkt, jetzt tuts. Super

ich danke dir crusader
ich danke dir Otto

:)
Titel: Antw:userReadings mehrere Readings spliten
Beitrag von: Otto123 am 07 Februar 2020, 22:34:51
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 :)