XBee ZB Lib in Python3.2 (für XBee ZB Module im API-Modus) Bislang sind meine Router und der Coordinator an ATMega's angeschlossen und die Software ist in C geschrieben. Zumindest der Coordinator soll in Zukunft direkt an der serielle Schnittstelle eines PC's oder RaspberryPi's seinen Dienst tun, damit dort Daten optisch ansprechend dargestellt und eine Benutzerschnittstelle realisiert werden kann. Aus diesem Grund habe ich vorhandene C-Routinen in Python Objekte umstrukturiert und einige zusätzlich Features eingebaut, die den ATMega vermutlich überfordern würden. Die beigefügten Module stellen zunächst das Grundgerüst für die Kommunikation zwischen XBee und PC im API-Modus zur Verfügung und erlauben - das Empfangen von Frames in einem Hintergrundthread, - das Versenden von lokalen und remote AT-Frames sowie von Datenframes. Darüber hinaus ist eine "Sendungsverfolgung" entstanden. Zur Kontrolle der Transaktionen wird für jedes vom Coordinator versandte Frame ein programminterner Listeneintrag erstellt, in dem die fortlaufende FrameId, der FrameTyp, die Id der Gegenstelle, der Sendezeitpunkt und die Referenz auf eine Funktion (rxHandler) gespeichert sind. Sobald die zugehörige Rückmeldung bzw. Quittung eintrifft, wird die an den Eintrag gebundene Funktion ausgeführt - und der Eintrag selbst wieder gelöscht. Dem rxHandler wird die Id der sendenden Station und der Inhalt des zurückgelieferten Frames übergeben, der Anwender kann damit eine geeignete Reaktion ausführen. Mit anderen Worten: Beim Versenden eines Frames wird eine Funktion referenziert, die für die Bearbeitung der Antwort auf die Transaktion zuständig ist. Frames können versandt werden, ohne dass man sich um die Zuordnung der Rückmeldungen kümmern muss. Die Rückmeldungen dürfen sogar in beliebiger Reihenfolge und mit zeitlicher Verzögerung eintreffen. Vor dem Versenden eines neuen Frames kann die oben erwähnte Liste daraufhin befragt werden, ob von der Zielstation noch Rückmeldungen ausstehen. Diese Information kann dazu genutzt werden, dass an nicht antwortende Stationen (vorerst) keine weiteren Nachrichten versandt werden. Über einen längeren Zeittraum nicht quittierte Sendungen können aus der Liste gelöscht werden. Vor dem Löschen wird wieder der rxHandler aufgerufen und ein Fehlercode übergeben. Der Anwender kann den Code auswerten und eine angemessene Reaktion ausführen. Schließlich ist noch die Option eingebaut, zeitverzögert bzw. in regelmäßigen zeitlichen Abständen Funktionen (wie z.B. das Absenden von Frames) ausführen zu lassen. Falls Interesse besteht, weitere Beschreibungen gibt's in der readme.pdf. Michael S.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.