Hauptmenü

sleep und Blockade

Begonnen von ujaudio, 21 Juli 2015, 11:51:09

Vorheriges Thema - Nächstes Thema

ujaudio

Durch Zufall bin ich in einem anderen Thread auf die Info gestoßen "perl sleep blockiert, fhem sleep nicht".

Seit ein paar Tagen habe ich ein neues Notify und festgestellt, dass fhem nun langsam ist. Mhm, könnte ja daran liegen. Mein Notify lautet sinngemäß:

trigger {
...
fhem ("set Lampe on");
fhem ("sleep 30");
fhem ("set Lampe off");
...
}

Ist das jetzt blockierend oder nicht? Was wäre ggf. die bessere Lösung?
Einen lieben Gruß
Jürgen

OiledAmoeba

Moin, on-for-timer wäre die sauberere Lösung.

Gesendet von meinem SM-G900F mit Tapatalk

Gruß
Florian

Jail auf XigmaNAS (freeBSD); CCU2 mit CULv3, nanoCUL868 und JeeLink-Clone; div. FS20-Komponenten; andFHEM; div. hm- und hmip-Komponenten; div. IT+

herrmannj

Hi,

ist da noch perl code drin ? Nein ? Dann so:

trigger ... "set Lampe on; sleep 30; set Lampe off"

mit perl eben in fhem (" ... ") kapseln.

vg
joerg

krikan


Doggiebert

...und ein Blick in die commandref zu sleep würde das auch offenbaren: http://fhem.de/commandref_DE.html#sleep
SW: FHEM 5.5, Raspian, XBMC, Testinstallation auf Win7
HW: Raspi B, 32GB SD, enocean Pi, RFXTRX433E, BSC - MwC-32, Onkyo TX-NR709, Samsung UE55F8090, Jung LS-Eno, permundo SmartPlug, KDG-FB 6490cable (ohne FHEM)

C0mmanda

Hallo,

habe zu dem sleep "Problem" eine Frage.

Ich überwache meinen Kühlschrank und möchte mir eine Pushnachricht schicken lassen wenn dieser zu warm wird.
Das klappt auch ganz prima:


KUE_Kuehlschrank {
  my $temp=ReadingsVal("KUE_Kuehlschrank","temperature","");
  if ($temp > 10) {
    fhem ("set Pushover1 msg 'WARNUNG' 'Kühlschrank zu warm! Temperatur beträgt $temp Grad' '' 1 ''");
  }
}


Soweit so gut. Ist der Kühlschrank aber nun tatsächlich zu warm bekomme ich im schlimmsten Fall alle paar Sekunden eine Push, eben jedes mal wenn ein notify kommt.

Der Gedanke war jetzt am Ende ein sleep einzufügen um die nächste Push hinaus zu zögern, aber dann friert fhem ja leider ein.


KUE_Kuehlschrank {
  my $temp=ReadingsVal("KUE_Kuehlschrank","temperature","");
  if ($temp > 10) {
    fhem ("set Pushover1 msg 'WARNUNG' 'Kühlschrank zu warm! Temperatur beträgt $temp Grad' '' 1 '';;sleep 300");
  }
}


Geht also nicht....

Da sleep mit einem Befehl dahinter funktioniert wäre die Notlösung es so zu machen:

KUE_Kuehlschrank {
  my $temp=ReadingsVal("KUE_Kuehlschrank","temperature","");
  if ($temp > 10) {
    fhem ("sleep 300;; set Pushover1 msg 'WARNUNG' 'Kühlschrank zu warm! Temperatur beträgt $temp Grad' '' 1 ''");
  }
}


Dann kommt die Push aber eben stets 5min "zu spät" und so ganz sauber scheint das auch nicht zu funktionieren...
Gibt es da eine schönere, "richtige" Lösung?

Habe diesen Hinweis http://forum.fhem.de/index.php/topic,27305.msg202037.html#msg202037 gelesen, bin aber leider nicht in der Lage das auf mein Problem umzusetzen.
Es wäre schön wenn mir jemand die richtige Richtung weisen könnte...

Vielen Dank!

justme1968

schau dir mal das event-on-change-reading attribut an und die module WATCHDOG und THRESHOLD.

die sind genau dazu da so etwas nicht von hand zu machen.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

C0mmanda

Zitat von: justme1968 am 04 August 2015, 21:34:00
schau dir mal das event-on-change-reading attribut an und die module WATCHDOG und THRESHOLD.

die sind genau dazu da so etwas nicht von hand zu machen.

gruss
  andre

Danke für den Hinweis.
Leider verstehe ich nicht so ganz was ich damit machen soll....

Watchdog kann ich nachvollziehen (Wenn Kühlschrank länger als 10min. zu warm -> Pushnachricht schicken).

Aber event-on-change-reading und Threshold.... da komme ich einfach nicht dahinter wie ich damit mein Problem lösen soll...

Wenn ich das richtig verstanden habe loggt "event-on-change-reading" nur Werte die sich auch tatsächlich verändern, dies ist im Kühlschrank aber leider ständig der Fall.

Threshold kann ich mit meinem Fall leider auch nicht so richtig in Verbindung bringen.
Threshold ist ja ein Schwellenwert der eine Aktion ausführt wenn ein Sollwert über- oder unterschritten ist. Bei mir geht es nur um's Überschreiten?
Muss aber auch dazu sagen so ganz erschließt sich mir das Modul noch nicht, und ja, ich habe die commandref, das wiki und Beispiele im Forum dazu gelesen, aber ich kapiere es einfach (noch) nicht :(

Sorry, bin erst seit einer Woche mit fhem beschäftigt und hatte bis dato nie etwas mit programmierung, perl oder sonstigem zu tun.

Ich denke ich bräuchte doch etwas detailliertere Hilfe, oder ich muss es erstmal dabei belassen bis ich fitter bin.

Trotzdem schonmal vielen Dank für die Hilfe!

justme1968

der watchdog kann beim über oder unterschreiten direkt eine aktion ausführen. durch den threshold vermeidest du mehrfache aktionen durch messungenauigkeiten.

etwa so:
define watchKuelschrank THRESHOLD KUE_Kuehlschrank:temperature:1:10 |{my $temp=ReadingsVal("KUE_Kuehlschrank","temperature",""); fhem ("set Pushover1 msg 'WARNUNG' 'Kühlschrank zu warm! Temperatur beträgt $temp Grad' '' 1 ''"); return "";}|||FEHLER:OK

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

C0mmanda

Zitat von: justme1968 am 05 August 2015, 11:09:40
der watchdog kann beim über oder unterschreiten direkt eine aktion ausführen. durch den threshold vermeidest du mehrfache aktionen durch messungenauigkeiten.

etwa so:
define watchKuelschrank THRESHOLD KUE_Kuehlschrank:temperature:1:10 |{my $temp=ReadingsVal("KUE_Kuehlschrank","temperature",""); fhem ("set Pushover1 msg 'WARNUNG' 'Kühlschrank zu warm! Temperatur beträgt $temp Grad' '' 1 ''"); return "";}|||FEHLER:OK

gruss
  andre

Vielen Dank für dein Beispiel. So verstehe ich den Zusammenhang schon eher.
Manchmal sind die Syntax-Beschreibungen aus der CommandRef wirklich schwer zu verstehen wenn man die Materie noch nicht wirklich beherrscht.

2 Fragen zum Verständnis hätte ich dazu aber noch:

- Rein theoretisch würde ich nun aber auch eine "zu warm" Meldung bekommen wenn die Temperatur unter 1 Grad fällt, oder? Eher unwahrscheinlich, aber mir gehts auch ums verstehen.
- Was bewirkt am Ende das
Zitatreturn "";}|||FEHLER:OK
? Das hängt doch sicher mit dem THRESHOLD zusammen?

Danke nochmal :)

justme1968

die zieltemperatur ist 10 grad. 1 grad ist die histerese.

die meldung wird nur beim überschreiten verschickt. beim unterschreiten ist nichts konfiguriert.

du musst es in web frontend unter DEF eingeben. wenn du das define genau so eingibst müssen die ; verdoppelt werden.

das FEHLER und OK ist der status den das threshold device selber hat.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

C0mmanda

Vielen dank!

Ich denke das hilft mir sehr weiter!

C0mmanda

Funktioniert super! Vielen Dank nochmal!

Habe noch eingebaut das der Threshold sich alle 15min zurücksetzt damit ich alle 15min eine Warnung erhalte solange die Temp. kritisch ist.


define watchKuehlschrank_reset at +*00:15:00 { fhem ("set watchKuehlschrank active") if (Value("watchKuehlschrank") eq "FEHLER")}