bennysamir Geschrieben January 28, 2013 at 19:25 Geschrieben January 28, 2013 at 19:25 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? Zitieren
Masder Geschrieben January 28, 2013 at 20:32 Geschrieben January 28, 2013 at 20:32 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 Zitieren
photron Geschrieben January 29, 2013 at 08:33 Geschrieben January 29, 2013 at 08:33 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. Zitieren
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.