Hi,
ich habe mir ein Sysmon angelegt. Dieses liefert mir ein reading:
Total: 234603 MB, Used: 16602 MB, 8 %, Available: 206062 MB at /
Was ich will:
Zweimal am Tag (09:00 und 18:00 Uhr eine Info, wieviel Platz frei ist)
Wenn freier Platz unter 20% (also belegt über 80), dann möchte ich (halb)stündlich genervt werden, bis ich mich dazu aufgerafft habe, den Speicher wieder zu räumen.
Was ich bereits habe:
a)
ein DOIF, funktioniert. Was ich nicht hinbekommen habe, sind die unterschiedlichen sendeintervalle:
ZitatInternals:
CFGFN
DEF ([+:01])({
##my $var = "Total: 234603 MB, Used: 16596 MB, 8 %, Available: 206068 MB at /";
##my $var = ReadingsVal("fhem_sysmon","root",0);;
##$var =~ /.*Used:\s(\d+)\sMB,\s(\d+)\s%,\sAvailable:\s(\d+)\sMB.*/;;
ReadingsVal("fhem_sysmon","root",0) =~ /.*Used:\s(\d+)\sMB,\s(\d+)\s%,\sAvailable:\s(\d+)\sMB.*/;;
##printf ("$var\n");
##printf ("$1\n");
##printf ("$2\n");
if ($2 < 5){
fhem("set remotebot message $1 MB benutzt, das entspricht einer Auslastung von $2 %, aber $3 MB sind noch frei");;
}else {
fhem("set remotebot message $1 MB benutzt, das entspricht bereits einer Auslastung von $2 %! Es sind nur noch $3 MB frei");;
}
})
NAME DF_SYSMON
NR 73307
NTFY_ORDER 50-DF_SYSMON
STATE cmd_1
TYPE DOIF
Readings:
2016-12-13 01:38:00 cmd 1
2016-12-13 01:38:00 cmd_event timer_1
2016-12-13 01:38:00 cmd_nr 1
2016-12-13 01:38:00 state cmd_1
2016-12-13 02:01:00 timer_1_c1 13.12.2016 02:02:00
Condition:
0 DOIF_time_once($hash,$hash->{timer}{0},$wday,"")
Days:
Devices:
Do:
0:
0 { ReadingsVal("fhem_sysmon","root",0) =~ /.*Used:\s(\d+)\sMB,\s(\d+)\s%,\sAvailable:\s(\d+)\sMB.*/;; if ($2 < 5){ fhem("set remotebot message $1 MB benutzt, das entspricht einer Auslastung von $2 %, aber $3 MB sind noch frei");; fhem(setreading fhem_sysmon fs_root $2) }else { fhem("set remotebot message $1 MB benutzt, das entspricht bereits einer Auslastung von $2 %! Es sind nur noch $3 MB frei");; } }
Helper:
event timer_1
globalinit 1
last_timer 1
sleeptimer -1
timerdev
timerevent timer_1
timereventsState
triggerDev
timerevents:
timer_1
triggerEvents:
timer_1
Internals:
Interval:
Itimer:
Localtime:
0 1481590920
Readings:
Realtime:
0 02:02:00
Regexp:
State:
Time:
0 +:01
Timecond:
0 0
Timer:
0 0
Timers:
0 0
Triggertime:
1481590920:
localtime 1481590920
Hash:
Attributes:
b) UserReading: mit "return 2" gehts, mit "return $2" verschwindet das Reading sogar komplett aus der Reading-Liste...
Wenn das funktionieren würde, könnte ich mit einem doif den Wert abfragen, dann wären die unterschiedlichen Intervalle nicht mehr das Problem.
rootProz {\
ReadingsVal($name,"root",0) =~ /.*Used:\s(\d+)\sMB,\s(\d+)\s%,\sAvailable:\s(\d+)\sMB.*/;;\
return $2}
Wo steh ich aufm Schlauch? bitte mal schubsen :-)
Danke
Stephan
Warum nutzt du nicht die DOIF Syntax dafür? Siehe Filtern nach Ausdrücken mit Ausgabeformatierung (http://fhem.de/commandref_DE.html#DOIF_Filtern_nach_Zahlen)
Für userreadings siehe Antw:Teil aus Zeichenkette extrahieren (https://forum.fhem.de/index.php/topic,59426.msg508054.html#msg508054)
Zitat von: igami am 13 Dezember 2016, 05:58:19
Warum nutzt du nicht die DOIF Syntax dafür? Siehe Filtern nach Ausdrücken mit Ausgabeformatierung (http://fhem.de/commandref_DE.html#DOIF_Filtern_nach_Zahlen)
Ja, das wollte ich eigentlich. War gestern wohl zu spät, danke.
Kannst du mir noch bei Kommata helfen?
Ich möchte gerne diese Ausgabe haben, aber da "," fhem-Befehle trennen, frage ich mich, wie ich diese escapen kann, dass es trotzdem funktioniert...
set remotebot message [fhem_sysmon:root:".*Used:\s(\d+)\sMB,\s(\d+)\s%,\sAvailable:\s(\d+)\sMB.*":$1] MB benutzt, das
entspricht einer Auslastung von [fhem_sysmon:root:".*Used:\s(\d+)\sMB,\s(\d+)\s%,\sAvailable:\s(\d+)\sMB.*":$1] %\, aber
[fhem_sysmon:root:".*Used:\s(\d+)\sMB,\s(\d+)\s%,\sAvailable:\s(\d+)\sMB.*":$3] MB sind noch frei
Grüße
Stephan
Den gesamten fhem Befehl einfach in runde klammern setzen