[gelöst] userReadings mit regex funktioniert nicht

Begonnen von Wiesenfreund, 21 Dezember 2019, 10:16:06

Vorheriges Thema - Nächstes Thema

Wiesenfreund

Aus dem Gerät SYSMON und dem Reading root benötige ich den Wert für Used. Im userReading soll dann nur die Zahl angezeigt werden.

Total: 14891 MB, Used: 2829 MB, 20 %, Available: 11562 MB at /

Mit diesem regulären Ausdruck

^.*Used:\s(.*)\sMB,.*

funktioniert es, getestet mit dem Online regex tester.

Die Umsetzung bzw. Zuweisung in einem userReading kenne ich nicht. Ich habe es wie folgt probiert:

speicher {my $v = ReadingsVal($name,"root","0");; $v =~ /^.*Used:\s(.*)\sMB,.*/;; $v}

Das funktioniet aber nicht und ausgegeben wird der gesamte Inhalt von root.

Ich habe leider keine Hinweise im Forum, Wiki, commandref gefunden. Kann mir jemand weiterhelfen??

Danke,
Eberhard


Raspberry 4 mit fhem, Raspberry 3 mit fhem (FS20-, MAX-Schnittstellen), RaspiMatic Raspberry 3B, HM und HMW-Geräte (Heizung, Wetterstation, Fensterkontakte), Shellys (Rollladen, MQTT), ESPEasy (Energiezähler, MQTT), MAX-Taster (CUL),  FS20 Taster  (CUL), Synology NAS (Mosquitto,Chat

Otto123

#1
Moin,

UsedReadingsVal - wie kommst Du auf diese Funktion? Klar die kennt Perl so nicht.
Du meinst ReadingsVal ?

Edit: Aber funktionieren tut das so noch nicht, Das regEx trifft zwar, aber Du gibst den ganzen Wert zurück und nicht die "Extraktion"

Das geht mit $1 anstatt v$ - so kannst Du es in der Komamndozeile testen.
{my $v = ReadingsVal("sysmon","root","0");; $v =~ /^.*Used:\s(.*)\sMB,.*/;; return $1}

Und anschließend tauschst Du "sysmon" wieder gegen $name. ;)

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

Wiesenfreund

Danke, ich hab es korrigiert. Beim hin und her kopieren und probieren hatte ich den falschen Wert erwischt.
Gruß Eberhard
Raspberry 4 mit fhem, Raspberry 3 mit fhem (FS20-, MAX-Schnittstellen), RaspiMatic Raspberry 3B, HM und HMW-Geräte (Heizung, Wetterstation, Fensterkontakte), Shellys (Rollladen, MQTT), ESPEasy (Energiezähler, MQTT), MAX-Taster (CUL),  FS20 Taster  (CUL), Synology NAS (Mosquitto,Chat

Otto123

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

Wiesenfreund

Danke, hat leider nicht funktioniert. in der Kommandozeile kommt leider keine Ergebnis. Im Reading hat es auch nicht funktioniert. Dort konnte ich jetzt auch keine Aktualisierung mir auslösen. Nach einem reboot melde ich mich.
Raspberry 4 mit fhem, Raspberry 3 mit fhem (FS20-, MAX-Schnittstellen), RaspiMatic Raspberry 3B, HM und HMW-Geräte (Heizung, Wetterstation, Fensterkontakte), Shellys (Rollladen, MQTT), ESPEasy (Energiezähler, MQTT), MAX-Taster (CUL),  FS20 Taster  (CUL), Synology NAS (Mosquitto,Chat

Wiesenfreund

Mit folgendem Eintrag funktioniert es leider nicht. Das userReading wird auch nicht angelgt:

speicher {my $v = ReadingsVal($name,"root","0");; $v =~ /s#^.*Used:\s(.*)\sMB,.*/;; return $1}
Raspberry 4 mit fhem, Raspberry 3 mit fhem (FS20-, MAX-Schnittstellen), RaspiMatic Raspberry 3B, HM und HMW-Geräte (Heizung, Wetterstation, Fensterkontakte), Shellys (Rollladen, MQTT), ESPEasy (Energiezähler, MQTT), MAX-Taster (CUL),  FS20 Taster  (CUL), Synology NAS (Mosquitto,Chat

Wiesenfreund

Danke für die Hilfe, nach erneutem reboot hat es dann doch noch funktioniert. Das Reading lautet jetzt:

speicher {my $v = ReadingsVal($name,"root","0");; $v =~ /^.*Used:\s(.*)\sMB,.*/;; return $1}

Warum das nach dem ersten Neustart von fhem nicht richtig funktioniert hat, entzieht sich meiner Kenntnis. Gehe ich recht in der Annahme, dass erst durch die Einfassung des regex mit Schrägstrichen die Substitution möglich war?

Nochmals Danke
Raspberry 4 mit fhem, Raspberry 3 mit fhem (FS20-, MAX-Schnittstellen), RaspiMatic Raspberry 3B, HM und HMW-Geräte (Heizung, Wetterstation, Fensterkontakte), Shellys (Rollladen, MQTT), ESPEasy (Energiezähler, MQTT), MAX-Taster (CUL),  FS20 Taster  (CUL), Synology NAS (Mosquitto,Chat

Otto123

Hallo Eberhard,

Ich verstehe es nicht. Man braucht keinen Reboot für einen funktionierenden Code.

In deinem "Bilderrätsel" in Beitrag #5 ist ein Fehler -> /s#^ da ist ein s# zuviel - was das dort soll? Da ist klar das es nicht funktioniert.

Ein UserReading wird erst angelegt wenn die Readings in dem Gerät aktualisiert werden. Solange musst Du warten. Ein neues Reading sieht man in der Weboberfläche auch nicht sofort, da muss man Refresh im Browser machen.

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

Wiesenfreund

Hallo Otto,
ganz einfach, das Problem saß vor dem Bildschirm. Ich hatte das was probiert und gespeichert. Dann war natürlich der Fehler nach dem Neustart weiter eingebaut und ich hab es nicht gleich gemerkt. Also nochmals deine Lösung kopiert und eingefügt, dann hats natürlich funktioniert, mein Mist wurde ja dabei überschrieben.
Der 2. Neustart war sicher nicht notwendig.

Das mit der Readingsaktualisierung ist mit klar.

Nochmals Danke und schöne Feiertage,
Eberhard
Raspberry 4 mit fhem, Raspberry 3 mit fhem (FS20-, MAX-Schnittstellen), RaspiMatic Raspberry 3B, HM und HMW-Geräte (Heizung, Wetterstation, Fensterkontakte), Shellys (Rollladen, MQTT), ESPEasy (Energiezähler, MQTT), MAX-Taster (CUL),  FS20 Taster  (CUL), Synology NAS (Mosquitto,Chat