Smarthome Zentrale mit ArduiTouch Teil 2 - Das Datenprotokoll

Dieser Beitrag soll das Prinzip der Nachrichtenübertragung zwischen der Zentrale und den entfernten Geräten (im folgenden einfach Geräte genannt) erläutern. Da die Geräte einfach gebaut sein sollten und möglichst keine manuellen Einstellungen erfordern sollten, wurde folgendes Prinzip entworfen.

  • Ein Gerät verwendet immer seine MAC Adresse zur Identifikation
  • Ein neues Gerät muss sich aktiv an der Zentrale anmelden
  • Damit ein Gerät mit der Zentrale Daten austauschen kann muss es einmal manuell an der Zentrale registriert werden.

Aufbau einer Nachricht:

struct ATMSGPACKET {
  uint8_t id[6];    //id of the remote device typical its MAC address
  uint8_t packets;  //number of packets in the message
  uint16_t devicebits; //bits to control device capabilities
};

Der Header einer Nachricht hat 9 Bytes. Die ersten sechs Bytes enthalten die Id gefolgt von einem Byte mit der Anzahl der Kanäle (maximal acht). Danach folgt ein 16-bit Unsigned Integer. Jedes dieser 16 Bits hat eine unterschiedliche Bedeutung und weist auf Fähigkeiten des Senders oder Besonderheiten der Datenpakete hin. Das Bit 0 bestimmt ob das Gerät passiv ist, das heißt von der Zentrale abgefragt werden muss. Das Bit 1 gibt an ob das Sendeintervall eines aktiven Geräts von der Zentrale verändert werden kann. Das Bit 2 zeigt an, dass eine Prüfsumme über die gesamte Nachricht gebildet wird, die am Ende der Nachricht angehängt wird. Das Bit 3 zeigt an, dass Datenpakete verschlüsselt werden (Vorbereitung für spätere Versionen). Weitere Bits sind derzeit nicht definiert. Nach dem Header folgen Datenpakete für jeden einzelnen Kanal. 

struct ATDATAPACKET {
  uint8_t channel; //channel as an identification
  uint8_t type;    //type of the packet
  uint8_t unit;    //unit of the packet
  uint8_t value[4];//four data bytes to hold a long integer or a float
};

Ein Datenpaket beginnt mit einem Byte für die Kanlanummer gefolgt von einem Byte mit dem Typ der sowohl Transportrichtung als auch Info zum Datentyp enthält. 0= Integer Nachricht vom Gerät zur Zentrale, 1= Float Nachricht vom Gerät zur Zentrale, 2= Integer Nachricht von der Zentrale zum Gerät, 3= Float Nachricht von der Zentrale zum Gerät, 4 boolsche Nachricht vom Gerät zur Zentrale und 5 boolsche Nachricht von der Zentrale zum Gerät. Als nächstes folgt ein Byte für die zugeordnete Einheit. Einige Einheiten sind bereits definiert, weitere werden folgen. Und schließlich folgen vier Bytes zur Aufnahme des Wertes. Diese sind je nach Typ als Float oder 32-Bit Integer zu interpretieren. Für die boolschen Nachrichten wird nur das Byte 0 verwendet.

Ablauf des Datenaustausches:

1. Aktives Gerät

Aktive Geräte werden typisch für Sensoren benutzt. Sie senden in fixen oder variablen Intervallen Daten an die Zentrale. Oder zum Beispiel ein Klingeltaster oder Funkschalter immer dann wenn jemand den Taster betätigt.

Wenn dem Gerät noch keine Zentrale bekannt ist, sucht es im WLan nach einem Access Point mit der SSID "ATSmartHome". Wurde dieser gefunden bleibt er dem Gerät bekannt solange die Stromversorgung nicht unterbrochen wurde. An diesen AccessPoint werden Nachrichten mit der Id des Geräts gesendet.

Wenn die Zentrale (Access Point) so eine Nachricht bekommt, wird zuerst überprüft ob ein Gerät mit der empfangenen Id bereits registriert ist. Wenn nicht werden die Daten ignoriert und in der Zentrale angezeigt, dass ein neues Gerät gefunden wurde. In der Zentrale muss dann dieses Gerät registriert werden um Daten zu empfangen.

Ist das Gerät registriert wird falls angegeben die Prüfsumme geprüft. Ist diese Ok werden die Daten gespeichert. Das aktive Gerät bleibt nach dem Senden für kurze Zeit empfangsbereit. In dieser Zeit können eventuell vorhandene Daten zum Senden an das Gerät oder falls das Gerät dazu in der Lage ist Konfigurationsänderungen wie zum Beispiel eine neue Intervallzeit von der Zentrale an das Gerät gesendet werden.

2. Passives Gerät

Passive Geräte sind immer empfangsbereit. Aber auch das passive Gerät sendet in Intervallen Nachrichten an die Zentrale. Dies dient einerseits zur Registrierung und andererseits dazu der Zentrale mitzuteilen auf welchen Kanälen das Gerät Daten empfangen kann.

Wenn dem Gerät noch keine Zentrale bekannt ist, sucht es im WLan nach einem Access Point mit der SSID "ATSmartHome". Wurde dieser gefunden beginnt das Gerät, so wie das aktive regelmäßig Daten an die Zentrale zu senden.

Wird in der Zentrale eine Nachricht von einem nicht registrierten passiven Gerät empfangen, wird die Id dieses Geräts als neues Gerät angezeigt und kann manuell registriert werden. Mit der Information aus dem empfangenen Datenpaket kann die Zentrale ermitteln auf welchen Kanälen das Gerät empfangsbereit ist. Ein passives Gerät kann auch gleichzeitig auf weiteren Kanälen Messwerte an die Zentrale übertragen. Wenn die Zentrale ein passives Gerät registriert hat und ein Schalter auf einem der Kanäle dieses Geräts betätigt wird, sendet sie die Änderung auf dem entsprechenden Kanal an das Gerät. Wenn beim nächsten Empfang von Daten vom passiven Gerät der Kanal nicht den gewünschten Wert hat, wird die Änderung erneut gesendet. Dadurch wird verhindert, dass durch eine verlorene Nachricht ein Schaltvorgang im Gerät nicht ausgeführt wird.

Achtung! Falls schon jemand die ATMessageBuffer Bibliothek geladen hat, sollte er sich die neueste Version besorgen und die Sketche die diese Bibliothek verwenden neu kompilieren. Dies ist notwendig da ich die Datenstruktur ATMESSAGEPKT um die Variable devicebits erweitert habe.

Ich hoffe damit die notwendigen Informationen geliefert zu haben um neue Geräte die mit dieser Zentrale kompatibel sind zu entwickeln. Ein erstes passives Gerät, das ein Relais schalten kann folgt in Kürze.

 

 

 

 

Letzter Artikel Smarthome Zentrale mit ArduiTouch Teil 3 - Aktor Device mit D1Mini und Relais
Neuer Artikel G-Mails per ESP8266 versenden

Hinterlasse einen Kommentar

Kommentare müssen vor der Veröffentlichung überprüft werden

Erforderliche Angabe