userReadings: Werte mittels RegEx ermitteln

Begonnen von Standarduser, 24 Januar 2016, 14:41:28

Vorheriges Thema - Nächstes Thema

Standarduser

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?

Ellert

ZitatLeider erscheinen weder das Reading
Benutze für Readings "ReadingsVal" und für Internals "InternalVal".

Standarduser

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?

Standarduser

So gehts:


attr DG.wz.NW.RaspberryPi userReadings root_used {
if (ReadingsVal($name,'root','0')  =~ m/Used:\s(.*)\sMB,/) {
return $1;
}
}

Ellert

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.