ioBroker / ioBroker.knx

connect KNX via eibd
http://www.iobroker.org
Other
50 stars 32 forks source link

GA für Statusabfragen und -änderungen werden nicht zusammengeführt #69

Closed ThomasBahn closed 5 years ago

ThomasBahn commented 5 years ago

Die Namen der Gruppenadressen stimmen weitgehend überein (definitiv über 70%).

Deutliches Beispiel: { "_id": "knx.0.Licht.Licht_DG.L-D5d_E_A_Flur_DG1x_Decke__Hängeleuchten_über_Treppe", "type": "state", "common": { "name": "L-D5d E/A Flur DG, 1x Decke, Hängeleuchten über Treppe", "type": "", "role": "value", "read": true, "write": true, "update": false, "max": 1, "min": 0 }, "native": { "dpt": "", "address": "2/3/40", "addressRefId": "P-026D-0_GA-144", "statusGARefId": "", "actGARefId": "", "objRef": "O-0_R-1", "devName": "M-0007_A-6125-50-4400-6125-60-BFBD", "devInst": "P-026D-0_DI-60", "objectSize": "" }, "from": "system.adapter.knx.0", "user": "system.user.admin", "ts": 1566904331266, "acl": { "object": 1636, "state": 1636, "owner": "system.user.admin", "ownerGroup": "system.group.administrator" } } und { "_id": "knx.0.Licht.Licht_DG.L-D5d_RM_Flur_DG1x_Decke__Hängeleuchten_über_Treppe", "type": "state", "common": { "name": "L-D5d RM Flur DG, 1x Decke, Hängeleuchten über Treppe", "type": "", "role": "value", "read": true, "write": true, "update": false, "max": 1, "min": 0 }, "native": { "dpt": "", "address": "2/3/43", "addressRefId": "P-026D-0_GA-147", "statusGARefId": "", "actGARefId": "", "objRef": "O-1_R-17", "devName": "M-0007_A-6125-50-4400-6125-60-BFBD", "devInst": "P-026D-0_DI-60", "objectSize": "" }, "from": "system.adapter.knx.0", "user": "system.user.admin", "ts": 1566904331294, "acl": { "object": 1636, "state": 1636, "owner": "system.user.admin", "ownerGroup": "system.group.administrator" } }

Die GA-Namen sind absolut regelmäßig vergeben:

HG | HG Beschreibung | UG- Offset | UG Beschreibung | Bemerkung

2 | Licht | +0 | {ID} E/A {Raum} {Auslässe} | Funktion Ein/Aus +1 | {ID} DIM {Raum} {Auslässe} | Funktion Dimmen +2 | {ID} WERT {Raum} {Auslässe} | Wert setzen +3 | {ID} RM {Raum} {Auslässe} | Rückmeldung: Status Ein/Aus +4 | {ID} RM WERT {Raum} {Auslässe} | Rückmeldung: aktueller Wert

3 | Strom | +0 | {ID} E/A {Raum}, {Art}, {Position} | Funktion Ein/Aus +1 | {ID} RESERVE {Raum}, {Art}, {Position} |   +2 | {ID} RESERVE {Raum}, {Art}, {Position} |   +3 | {ID} RM {Raum}, {Art}, {Position} | Rückmeldung: Status Ein/Aus +4 | {ID} RESERVE {Raum}, {Art}, {Position} |  

(Ausschnitt aus meiner Tabelle der Benennungssystematik)

Also für Lichtanschlüsse im obigen Beispiel: L-D5d E/A Flur DG, 1x Decke, Hängeleuchten über Treppe L-D5d RM Flur DG, 1x Decke, Hängeleuchten über Treppe

L-D5d ist die ID für den Auslass E/A ist die GA zum Ändern, RM (Rückmeldung) zum Auslesen Flur DG: der Raum 1x Decke: die Art Hängeleuchten über Treppe: die Position

Eine Möglichkeit, die enorm viel Flexibilität bieten würde und in der Umsetzung nicht zu viel Arbeit machen würde: Wenn man über einen regulären Ausdruck beschreibt, wie man von einem GA-Namen zum zugehörigen anderen kommt.

Ich bin selbst nicht so firm in regulären Ausdrücken (da müsste ich dann durch), aber der Ausdruck von "L-D5d RM Flur DG, 1x Decke, Hängeleuchten über Treppe" zu "L-D5d E/A Flur DG, 1x Decke, Hängeleuchten über Treppe" dürfte noch recht trivial sein. Es gibt ja regExp für das Ersetzen.

Beim Import könnte man dann einmal alle GA-Namen lesen. Danach durchläuft man die GA-Namen und prüft, ob der Suchteil der regExp "passt", wendet in dem Fall die Ersetzung an und sieht nach, ob es den resultierenden GA-Namen in der eingelesenen GA-Namensliste gibt. Dann hat man einen Treffer und kann die Zuordnung vornehmen. In einem weiteren Durchlauf durch die bisher nicht gepaarten GA-Namen könntest du dann noch einmal deinen heuristischen Ansatz anwenden (oder natürlich immer, wenn keine regExp angegeben ist).

Noch flexibler wäre eine Liste von regExp-Ausdrücken statt nur eines einzigen.

Wäre sicher ein "Experten"-Feature, dass aber deinen Adapter für noch mehr KNX-Installationen anwendbar machen würde.

Ich stehe für Rückfragen, Dateien, Logs usw. gerne zur Verfügung.

ThomasBahn commented 5 years ago

Noch eine Idee: Per RegExp definieren, welche GA-Namen nicht importiert, also ignoriert werden sollen.

Bei mir so etwas wie: ".RESERVE." Mit | kann man mehrere Ausdrücke kombinieren, so dass hier ein Feld und ein Vergleich (Pattern Matching) ausreichend wäre.

ThomasBahn commented 5 years ago

Vielen Dank, chefkoch009, für die schnelle Unterstützung. Die neue Version 1.0.32 hat einige Themen gelöst, die mir nicht gleich aufgefallen waren, und ich habe in der ETS meine Gruppenadress-Namen noch etwas angepasst.

Das wesentliche Detail, dass chefkoch009 mir noch genauer erläutert hat, ist der dritte Schritt im Versuch, die GA vom Aktor und die Statusabfrage-GA zu verbinden. Dafür wird eine String-Ähnlichkeitsfunktion genutzt mit einem ziemlich hohen Schwellwert, der sich in der Praxis weitestgehend bewährt hat und die False-Positives, also nicht beabsichtigte Kombinationen sehr gut vermeidet.

Meine GA-Namen waren beispielsweise "L-D5d RM Flur DG, 1x Decke, Hängeleuchten über Treppe" und "L-D5d E/A Flur DG, 1x Decke, Hängeleuchten über Treppe". Ich habe die Rückmelde-Adresse geändert in "L-D5d RM E/A Flur DG, 1x Decke, Hängeleuchten über Treppe" (natürlich für alle entsprechenden GAs). Jetzt funktioniert die Zuordnung zu 100% (zumindest habe ich noch keine Abweichung gefunden).