Neues HomeMatic Device
In diesem Artikel wird beschrieben, wie man ein vollständig neues HomeMatic-Device erzeugt und in das HomeMatic System einbindet. Dazu wird als grundlegende Software die AskSin Library verwendet, die das Protokoll BidCos der HomeMatic-Devices implementiert. Zur Abgrenzung von HomeMatic und zur Vermeidung von Urheberrechtsprobleme wird für ein solches Gerät die Kategoriebezeichnung HomeBrew verwendet
Device
Ein Device ist ein physikalisches Gerät mit folgenden Attributen
- einer Model Id, dies ist ein 2-Byte Code, der den Gerätetyp eindeutig kennzeichnet. Da die originalen HomeMatic-Devices niedrige Werte für die Model ID besitzen, sind für eigene Devices der Serie HomeBrew andere Werte zu verwenden, siehe dazu die Kategorieseite.
- einer HomeMatic Id (HM Id), dies ist ein 3-Byte Code, der das Gerät im Netzwerk eindeutig identifiziert.
- einer Seriennummer (Serial Id), dies ist ein 10-Byte Code
- Zu klären: Zusammenhang zwischen SM Id ??
Diese Daten werden in der folgenden Datenstruktur in der Datei Register.h deklariert:
#include <AskSinMain.h> //-- settings of HM device for HM class ----------------------------------------------------------------------------------- const uint8_t devParam[] PROGMEM = { /* Firmware version 1 byte */ 0x15, // don't know for what it is good for /* Model ID 2 byte */ 0xF2, 0x01, // model ID, describes HM hardware. we should use high values due to HM starts from 0 /* Serial ID 10 byte */ 'P','A','H','0','0','0','2','0','1','4', // serial ID, needed for pairing /* Sub Type ID 1 byte */ 0x10, // not needed for FHEM, it's something like a group ID /* Device Info 3 byte */ 0x01, 0x01, 0x00 // describes device, not completely clear yet. includes amount of channels }; HM::s_devParm dParm = { /* device HM ID 3 byte */ {0xFE, 0xED, 0x04}, // very important, must be unique. identifier for the device in the network /* send retries 1 byte */ 3, // how often a string should be send out until we get an answer /* send timeout 2 byte */ 700, // time out for ACK handling /* pointer to serial */ devParam, };
Warum hier die komplexe Struktur mit pointer ?