Hallo zusammen,
ich habe zwei nanoCUL (868Mhz) und möchte beiden alle 5 Minuten einen anderen raw-Befehl schicken. Hört sich erstmal simpel an, aber bisher habe ich kein vergleichbares Thema gefunden und auch nicht den richtigen Weg. Deswegen bin ich für direkte Hilfe oder Verweise auf ein entsprechendes Thema dankbar.
Mein gewünschter Ablauf:
Nach 5 Minuten soll der erste CUL1 den Befehl set CUL868_1 raw Nr1
und der CUL2 set CUL868_2 raw Nr1
erhalten.
Nach weiteren fünf Minuten sollen dann die gleichen Befehle mit Nr2 geschickt werden und nach weiteren 5 Minuten dann Nr3. Weitere fünf Minuten später soll soll wieder Nr1 geschickt werden usw.
Ich hatte den Dummy "CUL868_RAW" angelegt, der sich Nr1, Nr2 bzw. Nr3 merken soll, mit einer if-Anweisung wollte ich dann den Wert aus dem Dummy auslesen und dann den nächsten Wert senden, aber es klappt nicht.
Hier der Code von dem at-Befehl:
+*00:05:00 if([CUL868_RAW:state] eq "Nr3")
set CUL868_1 raw Nr1; set CUL868_2 raw Nr1; set CUL868_RAW Nr1
elsif([CUL868_RAW:state] eq "Nr2")
set CUL868_1 raw Nr3; set CUL868_2 raw Nr3; set CUL868_RAW Nr3
elsif([CUL868_RAW:state] eq "Nr1")
set CUL868_1 raw Nr2; set CUL868_2 raw Nr2; set CUL868_RAW Nr2
Sehr wahrschlich geht das alles ganz einfach...
DOIF ([+:15])
(set CUL1 raw1, set CUL2 raw1)
(set CUL1 raw2)
(set CUL2 raw3)
attr wait 0,300,300
oder at: +*00:15 {fhem "set CUL1 raw1; set CUL2 raw1; wait 300; set CUL1 raw2; wait 300; set CUL2 raw3"}
@amenomade: muss es nicht statt 'wait' 'sleep' heißen!? ;) (und die set-Befehle sind andere die er wollte aber das wird der TE schon umsetzen können ;) )
@Transclan:
Prinzipiell würde dein Zeugs auch tun...
ABER: du musst zuerst Perl "einleiten" mittels { da du ja Perl-if verwendest.
Und die Perl-Ebene wieder verlassen mit } eh klar ;)
Oder fhem-IF verwenden...
Damit müssen set-Befehle dann per Perl-Befel aufgerufen werden: fhem("set irgendwas")
Dann kommt entweder nach if etc. eine geschweifte Klammer auf/zu und dazwischen mehrere Befehle die bei der Bedingung ausgeführt werden sollen oder eben genau EIN Befehl... (und nicht 3)
Dann musst du nat. den Dummy erst mal initialisieren weil sonst ist ja keine deiner Bedingungen wahr...
Und: es gibt doch bestimmt Fehlermeldungen... Wäre gut die zu haben. Weil: geht nicht/klappt nicht etc. hilft nicht zu helfen... ;)
Nur kurz und knapp das Nötigste, kann grad nur daddeln... ;)
EDIT: sehr viel eleganter und v.a. kürzer und v.a. ohne Dummy sind nat. die Vorschläge mit 'sleep' im 'at' bzw. DOIF mit wait Attributen... ;)
Gruß, Joachim
Ja sleep, natürlich. Ich muss sleep gehen... :-[
Zitat von: amenomade am 13 Juni 2019, 23:48:40
Ja sleep, natürlich. Ich muss sleep gehen... :-[
Sowas machst du?
Du bist doch gefühlt rund um die Uhr "hier"... ;)
Gute Nacht, Joachim
Danke euch beiden für die tollen Antworten.
Mit dem at-Befehl
+*00:15 {fhem "set CUL868 raw Nr1; set CUL1 raw Nr1; sleep 300; set CUL868 raw Nr2; set CUL1 raw Nr2; sleep 300; set CUL868 raw Nr3; set CUL1 raw Nr3"}
hat es dann geklappt.
Super, wünsche euch noch einen schönen Tag.
Gruß Dirk
Mit:
"set CUL868,CUL1 raw Nr1; sleep 300; set CUL868,CUL1 raw Nr2; sleep 300; set CUL868,CUL1 raw Nr3"
geht es auch noch etwas kürzer.
Gruß
Dan
Sollte ohne geschweifte Klammer (Wechsel nach Perl) und den dann nötigen Aufruf fhem("Befehl") (Wechsel "zurück" nach fhem) auch gehen, dann aber wohl mit doppelten ;;
+*00:15 set CUL868,CUL1 raw Nr1;; sleep 300;; set CUL868,CUL1 raw Nr2;; sleep 300;; set CUL868,CUL1 raw Nr3
Gruß, Joachim