FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: en-trust am 30 November 2020, 08:24:09

Titel: Nachkommastellen und das ewie Leid
Beitrag von: en-trust am 30 November 2020, 08:24:09
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 ?
Titel: Antw:Nachkommastellen und das ewie Leid
Beitrag von: betateilchen am 30 November 2020, 08:53:15
Used:.(\d+.\d+.MB)
Titel: Antw:Nachkommastellen und das ewie Leid
Beitrag von: en-trust am 30 November 2020, 09:48:43
ram_used {if (ReadingsVal("$name","ram",0) =~ m/Used:.(\d+.\d+.MB)/) {return $1;;;;}}

Ist vermutlich so auch nicht korrekt...
Titel: Antw:Nachkommastellen und das ewie Leid
Beitrag von: Beta-User am 30 November 2020, 10:03:43
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);}}
Titel: Antw:Nachkommastellen und das ewie Leid
Beitrag 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


Titel: Antw:Nachkommastellen und das ewie Leid
Beitrag von: frank am 30 November 2020, 11:31:42
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}
Titel: Antw:Nachkommastellen und das ewie Leid
Beitrag von: en-trust am 30 November 2020, 11:35:11
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