Forum: Projekte & Code XBee ZB Lib in Python3.2


von Michael S. (Gast)


Angehängte Dateien:

Lesenswert?

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
Noch kein Account? Hier anmelden.