In einer notify If schleife Zeitverzögerung?????

Begonnen von thestealth, 15 Januar 2013, 23:53:58

Vorheriges Thema - Nächstes Thema

thestealth

Hallo,

ich habe ein Problem ich habe folgende notify abfrage

define act_on_Taster_1_wohn notify Taster_1_wohn {\
 if ("%" ne "off") {\

   fhem("set KaffeAn toggle ;; !!!+5 sekunden dann!!! set KaffeLichtAus toggle")\
 }\
   else {\
       fhem("set KaffeAus toggle ;; !!!+5 sekunden dann!!! set KaffeLichtAn toggle")\
 }\
}


Wie kann ich das realisieren??

kann man mit at ne Art Countdown realisieren der nur einmal bei Aufruf ausgeführt wird?


Gruß

  Dennis

jhohn

http://fhem.de/commandref.html#at

irgendwie so was:


define act_on_Taster_1_wohn notify Taster_1_wohn {\
 if ("%" ne "off") {\

   fhem("set KaffeAn toggle");\
   define at_KaffeLichtAus at +00:00:05 set KaffeLichtAus toggle \
 }\
   else {\
       fhem("set KaffeAus toggle");\
   define at_KaffeAus at +00:00:05 set KaffeLichtAn toggle \
 }\
}
FHEM auf Synology Diskstation DS413j (DSM4.3), HM LAN Adapter
Steuerung für Nachtspeicheröfen:
Ladung:   HM-WDS10-TH-O, HM-LC-Sw4-DR, Weather-Modul
Gebläse: HM-CC-TC, HM-LC-SW1-FM, HM-Sec-RHS
FHEM auf FritzBox 7390 für Telefon Funktionen

thestealth

Danke für die Antwort ja so in der art würde ich das in c++ schreiben.

Aber perl ist mir noch ganz neu und die schei.... Spätschicht hindert mich noch 2 wochen lang am studieren.

Ich habe deins mal so übernommen resultat:

2013.01.16 09:01:32 2: FS20 Taster_1_wohn toggle
2013.01.16 09:01:32 3: act_on_Taster_1_wohn return value: Unknown command {\
, try help


Wahrscheinlich muss das at in einer klammer mit vorrangestellter anweisung???


 else {\
       fhem("set KaffeAus toggle");\
 [b]ANWEISUNG([/b]  define at_KaffeAus at +00:00:05 set KaffeLichtAn toggle [b])[/b]\
 }\



Habe gerade mal im commandref geschaut aber noch nichts sinnvolles für meinen fall entdeckt.

muss gleich nach dem Einkauf noch mal schauen.

Gruß

  Dennis

jhohn

sorry, das muss natürlich {fhem ("define ...")} heissen
FHEM auf Synology Diskstation DS413j (DSM4.3), HM LAN Adapter
Steuerung für Nachtspeicheröfen:
Ladung:   HM-WDS10-TH-O, HM-LC-Sw4-DR, Weather-Modul
Gebläse: HM-CC-TC, HM-LC-SW1-FM, HM-Sec-RHS
FHEM auf FritzBox 7390 für Telefon Funktionen

Olaf

Probier mal "set KaffeLichtAn on-for-timer 5".
Ist auch in der commandref dokumentiert.

thestealth

on for time übersetzt eigentlich an für zeit x


Also nicht das was ich will ich will nicht 5 sekunden an dann aus sondern saeco vollautomat aus dann 5-10 sekunden warten und dessen tassen beleuchtung ausschalten.

habe mir in dem Automat die FS20 4 Kanal Bausatz Schaltung eingebaut und schalte damit 2 Tasten (Tasse groß und Tasse mittel) und 2 Relais (Stromzufuhr Automat und Strom für selbst eingebaute LED's) funktioniert soweit auch gut nur hat der Automat leider niergens abgreifbare Gleichspannung und der muss starke elektromagnetische Felder während des Ausschaltvorgangs erzeugen da nach dem ausschalten min. 4 Sekunden keine Schaltbefehle mehr am fs20 Schaltaktor ankommen. daher Zeitverzögert schalten


Danke an Alle


Gruß

  Dennis

Zrrronggg!

Ihr seid alle auf der richtigen Sput, es fehlt nur an Details in Bezug auf Klammern und Semicolon Escapen.

Modulo Tippfehler müsste Folgendes gehen;

define act_on_Taster_1_wohn notify Taster_1_wohn {\
 if ("%" ne "off") {\

   fhem("set KaffeAn toggle ;; define KaffeLichtAus_spater at +00:00:50 set KaffeLichtAus toggle")\
 }\
   else {\
       fhem("set KaffeAus toggle ;; define KaffeLichtAus_an at +00:00:50  set KaffeLichtAn toggle")\
 }\
}


KaffeLichtAus_spater etc. ist frei benannt, kann man auch Gummibarchen nennen.
FHEM auf Linkstation Mini, CUL 868 SlowRF, 2xCUL 868 RFR, CUL 433 für IT, 2xHMLAN-Configurator mit VCCU, ITV-100 Repeater, Sender und Aktoren von FHT, FS20, S300, HM, IT, RSL

thestealth

Danke das werd ich nach meiner Schicht direkt mal testen.

Zrrronggg!

FHEM auf Linkstation Mini, CUL 868 SlowRF, 2xCUL 868 RFR, CUL 433 für IT, 2xHMLAN-Configurator mit VCCU, ITV-100 Repeater, Sender und Aktoren von FHT, FS20, S300, HM, IT, RSL

thestealth

So habe jetzt alles mal getestet und folgendes funktioniert am zuverlässigsten.

define act_on_Taster_1_wohn notify Taster_1_wohn {\
 if ("%" ne "off") {\
   fhem("set FernsehSteckdoseAn toggle");;\
  fhem("define at_FernsehSteckdoseAus at +00:00:05 set FernsehSteckdoseAus toggle")\
 }\
   else {\
       fhem("set FernsehSteckdoseAus toggle");;\
   fhem("define at_FernsehSteckdoseAn at +00:00:05 set FernsehSteckdoseAn toggle")\
 }\
}


Ist jetzt zwar für ne nicht fs20 funksteckdose die ich auch schalte aber egal es funktioniert.


Danke an jhohn und Zrrronggg!

Dann eröffne ich morgen gleich mal ne weitere Frage jetzt erstmal entspannen.

Gruß

  Dennis

Zrrronggg!

Trotzdem noch eine Anmerkung am Rande:

fhem("set FernsehSteckdoseAn toggle") ;; fhem("define at_FernsehSteckdoseAus at +00:00:05 set FernsehSteckdoseAus toggle")

ist echt nur eine besonders umständliche Form von

fhem("set FernsehSteckdoseAn toggle ;; define at_FernsehSteckdoseAus at +00:00:05 set FernsehSteckdoseAus toggle")

Funktional kann das nicht "besser" funktionieren.
FHEM auf Linkstation Mini, CUL 868 SlowRF, 2xCUL 868 RFR, CUL 433 für IT, 2xHMLAN-Configurator mit VCCU, ITV-100 Repeater, Sender und Aktoren von FHT, FS20, S300, HM, IT, RSL

thestealth

Ja ich weiß ist aber übersichtlicher ;-)

Gruß

    Dennis

stromer-12

Zitat von: thestealth schrieb am Di, 15 Januar 2013 23:53Hallo,

ich habe ein Problem ich habe folgende notify abfrage

define act_on_Taster_1_wohn notify Taster_1_wohn {\
 if ("%" ne "off") {\

   fhem("set KaffeAn toggle ;; !!!+5 sekunden dann!!! set KaffeLichtAus toggle")\
 }\
   else {\
       fhem("set KaffeAus toggle ;; !!!+5 sekunden dann!!! set KaffeLichtAn toggle")\
 }\
}


Wie kann ich das realisieren??


einfach mit "sleep xx"

define act_on_Taster_1_wohn notify Taster_1_wohn {\
 if ("%" ne "off") {\

   fhem("set KaffeAn toggle ;; sleep 5;; set KaffeLichtAus toggle")\
 }\
   else {\
       fhem("set KaffeAus toggle ;; sleep 5;; set KaffeLichtAn toggle")\
 }\
}


Gruß
FHEM (SVN) auf RPi1B mit HMser | ESPLink
FHEM (SVN) virtuell mit HMLAN | HMUSB | CUL

thestealth

wow das ist ja supi das hilft mir bei weiteren Programmierungen danke

Zrrronggg!

Mooooooment.

Diese Methode ist gefährlich, weil man sehr genau aufpassen muss, wo man das Sleep einsetzt.

An der falschen Stelle wird FHEM für die Zeit blockiert und reagiert also nicht mehr auf einkommende Funksignale.
bauernregel: sleep in FHEM ->Okay,  Sleep ausserhalb FHEM in perl teil -> könnte blockieren.

Daher würde ich das gerade als Anfänger lieber nicht verwenden.
besonders in Kombination mit hier vielfach gerne verwendeten Konstruktionen, wie z.b.


fhem("set FernsehSteckdoseAn toggle") ;; fhem("define at_FernsehSteckdoseAus at +00:00:05 set FernsehSteckdoseAus toggle")

anstatt

fhem("set FernsehSteckdoseAn toggle ;; define at_FernsehSteckdoseAus at +00:00:05 set FernsehSteckdoseAus toggle")

kann man sich besonders schnell mal vertun, weil man nicht weiss, ob man nun "in FHEM" oder "ausserhalb FHEM" im Perl-Teil ist.

Dennis ist genau der Kandidat der in das Problem reinlaufen wird (sorry!)

Warum?

Ich sagte ihm, er soll folgendes schreiben:

else {fhem("set KaffeAus toggle ;; define KaffeLichtAus_an at +00:00:50 set KaffeLichtAn toggle")}

Er formuliert aber um in

   else { fhem("set FernsehSteckdoseAus toggle");;fhem("define at_FernsehSteckdoseAn at +00:00:05 set FernsehSteckdoseAn toggle") }

weil das angeblich übersichtlicher ist (ich habe da bereits erhebliche Zweifel, aber egal).

Wenn er das analog mit

else { fhem("set KaffeAus toggle ;; sleep 5;; set KaffeLichtAn toggle")}

macht, könnte da ja mit etwas Pech

else { fhem("set KaffeAus toggle") ;; sleep 5 ;;  fhem("set KaffeLichtAn toggle")}

draus werden.  

Und dann hat er sich schon ein prima Ei gelegt und wird in 5 Tagen hier stehen und meinen sein FHEM geht manchmal nicht mehr richtig.


Also liebe Anfänger: Finger weg von Sleep, besonders wer kreativ Klammerebenen einführt die eigentlich nicht nötig sind.
FHEM auf Linkstation Mini, CUL 868 SlowRF, 2xCUL 868 RFR, CUL 433 für IT, 2xHMLAN-Configurator mit VCCU, ITV-100 Repeater, Sender und Aktoren von FHT, FS20, S300, HM, IT, RSL