Hallo Community,

seit einigen Monaten - nach einer C-Vorlesung in der Uni - habe ich mich mit dem Thema "Microcontroller" zu beschäftigen begonnen und einiges darüber gelesen. Ich finde diese Dinger genial, vor allem die Vielfältigkeit reizt mich besonders.
Da ich zur Zeit am Bauen eines Terrariums bin möchte ich dieses natürlich mit einem AVR Microcontroller steuern. Grundsätzlich will ich allerdings mehrere Units in meiner Wohnung haben die unterschiedliche Aufgaben übernehmen und vor allem miteinander über RFM12 Module kommunizieren können.
Als Beispiel soll das Terrarium die Uhrzeit von der Digitaluhr ablesen können.

Ich habe deshalb auch begonnen ein Netzwerkprotokoll zu entwerfen - vorerst nur theoretisch auf Papier. Ich würde auf ein zentral gesteuertes System setzen in dem ein "Tower" alle Units nacheinander fragt ob sie Daten zu senden haben (Token Ring) und die Datenframes vom Sender zum Empfänger leitet.
Um Sendefehler zu erkennen verwende ich eine CRC Checksumme im Datenframe.

Hier das Schema:
Klicke auf die Grafik für eine größere Ansicht

Name:	CMNCATE-Schema.jpg
Hits:	54
Größe:	63,5 KB
ID:	23370

Ad 1)
Der Tower wählt die nächste UnitID aus seinem Speicher und versucht dieser das Sendetoken zu schicken.

Ad 2)
Die Unit bestätigt den Tokenerhalt oder reagiert nicht nach einer bestimmten Zeit.

Ad 3)
Der Tower versucht einen Datenframe* zu senden oder sendet ein READY, wenn keine Daten zum Senden vorhanden sind.
Falls ein Timeout passiert wird das Token an die nächste Unit weitergegeben.

Ad 4)
Falls ein Datenframe ankommt wird dieser auf Gültigkeit** untersucht und im FIFO gespeichert, damit er später weiterverarbeitet werden kann.
Wenn ein Fehler auftritt wird der Frame (NAK) nocheinmal angefordert. (max. 3x)
Wenn Daten zum Senden vorhanden sind werden diese an den Tower zurückgesendet, ansonsten: READY.

Ad 5)
Der Frame wird wieder auf Gültigkeit** überprüft und ggf. gespeichert, wenn die Daten ungültig sind werden sie erneut angefordert.
Wenn ein NAK ankommt (= Datenfehler Unit) wird das Datenpaket erneut gesendet.
Falls READY ankommt (= Unit hatte keine Daten) wird das Token weitergegeben.

Ad 6)
Sobald das Token weitergegeben wurde hat die Unit keine Sendeerlaubnis mehr.
Wenn ein NAK ankommt werden die Daten erneut gesendet.

* ein Datenframe könnte wie folgt aussehen:

ID | TIME | sender | empfänger | DATA | CRC

** Gültigkeit:

Jede Unit speichert empfangene IDs für eine Zeit von X Sekunden in einer Blocklist und verwift Datenframes mit dieser ID.
Jede Nachricht hat eine Lebensdauer von X Sekunden, wenn diese abgelaufen ist werden Frames auch verworfen. Damit will ich erneutes einsenden vom mitgeschnittenen Frames verhindern.

Weiters möchte ich die Datenpakete mittels AES verschlüsseln um dem ganzen System mehr Sicherheit zu verleihen. Jede Unit soll dabei einfach einen geheimen Key gespeichert haben und damit die Datenframes verschlüsseln.

Mich würde interessieren ob dieses Projekt in der Praxis umsetzbar ist, wo es scheitern könnte, und wie man es verbessern kann.

Vielen Dank,
Markus