Dein Code alleine funktioniert
Beiträge von Satalaner
-
-
Code
Alles anzeigenlet REMOTE = { ip: '192.168.178.11', //IP Adresse RGBW ip2: '192.168.178.52', //IP Adresse RGBW BWM_unten: 0, BWM_oben: 1, }; let delay = 1; //Delay betwinn calls in seconds. let calls = [ 'http://192.168.178.11/white/0?turn=on', 'http://192.168.178.11/white/1?turn=on', 'http://192.168.178.51/white/2?turn=on', 'http://192.168.178.51/white/3?turn=on', 'http://192.168.178.51/white/0?turn=on', 'http://192.168.178.51/white/1?turn=on', ]; // CONFIG END Shelly.addEventHandler( function (event, user_data) { if (typeof event.info.event !== 'undefined') { if (event.info.id === REMOTE.BWM_unten) { TimerCallback() //RGBW_012345(REMOTE.ip,REMOTE.ip2); print('Hello Shelly Schleife1'); //if (Shelly.call() === false) //wie kann ich hier den Status des Ausgangs von Dimmer2 abfragen? } else if (event.info.id === REMOTE.BWM_oben) { print('Hello Shelly Schleife2'); //if (Shelly.call()??? === false) { RGBW_543210(REMOTE.ip,REMOTE.ip2); } } }, null ); // send RBGW command function TimerCallback(){ print('Hello Shelly Funktion'); try{ if(aCounter < 5){ aCounter++; Shelly.call('HTTP.GET',{url: calls.pop(),timeout: 1}, function(r,e,m){print(r,e,m);aCounter--;}); }else{print('Dropped Call');} if(calls.length < 1) Timer.clear(tH1); }catch(e){print(e);} } let tH1 = Timer.set(1000*delay,true,TimerCallback), aCounter = 0;
Konsole
CodeHello Shelly Funktion 18:46:54 Hello Shelly Schleife1 18:46:54 undefined -103 Missing required argument 'URL'!
Wie darf ich das bestehen bzw. wo liegt mein Fehler?
-
Hier ein Beispiel wie man einen Timer benutzt, damit sollten deine 6 RGBW Lichter im Abstand von 1 Sekunde leuchten, ich hoffe das hilft dir weiter.
Code
Alles anzeigenlet delay = 1; //Delay betwinn calls in seconds. let calls = [ 'http://192.168.178.51/white/0?turn=on', 'http://192.168.178.51/white/1?turn=on', 'http://192.168.178.51/white/2?turn=on', 'http://192.168.178.51/white/3?turn=on', 'http://192.168.178.51/white/0?turn=on', 'http://192.168.178.51/white/1?turn=on', ]; function TimerCallback(){ try{ if(aCounter < 5){ aCounter++; Shelly.call('HTTP.GET',{url: calls.pop(),timeout: 1}, function(r,e,m){print(r,e,m);aCounter--;}); }else{print('Dropped Call');} if(calls.length < 1) Timer.clear(tH1); }catch(e){print(e);} } let tH1 = Timer.set(1000*delay,true,TimerCallback), aCounter = 0;
Wenn du nur Call Timeouts als Rückmeldung bekommst, dann kannst du mal versuchen den timeout: 1, im Call zu erhöhen, aber bedenke bitte was ich vorher erklärt hab, Calls sind Asynchron und du solltest darauf achten das nicht >5 offene Calls im Hintergrund laufen (wobei mein Beispiel schon für dich darauf achtet und alles über 5 dropped), ein zu hoher Timeout Wert führt wieder zu einem Too Many Call Error bzw to dopped calls, du musst die Balance finden, also evtl. auch das Delay zwischen den Calls erhöhen wenn du den Timeout erhöhst. Eine andere Möglichkeit wäre evtl. die Calls auf zwei oder drei Script Slots aufzuteilen, wenn dir der 1 sec Abstand wirklich wichtig ist.
Wenn ich das so übernehme, bekomme ich den Hinweis "Calls not defined". Wie muss ich das ganze denn in die Funktion einsetzen?
-
Vielen Dank für deine Mühe. Was ich nicht ganz verstehe, in dem letzten Quellcode habe ich nur einen Call in der Funktion und dennoch kommt besagter Hinweis zu den calls.
Wo kommt es dann her?
-
Danke für die Erklärung aber ich habe in meinem letzten Quellcode doch nur einen call oder sehe ich das falsch?
-
Wo schicke ich 5 calls in meinem letzten Beitrag?
-
Also ich bekomme beim normalen langsamen ein und ausschalten die Meldung "Hello World" aber wenn ich schnell Kanal 1 ein und ausschalte kommt:
Code
Alles anzeigenUncaught Error: Too many calls in progress 20:45:18 at line 7 col 5 20:45:18 ); 20:45:18 ^ 20:45:18 in function "RGBW_012345" called from line 5 col 44 20:45:18 RGBW_012345(REMOTE.ip,REMOTE.ip2); 20:45:18 ^ 20:45:18 in function called from system
Hier der aktuelle Quellcode
Code
Alles anzeigenlet REMOTE = { ip: '192.168.178.51', //IP Adresse RGBW ip2: '192.168.178.52', //IP Adresse RGBW BWM_unten: 0, BWM_oben: 1, }; // CONFIG END Shelly.addEventHandler( function (event, user_data) { if (typeof event.info.event !== 'undefined') { if (event.info.id === REMOTE.BWM_unten) { print('Hello Shelly World'); RGBW_012345(REMOTE.ip,REMOTE.ip2); print('Hello Shelly World222'); //if (Shelly.call() === false) } else if (event.info.id === REMOTE.BWM_oben) { print('Hello Shelly World333'); //if (Shelly.call()??? === false) { RGBW_543210(REMOTE.ip,REMOTE.ip2); } } }, null ); // send RBGW command function RGBW_012345(ip,ip2) { Shelly.call( "http.get", { url: 'http://' + REMOTE.ip2 + '/white/1?turn=off&timer=0' }, function (r, ec, em, ud) { }, null ); }
-
Gibt es einen Befehl um die schleifen zu testen also eine Ausgabe in der Konsole zu erhalten?
-
Vorab, das ist das erste mal das ich versuche sowas zu bauen, da werden ne Menge Fehler drin sein. Wäre super wenn ihr mir hier weiterhelft. z.b. Wie hole ich mir die Info vom Dimmer2 ob der Ausgang geschaltet ist?
Code
Alles anzeigenlet REMOTE = { ip: '192.168.178.51', //IP Adresse RGBW ip: '192.168.178.52', //IP Adresse RGBW BWM_unten: 0, BWM_oben: 1, }; // CONFIG END Shelly.addEventHandler( function (event, user_data) { if (typeof event.info.event !== 'undefined') { if (event.info.id === REMOTE.BWM_unten) { if (Shelly.call()??? === false) { //wie kann ich hier den Status des Ausgangs von Dimmer2 abfragen? RGBW_012345(ip,ip2); } } } else if (event.info.id === REMOTE.BWM_oben) { if (Shelly.call()??? === false) { RGBW_543210(ip,ip2); } } ); // send RBGW command function RGBW_543210(ip,ip2) { Shelly.call( "http.get", { url: 'http://' + ip2 + '/white/1?turn=off&timer=0' url: 'http://' + ip2 + '/white/0?turn=off&timer=1' url: 'http://' + ip + '/white/3?turn=off&timer=2' url: 'http://' + ip + '/white/2?turn=off&timer=3' url: 'http://' + ip + '/white/1?turn=off&timer=4' url: 'http://' + ip + '/white/0?turn=off&timer=5' }, function (response, error_code, error_message, ud) { print(dimsequence[dimpos]); }, null ); }; function RGBW_012345(ip,ip2) { Shelly.call( "http.get", { url: 'http://' + ip + '/white/0?turn=off&timer=0' url: 'http://' + ip + '/white/1?turn=off&timer=1' url: 'http://' + ip + '/white/2?turn=off&timer=2' url: 'http://' + ip + '/white/3?turn=off&timer=3' url: 'http://' + ip2 + '/white/0?turn=off&timer=4' url: 'http://' + ip2 + '/white/1?turn=off&timer=5' }, function (response, error_code, error_message, ud) { }, null ); }
-
Ich habe mal den Support bemüht, es scheint wohl mit dem Dimmer2 nicht zu gehen.
Ich werde das jetzt mal über den i4 erstmal laufen lassen.
Codehttp://<shellyip>/white/0?turn=off&timer=1 http://<shellyip>/white/1?turn=off&timer=2 http://<shellyip>/white/2?turn=off&timer=3 http://<shellyip>/white/3?turn=off&timer=4
das funktioniert vom i4 sauber, allerdings muss ich wohl ein Skript schreiben, da ich Bedingungen brauche.
Die HTTP dürfen nur abgesetzt werden wenn der Eingang 1 des i4 eingeschaltet wird (BWM1 hängt hier dran) und der Ausgang des Dimmer2 aus ist. Dann soll die Reihenfolge (RGBW 1,2,3,4) genau so ablaufen.
Wenn der Eingang 2 des i4 geschaltet wird (BWM2) und Dimmer2 Ausgang aus, dann muss die Reihenfolge genau andersrum sein (RGBW 3,2,1,0)
Wichtig ist das keiner der BWM, solange der Ausgang des Dimmer2 aktiv ist, eine der Schleifen neu startet. Ausgeschaltet werden soll sobald Dimmer2 Ausgang aus ist.
Kann mir hierzu vllt jmd. eine Grundlage geben?
-
Danke für die Info. Den i4 wollte ich eigentlich nicht nutzen sondern nur einen Shelly für diesen Bereich nutzen. Da der Dimmer2 eh dort sitzt macht es Sinn ihn zu nutzen.
Ich habe 6 led leisten und dazu benötige ich 2 RGBW. Diese Streifen sollen hintereinander angehen mit 1 Sekunde Versatz.
Die Schleifenerkennung? Kann man da was machen?
-
Hat jemand die Möglichkeit das mal bei seinem RGBW auszuprobieren ob der Befehl funktioniert?
Gibt es einen anderen Weg das auszulösen?
-
Hast du noch einen Timer gesetzt?
Nein, das ist der einzige.
-
Das Problem scheint localhost zu sein. Denn wenn ich über einen anderen Shelly den Befehl per ip auslöse funktioniert er. Nur intern auf dem RGBW nicht. Kann das sein bzw. hat da jemand eine Idee zu?
Es funktioniert intern auf dem RGBW auch der Befehl
Kanal geht nach 2 Sekunden aus.
Aber ich möchte ja das der Shelly nach 2 Sekunden den Kanal an schaltet
funktioniert jedoch nicht.
-
Die Kanäle sind doch 0 bis 3 und ich habe unter Kanal 0 bei „Ausgang an“ den Befehl eingetragen um Kanal 1 zeitverzögert einzuschalten. Oder ist das falsch?
-
Devil habe das mit
probiert, allerdings läuft die Zeit bei Kanal 1 die ganze Zeit wieder von neu und die LEDs schalten nicht an
Grundsätzlich funktioniert es mit localhost mit folgendem Befehl getestet:
-
Hallo zusammen,
ich hoffe mir kann hier jemand einen Anstoß zum Skript geben.
An einem Shelly I4 hängen zwei BWM.
Damit soll ein Dimmer 2 geschaltet werden, als auch zwei RGBW. An den RGBW hängen weiße Streifen, insgesamt sind es 6 Streifen. Diese sollen mit einem Abstand von 1 sek. hintereinander eingeschaltet werden. Wenn Eingang 1 von rechts nach links einschalten und Eingang 2 von links nach rechts.
-
Danke für eure Antworten.
Ich hole mal ein bisschen weiter aus. Ich möchte wenn der BWM reagiert das Licht Schaltern wie beschrieben und zusätzlich 6 LED leisten (Shelly RGBW) einschalten per http. Macht es dann nicht Sinn die Signalentgegennahme und Verarbeitung auf einen I4 zu lagern und darüber per Skript das ganze auszulagern? Also das die Zustände der BWM vom I4 entgegen genommen werden und dann der Dimmer 2 und die RGBW per http geschaltet werden.
Wenn ja, kann mir jmd mit dem Skript einen Anstoß geben?
-
Hallo zusammen,
ich habe testweise einen Aufbau mit zwei BWM. Einer an SW 1 und einer an SW 2. alles auf der gleichen Phase. Ich möchte das der Ausgang geschaltet wird sobald an einem der SW Spannung anliegt. Leider funktioniert es nur über SW1.
Hinweis: Mir ist bewusst das ich beide BWM in Reihe an sw1 hängen kann, allerdings benötige ich die separate Rückmeldung von beiden SW Eingängen, da ich sie für weitere Befehle im i/o nutzen möchte.
-
Hab ich mir auch gedacht und einen Testaufbau mit der Nebenstelle von Gira 540900 gemacht. Das ist eine 3 Draht Nebenstelle und ich hätte erwartet das 0V keine Bewegung und 230V Bewegung am Ausgang anliegt.
Im Testaufbau habe ich nur die Nebenstelle an den Shelly i4 angeschlossen. Gleiche Spannungsversorgung und Ausgang der Nebenstelle natürlich auf einen Eingang am I4.
Dabei messe ich zwischen N und Eingang Shelly 190V und bei Bewegung 230V.
Laut Gira Support wird wohl ein Phasenanschnitt gemacht da das System 3000 so arbeitet und die Werte seien korrekt, aber das macht für mich wenig Sinn. Wenn da natürlich ein Micro Controller arbeitet ist das durchaus möglich aber dann benötige ich ganz normale 3 Draht Bewegungsmelder.
Hat jemand eine Idee für einen 3 Draht Bewegungsmelder für 55 Rahmen?