FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Standarduser am 24 Januar 2016, 14:41:28

Titel: userReadings: Werte mittels RegEx ermitteln
Beitrag von: Standarduser am 24 Januar 2016, 14:41:28
Hallo zusammen,

ich möchte mittels SYSMON meinen Raspberry Pi überwachen und dazu Plots zeichnen.
Ein Wert davon soll der Speicherverbrauch auf der SD-Karte sein, der mir als "root" angezeigt wird.

Total: 7358 MB, Used: 2941 MB, 42 %, Available: 4070 MB at /

Auf dem Plot soll also der Wert hinter "Used: " angezeigt werden. Da ich das im Plot nicht hinbekommen habe, wollte ich mir ein userReading "root_used" anlegen und dort den per RegEx ermittelten Wert hinein schreiben.

Mein Eintrag in der fhem.cfg sieht so aus:
attr DG.wz.NW.RaspberryPi userReadings root_used { return  InternalVal($name,'root','') =~ m/Used:\s(.*)\sMB,/  };
Wobei der reguläre Ausdruck Ansicht erstmal korrekt sein sollte.

Leider erscheinen weder das Reading, geschweige denn ein Wert dazu.
Kann mir jemand sagen, wo der Fehler liegt?
Titel: Antw:userReadings: Werte mittels RegEx ermitteln
Beitrag von: Ellert am 24 Januar 2016, 16:07:37
ZitatLeider erscheinen weder das Reading
Benutze für Readings "ReadingsVal" und für Internals "InternalVal".
Titel: Antw:userReadings: Werte mittels RegEx ermitteln
Beitrag von: Standarduser am 24 Januar 2016, 16:41:27
Danke. Das Reading erscheint jetzt, liefert als Wert jedoch "1" zurück.
Ich könnte mir vorstellen, dass der Ausdruck ein Array von Werten liefert, wenn gleich auch nur ein Wert enthalten ist.
Wie kann ich den ersten Wert auswählen?
Titel: Antw:userReadings: Werte mittels RegEx ermitteln
Beitrag von: Standarduser am 24 Januar 2016, 17:37:32
So gehts:


attr DG.wz.NW.RaspberryPi userReadings root_used {
if (ReadingsVal($name,'root','0')  =~ m/Used:\s(.*)\sMB,/) {
return $1;
}
}
Titel: Antw:userReadings: Werte mittels RegEx ermitteln
Beitrag von: Ellert am 24 Januar 2016, 17:40:00
ZitatWie kann ich den ersten Wert auswählen?
Zu dem Thema gibt es hier eine umfassende Beschreibung: http://perldoc.perl.org/perlre.html

oder Du benutzt statt einer Regexp die Perlfunktion split.

Du bist mir zuvorgekommen.