Jump to content

[Java] Prüfen ob Bricklet verbunden ist


Recommended Posts

Hallo Zusammen,

 

wie kann ich überprüfen ob ein Bricklet angeschlossen ist, z.B. das DualRelay?

In meinem Code mache ich folgendes:

IPConnection ipcon = new IPConnection(); // Create IP connection
dr = new BrickletDualRelay(UID, ipcon); // Create device object

try {
  ipcon.connect(host, port);
} catch (UnknownHostException e) {
  e.printStackTrace();
  JOptionPane.showMessageDialog(null, "Error:" + e.getMessage());
  antwort = false;
} catch (IOException e) {
  e.printStackTrace();
  JOptionPane.showMessageDialog(null, "Error:" + e.getMessage());
  antwort = false;
} catch (AlreadyConnectedException e) {
  e.printStackTrace();
  JOptionPane.showMessageDialog(null, "Error:" + e.getMessage());
  antwort = false;
}
return antwort;

 

Die Exception beziehen sich aber nur auf die IP-Connection. Und da der Brick-Daemon lokal auf dem selben Rechner läuft, wird nie eine Exception geworfen.

Es wird also immer ein True zurück gegeben, auch wenn kein Tinkerforge Modul angeschlossen ist. Ich kann sogar folgendes ausführen, ohne dass eine Exception geworfen wird:

try {
  dr.setMonoflop(relay, true, ms);
} catch (TimeoutException e) {
  e.printStackTrace();
  JOptionPane.showMessageDialog(null, "Error:" + e.getMessage());
} catch (NotConnectedException e) {
  e.printStackTrace();
  JOptionPane.showMessageDialog(null, "Error:" + e.getMessage());
}

 

Kann ich irgendwie abfragen, ob dass oben hinzugefügte Bricklet überhaupt angeschlossen ist?

Link zu diesem Kommentar
Share on other sites

Richtig, über den Enumerate Listener und einen ipcon.enumerate() Aufruf kannst du alle angeschlossenen Bricks und Bricklets dazu veranlassen sich zu melden.

 

dr.setMonoflop(relay, true, ms);

 

Das wirft keine TimeoutException da auf Setter wie setMonoflop standardmässig keine Antwort vom Brick(let) kommt. Dadurch können die Bindings dann nicht erkennen ob die Anfrage angekommen ist un nehmen an sie wäre es.

 

Das kannst du ändern, indem du mittels dr.setResponseExpectedAll(true) für alle Funktionen des Dual Relay Bricklets eine Antwort erzwingst. Alternative kann das auch mittels dr.setResponseExpected(BrickletDualRelay.FUNCTION_SET_MONOFLOP, true) nur für setMonoflop erzwungen werden.

 

Eine Antwort zu erzwingen hat den Vorteil, dass du in deinem Fall dann eine TimeoutException bekommst wenn kein Dual Relay Bricklet mit passender UID angeschlossen ist. Es hat aber auch den Nachteil, dass mehr Nachrichten dafür verschickt werden müssen.

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...