Neues HomeMatic Device

Aus FHEMWiki

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 ?