Ich habe mir aus der sysmon den Ram (Used) mal selektiert.
ram_used {if (ReadingsVal("$name","ram",0) =~ m/Used:\s(\d+)/)) {return $1;;;;}}
Den erhalte ich dann auch, allerdings ohne Nachkommastelle und ohne den Text MB.
ram_used {if (sprintf("%.2f", ReadingsVal("$name","ram",0))."MB" =~ m/Used:\s(\d+)/)) {return $1;;;;}}
Das mag fhem aber leider nicht.
Error evaluating System.Monitoring userReading ram_used: syntax error at (eval 861) line 1, near "if sprintf"
syntax error at (eval 861) line 1, near "}}"
Kann mir jemand helfen ?
Used:.(\d+.\d+.MB)
ram_used {if (ReadingsVal("$name","ram",0) =~ m/Used:.(\d+.\d+.MB)/) {return $1;;;;}}
Ist vermutlich so auch nicht korrekt...
Wenn du ein list einstellen würdest, wäre da evtl. einfacher zu helfen, aber so weiß z.B. keiner, ob da überhaupt MB im Reading stehen, ob es einen Tausender-Trenner gibt usw. usf.. Außerdem ist kein Trigger definiert, was mindestens eine Unsauberkeit ist...
Ins Blaue (für das Editieren des Attributinhalts via FHEMWEB):
ram_used:ram.* {if (ReadingsVal("$name","ram",0) =~ m/Used:.([0-9.,]+)/) {return qq($1 MB);}}
Ich habe noch nicht verstanden, was Du mit der if-Abfrage im Code überhaupt willst.
Das hier funktioniert bei mir jedenfalls problemlos:
attr sysmon userReadings ram_used {ReadingsVal("$name","ram",0) =~ m/Used:.(\d+.\d+.MB)/;; return $1}
sysmon 2020-11-30 10:17:45 ram Total: 974.38 MB, Used: 273.72 MB, 28.09 %, Free: 160.89 MB
sysmon 2020-11-30 10:17:45 ram_used 273.72 MB
wenn es ein eindeutiges "ende-zeichen" gibt, finde ich folgende regex-methode immer sehr einfach und nützlich.
in der regel auch "wartungsfreundlicher", da der modulautor den gesuchten teilstring auch ruhig etwas ändern kann:
attr sysmon userReadings ram_used {ReadingsVal("$name","ram",0) =~ m/Used:.([^,]+)/;; return $1}
Zitat von: betateilchen am 30 November 2020, 10:19:39
Ich habe noch nicht verstanden, was Du mit der if-Abfrage im Code überhaupt willst.
Das hier funktioniert bei mir jedenfalls problemlos:
attr sysmon userReadings ram_used {ReadingsVal("$name","ram",0) =~ m/Used:.(\d+.\d+.MB)/;; return $1}
sysmon 2020-11-30 10:17:45 ram Total: 974.38 MB, Used: 273.72 MB, 28.09 %, Free: 160.89 MB
sysmon 2020-11-30 10:17:45 ram_used 273.72 MB
Klappt. Naja mein Statement hatte ich hier aus dem Forum, auch mit dem if.
Danke