FHEM Forum

FHEM => Automatisierung => Thema gestartet von: thoweiss am 07 Februar 2013, 20:22:19

Titel: at mit mehreren kommandos
Beitrag von: thoweiss am 07 Februar 2013, 20:22:19
Hallo zusammen,
ich habe mir einen Timer gebastelt der meine Lüftungsanlage für eine bestimmte zeit auf vollgas stellt.

Als Auslöser habe ich ein Dummy. Nach Ablauf der Zeit soll auch das Dummy zurückgesetzt werden.

im moment mache ich das so:

dm.lueftung.stoss:on {
    fhem("set stufe_kwl Stufe_3");
    fhem("define at.timer.stoss at +00:45 set stufe_kwl Stufe_2");
    fhem("define at.timer.stoss2 at +00:45 set dm.lueftung.stoss off");
}


jetzt habe ich da ja zweit at-Funktionen die beide nach der gleichen Zeit einmal die lüftung wieder auf stufe 2 setzen und das dummy wieder auf off.

Ich frage mich jetzt ob ich beide Rücksetzbefehle auch in einem at erschlagen kann...

Gruß,
Thorsten

 
Titel: Aw: at mit mehreren kommandos
Beitrag von: Puschel74 am 07 Februar 2013, 20:33:32
Hallo

dm.lueftung.stoss:on {
    fhem("set stufe_kwl Stufe_3");
    fhem("define at.timer.stoss at +00:45 set stufe_kwl Stufe_2;;set dm.lueftung.stoss off");
}


sollte das machen was du möchtest - hoffe ich.

Grüße
Titel: Aw: at mit mehreren kommandos
Beitrag von: thoweiss am 07 Februar 2013, 20:37:15
Ui, danke - das ging fix.

Ich werde es gleich mal testen - ich hatte es mit einem komma probiert - das ging jedenfalls nicht...

Titel: Aw: at mit mehreren kommandos
Beitrag von: thoweiss am 07 Februar 2013, 20:55:23
So - gerade getestet und es funktioniert!

danke und Gruß,
Thorsten
Titel: Aw: at mit mehreren kommandos
Beitrag von: Zrrronggg! am 08 Februar 2013, 02:09:10
Wenn du dich innerhalb einer { } befindest musst du das ;  "escapen" d.h. verdoppeln.

Nochwas


dm.lueftung.stoss:on {
    fhem("set stufe_kwl Stufe_3");
    fhem("define at.timer.stoss at +00:45 set stufe_kwl Stufe_2;;set dm.lueftung.stoss off");
}


Geht auch noch Kürzer:

dm.lueftung.stoss:on {
    fhem("set stufe_kwl Stufe_3 ;; define at.timer.stoss at +00:45 set stufe_kwl Stufe_2 ;;;; set dm.lueftung.stoss off");
}



Beachte das du das letzte Semikolon hetzt sogar nochmal verdoppeln musst. Würdest du das nicht tun, also folgendes schreiben:

dm.lueftung.stoss:on {
    fhem("set stufe_kwl Stufe_3 ;; define at.timer.stoss at +00:45 set stufe_kwl Stufe_2 ;; set dm.lueftung.stoss off");
}


dann würde FEHM folgendes machen:
1. set stufe_kwl Stufe_3
2. define at.timer.stoss anlegen
3. sofort dannach set dm.lueftung.stoss off

Duch das erneute veroppeln des Semikolons hollst du aber set dm.lueftung.stoss off in das define AT mit rein.

Titel: Aw: at mit mehreren kommandos
Beitrag von: rudolfkoenig am 08 Februar 2013, 08:59:07
Fuer einfache Faelle wie dieser favorisiere ich:


define myNotfy notify dm.lueftung.stoss:on set stufe_kwl Stufe_3;; sleep 2700;; set stufe_kwl Stufe_2;; set dm.lueftung.stoss off"
Titel: Aw: at mit mehreren kommandos
Beitrag von: brmpfl am 08 Februar 2013, 09:18:41
Zitat von: rudolfkoenig schrieb am Fr, 08 Februar 2013 08:59Fuer einfache Faelle wie dieser favorisiere ich:
define myNotfy notify dm.lueftung.stoss:on set stufe_kwl Stufe_3;; sleep 2700;; set stufe_kwl Stufe_2;; set dm.lueftung.stoss off"


Wie verhält sich fhem hier mit sleep?
Blockiert fhem für diesen Zeitraum oder wird der Teil "geforked"?
Titel: Aw: at mit mehreren kommandos
Beitrag von: thoweiss am 08 Februar 2013, 09:44:28
Ui - so eine "einfache" Aufgabenstellung und doch so unterschiedlich die Lösungen...

Aber however ich habs ja jetzt...

Gruß,
Thorsten
 
Titel: Aw: at mit mehreren kommandos
Beitrag von: Dirk am 08 Februar 2013, 09:44:36
Ein FHEM sleep nicht mit einem Perl sleep verwechseln.
sleep als FHEM-Befehl startet intern einen Timer. Daher wird hier FHEM nicht blockiert.

Gruß
Dirk
Titel: Aw: at mit mehreren kommandos
Beitrag von: brmpfl am 08 Februar 2013, 09:52:28
Danke!

sleep followed by another command and issued in at/notify/etc is not blocking fhem.
*andiestirnklatsch*