Jump to content

BrickletRemoteSwitch - Zu schnelle Schaltaufträge werden nicht verarbeitet


Recommended Posts

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!

Link zu diesem Kommentar
Share on other sites

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

Link zu diesem Kommentar
Share on other sites

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!

Link zu diesem Kommentar
Share on other sites

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.

Link zu diesem Kommentar
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gast
Reply to this topic...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...