Übersicht KNX Adresse / Rückmeldeadresse

Ja, ok, „man könnte“, hört sich stark nach „Scholzen“ an… Spass bei Seite, mit dem Script schreiben, soweit wäre ich ehrlich gesagt dann noch nicht! Weiß auch nicht genau wo und wie ich da anfangen soll. Erst einmal müsste ich wohl die „Scriptsprache“ lernen, welche da wäre? Aber ich denke, da werde ich kurzfristig mit IPS nicht drum rum kommen :slight_smile:

Die andere Variante, mit dem Einblenden der Spalten, wäre halt mal so für einen schnellen Zugriff sehr komfortabel…

Den verstehe ich nicht. Sorry. Macht aber nichts.

Hier könnte man wunderbar anfangen. Es würde ja für den Anfang reichen, das erstmal für eine Instanz auszugeben. Eine Schleife für alle anderen ist dann schnell gebaut.

Oder den Integrator des Vertrauens beauftragen.

Schaue ich mir mal an… Danke!

Das wäre tatsächlich eine schöne Hilfe für die vielen IPS-Nutzer die KNX verwenden: eine Liste auszugeben mit den KNX/EIB-Instanzen (Nummer + Name) und den dort verwendeten Gruppenadressen (primär + weitere).

Das ist von der Aufgabenstellung so allgemeingültig dass nicht jeder Anwender das Rad neu erfinden müsste/sollte. Vielleicht können wir ja @paresy überzeugen, so etwas zur Verfügung zu stellen.

Viele Grüße
Volker

Mit Verlaub, ich mache seit 2013 KNX und betreue seit 2015 sehr viele Kundeninstallationen und mir ist so ein Wunsch noch nie zu Ohren gekommen und ich selbst hatte auch noch nie das Bedürfnis danach. Ich möchte aber auch nicht ausschließen, dass ich irgendwas falsch mache.

Vielleicht könnt ihr mir helfen, das besser zu verstehen. In welchen Situationen sitzt man vor der Verwaltungskonsole und denkt sich: Jetzt brauche ich eine Liste mit KNX Instanzen und deren Rückmeldeadressen. Ich bestreite nicht, dass das sinnlos ist, aber mir fehlt irgendwie die Vorstellungskraft für so etwas. Bitte um Hilfe.

1 „Gefällt mir“

Na prima :laughing:

Wenn man seine GA-Struktur nachträglich umbauen möchte/muss oder umgebaute/ausgebaute Geräte zu Änderungen der GA führen, so können irgendwo in IPS noch Instanzen auf die alten GA verweisen. Die sind aktuell mühsam zu finden.

Bei mir ist dieser Fall (Umbau Geräte mit nachfolgenden Änderungen der GA-Zuordnungen) bereits mehrfach vorgekommen. In der ETS problemlos zu finden, in IPS muss man wissen wo man die Elemente findet weil’s über die GA nicht suchbar ist.

Im KNX Konfigurator hast Du eine Übersicht aller Gruppenadressen inklusive der ID. Hilft das?

Ansonsten - wie fast immer - fix ein Skript geschrieben, was die Infos liefert. Das ist eben das Gute an IP-Symcon (ich wiederhole mich): was es nicht kann, kann man ihm unwahrscheinlich schnell beibringen;)

Wobei ich das Beispiel mit den Änderungen auch nicht so ganz verstehe. Licht Büro wird immer Licht Büro bleiben. Ob die GA gestern einem DALI Gateway zugeordnet war und heute einem LED Controller, macht ja keinen Unterschied aus IPS Sicht? Aber egal, ich muss es nicht verstehen.

Sofern man diesen konsequent von Beginn an genutzt hat. Bei mir ist’s ein Mix aus alten EIB-Instanzen aus dem damaligen Konfigurator und manuell hinzugefügten EIB- und KNX-Instanzen. Vielleicht übersehe ich was, aber ich befürchte da hilft der KNX Konfigurator nur sehr theoretisch?

Ja, wenn man geübt ist und ständig seine Zeit damit verbringt, so wie du. Für normale Nutzer ist das aber keineswegs trivial und auch nicht „unwahrscheinlich schnell“.

In einem Thread zu einem Featurewunsch zu schreiben „mir ist so ein Wunsch noch nie zu Ohren gekommen“ ist schon etwas merkwürdig.

Ich verstehe schon, dass du als Integrator ein möglich kompliziertes , von Laien unbedienbares IPS bevorzugst, . Da gibt es viele Möglichkeiten, Verbesserungenswünschen als unnötig abzuweisen weil man alles irgendwie auch selbst programmieren kann.

Mir ging es in Erster Linie darum, ob beim automatischen Zuweisen der „hörenden“ Adressen alles so übernommen wurde wie ich es mir vorgestellt habe. Sonst bin ich bei Dir, das eine Auflistung der Gruppenadressen zu den instanzen im allgemeinen für mich auch keinen wirklichen Sinn macht… Denn wenn ich eine Fehlfunktin habe, schaue ich ja gezielt nach der Instanz.

Wir sind hier aber nicht in der #funktionswuensche Kategorie :wink:
Michael

1 „Gefällt mir“

Tut mir leid, dass ich mich der Frage von Händler xinix angeschlossen hatte. Ich hatte vergessen, dass IPS bereits perfekt ist und Anwenderkommentare unerwünscht sind.

Buchtipp des Tages: " Das Einzige, was stört, ist der Kunde"

Da hast Du Recht.

Dazu hat @Nall-chan bereits alles gesagt.

Das verstehst Du falsch. Es gibt in IP-Symcon meist mehrere Wege, das Ziel zu erreichen. Es gibt die einfachen, leichten Wege und es gibt die komplizierteren Wege. Als Neueinsteiger, Laie oder Gelegenheitsuser weiß man dies möglicherweise nicht und denkt, der eigene Weg ist der Beste oder sogar der Einzige. Ich nutze IP-Symcon seit 2009 und, wie Du schreibt, verbringe ständig meine Zeit damit. Ich maße mir an zu sagen, dass ich mich relativ gut mit IP-Symcon auskenne. Ich bin kein Programmier-Profi, kenne die Software dafür trotzdem ganz gut. Hier in diesem Fall ist der Wunsch aufgekommen, eine Übersicht für genutzte Gruppenadressen zu schaffen. Falls sich das Symcon-Team dazu entscheiden sollte, irgend etwas in diese Richtung umzusetzen, so wird dies vermutlich nicht in den nächsten 1-2 Tagen geschehen, was ja auch keiner erwartet. Der Threadersteller hat das Problem aber JETZT. Daher versuchte ich, durch Hinweise auf mögliche Vorgehensweisen mit gleichzeitigem Hinweis auf die Dokumentation, dazu anzuregen, selbst etwas zu bauen. Gleichzeitig brachte ich meine Verwunderung über diese Anforderung zum Ausdruck, da mir aus den letzten 13 Jahren IP-Symcon keinerlei Situation bekannt ist, wo eine solche Funktion Vorteile oder einen Nutzen gebracht hätte. Daher fragte ich freundlich, ob man mir helfen könne, die Anforderung besser zu verstehen, da es ja immer gut ist, seinen eigenen Horizont zu erweitern. Nicht mehr und nicht weniger.

Wie gesagt, selbst wenn das IP-Symcon Team dieses Anforderung umsetzen sollte, so ist @xinix damit jetzt nicht geholfen. Wenn er eine schnelle Lösung braucht, geht es mit einem Skript.

Das siehst Du im KNX Konfigurator.

Danke.

Hmm, bisher konnte man mit Dir immer ganz gut sehr sachlich diskutieren. Scheint ab 19:30 Uhr irgendwie nicht mehr möglich :slight_smile:

Schade das du die Ironie meiner Antwort wohl nicht verstanden hast, sonst kann ich mir so eine Überreaktion nicht erklären.
Gut das ich weder Integrator noch Symcon Mitarbeiter bin. Somit brauche ich auf weitere Äußerungen auch nicht reagieren.
Michael

2 „Gefällt mir“

Schlimmer: Du gehörst zum Inventar :slight_smile:

1 „Gefällt mir“

Hi Christoph,

hast du mal einen Hinweis oder Codeschnipsel wie man an die hörenden Adressen der Instanzen kommt? Den Code zum Auslesen den primären GA habe ich lauffähig (Properties GroupAddress1/2/3 bzw. Address1/2/3), aber wie kommt man an die weiteren hörenden Adressen? In der Doku habe ich nix gefunden.

Viele Grüße
Volker

Moin Volker,

mit

kannst Du die Konfiguration der Instanz auslesen. Damit siehst Du die komplette Konfiguration der Instanz mit allen Parametern. Einzelne Parameter kannst Du gezielt mit

auslesen. Die hörenden Adressen sind im Property „Mapping“ enthalten.

1 „Gefällt mir“

Ihr habt Glück, dass wir genau soetwas für ein anderes Projekt gebraucht haben:

<?php

echo "ID,Name,Location,GA,MoreGA" . PHP_EOL;

$gatewayIDs = IPS_GetInstanceListByModuleID("{1C902193-B044-43B8-9433-419F09C641B8}");
$instanceIDs = IPS_GetInstanceList();
foreach($gatewayIDs as $gatewayID) {
    foreach($instanceIDs as $instanceID) {
        $i = IPS_GetInstance($instanceID);
        if($i['ConnectionID'] == $gatewayID) {
            switch($i['ModuleInfo']['ModuleID']) {
                case "{24A9D68D-7B98-4D74-9BAE-3645D435A9EF}": //Shutter
                    printGA($instanceID, "GroupMove");
                    if (IPS_GetProperty($instanceID, "EnableStep")) {
                        printGA($instanceID, "GroupStep");
                    }
                    printGA($instanceID, "GroupStop");
                    if (IPS_GetProperty($instanceID, "EnablePosition")) {
                        printGA($instanceID, "GroupPosition");
                    }
                    if (IPS_GetProperty($instanceID, "EnableBladePosition")) {
                        printGA($instanceID, "GroupBladePosition");
                    }
                    break;
                case "81F54858-72B1-4C2C-8CE3-7E00A3168378":   //RGB (Legacy until IP-Symcon 5.0)
                case "{81F54858-72B1-4C2C-8CE3-7E00A3168378}": //RGB (IP-Symcon 5.1+)
                case "4D7F7548-0979-4ABD-9BB3-81F9477C0903":   //RGBW (Legacy until IP-Symcon 5.0)
                case "{4D7F7548-0979-4ABD-9BB3-81F9477C0903}": //RGBW (IP-Symcon 5.1+)
                case "{D62B95D3-0C5E-406E-B1D9-8D102E50F64B}": //Group
                    printGA($instanceID, "Group");
                    break;
                default:
                    //DPTs
                    if(strpos($i['ModuleInfo']['ModuleName'], "DPT") !== false) {
                        printGA($instanceID, "");
                    }
                    break;
            }
        }
    }
}

function printGA($id, $prefix) {
    $c = json_decode(IPS_GetConfiguration($id), true);
    echo sprintf("%d,%s,%s,", $id, IPS_GetName($id), IPS_GetLocation($id));
    echo sprintf("%d/%d/%d", $c[$prefix . "Address1"], $c[$prefix . "Address2"], $c[$prefix . "Address3"]);
    foreach (json_decode($c[$prefix . "Mapping"], true) as $a) {
        echo "," . sprintf("%d/%d/%d", $a[$prefix . "Address1"], $a[$prefix . "Address2"], $a[$prefix . "Address3"]);
    }
    echo PHP_EOL;
}

paresy

1 „Gefällt mir“

Vielen Dank euch beiden!

Vielen Dank Michael, das Script funktioniert in weiten Teilen wie gewünscht.

Falls es für euer anderes Projekt relevant ist: Ein kleiner Fehler ist mir aufgefallen, der bei meinen Shutter-Instanzen auftritt. Schritt/Lamelle ist dort abgeschaltet und darüber stolpert dein Script.

Die hörenden Adressen dieser Instanz (0/0/80 für Fahren und 3/2/24 für absolute Position) werden offenbar auch nicht ausgegeben.

16740,Küchentür,KNX\Jalousie\Küchentür,3/2/21
Notice: Undefined index: GroupMoveAddress1 in C:\ProgramData\Symcon\scripts\12070.ips.php on line 48

Notice: Undefined index: GroupMoveAddress2 in C:\ProgramData\Symcon\scripts\12070.ips.php on line 48

Notice: Undefined index: GroupMoveAddress3 in C:\ProgramData\Symcon\scripts\12070.ips.php on line 48
,0/0/0
16740,Küchentür,KNX\Jalousie\Küchentür,3/2/22
16740,Küchentür,KNX\Jalousie\Küchentür,3/2/25
Notice: Undefined index: GroupPositionAddress1 in C:\ProgramData\Symcon\scripts\12070.ips.php on line 48

Notice: Undefined index: GroupPositionAddress2 in C:\ProgramData\Symcon\scripts\12070.ips.php on line 48

Notice: Undefined index: GroupPositionAddress3 in C:\ProgramData\Symcon\scripts\12070.ips.php on line 48
,0/0/0

Korrektur: mit Lamelle/Schritt hat es nix zu tun, der Fehler in deinem Code liegt woanders. Beim Shutter wo der Fehler auftritt ist prefix=„GroupMove“ etc, der Code sucht beim Mapping für die hörenden GA also nach „GroupMoveAddress1“ und scheitert.

======== NACHTRAG ========

Auf der Basis des Codes von paresy, Slummy und anderen Forumskollegen habe ich nun eine Lösung für mich gebaut, vielleicht nutzt der Code auch sonst jemandem.

Einschränkungen: Implementiert sind Instanzen vom alten Typ KNX EIS, von neuen Typ KNX DPT sowie KNX Shutter mit den Funktionen Move, Stop und Position. Einige andere KNX-Instanztypen habe ich weggelassen da ich sie nicht verwende, die sind aber relativ leicht zu ergänzen.

Auch wenn der Nutzen von anderen Forumsfreunden bezweifelt wurde, mir gefällt es dass man nun seht einfach schauen kann wo welche GA eingetragen ist. Hier als Beispiel meine GA 0/0/80 = Rolladen zentral in der gefilterten Ansicht, sowie ein Beispiel wie der ungefilterte Baum mit GA in der Beschreibung aussieht.

Der Code ist angehängt:


// walk through all device instances and determine their module names
foreach (IPS_GetInstanceListByModuleType(3) as $instanceID) {
    $moduleName = IPS_GetInstance($instanceID)['ModuleInfo']['ModuleName'];

    if ((strpos($moduleName, 'KNX EIS') !== false) || (strpos($moduleName, 'DPT') !== false)) {
        $InstanceName = IPS_GetName($instanceID);
        $RM_text = "";

        // "KNX EIS" (old type)
        if (strpos($moduleName, 'KNX EIS') !== false)  {
            $Instance_Type = "EIS";
            $GA_text = get_primary_GA ($instanceID, "GroupAddress"); 
            $RM_text = get_additional_GA($instanceID,"GroupMapping");
        }

        // "DPT" (new type)
        if (strpos($moduleName, 'DPT') !== false)  {
            $Instance_Type = "DPT";
            $GA_text = get_primary_GA ($instanceID, "Address"); 
            $RM_text = get_additional_GA($instanceID,"Mapping");
        }
       
        echo $instanceID, "  ", $Instance_Type, "  ", $GA_text, " ", $RM_text, "\t",   $InstanceName, "\n";

        // set group address in info field
        IPS_SetInfo($instanceID,  $GA_text . " " . $RM_text);
    }

    
    if (strpos($moduleName, 'KNX Shutter') !== false) {
        $InstanceName = IPS_GetName($instanceID);    
        $Instance_Type = "JAL";

        $GA_MOVE_text = get_primary_GA ($instanceID, "GroupMoveAddress"); 
        $RM_MOVE_text = get_additional_GA($instanceID,"GroupMoveMapping");

        $GA_STOP_text = get_primary_GA ($instanceID, "GroupStopAddress"); 
        $RM_STOP_text = get_additional_GA($instanceID,"GroupStopMapping");

        $combined_text = sprintf("%s %s, % s %s", $GA_MOVE_text, $RM_MOVE_text, $GA_STOP_text, $RM_STOP_text);

        if (IPS_GetProperty($instanceID, "EnablePosition")) {
            $GA_POS_text = get_primary_GA ($instanceID, "GroupPositionAddress"); 
            $RM_POS_text = get_additional_GA($instanceID,"GroupPositionMapping");

            $combined_text = $combined_text .  sprintf(", %s %s", $GA_POS_text, $RM_POS_text);
        }  

        echo $instanceID, "  ", $Instance_Type, "  ", $combined_text, "\t",   $InstanceName, "\n";

        // set group address in info field
        IPS_SetInfo($instanceID, $combined_text);

    }    
}


function get_primary_GA ($id, $Keyword) {
    $c = json_decode(IPS_GetConfiguration($id), true);
    $GA = sprintf("%d/%d/%d",  $c[$Keyword . "1"], $c[$Keyword . "2"], $c[$Keyword . "3"]);
    return $GA;
}


function get_additional_GA ($id, $Keyword) {
    $isDPT = ($Keyword=="Mapping");
    if ($isDPT) $MappingKey="Address"; else $MappingKey="GroupAddress";
    $RM_GA = "";

    $c = json_decode(IPS_GetConfiguration($id), true);
    foreach (json_decode($c[$Keyword], true) as $a) {
        $RM_GA = $RM_GA . sprintf("(%d/%d/%d)",  $a[$MappingKey . "1"], $a[$MappingKey . "2"], $a[$MappingKey . "3"]);
    }
    return $RM_GA;
}
5 „Gefällt mir“