bennysamir Posted January 28, 2013 at 07:25 PM Share Posted January 28, 2013 at 07:25 PM 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? Quote Link to comment Share on other sites More sharing options...
Masder Posted January 28, 2013 at 08:32 PM Share Posted January 28, 2013 at 08:32 PM hi bennysamir; schau doch mal unter der Doku Übergang zu 2.0 stich Wort ist Enumeration Der Listener gibt dir Verbindung Infos zurück über die jeweiligen Hardware. mfg masder Quote Link to comment Share on other sites More sharing options...
photron Posted January 29, 2013 at 08:33 AM Share Posted January 29, 2013 at 08:33 AM 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. Quote Link to comment Share on other sites More sharing options...
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.