FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: abc2006 am 13 Dezember 2016, 02:05:23

Titel: Reading splitten und daraufhin aktionen ausführen
Beitrag von: abc2006 am 13 Dezember 2016, 02:05:23
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


Titel: Antw:Reading splitten und daraufhin aktionen ausführen
Beitrag 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)
Für userreadings siehe Antw:Teil aus Zeichenkette extrahieren (https://forum.fhem.de/index.php/topic,59426.msg508054.html#msg508054)
Titel: Antw:Reading splitten und daraufhin aktionen ausführen
Beitrag von: abc2006 am 13 Dezember 2016, 15:39:45
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

Titel: Antw:Reading splitten und daraufhin aktionen ausführen
Beitrag von: igami am 13 Dezember 2016, 16:51:20
Den gesamten fhem Befehl einfach in runde klammern setzen