Titanican Posted April 10, 2013 at 03:35 AM Posted April 10, 2013 at 03:35 AM Hallo, mich würde ein mal interessieren, wie man am schnellsten herausfindet, ob sich hinter einer IP-Adresse aktuell ein TinkerStack befindet. Nehmen wir mal folgendes Szenario an: Ich habe schon ein paar verfügbare IP-Adressen in meinem Subnetz ermittelt. 127.0.0.1 192.168.1.1 192.168.1.5 192.168.1.10 192.168.1.11 192.168.1.12 192.168.1.13 192.168.1.50 jetzt hängen hinter 2 dieser IP-Adressen Tinkerforge-Stacks (beide über Port 4223). Wie finde ich denn jetzt möglichst effizient heraus, hinter welchen? So etwas wie einen TinkerPing scheint es ja nicht zu geben. Und das "Connected"-Ereignis scheint auch eher an zu zeigen, ob man sich zum Brick Daemon verbinden kann und nicht zu einem Stack. Die IP-Addresse 127.0.0.1 beispielsweise verbindet sich immer (auch im brick viewer). Man könnte da nur eine etwas aufwändige Konstruktion mit Stopuhren usw. basteln nach dem Motto "wenn nach X sekunden noch kein Enumerate-Callback, dann...". Aber so wirklich schön ist das nicht. Gibt es dafür eine relativ elegante Lösung? Danke. Quote
photron Posted April 10, 2013 at 08:38 AM Posted April 10, 2013 at 08:38 AM Wenn der IPConnection.Connect() Aufruf keine Exception wirft, dann konnte eine TCP/IP Verbindung aufgebaut werden. Dass heißt, dass da etwas auf dem Port lauscht. In dem Zuge wird auch der Connected Callback aufgerufen. Höchstwahrscheinlich lauscht dann da ein brickd. Dass heißt, aber noch nicht dass da auch ein Stack angeschlossen ist. Wenn du jetzt die UID eines der Stack Teilnehmer kennst, dann kannst du einfach für diesen einen Getter aufrufen. Zum Beispiel GetStackVoltage() oder GetIdentity(). Falls keine TimeoutException geworfen wird, dann hat der Teilnehmer geantwortet und ist somit da. Falls eine TimeoutException geworfen wird dann ist da entweder kein Brick(let) mit dieser UID, oder es ist gar kein Stack angeschlossen. Falls du keine UID kennst, dann bleibt dir nur der Enumerate Callback mit Timeout. Wenn es ein "TinkerPing" gäbe würde das genau so funktionieren. Quote
Titanican Posted April 11, 2013 at 02:49 AM Author Posted April 11, 2013 at 02:49 AM Falls du keine UID kennst, dann bleibt dir nur der Enumerate Callback mit Timeout. Wenn es ein "TinkerPing" gäbe würde das genau so funktionieren. Kennen tu ich die UID natürlich schon. ^^ Aber ich wollte gerne eine einfach verteilbare Anwendung erzeugen. Ohne, dass vorher etwas spezifisches über den/die vorhandenen Tinkerforge-Stacks bekannt ist. Also ein relativ ultimatives AutoDetect. Ich werde das jetzt doch mit der Enumerate Callback&Timeout umsetzen. Danke noch mal Quote
AuronX Posted April 11, 2013 at 04:53 PM Posted April 11, 2013 at 04:53 PM Tatsächlich wäre es cool gewesen beim Protokoll 2.0 eine Begrüßungsnachricht vorzusehen. Das hätte zum einen zukünftige Migrationen erleichtert (weil in so einer Begrüßung auch Protokollversionen enthalten sein können) und eben auch ermöglicht am Anfang zu prüfen, ob der Dienst am anderen Ende tatsächlich ein brickd ist. Wäre aber vermutlich sogar nachrüstbar... Quote
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.