Variable automatisch umbenennen

Guten Tag zusammen,

Leider bin ich nicht ausreichend PHP fit um mir selbst zu helfen,
Ich habe einen großen Teil meines Systems aus KNX importiert. So das die Instanzen den ( die mich ) richtigen Namen haben die Variablen aber alle nur Wert heißen.
Zum Teil habe ich händisch angefangen die gleich zu benennen was aber bei über 1000 erzeugten Variablen viel Zeit raubt.
Ich meine mal gelesen zu haben das einige die Umbenennung per php gemacht haben, konnte aber leider nichts zum übernehmen finden.
Da ich mir nicht vorstellen kann dass ich ganz alleine mit dieser Anforderung bin hoffe ich hier Hilfe zu finden die vielleicht danach auch andere Anfäger Nuten können.
Noch mal konkret mein Wunsch
Einmal alle Variable die „Wert“ heißen gleich der Instanz zu benennen
Vielen Dank

Ich habe das zwar selbst noch nie gebraucht, aber ich habe mal schnell was zum Wachwerden geschrieben.

<?php

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

    // if the module name of the instance contains "KNX" or "DPT", give the first variable named "Wert" the name of its parent instance
    if (strpos($moduleName, 'KNX') !== false || strpos($moduleName, 'DPT') !== false) {
        $variableID = @IPS_GetVariableIDByName('Wert', $instanceID);

        if ($variableID !== false) {
            IPS_SetName($variableID, IPS_GetName($instanceID));
        }
    }
}

Damit wird bei allen KNX-Geräteinstanzen eine direkt untergeordnete Variable, mit dem Namen „Wert“ auf den Namen ihrer Eltern-Instanz gesetzt. Ich prüfe dabei nicht, ob es sich um eine Statusvariable handelt und falls mehrere Variablen mit dem Namen „Wert“ unterhalb der Instanz vorkommen sollten, wird nur die erst beste umbenannt. Hat eine Instanz (mehrere) Statusvariablen, die nicht „Wert“ heißen, passiert nichts.

Man kann da sicher noch einiges zusätzlich prüfen und absichern, aber für eine Gratis-Programmier-Dienstleistung am frühen morgen, sollte es ausreichen. :wink:

2 „Gefällt mir“

Ich würde mal die Sinnhaftigkeit in Frage stellen wollen. Warum stört der Name „Wert“? Die Instanzen haben die Namen der Gruppenadressen. Klar soweit. Die Variablen da drunter heißen alle „Wert“. Diese verlinkst Du ja dann im WebFront. An dieser Stelle bekommen sie einen „sprechenden“ Namen.

Vielen Dank für den „Frühsport“

Durch den Import habe ich kein KNX oder DP mehr im Namen, und ein paar habe ich ja auch schon manuell umgeschrieben.

Optimal wäre ein umgangssprachlicher
Wenn Variable Name <> Wert, passiert nix ( damit werden alle anderen überschrieben
Wenn Variable Name = Wert dann benne Variable gleich Instanz

Danke für alle die sich an einer Lösung beteiligen

Hallo
Mich stört der Wert wenn ich die Variablen in Grafen oder Bei Automationen einsetze dann ist meist nur der Variable Name sichtbar und wenn die aller wert halten ist es nicht mehr nachvollziehbar
Grüße

Das KNX/DPT hat nichts mit deinem Instanznamen zu tun. Es geht um den Modulnamen, den du nicht ändern kannst. Das Skript tut das, was du ursprünglich gewünscht hast.

Dann läuft da irgendwas falsch.

Hier ein Beispiel:


Die KNX Instanz heißt „W.Messwert Temperatur“. Die Variable mit dem Ident „Value“ heißt hier „Wert“. Diese wird verlinkt und dort kann ich sie nenne, wie ich möchte. Hier in diesem Beispiel „Temperatur“.

Im KNX-Zusammenhang ist das blöd wenn die GA bereits sinnvoll benannt war und diese Information für Verlinkungen auf den Wert verloren geht. „Wert“ ist halt sehr generisch und im Namen der KNX- Instanz wäre bereits eine Beschreibung codiert, was das für ein Wert ist. Das gezwungenermassen immer händisch neu zu benennen hatte mich auch sehr gestört. Um es mit badsmiley zu sagen: „IPS denkt nicht KNX“.

Du hattest mir mal ein Script zur Verfügung gestellt, was den Namen aus der Instanz auf den Wert überträgt, sofern noch der generische Name „Wert“ dort steht. Das könnte auch hier helfen, vielleicht magst du es teilen.

Viele Grüße
Volker

Genau das tut doch der Code, den ich oben gepostet habe…

3 „Gefällt mir“

Perfekt! Das hatte ich übersehen nachdem zuletzt die Sinnfrage gestellt wurde. Mein Fehler, sorry!

Bei der Verlinkung im WebFront muss der Name des Links sowieso angepasst werden. Namen der Gruppenadressen werden nie 1:1 übernommen, da sie meist Informationen enthalten, die in in der ETS benötige, in IP-Symcon jedoch nicht.

Beispiel von einem KNX Projekt, welches mir gestern geschickt wurde. Dort heißt eine Gruppenadresse:

Büro OG Steckdosen Schreibtisch schalten

Die Situationen, in welchen dieser Name der Gruppenadresse 1:1 in die Visu übernommen werden würde, sind sehr sehr selten. Hier wurde es vermutlich, je nach Struktur, genügen, den Link einfach nur „Schreibtisch“ zu nennen. Angenommen, wir haben eine Kategorie "OG, da drunter eine Kategorie "Büro ", da drunter einen Dummy „Steckdosen“. Damit wäre die einzig sinnvolle noch übrig bleibende Information im Namen der Gruppenadresse das Wort „Schreibtisch“. Selbst bei anderen Strukturen finde ich gerade keine Beispiele, in welchen der komplette Name der Gruppenadresse 1:1 übernommen werden würde. Daher muss ich den Namen des Links sowieso anpassen.

Aber, und das ist das gute an IP-Symcon: es darf jeder so machen wie er möchte und es gibt kein richtig oder falsch. Da ist IP-Symcon anderen Lösungen meilenweit voraus. Da stört es auch nicht, dass es - aus Sicht anderer - zu wenig KNX denkt, da man mit einem simplen Skript solche Dinge schnell aus der Welt schaffen kann.

Ich bin leider erst heute dazu gekommen es anzuwenden,
großes DANKE genau so wie ich es brauchte
Vielen dank das spart mir einige Tip arbeiten

@Slummi

Danke für deinen Schnippsel, ist sicherlich hilfreich.

Ich denke bei dem Thema such so wie gerdn, hab zwar kein KNX aber Wago Sps’n, hier ist es bei Modbus das gleiche.

Ich benenne meine Variablen unter den Instanzen auch immer gleich sprechend, dann habe ich den besseren Überblick im Objektbaum, ich würde da den Überblick verlieren wenn alles „Wert“ heisst.

Man müsste immer mit Referenzen suche arbeiten.

Gerne. Du musst den Code nur für andere Geräte modifizieren, da ich hier explizit auf KNX-Geräteinstanzen prüfe. Aber das Prinzip sollte denke ich klar sein.