FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: ujaudio am 21 Juli 2015, 11:51:09

Titel: sleep und Blockade
Beitrag von: ujaudio am 21 Juli 2015, 11:51:09
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?
Titel: Antw:sleep und Blockade
Beitrag von: OiledAmoeba am 21 Juli 2015, 11:53:51
Moin, on-for-timer wäre die sauberere Lösung.

Gesendet von meinem SM-G900F mit Tapatalk

Titel: Antw:sleep und Blockade
Beitrag von: herrmannj am 21 Juli 2015, 11:55:27
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
Titel: Antw:sleep und Blockade
Beitrag von: krikan am 21 Juli 2015, 12:01:08
So blockiert es. Hier hat Rudi es mal erklärt: http://forum.fhem.de/index.php/topic,27305.msg202037.html#msg202037
Titel: Antw:sleep und Blockade
Beitrag von: Doggiebert am 21 Juli 2015, 12:56:57
...und ein Blick in die commandref zu sleep würde das auch offenbaren: http://fhem.de/commandref_DE.html#sleep (http://fhem.de/commandref_DE.html#sleep)
Titel: Antw:sleep und Blockade
Beitrag von: C0mmanda am 04 August 2015, 21:31:21
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!
Titel: Antw:sleep und Blockade
Beitrag 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
Titel: Antw:sleep und Blockade
Beitrag von: C0mmanda am 04 August 2015, 22:55:48
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!
Titel: Antw:sleep und Blockade
Beitrag 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
Titel: Antw:sleep und Blockade
Beitrag von: C0mmanda am 05 August 2015, 19:02:59
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 :)
Titel: Antw:sleep und Blockade
Beitrag von: justme1968 am 05 August 2015, 19:09:33
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
Titel: Antw:sleep und Blockade
Beitrag von: C0mmanda am 05 August 2015, 19:59:25
Vielen dank!

Ich denke das hilft mir sehr weiter!
Titel: Antw:sleep und Blockade
Beitrag von: C0mmanda am 05 August 2015, 20:54:18
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")}