Jump to content

[Java] Prüfen ob Bricklet verbunden ist


bennysamir

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

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...