Beschreibung des Configbereichs im EEPROM
Wie schon geschrieben hat jeder Knoten die selbe Software. Das Verhalten des Knoten wird durch eine im EEPROM abgelegten Konfiguration bestimmt. Die Vorlagen dafür sind auf dem PI hinterlegt und werden über ein kleinen Python Programm an den jeweiligen Knoten via CAN übertragen.
Für diese Übertragung ist der Name der Datei fest definiert: node_HexWert des Knotens. z.B. Für Knoten 1 "node_01", für Knoten 17 "node:11". Das Konsolen Kommando zum Senden ist "writeconfig.py" dieses fragt aktuell die die Knoten ID ab und lässt sich diese bestätigen, dann werden die Daten an den Knoten gesandt.
Beispiel:
$ ./writeconfig.py<return>
Node ID? 03<return>
03
OK (yes/no)?yes<return>
Die Daten werden gesendet. Gibt es ein Problem kommt es zu Fehlermeldungen. Die Übertragaung selbst wir an der Konsole angezeigt.
Die jeweilige Konfiguration kann auch vom PI ausgelesen werden. Das Kommando hierfür ist "getconfig.py", die erzeugte Datei für z.B. Knoten 3 ist "node_03.recv", der Dialog entspricht "writeconfig,py".
Da ich absolut kein Python Freak bin, sind die Python Scripts sehr quick and dirty programmiert und eines aus dem anderen entstanden. Somit enthalten sie zum Teil jede Menge überflüssiges. Ich werde das bei Gelegenheit optimieren.
Config Bereich im Detail
Der EEPROM Breich:
Ein Wert von 0xFF entspricht nicht konfiguriert
Gültige Werte enthält die CAN_MK.h (im PlatformIO Download)
Byte 0 = NodeID
Byte 1 = GroupID
Byte 2 - 109 (108 Bytes) definieren die Funktion der möglichen Taster/Schalter
Byte 2 = type, Typ des Tasters/Schalters
Byte 3 = port_1, Arduino Port des ersten Anschlusses, für Taster, einfache Schalter
Byte 4 = port_2, Arduino Port des zweiten Anschlusses, für Umschalter, Option
Byte 5 = nClick, einfacher Click des Tasters 1
Byte 6 = t_ID, Target ID, die ID an welche die auszulösende Funktion gesandt wird
Byte 7 = t_GR, die Gruppen ID an die welche die auszulösenden Funktion gesandt wird, im Falle von timed, d.h. Funktion nur für eine gewisse Zeit (Sekunden) ist hier die Zeit hinterlegt, z.B. Bei Rolladen Steuerung
Byte 8 = t_Port, der Port an welchem die Funktion ausgegührt wird
Byte 9 = t_Action, die Auszuführende Aktion, z.B. EIN, AUS, TOGGLE etc.
Byte 10 = s_GR, Quellegruppe, d.h. mehere Aktoren steuern das selbe Ziel, wird benötigt für Rückmeldungen.
Byte 11 - 16 wie 5 - 10 nur für doppel Click
Byte 17 - 22 dto. für long Click
Byte 23 - 28 dto. für while Click aktuell noch nicht implementiert
Byte 29 - 55 wie oben für Taster 2
Byte 56 - 82 wie oben für Taster 3
Byte 83 - 109 wie oben für Taster 4
Byte 110 - 137 (28 Bytes) enthalten die Definitionen für die LEDs
Byte 110 - 116 Tster 1 zugehörige LED
Byte 110 = type, der Typ der LED 1, 2 oder 3 farbig
Byte 111 = port_LED_1, Port für den ersten Anschluss der LED grün, bei 1, 2 oder 3 farbigen LEDs
Byte 112 = dim_LED_1, PWM Initialwert für LED 1 grün
Byte 113 = port_LED_2, Port für den zweiten Abschluss der LED rot, bei 2 oder 3 farbigen LED
Byte 114 = dim_LED_2, PWM Initialwert für LED 2 rot
Byte 115 = port LED_3, Port für den driiten Anschluss der LED, bei 3 farbigen LEDs
Byte 116 = dm_LED_3, PWM Initialwert für LED 3
Byte 117 - 123 dto. für die Taster 2 zugehörige LED
Byte 124 - 130 dto. für die Taster 3 zugehörige LED
Byte 131 - 137 dto. für die Taster 4 zugehörige LED
Byte 138 -141 (4 Bytes) Display Parameter
Byte 138 = type, Type des Display LCD Text, LCD graphisch
Byte 139 = cols, Anzahl der Spalten bzw. Pixel vertical / 8
Byte 140 = rows, Anzahl der Zeilen, bzw. Pixel horizontal / 8
Byte 141 = addr, I2C Adresse des Displays
Byte 142 - 143 (2 Bytes) Piezo Pipser
Byte 142 = type, passiv, activ
Byte 143 = port, Arduino Port zur Ansteuerung
Byte 144 -146 (3 Bytes) Vorhanden Sensoren
Byte 144 = Temp, Typ des Temperatursensors DHT22, DS18B20, BMExxx, etc.
Byte 145 = Humid, Typ des Luftfeuchte Sensors DHT22, BMExxx, etc.
Byte 146 = Press, Typ des Luftdrucksensors BMExxx, etc.
Byte 147 - 156 (10 Bytesandere mögliche Perpherie
Byte 147 = RTC, Typ Real Time Clock
Byte 148 = IR, Type einer IR Diode zur Fernsteuerung
Byte 149 = PIR, Type des Bwegeungssensors
Byte 150 = PIR_ID, Ziel ID
Byte 151 = PIR_Gr, Ziel Gruppe
Byte 152 = PIR_port, Ziel Port
Byte 153 = Ext1, I2C Adresse des Portextenders 1
Byte 154 = Ext2, I2C Adresse des Portextenders 2
Byte 155 = Ext3, I2C Adresse des Portextenders 3
Byte 156 = Ext4, I2C Adresse des Portextenders 4
Byte 157 - 188 (4 x 8 Byte) hier werden bei den jeweiligen Ports eine u.U. vorhandene Target_Group eingetragen..
Byte 189 - 190 End Of Config
Byte 189 = 0x55
Byte 190 = 0xAA
Beispiele von Config Dateien
Hier einige Beispiele für von Config Dateien, welche vom Pi an den jeweiligen Knoten gesandt werden. Es ist wichtig das Format exakt einzuhalten, weil sonst das Python Programm zur Übertragung in Fehler läuft.
1. Beispiel für den zentral Knoten, dieser hat neben einer RealTimeClock noch ein 4reihiges LCD Display für Status Anzeigen.
2. Beispiel ein einfacher Knoten der einmal eine Lampe schaltet und zum anderen zu einer Source_Group zum Schalten einer andern Lampe gehört.
Taster 1 gibt bei Click ein Toggle Kommando für eine Lampe.
Taster 2 gibt bei Click ein Toggle Kommando für eine Lampe und gehört zu einer Source_Group um allen anderen zugehörigen Tastern eine entsprechende Statusmeldung zukommen zu lassen.
3. Beispiel weiterer Knoten der neben einer Lampe, eine Lampe mit Source_Group, sowie zwei Rolläden steuert. hier unter Verwendung einer Target Group
Taster 1 gibt bei Click ein Toggle Kommando für eine Lampe und gehört zu einer Source_Group um allen anderen zugehörigen Tastern eine entsprechende Statusmeldung zukommen zu lassen.
Taster 2 gibt bei Click ein Toggle Kommando für eine Lampe.
Taster 3 gibt bei long Click ein timed Kommando um einen Ausgang für Rolladenmotor für eine gewisse Anzahl Sekunden zu schalten, In diesem Fall für ab.
Taster 3 gibt bei doppel Click ein timed Kommando um einen Ausgang für Rolladenmotor für eine gewisse Anzahl Sekunden zu schalten, In diesem Fall für auf.
Taster 3 gib bei Click ein AUS Kommando an eine Target_Group, in diesem Fall an die Ports für die Rolladenmotoren um ein Stop zu bewirken, egal ob gerade auf oder ab gefahren wird.
Taster 4 ist wie Taster 3 nur für einen anderen Rolladen.
4. Beispiel default Vorlage zur Initialisierung eines neuen Knoten mit Adresse 0xFF, sowie als "jungfreuliche" Version (alles mit 0xFF vorbelegt) zur Konfiguration eigener Knoten,