The_Real_Black Posted May 6, 2012 at 06:24 AM Posted May 6, 2012 at 06:24 AM Schade, dass die Enumerate Methode keine weiteren Events auslöst zum Beispiel wenn die Enumeration fertig ist. Problem im Moment ist, dass im Debugmodus und auf Klick Events aufgeteilt meine Methoden funktionieren. Ich lade mir zuerst per IPConnection.Enumerate alle Daten der angeschlossenen Bricks und speicher diese in verschiedene Listen, dann will ich aus diesen Informationen alle Device Objekte erstellen. Sobald ich dies aber in einer Konsolenanwendung automatisch hintereinander ausführe ist die Enumeration noch nicht fertig... ...Ich arbeite ungerne mit Thread.Sleep oder irgendwelchen Dummy Schleifen, da es Debug\Relese Probleme nach sich ziehen kann. Gibt es eine Methode das Ende Enumerate der zu ermitteln? Oder könnt ihr ein Event\Callback definieren was nach der Enumerate Methode ausgelöst wird? Ich denke an etwas wie IPConnection.Enumerated (int AnzahlDevices). Übergeben wird dann die Anzahl aller Bricks und Bricklets. Hat sonst noch jemand versucht die Bricks Dynamisch mittels Enumerate anzulegen? Hat jemand eine Idee das Ende der Enumerate Aufrufe abzuwarten ohne x ms zu warten? Quote
borg Posted May 6, 2012 at 10:10 AM Posted May 6, 2012 at 10:10 AM Das ist leider Protokollbedingt gar nicht so einfach umzusetzen. Wenn du ein Enumerate erzwingst wird eine broadcast Nachricht losgeschickt auf die alle Bricks/Bricklets antworten. D.h. der Master bekommt die Enumerate Nachricht, Antwortet darauf (mit seinem Namen, Version etc) und gibt die Nachricht dann weiter an alle seine Bricklets, Stack Teilnehmer und Extension Slaves. Die geben es entsprechend auch wieder weiter an alle Bricks/Brickelts die sie kennen. Das funktioniert so weit ganz gut und es ist auch garantiert das jedes Brick/Bricklet erreicht wird, allerdings weiß kein Teilnehmer des Systems wann die letzte Nachricht rausgeht! Der einzige der überhaupt weiß wieviele Teilnehmer es im System gibt ist brickd. Im hinblick auf die WLAN Extension füge ich dem allerdings nur ungerne mehr Intelligenz hinzu, weil das die Implementierung für die WLAN Extension später viel aufwendiger machen würde. Quote
The_Real_Black Posted May 6, 2012 at 04:08 PM Author Posted May 6, 2012 at 04:08 PM Wenn das SO ist, dann wird mir nicht viel anderes übrigbleiben dazwischen eine Wartezeit einzulegen... Oder gibt es eine Option vor der Enumeration beim brickd die Anzahl der Bricks zu erfahren? So könnte man vergleichen bis alle Bricks geantwortet haben. Wie arbeitet der Daemon? Wann weis er wieviele Bricks angesteckt sind? Quote
Wumpus Posted May 10, 2012 at 11:10 AM Posted May 10, 2012 at 11:10 AM Ich bin dazu übergegangen, die Ergebnisse vom Enumerate in einer Datenbank abzulegen. Beim Programmstart kann ich dann entweder die Daten aus der DB wieder einlesen oder doch noch ein Enumerate erzwingen. Eigentlich wäre es schöner gewesen, wenn der brickd die Information schon cachen würde. Quote
The_Real_Black Posted May 10, 2012 at 07:37 PM Author Posted May 10, 2012 at 07:37 PM @Wumpus: Die Idee mit einer Datenbank hatte ich auch, aber ich habe mich noch nicht auf ein Verwaltungskonzept mit den Bricks einigen können. Im Grunde müsste ich entweder Vorgeben was gerade angesteckt ist oder erst auf die Enumeration warten. Da ich auf ein "Brick ist nicht da, Komponente Offline" hinaus will ich es nicht Vorgeben. Andererseits könnte man Kombinationen in der DB Vorgeben welche angesteckt sein müssen und auf diese wird dann geprüft... Bis ich da ein Konzept habe arbeite ich an einen 3 Button Menü System ^^ Quote
Wumpus Posted May 10, 2012 at 08:10 PM Posted May 10, 2012 at 08:10 PM Worauf legst du denn am meisten Wert? Die Bestückung mit Bricklets sollte sich ja nicht allzu häufig ändern. Ist mehr oder minder semistatisch, man muss Geld in die Hand nehmen. Auf der anderen Seite kann es natürlich immer mal wieder vorkommen, dass irgendwelche Bestandteile gerade den Geist aufgeben und resetet werden wollen. Für den ersteren Fall läuft bei mir Quasi im Hintergrund (alle 10 Minuten) ein Enumerate als separater Prozess und überschreibt die Datenbank. Ich setze dabei auch Zeitstempel pro Bricklet. Dann weiss man welche Bricklets wie lange nicht mehr gesehen wurden. Das ganze kann man noch ergänzen, wenn z.B. eine Abfrage eines Wertes mit GET fehlerhaft (z.B. timeout) ist markiert man den Eintrag in der DB entsprechend und nutzt den Eintrag nicht. 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.