[gelöst] HomeMaticWired: addLink am selben Gerät erzeugt doppelte Einträge - gelöst in Peer::getLinks() - 0.8.0-2937

Guten Tag,

ich benutze die aktuelle Homegear Version 0.7.41-3071 und habe folgende Geräte angelernt:

Family 1> ls
      ID │ Name                      │  Address │ Serial Number │ Type │ Type String               │ Firmware │ Unreach
─────────┼───────────────────────────┼──────────┼───────────────┼──────┼───────────────────────────┼──────────┼────────
         │                           │          │               │      │                           │          │        
       1 │                           │ 0001A3DC │    OEQXXXXXXX │ 1200 │ HMW-IO-12-Sw7-DR          │      3.6 │      No
       2 │                           │ 00020E3F │    PEQXXXXXXX │ 1100 │ HMW-LC-Sw2-DR             │      3.6 │      No
─────────┴───────────────────────────┴──────────┴───────────────┴──────┴───────────────────────────┴──────────┴────────

Lege ich nun am Gerät mt ID 1 eine Direktverknüpfung an, z.B:

addLink ("QEQxxxxxxx:1", "QEQxxxxxxx:16")

Dann ergeben sich doppelte Einträge wie folgt:

|Channel: 1|Address: 0x1a3dc|Remote channel: 16|Serial number: OEQxxxxxx|
|Channel: 16|Address: 0x1a3dc|Remote channel: 1|Serial number: OEQxxxxxx|

Folglich sind im Homematic Manager dann unter Verknüpfungen zwei identische Zeilen zu sehen. Lösche ich dann eine der beiden Direktverbindungen, dann verschwinden die beiden identischen Zeilen.

Ich denke, da liegt vielleicht ein ähnliches Problem vor, wie bereits in diesem Beitrag beschrieben:
Bush Jäger Doppel-Wipp-Taster (2020US-205) an HMW-LC-Bl1-DR funktioniert nicht?

Viele Grüße
Klaus

Hallo @alamouti,

funktioniert die Direktverknüpfung denn? Was gibt homegear -e rc 'print_v($hg->getLinks());' zurück?

Viele Grüße

Sathya

Hallo Sathya,

vielen Dank für Deine Rückmeldung. Ja, die Direktverknüpfung funktioniert, auch wenn sie anscheinend doppelt vorhanden ist.

(Array length=2)
[
  (Struct length=9)
  {
    [DESCRIPTION] (String) 
    [FLAGS] (Integer) 0
    [NAME] (String) 
    [RECEIVER] (String) OEQxxxxxxx:16
    [RECEIVER_CHANNEL] (Integer) 16
    [RECEIVER_ID] (Integer) 1
    [SENDER] (String) OEQxxxxxxx:1
    [SENDER_CHANNEL] (Integer) 1
    [SENDER_ID] (Integer) 1
  }
  (Struct length=9)
  {
    [DESCRIPTION] (String) 
    [FLAGS] (Integer) 0
    [NAME] (String) 
    [RECEIVER] (String) OEQxxxxxxx:16
    [RECEIVER_CHANNEL] (Integer) 16
    [RECEIVER_ID] (Integer) 1
    [SENDER] (String) OEQxxxxxxx:1
    [SENDER_CHANNEL] (Integer) 1
    [SENDER_ID] (Integer) 1
  }
]

Lösche ich die Direktverknüpfung mit removeLink("OEQxxxxxxx:1","OEQxxxxxxx:16"), dann liefert getLinks() folgendes zurück:

(Array length=0)
[
]

Benutze die aktuelle Homegear stable version: 0.7.45-3101

Viele Grüße

Klaus

Ein “Link” besteht aus der Verbindung zweier Kanäle… 1 Link = 2 Kanäle, 1 link verbindet Kanal A mit Kanal B.

Hier sind aber 2 mal die gleichen Kanäle verbunden. Jede Struktur enthält Sender und Receiver, beide Strukturen sind identisch.

1 Like

Also die doppelten Einträge in der Ausgabe der Funktion getLinks() ergeben sich wie beschrieben mit addLink ("QEQxxxxxxx:1", "QEQxxxxxxx:16") nur dann, wenn Senderkanal- und Empfängerkanal der Direktverknüpfung am selben Gerät liegen.

Erzeuge ich eine Diektverknüpfung zwischen zwei unterschiedlichen Geräten mit addLink ("PEQxxxxxxx:1","QEQxxxxxxx:13) dann wird richtigerweise nur ein Eintrag erzeugt und homegear -e rc 'print_v($hg->getLinks());' liefert folgendes zurück:

(Array length=1)
[
  (Struct length=9)
  {
    [DESCRIPTION] (String) 
    [FLAGS] (Integer) 0
    [NAME] (String) 
    [RECEIVER] (String) OEQxxxxxxx:13
    [RECEIVER_CHANNEL] (Integer) 13
    [RECEIVER_ID] (Integer) 1
    [SENDER] (String) PEQxxxxxxx:1
    [SENDER_CHANNEL] (Integer) 1
    [SENDER_ID] (Integer) 2
  }
]
1 Like

Hallo @alamouti,

letzteres ist der entscheidende Hinweis: Das Ganze passiert nur, wenn Sender und Empfänger das gleiche Gerät sind. Das Problem sollte im nächsten Nightly gefixt sein. Könntest du es damit noch einmal probieren? Die Verknüpfung muss dafür neu angelegt werden - bestehende Verknüpfungen bleiben unberührt.

Viele Grüße

Sathya

1 Like

Hallo @sathya,

vielen Dank für Deine Unterstützung. Habe jetzt die aktuelle Nightly (version: 0.8.0-2934) installiert und es funktioniert jetzt alles, so wie vorgesehen:

addLink ("QEQxxxxxxx:1", "QEQxxxxxxx:16")

liefert bei Abfage mit homegear -e rc 'print_v($hg->getLinks());' nur mehr einen einzigen Eintrag wie folgt zurück:

(Array length=1)
[
  (Struct length=9)
  {
    [DESCRIPTION] (String) 
    [FLAGS] (Integer) 0
    [NAME] (String) 
    [RECEIVER] (String) OEQxxxxxxx:16
    [RECEIVER_CHANNEL] (Integer) 16
    [RECEIVER_ID] (Integer) 1
    [SENDER] (String) OEQxxxxxxx:1
    [SENDER_CHANNEL] (Integer) 1
    [SENDER_ID] (Integer) 1
  }
]

Danke und beste Grüße
Klaus

2 Likes

Hallo @sathya,

muss da leider doch nochmals nachhacken…

Wenn ich die aktuelle Nightly verwende, werden die Links zwar richtig angelegt, die Direktverknüpfung funktioniert dann aber gar nicht mehr und im Homematic Manager findet beim Bearbeiten der Direktverknüpfung die RPC Funktion getParamset den Link nicht mehr.

Wenn ich nun im Sourcecode von HMWiredCentral.cpp die Abfrage:

if (sender->getID() != receiver->getID()) //Don't add link twice when sender and receiver are the same

aus der Abfrage if(!receiverLinked) herausnehme und diese sinngemäß gleich oberhalb unter if(!senderLinked) einfüge, dann funktioniert die Direktverknüpfung wie gewünscht.

Allerdings kann ich dann die Direktverknüpfung mit dem Homematic Manager nicht mehr bearbeiten, da die RPC Funktion GetLinkInfo den Link nicht findet.

Mir scheint das Problem kommt daher, dass beim Bearbeiten einer Direktverküpfung am selben Gerät einerseits die RPC Funktion getParamset("RECEIVER:RECEIVERCHANNEL","SENDER:SENDERCHANNEL" und die RPC Funktion

getLinkInfo("SENDER:SENDERCHANNEL","RECEIVER:RECEIVERCHANNEL") benötigt werden, welche dann im Falle der Änderung in der aktuellen Nightly offensichtlich nicht mehr richtig funktionieren.

Liebe Grüße
Klaus

1 Like

Noch ein Gedanke dazu…
Vielleicht liegt das Problem aber gar nicht an der Funktion addLink in HMWiredCentral.cpp, sondern in der Implementierung der RPC Funktion getLinks, welche Direktverknüpfungen am selben Gerät einfach nur falsch auswertet und diese dann doppelt zurück liefert.

1 Like

Hallo @alamouti,

das Problem lag, wie du richtig angemerkt hast, in getLinks(). Sehr gut erkannt!!! Die Prüfung nach doppelten Einträgen wurde nur ausgeführt, wenn sich die Peers unterschieden haben. Könntest du noch einmal das nächste Nightly testen?

Viele Grüße

Sathya

Hallo @sathya,
klar werde ich das testen. DieÄnderungen in HMWiredCentral.cpp wurden bereits zurück genommen und die erforderlichen Änderungen in getLinks() wurden bereits vorgenommen. Danke!

Viele Grüße,
Klaus

Herzlichen Dank @sathya,

habe die erforderlichen Änderungen in der Funktion Peer:getLinks() in der Datei src/Systems/Peer.cpp im heruntergeladenen Quellcode vom Paket libhomegear-base der current stable version 0.7.45-3101 eingepflegt und daraus lokal mit apt-get source -b libhomegear-base das Paket gebaut und mit sudo dpkg -i libhomegear-base_0.7.45-3101_armhf.deb installiert. Was soll ich sagen… Bin begeistert, nun funktioniert es tatsächlich genauso wie vorgesehen. Danke! Ich denke, das Thema kann geschlossen werden.

Beste Grüße
Klaus

2 Likes

Perfekt! Vielen Dank auch an dich!