Seite 2 von 2

Re: KNX addon openhab3 findet nur ein Device

Verfasst: 26. Apr 2022 18:58
von technick90
@udo1toni
Mit der VM klappt es. Bridge geht als tunnel an. Schuld ist also docker, ich google dann mal zu dem Thema.

@exceptio
Hier mal Beispiele von meiner textbasierten config.
Du musst bei den things die Gruppenadressen beim jeweiligen Device konfigurieren.
Beispiel: Gruppenadressen vom Schaltaktor beim Schaltaktor, vom Dimmaktor beim Dimmaktor usw.. Du hast alle Gruppenadressen SensorGuest konfiguriert, das kann nicht richtig sein.
Außerdem habe ich die physische Adresse vom Aktor auch hinterlegt, die fehlt bei dir. Kann aber auch sein das man die nicht zwingend brauch, das weiß ich nicht.

knx.things

Code: Alles auswählen

Bridge knx:ip:bridge [ 
    ipAddress="192.168.xxx.xx", 
    portNumber=3671,  
    type="TUNNEL", 
    readingPause=50, 
    responseTimeout=10, 
    readRetriesLimit=3, 
    autoReconnectPeriod=1,
    localSourceAddr="0.0.0"
] {
    //AB HIER WERDEN DIE DEVICES ANGELEGT
	
    Thing device schaltaktor[
        address="1.1.6",
        fetch=false,
        pingInterval=300,
        readInterval=0
    ] {
        Type switch     : Licht_EG_HWR                   "Licht HWR"             [ ga="1.001:1/2/0+<1/2/1" ]
        Type switch     : Licht_Aussen_Vorgarten         "Licht Front"           [ ga="1.001:1/3/5+<1/3/6" ]
    }
    Thing device dimmaktor4x[
        address="1.1.8",
        fetch=false,
        pingInterval=300,
        readInterval=0
    ] {
        Type dimmer     :   Licht_EG_Kueche             "LED-Spots Küche"               [ switch="1/2/45+<1/2/48", position="1/2/47+<1/2/49", increaseDecrease="1/2/46"]
        Type dimmer     :   Licht_EG_EsszimmerLaufweg   "LED-Spots Esszimmer Laufweg"   [ switch="1/2/65+<1/2/68", position="1/2/67+<1/2/69", increaseDecrease="1/2/66"]
        Type dimmer     :   Licht_EG_Esszimmer          "LED-Spots Esszimmer"           [ switch="1/2/55+<1/2/58", position="1/2/57+<1/2/59", increaseDecrease="1/2/56"]
        Type dimmer     :   Licht_EG_Bad                "Licht Bad"                     [ switch="1/2/75+<1/2/78", position="1/2/77+<1/2/79", increaseDecrease="1/2/76"]
    }
}
knx.items

Code: Alles auswählen

Switch   KNXDeviceLichtEGHWR                 "Licht hwr"    <light>  (Licht)     {channel="knx:device:bridge:schaltaktor:Licht_EG_HWR", alexa="Lighting"}
Switch   LichtAussenVorgarten "Licht front"   <light>  (Licht)     {channel="knx:device:bridge:schaltaktor:Licht_Aussen_Vorgarten", alexa="Lighting"}
Dimmer LichtEGKueche "Led spots küche [%.0f]" <light>  (Licht)	{channel="knx:device:bridge:dimmaktor4x:Licht_EG_Kueche", alexa="Lighting"}
Dimmer LichtEGEsszimmerLaufweg "Led spots esszimmer laufweg [%.0f]" <light>  (Licht)	{channel="knx:device:bridge:dimmaktor4x:Licht_EG_EsszimmerLaufweg", alexa="Lighting"}
Dimmer LichtEGEsszimmer "Led spots esszimmer [%.0f]" <light>  (Licht)	{channel="knx:device:bridge:dimmaktor4x:Licht_EG_Esszimmer", alexa="Lighting"}
Dimmer LichtEGBad "Licht bad [%.0f]" <light>  (Licht)	{channel="knx:device:bridge:dimmaktor4x:Licht_EG_Bad", alexa="Lighting"}

Re: KNX addon openhab3 findet nur ein Device

Verfasst: 26. Apr 2022 19:39
von udo1toni
Also Deine Konfiguration von oben, etwas eingekürzt wegen Wiederholungen:

Code: Alles auswählen

Bridge knx:ip:bridge [                           // eine Bridge von knx Binding, Typ ist ip, Der Name soll "bridge" lauten.
    type="TUNNEL",                               // Das Gateway soll als TUNNEL Device angesprochen werden
    ipAddress="10.81.120.234",                   // Das Gateway hat die IP 10.81.120.234
    portNumber=3671,                             // und kommuniziert auf dem Standardport (3671)
    localIp="10.81.120.175",                     // Das openHAB System hat die IP 10.81.120.175
    readingPause=50,                             // es soll bei Lesezugriff zwischen zwei Requests eine Pause von 50 Millisekunden eingehalten werden
    responseTimeout=10,                          // Das System soll jeweils 10 Sekunden auf die Antwort warten
    readRetriesLimit=3,                          // falls keine Antwort kam, bis zu 3 mal probieren
    autoReconnectPeriod=60,                      // Falls die Verbindung verloren geht, nach 60 Sekunden erneut verbinden (bitte so lassen)
    localSourceAddr="1.1.250"                    // openHAB soll mit der physikalischen Adresse 1.1.250 auf dem Bus auftreten (bitte nicht. lass es auf 0.0.0)
] {
    Thing device AktorHeizung "Aktor@Bad"[       // Definiere ein Device mit dem Namen AktorHeizung
        fetch=true,                              // versuche, die Hardware auszulesen (wirkungslos, da keine address gesetzt)
        pingInterval=300                         // versuche alle 300 Sekunden, das Device zu erreichen (wirkungslos, siehe fetch)
    ]                                            // Gerät hat keinerlei Channels
    Thing device SensorGuest "Sensor@Guest" [
        fetch=true,
        pingInterval=300
    ]      // das einzige Gerät mit Channels
    {
        Type number        : GuestTemperature "Temperature" [ ga="9.001:<1/3/1" ] // Ein Number Channel, DPT 9.001, es wird von 1/3/1 gelesen
        Type number        : GuestHumidity    "Humidity"    [ ga="9.007:<1/4/1" ] // Ein Number Channel, DPT 9.007, es wird von 1/4/1 gelesen
        Type switch        : Heizkreis1       "Switch"      [ ga="1.001:<1/0/1" ] // Ein Switch Channel, DPT 1.001, es wird von 1/0/1 gelesen 
    }
}
Ich möchte empfehlen, die Konfiguration auf das nötigste zu reduzieren;

Code: Alles auswählen

Bridge knx:ip:bridge "KNX IP Bridge" [           // Mit Label besser in der UI zu finden
    type="TUNNEL",                               // Das Gateway soll als TUNNEL Device angesprochen werden
    ipAddress="10.81.120.234",                   // Das Gateway hat die IP 10.81.120.234
    localIp="10.81.120.175"                      // Das openHAB System hat die IP 10.81.120.175
                                                 // Mehr braucht es nicht für ein Tunnel Device
] {
    Thing device Aktor1_1_1 "Bad"[               // Definiere ein Device mit dem Namen AktorHeizung
        address="1.1.1",                         // physikalische Adresse des Device (muss natürlich stimmen)
        fetch=false,                             // versuche nicht, die Hardware auszulesen (ohne weiteren Nutzen)
        pingInterval=300                         // versuche alle 300 Sekunden, das Device zu erreichen
    ] {
        Type number : temp "Bad Temperatur"  [ ga="<1/3/1" ] // der DPT wird nicht gebraucht, da default
        Type number : hum  "Bad Luftfeuchte" [ ga="<1/4/1" ] // der DPT wird nicht gebraucht, da nur im Subtyp vom default abweichend
        Type switch : ch1  "Bad Heizung"     [ ga="<1/0/1" ] // der DPT wird nicht gebraucht, da default (besser wäre zusätzlich eine korrekte Rückmelde-GA
    }
    Thing device Aktor1_1_2 "Flur" []            // alternativ überhaupt keine thing-spezifische Konfiguration
    {
        Type number : temp "Flur Temperatur"  [ ga="<1/3/2" ] 
        Type number : hum  "Flur Luftfeuchte" [ ga="<1/4/2" ] 
        Type switch : ch1  "Flur Heizung"     [ ga="<1/0/2" ] 
    }
}
Die Zuordnungen der einzelnen Channel zu den Devices sind hier natürlich beispielhaft, ich weiß ja nicht, welche Hardware Du nutzt. Der Punkt ist aber, dass ein Thing für ein Stück Hardware steht. Ein Aktor hat immer(!) mindestens zwei Kommunikationsobjekte (KO), zum einen das Steuer-KO, zum anderen das Rückmelde-KO.
Das Rückmelde-KO sollte lesbar sein (L-Flag gesetzt) und nur mit einer GA verknüpft sein, welche nirgends sonst schreibend verknüpft ist.
Das Steuer-KO sollte mit seiner primären GA exklusiv erreicht werden, diese wäre auch in openHAB zu hinterlegen.
Als Name für das Thing bietet sich ein Name an, der sich auf die Hardware bezieht, am besten direkt mit der physikalischen Adresse (aber Achtung: Punkte sind nicht erlaubt, also stattdesssen Unterstriche).
Selbst auf Channelebene reichen generische Namen, es ist hier wichtig, zu wissen, welches Detail der Hardware gesteuert wird, nicht, was dort angeschlossen ist. Diese Information kann man ins Label verbannen.

Anders sieht es bei den Items aus:

Code: Alles auswählen

Number GuestTemperature "Temperatur [%.1f °C]" <temperature> { channel="knx:device:ip:bridge:Aktor1_1_1:temp" }
Number FlurTemperature  "Temperatur [%.1f °C]" <temperature> { channel="knx:device:ip:bridge:Aktor1_1_2:temp" }
Number GuestHumidity    "Luftfeuchte [%d %%]"  <humidity>    { channel="knx:device:ip:bridge:Aktor1_1_1:hum" }
Number FlurHumidity     "Luftfeuchte [%d %%]"  <humidity>    { channel="knx:device:bridge:ip:Aktor1_1_2:hum" }
Switch Heizkreis1       "Switch [%s]"          <switch>      { channel="knx:device:bridge:ip:Aktor1_1_1:ch1" }
Switch Heizkreis2       "Switch [%s]"          <switch>      { channel="knx:device:bridge:ip:Aktor1_1_2:ch1" }
Hier ist der Name Programm :) Die Zuordnung der Channel erledigt den Rest.

Vorteil dieser Namensstruktur: Soll ein Item mal mit einer anderen Hardware verbunden werden, so müssen keine Namen geändert werden, lediglich die Verknüpfung muss angepasst werden. Ebenso muss bei Änderung der Aufgabe eines Channels dort nur das Label angepasst werden. Vergleiche auch mit der UI - es ist nicht vorgesehen, den Namen zu ändern, das Label darf aber jederzeit verändert werden.

Re: KNX addon openhab3 findet nur ein Device

Verfasst: 27. Apr 2022 07:50
von exceptio
Guten Tag Udo,

danke für deine ausführliche Hilfe. Es scheint zu funktionieren. Da habe ich mal die Anleitung befolgt und trotzdem nicht so richtig. Du bist in der Szene sehr aktiv auch mehrsprachig. Möchte mich in aller Höflichkeit für deinen support bedanken.

Grüße
Sebastian

Re: KNX addon openhab3 findet nur ein Device

Verfasst: 27. Apr 2022 10:01
von udo1toni
Immer gerne :)