Ja, sicher
Grundsätzlich kannst Du alle Dateien 1:1 aus dem openHAB2-System übernehmen.
Allerdings vermute ich, dass Du wahrscheinlich unter openHAB2 mit dem knx1 Binding gearbeitet hast. Das wäre daran erkennbar, dass die Links in der .items Datei so aussehen:
Das knx2 (bzw. knx3) Binding arbeitet bekanntermaß0en komplett anders.
Um alles bequem umzustellen, brauchst Du drei Infomationsquellen:
- Die Datei knx.cfg aus dem Ordner /etc/openhab2/services/ (alternativ könnte die nötige Information auch in openhab.cfg enthalten sein, dann als Block mit den Konfigurationsinformationen für knx).
- Die .items Datei(en) welche die Itemkonfiguration der knx-Items enthält/enthalten.
- Eine Liste aller knx Devices mit den physikalischen Adressen und der Zuordnung, welche GA zu welchen KO gehört.
Punkt 3 ist nicht überlebensnotwendig, aber sehr erstrebenswert.
Die Daten aus Punkt 1 brauchst Du, um die knx Bridge zu konfigurieren.
Die Daten aus Punkt 2 brauchst Du, um die Channel korrekt zu konfigurieren.
Die Daten aus Punkt 3 brauchst Du, um die Channel korrekt zu strukturieren.
Diese Struktur ist wie erwähnt nicht überlebensnotwendig, hilft aber ungemein, wenn Du in openHAB seltsame Fehler feststellst, die auf bestimmte GA begrenzt sind. Man kann den knx Bus als Ganzes als Thing darstellen, das bedeutet, Du hast eine Bridge für die Verbindung und darunter ein generic knx Thing, in dem sämtliche Channel zusammengefasst sind. Das ist beim Einrichten schön einfach, aber eben nicht strukturiert.
Wenn Du die Channel hingegen strukturiert anlegen willst, legst Du pro Device ein Thing an. Denke bei der Zuordnung der Channel immer daran, dass der "Besitzer" des Channels immer der Aktor oder der Sensor ist, nicht ein Wandtaster.
Die große Ausnahme dieser Regel sind Channel, zu denen es keine Sensoren oder Aktoren in knx gibt, also z.B. wenn ein Wandtaster einen Aktor eines anderen Bindings steuern soll (z.B. eine Hue Lampe). Nur dann legst Du den Channel im Taster Device an. Falls Du Binäreingänge verbaut hast, kannst Du diese bevorzugt als Taster betrachten

es sei denn, es handelt sich um eine Sensor Funktion (z.B. Fensterkontakte).
Es gibt noch eine weitere Kategorie Channel, das sind solche, die nicht einem bestimmten Gerät zugeordnet werden können. Dazu gehören z.B. alle Szenensteuerungen, selbst wenn nur ein Gerät damit gesteuert wird, denn eine Szene hält keinen Status. Auch Uhrzeit und Datum, die von openHAB in Richtung des knx Busses gehen gehören in diese Kategorie, weil es mehrere Geräte in knx geben wird, die diese Daten empfangen.
In diesen Fällen ist am ehesten openHAB "Besitzer" des Status. openHAB hat keine physikalische Adresse, das heißt, Du legst dafür zusätzlich ein generic knx Thing an, welches nur diese Channel hält. Mutmaßlich werden diese Channel außerdem eine Besonderheit aufweisen, die Dir noch zu schaffen machen wird, wenn Du bisher mit knx1 unterwegs warst.
Es ist nämlich so, dass knx1 einen Designfehler aufwies, der mit knx2 behoben wurde. Dieser Designfehler (bzw. dessen Behebung) führt aber zu einem Breaking Change, dasheißt, knx2 verhält sich in bestimmten Details völlig anders als knx1, das betrifft die Trigger in den Rules.
knx1 hat immer sowohl ein update als auch ein received command getriggert, egal was auf dem knx Bus passierte.
knx2 sendet grundsätzlich immer ein update, wenn dadurch ein Status geändert wird gibt es auch ein changed Ereignis. Hingegen gibt es kein received command. Soll - z.B. um mit einem Wandtaster ein nicht-knx-Gerät zu steuern - dennoch eine GA als received command gewertet werden, so muss ein *-control Channel verwendet werden. Hier kehrt sich die Logik komplett um, d.h. es gibt nur ein received command, aber kein update.
Um das Ganze komplett zu machen reagiert ein normaler Channel nur auf commands (also wenn man mit sendCommand einen Befehl schickt), während ein *-control Channel ausschließlich auf postUpdate reagiert. Deshalb kann man solche Channel (passenden Channeltyp mal vorausgesetzt) direkt über ein Item mit einem anderen Channel verlinken. knx sendet dann das Kommando über das Item direkt an das zweite Binding, das Status Update des zweiten Bindings führt hingegen zu einem Status Update, welches von knx empfangen wird. Man kann also den knx Taster ohne Rule mit einer anderen Lampe verbinden.
Es gibt ansonsten für jeden Itemtyp einen passenden Channel (bzw. zwei, einmal normal, einmal control), also z.B. switch, dimmer, contact, rollershutter, number, string...
Die Konfiguration kannst Du über die Main UI vornehmen, aber genauso gut auch über eine Textdatei, in diesem Fall *.things im Ordner things/
Das sieht dann so aus:
Code: Alles auswählen
Bridge knx:ip:bridge "Weinzierl 730 IP" [
ipAddress="192.168.178.55",
localIp="192.168.178.66",
type="TUNNEL",
portNumber=3671,
readingPause=50,
responseTimeout=10,
readRetriesLimit=3,
autoReconnectPeriod=60,
localSourceAddr="0.0.0"
]
{
Thing device Dim_4 "Einzeldimmer" @ "KNX" [
address="1.1.4",
fetch=false,
pingInterval=600,
readInterval=0
] {
Type dimmer : ch1 "Deckenstrahler" [ switch="8/5/0",position="5.001:8/5/2+<8/5/7" ]
}
Thing device Bin_11 "SchaltGruppe 1" @ "KNX" [
address="1.1.11",
fetch=false,
pingInterval=600,
readInterval=0
] {
Type switch : ch1 "Stehlampe" [ ga="1.001:3/4/30+<3/4/34" ]
Type switch : ch2 "Bad 1. OG" [ ga="1.001:7/4/0+<7/4/4" ]
Type switch : ch3 "Vitrine" [ ga="1.001:3/4/50+<3/4/54" ]
Type switch : ch4 "Licht Außen" [ ga="1.001:0/4/10+<0/4/14" ]
Type switch : ch5 "Buffet" [ ga="1.001:3/4/40+<3/4/44" ]
Type switch : ch6 "Flur" [ ga="1.001:2/4/10+<2/4/14" ]
}
}
Was Du gut sehen kannst: Zuoberst wird die Bridge definiert (im Beispiel mit einem knx Tunnel Gateway) Die Parameter entsprechen den Standardeinstellungen und sollten nicht ohne triftigen Grund verändert werden. Insbesondere die
localSourceAddr muss unbedingt eine freie physikalische Adresse sein, es darf kein Device geben, welches auf diese Adresse reagiert, auch nicht das Gateway, auch nicht als sekundäre Adresse.
Darunter werden dann die einzelnen Devices definiert, mit Angabe der echten physikalischen Adresse. Ist die physikalische Adresse gesetzt, kann man in openHAB jederzeit erkennen, ob es Probleme mit der Kommunikation gibt (indem das Thing als OFFLINE angezeigt wird; die zugeordneten Channel können dennoch weiterhin funktionieren).
Solltest Du ein Device nutzen, welches nicht von sich aus senden kann, sondern immer eine Sendeaufforderung braucht, so kannst Du für dieses Device mit
readInterval dafür sorgen, dass der initiale Read Request (die GA mit < vorne dran) alle
readInterval Sekunden erneut gesendet wird. Gewöhnlich sollte der Parameter aber auf 0 stehen.
fetch ist eine nice-to-have Funktion und bringt keine Vorteile, kann aber zu Problemen führen wenn sie aktiviert ist, also besser auf false lassen.
Die Channel schließlich gehören zum jeweiligen Thing. Die zugehörigen Items zu den gezeigten Channels sehen dann so aus:
Code: Alles auswählen
Dimmer NSchlafDimPlaneten "Deckenstrahler" {channel="knx:device:bridge:hagerDim_4:ch1",autoupdate="false"}
Switch NEGWoziStehlampe "Stehlampe" {channel="knx:device:bridge:HagerBin_11:ch1",autoupdate="false"}
Switch NOGBadLicht "Bad 1. OG" {channel="knx:device:bridge:HagerBin_11:ch2",autoupdate="false"}
Switch NEGWoziVitrine "Vitrine" {channel="knx:device:bridge:HagerBin_11:ch3",autoupdate="false"}
Switch NOutVornLicht "Licht Außen" {channel="knx:device:bridge:HagerBin_11:ch4",autoupdate="false"}
Switch NEGWoziBuffet "Buffet" {channel="knx:device:bridge:HagerBin_11:ch5",autoupdate="false"}
Switch NEGFlurLicht "Flur" {channel="knx:device:bridge:HagerBin_11:ch6",autoupdate="false"}
autoupdate="false" bewirkt dabei, dass der Status aktiv nur vom knx Bus gesetzt wird.