FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: thestealth am 15 Januar 2013, 23:53:58

Titel: In einer notify If schleife Zeitverzögerung?????
Beitrag von: thestealth am 15 Januar 2013, 23:53:58
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
Titel: Aw: In einer notify If schleife Zeitverzögerung?????
Beitrag von: jhohn am 16 Januar 2013, 07:58:45
http://fhem.de/commandref.html#at (//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 \
 }\
}
Titel: Aw: In einer notify If schleife Zeitverzögerung?????
Beitrag von: thestealth am 16 Januar 2013, 09:08:22
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
Titel: Aw: In einer notify If schleife Zeitverzögerung?????
Beitrag von: jhohn am 16 Januar 2013, 09:13:23
sorry, das muss natürlich {fhem ("define ...")} heissen
Titel: Aw: In einer notify If schleife Zeitverzögerung?????
Beitrag von: Olaf am 16 Januar 2013, 09:14:03
Probier mal "set KaffeLichtAn on-for-timer 5".
Ist auch in der commandref dokumentiert.
Titel: Aw: In einer notify If schleife Zeitverzögerung?????
Beitrag von: thestealth am 16 Januar 2013, 10:53:28
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
Titel: Aw: In einer notify If schleife Zeitverzögerung?????
Beitrag von: Zrrronggg! am 16 Januar 2013, 13:54:09
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.
Titel: Aw: In einer notify If schleife Zeitverzögerung?????
Beitrag von: thestealth am 16 Januar 2013, 16:54:13
Danke das werd ich nach meiner Schicht direkt mal testen.
Titel: Aw: In einer notify If schleife Zeitverzögerung?????
Beitrag von: Zrrronggg! am 16 Januar 2013, 17:35:25
Dann nimm bitte

+00:00:05

anstatt

+00:00:50


;-)
Titel: Aw: In einer notify If schleife Zeitverzögerung?????
Beitrag von: thestealth am 16 Januar 2013, 22:30:27
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
Titel: Aw: In einer notify If schleife Zeitverzögerung?????
Beitrag von: Zrrronggg! am 17 Januar 2013, 00:34:51
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.
Titel: Aw: In einer notify If schleife Zeitverzögerung?????
Beitrag von: thestealth am 17 Januar 2013, 11:01:10
Ja ich weiß ist aber übersichtlicher ;-)

Gruß

    Dennis
Titel: Aw: In einer notify If schleife Zeitverzögerung?????
Beitrag von: stromer-12 am 17 Januar 2013, 11:46:59
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ß
Titel: Aw: In einer notify If schleife Zeitverzögerung?????
Beitrag von: thestealth am 17 Januar 2013, 12:10:43
wow das ist ja supi das hilft mir bei weiteren Programmierungen danke
Titel: Aw: In einer notify If schleife Zeitverzögerung?????
Beitrag von: Zrrronggg! am 17 Januar 2013, 13:49:25
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.
Titel: Aw: In einer notify If schleife Zeitverzögerung?????
Beitrag von: thestealth am 17 Januar 2013, 21:24:43
LOL Okay sorry aber ich programmiere seid 10 Jahren in c#,c++, php und im Microcontroller bereich ganz so blöde bin ich nicht ich bin nur noch nicht so vertraut mit Fhem und Perl.

Jetzt nach diesem Thread habe ich begriffen das ich fhem( vor den FHEM befehlen setzen muss.

Ich beschäftige mich jetzt erst seid rund 20 Stunden mit Fhem und FS20 also 20 stunden aus den einzelnen Zeiten über die Tage verteilt und da ging eigentlich am meisten zeit bei rum die für mich benötigten FS20 Hardware raus zu suchen, zu kaufen, und zu programmieren bzw. binden.

Da ich momentan auch Zeitgleich neben dem ausbau meiner Haussteuerung Arbeite, Familie habe und an der Entwicklung einer neuer Firmware für meinen 3 Achsen Gyroskop arbeite hat man manchmal mal bei einfachsten dingen einen Knoten in den Gehirnwindungen.


Trotzdem danke für die Warnung ich werde aber das Sleep benutzen und zu dem übersichtlicher ja ist es wenn man sich das CFG über Putty anschaut da es so keinen Zeilen Umbruch giebt!!!!!!!

Und ja ich mache alles immer und am liebsten per Console da ich so egal ob am Handy , Laptop, oder Desktop egal von wo auch immer das 100 identische zus ehen bekomme und ich mit Konsole schneller arbeiten kann als mit einem Browser oder Notepad usw.


Gruß

   Dennis



Titel: Aw: In einer notify If schleife Zeitverzögerung?????
Beitrag von: Zrrronggg! am 18 Januar 2013, 00:06:12
Wollte dir bestimmt nicht zu nahe treten.

ZitatJetzt nach diesem Thread habe ich begriffen das ich fhem( vor den FHEM befehlen setzen muss.

Naja, eigentlich genau NICHT, denn dafür gibt's ja Klammern.

Was du ja machst ist FHEM sagen, dass das was jetzt kommt alles perl ist
Indem du eine { Klammer aufmachst.

Und dann sagst du perl  es möge doch an FHEM eine Reihe von Befehle übergeben:
indem du fhem("Befehl 1 ;; Befehl 2 ;; Befehl 3 ") schreibts.

Jeden dieser Befehle einzeln an FHEM zu übergeben ist ... möglich.  ;-)
 

Zitat... wenn man sich das CFG über Putty anschaut da es so keinen Zeilen Umbruch giebt

Verstehe ich ehrlich gesagt trotzdem nicht, da der Code ja erheblich länger wird.

Aber das ist natürlich egal. Wenn dir das besser gefällt, dann mach es so.

Es gibt eben nur so 3-4 "Klassiker" was mit FEHM schnell mal schief gehen kann, und sleep an falscher Stelle gehört dazu.
Wenn du das im Griff hast, ist alles chic!


Titel: Aw: In einer notify If schleife Zeitverzögerung?????
Beitrag von: thestealth am 18 Januar 2013, 10:08:54
Ja habe alles im griff und jetzt das ganze noch verbessert jetzt reagiert Fhem endlich auf jeden tastendruck des blöden aufputz senders.

#If Bedinungen

#alle Heizungen: mode auto richtig setzen
define act_on_Wohnzimmer_Schnell_heizen notify Wohnzimmer_Schnell_heizen {\
 if ("%" ne "off") {\
   fhem("set Thermostat_Wohn mode auto desired-temp 30")\
 }\
   else {\
       FHTnominal("Thermostat_Wohn")\
 }\
}


#taster wohn if

define act_on_Taster_1_wohn notify Taster_1_wohn {\
 if ("%" ne "on") {\
    if(OldValue('TV_Steckdose_Status') eq 'Aus') {\
      fhem 'set FernsehSteckdoseAn An';;\
      fhem 'sleep 3';;\
      fhem 'setstate TV_Steckdose_Status An';;\
      fhem 'set FernsehSteckdoseAus Aus'\          
}\
else {\
      fhem 'set FernsehSteckdoseAn Aus';;\
      fhem 'sleep 3';;\
      fhem 'setstate TV_Steckdose_Status Aus';;\
      fhem 'set FernsehSteckdoseAus An'\
     }\
}\
}

define act_on_Taster_2_wohn notify Taster_2_wohn {\
 if ("%" ne "on") {\
    if(OldValue('SteckdoseSchreibtisch_Status') eq 'Aus') {\
      fhem 'set SteckdoseSchreibtisch An';;\
      fhem 'setstate SteckdoseSchreibtisch_Status An'\        
}\
else {\
      fhem 'set SteckdoseSchreibtisch Aus';;\
      fhem 'setstate SteckdoseSchreibtisch_Status Aus'\
     }\
}\
}

define act_on_Taster_3_wohn notify Taster_3_wohn {\
 if ("%" ne "on") {\
    if(OldValue('SchreibtischLicht_Status') eq 'Aus') {\
      fhem 'set SchreibtischLicht An';;\
      fhem 'setstate SchreibtischLicht_Status An'\        
}\
else {\
      fhem 'set SchreibtischLicht Aus';;\
      fhem 'setstate SchreibtischLicht_Status Aus'\
     }\
}\
}

define act_on_Taster_4_wohn notify Taster_4_wohn {\
 if ("%" ne "on") {\
    if(OldValue('SchreibtischLicht_Status') eq 'An') {\
      fhem 'set SchreibtischLicht Aus';;\
      fhem 'setstate SchreibtischLicht_Status Aus'\        
}\
    if(OldValue('SteckdoseSchreibtisch_Status') eq 'Aus') {\
      fhem 'set SteckdoseSchreibtisch An';;\
      fhem 'setstate SteckdoseSchreibtisch_Status An'\        
}\
else {\
      fhem 'set SteckdoseSchreibtisch Aus';;\
      fhem 'setstate SteckdoseSchreibtisch_Status Aus'\
     }\
    if(OldValue('TV_Steckdose_Status') eq 'Aus') {\
      fhem 'set FernsehSteckdoseAn An';;\
      fhem 'sleep 3';;\
      fhem 'setstate TV_Steckdose_Status An';;\
      fhem 'set FernsehSteckdoseAus Aus'\          
}\
else {\
      fhem 'set FernsehSteckdoseAn Aus';;\
      fhem 'sleep 3';;\
      fhem 'setstate TV_Steckdose_Status Aus';;\
      fhem 'set FernsehSteckdoseAus An'\
     }\
 }\
}



Kann mir mal einer sagen warum die blöden tasten nur toogle'n ich mein ja es giebt untoogle aber aber da kommt wieder ein modul mehr zum einsatz plus bei indirekter steuerung ein notify.

Ist ELV zu blöd eine If schleife im 6 Tasten programm des senders ein zu bauen? das der taster abwechselnd on off sendet?

zudem ist mir aufgefallen das dieser Aufputz 6 Tasten Sender wenn er direkt über eine Stromleitung die unterputz verlegt ist montiert wird nur jeden 2-3 befehl bis zum COC bringt.

Ziemlich blöd wenn man den über einen gewöhnlichen Lichtschalter montiert.


Gruß

  Dennis