Du darfst ausschließlich vorhandene Adressen vergeben, und nur beim "Eigentümer" einer Adresse eintragen. Das bedeutet:
- Ein virtuelles knx Thing (also eines, zu dem es keine reale Hardware gibt) darf keine physikalische Adresse bekommen.
In dem Zusammenhang möchte ich noch mal darauf hinweisen, dass die physikalische Adresse nur ein nice-to-have ist, sie hat keinerlei Auswirkungen auf den Betrieb von openHAB im Zusammenspiel mit knx.
Und gleich noch ein weiterer Hinweis: Die Bridge hat ja einen Parameter localSourceAddr. Hierbei handelt es sich nicht um die physikalische Adresse des Gateways, und es darf hier keinesfalls eine tatsächlich vergebene physikalische Adresse eingetragen werden. Stattdessen handelt es sich um die Adresse, welche openHAB verwendet, um mit dem Bus zu sprechen. Diese Adresse taucht also im Busmonitor auf, wenn openHAB sendet.
Man kann in der ETS ein Fake-Gerät anlegen, dem man dann das Label openHAB verpasst. Dann kann man dort eine freie physikalische Adresse eintragen und diese auch openHAB zuweisen, aber wie gesagt, es darf sich nicht um eine Adresse handeln, die einer Hardware zugeordnet ist, auch nicht eine sekundäre physikalische Adresse des Gateways.
- Auch bei den GA ist die Zuordnung nicht beliebig. Wie oben erwähnt, nur das Gerät, welchem die Adresse gehört, darf diese hinterlegt haben. Im Allgemeinen ist der Aktor der "Eigentümer" der GA, solange es sich um die Haupt-GA eines KO handelt. Ebenso ist es bei Sensoren. Taster sind nur dann "Eigentümer" einer GA, wenn diese keinem anderen Gerät zugeordnet werden kann und auch nur diesem einen Taster zugeordnet ist. Jede GA sollte möglichst nur einmal in der gesamten openHAB Konfiguration auftauchen, einzige Ausnahme dieser Regel ist die Kurzzeit-Steuerung einer Jalousie, da diese sowohl für die Verstellung des Lamellenwinkels als auch zum Stoppen des Behangs bei Auf-/Abfahrt benötigt wird. Diese GA wird dann aber nur zum Senden in Richtung knx genutzt, deshalb ist es in dem Fall irrelevant.
Beispiel: Du hast zwei Aktorkanäle eines Schaltaktors und drei Taster. Taster 1 steuert Aktorkanal 1, Taster 2 steuert Aktorkanal 2, Taster 3 ist die Funktion Zentral Aus, das heißt, er sendet immer Aus an beide Aktorkanäle.
Gruppenadressen hierfür:
0/0/1 -> Befehl für Kanal 1
0/0/2 -> Befehl für Kanal 2
0/1/1 -> Rückmeldung Zustand Kanal 1
0/1/2 -> Rückmeldung Zustand Kanal 2
15/0/1 -> Zentral Aus
Daraus ergibt sich:
Aktor KO 0 (Schaltbefehl Kanal 1) 0/0/1,15/0/1 K-S-A
Aktor KO 1 (Rückmeldung Kanal 1) 0/1/1 KL-Ü-
Aktor KO 2 (Schaltbefehl Kanal 2) 0/0/2,15/0/1 K-S-A
Aktor KO 3 (Rückmeldung Kanal 2) 0/1/2 KL-Ü-
Taster 1 KO 0 (Kanal 1) 0/0/1,0/1/1 K-SÜA (Toggle)
Taster 2 KO 0 (Kanal 1) 0/0/2,0/1/2 K-SÜA (Toggle)
Taster 3 KO 0 (Kanal 1) 15/0/1 K--Ü- (nur Aus senden)
Die Flags sind die notwendigen (abgesehen vom A-Flag). Allerdins sollte bei den Tastern keinesfalls das L-Flag gesetzt sein. Da Zentral-Aus keine Anzeige hat, muss der Taster auch nicht schreibbar sein. Die Rückmeldungen sind per Definition exklusiv, d.h. nur jeweils ein KO darf überhaupt auf dieser GA senden
openHAB Channel (hier als Textkonfiguration über eine things-Datei):
Code: Alles auswählen
Thing meinAktor "Schaltaktor 6-Kanal" [] {
Type switch : ch1 "Kanal 1" [ ga="0/0/1+<0/1/1" ]
Type switch : ch2 "Kanal 2" [ ga="0/0/2+<0/1/2" ]
Type switch : ch3 "Reserve" [ ga="" ]
}
Thing virtuell "virtuelle Channel" {
Type switch : allOff "Alles Aus" [ ga="15/0/1" ]
}
das < vor der GA bewirkt, dass openHAB beim Start des Systems einen Read Request auf diese GA sendet. Da die KO des Schaltaktos das L-Flag haben, antwortet der Aktor mit dem aktuellen Zustand und openHAB weiß sofort, ob der Aktorkanal ein- oder ausgeschaltet ist.
Jeder dieser Channel wird mit einem Switch Item verlinkt. Die beiden Items des Schaltaktors bekommen ein normales Widget, in dem der Schaltbefehl ON und OFF ausgelöst und angezeigt werden kann. Das AllOff Item gekommt ein Widget, welches ausschließlich OFF sendet (das ist elementar!).
Das Thing meinAktor ist die Entsprechung des Schaltaktors, es gibt einen Channel pro Schaltkanal (ich lasse hier mal Spezialitäten wie Strommessung weg) Reservechannel kann man gerne anlegen, allerdings entweder a) mit den korrekten, bereits vergebenen GA, oder b) ohne konfigurierte GA. Ich habe bei mir alles über Textdateien definiert, dort sind alle Channel angelegt, aber die Reserven sind auskommentiert. Das geht so über die UI natürlich nicht.
Die Schalter sind in openHAB überhaupt nicht angelegt, nicht mal die Taste Zentral-Aus, die taucht nur als virtueller Channel auf. Per Definition kann Zentral-Aus von beliebig vielen Stellen aus gesendet werden, der Taster ist also nicht zwingend "Eigentümer" der GA. Aber auch der Aktor ist nur ein mögliches Ziel, darf also ebenfalls nicht "Eigentümer" sein.
Die Rückmeldung des Schaltzustands ist übrigens auch in knx selbst nicht optional, denn ein Aktorkanal kann viele verschiedene Befehle empfangen, sei es der exklusive Schaltbefehl (von beliebig vielen Tastern), ein Gruppenbefehl (Zentral Aus), ein Szenenbefehl (separates KO, hier nicht aufgeführt, aber so gut wie jeder Aktor kann das), Zwangsstellung (siehe Szene) oder auch Aktor-intern, z.B. automatisches Ausschalten über Zeit (kann auch so ziemlich jeder Aktor...)
Wenn man normale Wandtaster verwendet, so merkt sich der Taster, welchen Befehl er zuletzt gesendet hat und nimmt beim nächsten Mal das Gegenteil, er sendet also fröhlich ON, OFF, ON, OFF, ... Sobald nun aber weitere Steuerungen dazu kommen, könnte der Schaltaktor (nicht zwingend über die im Taster hinterlegte GA) anderweitig umgeschaltet werden. Wenn der Taster das nicht mitbekommt, wird man beim nächsten Mal zweimal drücken müssen, einmal, um den Taster in die korrekte Schaltstellung zu bringen, ein zweites Mal, um den korrekten Schaltbefehl zum Aktor zu senden. Deshalb ist die Rückmeldung selbst in einem konventionellen knx System (also eines ohne Visu oder zentrale Steuerung) essenziell. Wird - gerade von Hobbyisten - gerne mal falsch gemacht (und ich war da keine Ausnahme...).