Doncarlos Posted February 24, 2015 at 02:02 PM Posted February 24, 2015 at 02:02 PM Hallo, ich möchte für meine Anwendung mehrere Steckdosen/Schalter mit dem BrickletRemoteSwitch hintereinander schalten. Idealerweise würde ich das gerne direkt hintereinander machen: //Initialisierung bricklet.SwitchSocketC('A','1',BrickletRemoteSwitch.SWITCH_TO_ON); bricklet.SwitchSocketC('A','2',BrickletRemoteSwitch.SWITCH_TO_ON); //Disconnect Leider funktioniert mit diesem Code aber nur das Einschalten des ersten Sockets. Der zweite wird ignoriert. Was funktioniert ist dies: //Initialisierung bricklet.SwitchSocketC('A','1',BrickletRemoteSwitch.SWITCH_TO_ON); System.Threading.Thread.Sleep(1000); // 1 Sekunde Zeit zwischen zwei Schaltvorgängen bricklet.SwitchSocketC('A','2',BrickletRemoteSwitch.SWITCH_TO_ON); //Disconnect Das funktioniert soweit, macht aber in der realen Welt aber weniger Spaß (Lampen schalten sich eben mit Verzögerung ein) Meine Frage: Wie ist hier nun das richtige Vorgehen um schnell mehrere Schaltvorgänge hintereinander auszuführen ? Ich nutze das Set, Internet der Dinge mit Anbindung über Netzwerk. Anbindung per USB ist aber auch nicht besser. Dankeschön! Quote
Loetkolben Posted February 25, 2015 at 02:04 PM Posted February 25, 2015 at 02:04 PM Die Sache ist, dass das Bricklet Zeit braucht um die Datenpakete "in die Luft" zu senden. Du kannst ja auch z.B. die Anzahl der Wiederholungen einstellen. Du musst das Bricklet abfragen ob es mit dem Senden fertig ist und dann den Auftrag fuer die naechste Steckdose schicken. BrickletRemoteSwitch.get_switching_state Returns the current switching state. If the current state is busy, the Bricklet is currently sending a code to switch a socket. It will not accept any calls of switch_socket until the state changes to ready. Wenn das nicht so waere, muesste das Bricklet eine unbestimmte Anzahl von Auftraegen puffern koennen. Solange nur ein Programm auf den Stack zugreift, kannst du auch mit deinem Workaround arbeiten wenn du weisst wie lange der Versand eines Funkbefehles ueber die Luft dauert. Alternativen: 2 Steckdosen auf die gleiche Adresse setzen oder 2 Remote Switch Bricklet benutzen. Der Loetkolben Quote
Doncarlos Posted February 25, 2015 at 05:01 PM Author Posted February 25, 2015 at 05:01 PM Hi! Danke! Das get switching state hat mir gefehlt. Bzw, das Verständnis, dass mein Switch Befehl sozusagen asyncron abgesetzt wird und nicht syncron. Wäre das folgende Vorgehen dann im Sinne des Erfinders ? bricklet.SwitchSocketC(....) begin schleife status = get_switching state wenn status != busy schleife verlassen ende schleife Oder sollte da trotzdem noch ein Sleep rein ? Dankeschön! Quote
remotecontrol Posted February 26, 2015 at 07:24 AM Posted February 26, 2015 at 07:24 AM Es gibt auch einen Switching-Done Callback. Damit wirst Du benachrichtigt, wenn der Schalt- / Sendevorgang beendet ist. D.h. Du musst das eigentlich nicht in einer Schleife abfragen. Meine Beobachtung ist, dass es bei Repeat-Count 5 ca. 500ms dauert, bis der Sendevorgang beendet ist, also 100ms pro Repeat. Quote
Doncarlos Posted February 26, 2015 at 09:04 AM Author Posted February 26, 2015 at 09:04 AM Alles klar, danke! Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.