Jump to content

[C#] Einen Stack (Master Brick) pingen?


Recommended Posts

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

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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 :)

Link to comment
Share on other sites

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

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.

 Share

×
×
  • Create New...