Ist die Nutzung des 'Ident' obsolet oder durch den normalen Script User unerwünscht?

Hallo Zusammen,

mir käme die Verwendung des ‚Ident‘ sehr gelegen, da ich dann den ‚Namen‘ ausschließlich für die Visualisierung im Webfront nutzen könnte. In der Online Doku habe ich dazu folgende Darstellung gefunden:

Aktuell in meiner Console sieht es aber so aus:

IP-Symcon-aktuelle-Console.PNG

Die ‚Ident‘ Ausgabe fehlt. Muss ich nun daraus folgern, dass die Verwendung des ‚Ident‘ nicht mehr gewünscht ist? Oder eine Regression melden? Oder ist der ‚Ident‘ schlicht auf bestimmte Objekte begrenzt?

Wenn es ein Fehler wäre, dann würde ich mir gerne, als zusätzlichen Feature Request, noch die freie Bearbeitung des ‚Ident‘ unter Objekt bearbeiten wünschen… Denn was würde schon dagegen sprechen, wenn diese Funktion aus Scripten (IPS_SetIdent) heraus doch möglich ist?

Grüße…

Gollum

Die Ident muss schon gesetzt werden und ist nicht obsolet sondern für Instanz und PHP Module notwendig. Wenn Du selber irgend was erstellst musst Du die Ident dann schon selber mit IPS_SetIdent setzten dann wird das auch angezeigt. Wenn Du einfach so eine Variable oder Dummy Instanz erstellst wird dieser nicht automatisch eine Ident zugewiesen das muss man per Befehl machen.

Es macht kein Sinn das die Ident einfach zu ändern ist, deshalb ist die auch nicht editierbar. Diese ist pro Instanz bzw. Variable, Objekt festgelegt um eine eindeutige Identifikation zu ermöglichen. Wenn ein Benutzter einfach mal so in einem Formular die Ident ändern kann würde dies nur dazu führen das z.B. PHP Module oder auch IPS Instanzen z.B. nicht mehr funktionieren. Dazu ist der Name da, der kann vom Benutzer individuell vergeben werden, die Ident ist aber stets gleich.
Wenn man also selber ein PHP Modul erstellt wird eine Ident gesetzt bzw. wenn man etwas per Hand anlegt wie eine Variable im Objektbaum kann mit einem Skript dann eine Ident über IPS_SetIdent zugewiesen werden.

Hallo Fonzo,

danke für deine Antwort, genau das folgende möchte ich ja tun… nur halt in der Konsole.

Wenn Du einfach so eine Variable oder Dummy Instanz erstellst wird dieser nicht automatisch eine Ident zugewiesen das muss man per Befehl machen.

Beispiel:
Ich habe ein Script mit dem Namen ‚Rolladen herunterfahren‘ in der Konsole angelegt. Dieses Script mit interner unterschiedlicher Hardwarezuordnung, aber gleichem Namen benötige ich häufiger, für jeden Rolladen halt einmal. Nun wäre es schön, wenn ich in der Konsole gleich auch einen unterschiedlichen ‚Ident‘ setzen könnte um die Scripte auch per Script und ‚Ident‘ nutzen zu können.

Ich verstehe natürlich, dass in Modulen gesetzte Idents tabu sind. Die können auch meinetwegen in der Konsole besonders geschützt werden, aber für meine eigenen, in der Konsole angelegten Scripte wäre es sehr, sehr nützlich…
So muss ich mir ein Script schreiben um meine eigenen Scripte mit einem Ident zu versehen… !? Das ist es was ich nicht verstehe…

Ja musst du.
Da Ident dürfen nicht direkt in der Konsole verändert werden.
Dein Beispiel ist außerdem nicht verständlich, dafür hat jedes Objekt und auch Script seine ObjektID.
Idents sind zum suchen von Objekten auf gleicher Ebene.
Michael

Ein Objekt + Ident den du per Konsole setzt ist nicht portierbar und wiederverwendbar. Das ist etwas, dass wir vermeiden wollen. Wenn du schon richtig den Ident nutzen willst, dann bitte auch konzeptionell vollständig, so dass das Objekt direkt vom Skript erstellen und verwaltet wird - inklusive IPS_SetIdent. Wenn du das beherzigst, dann wirst du merken, dass man den Ident eben genau nicht über die Konsole setzen/ändern soll, das das Skript es viel besser kann :slight_smile:

paresy

Vielleicht verstehe ich die IPS-Konzepte noch nicht, aber die Nutzung des [u]Ident /u in Scripts fände ich auch deutlich lesbarer als irgendwelche IDs (Zahlen).

Den Namen zu nutzen erscheint mir keine gute Alternative, solange der gleichzeitig die Darstellung im User Interface bestimmt und deshalb gerne mal geändert wird.

Gerade für den Einstieg, wo man noch nicht gleich Module baut sondern mit kleinen Scripten beginnt, wirkt das alles etwas unglücklich und umständlich.

Die Funktionen um Objekte mit Namen oder Ident zu ermitteln sind aber an einen Parent gebunden.
Somit ist keine Eindeutige Identifizieren möglich, da identische Namen oder Idents in verschiedenen Ebenen vorkommen.
Dies ermöglicht ausschließlich die ObjektID.
Michael

Michael, danke für die Erklärung.

Trotzdem sollte es eine Möglichkeit geben, Objekte mit einem eindeutigen Namen zu identifizieren anstatt einer für Menschen schwer lesbaren numerischen ID. Das schafft jede simple Programmiersprache, warum nicht auch IPS?

Ratlose Grüße,
Volker

(der sich gerade fragt, wie der Code von IPS aussähe, wenn in Delphi die Variablen auch nur mit laufender Nummer bezeichnet werden könnten anstatt mit Namen)

Ein ObjektID ist eineindeutig und gibt es in IP-Symcon nur einmal, damit lässt sich ein Objekt eindeutig im ganzen Objektbaum identifizieren. Eine Ident dient nur zum Auffinden eines Objekts innerhalb einer Ebene. Innerhalb der Ebene (Kategorie, Instanz) muss die Ident eindeutig sein und darf nicht doppelt vorkommen. Es ist damit aber lediglich möglich z.B. eine bestimmte Variable zu suchen die angesprochen werden soll. Die Ident ist ja identisch bei gleichen Instanztypen damit ist es also nicht möglich ein Objekt im gesamten Objektbaum eindeutig anzusprechen da diese Ident ja mehrmals vorkommt. Über die Ident kann man ja auch in Skripten arbeiten mit IPS_GetObjectIDByIdent, dazu muss aber bekannt sein in welcher übergeordneten Ebene (z.B. Instanz oder Kategorie) man nach dem Objekt suchen will und bekommt dann die eineindeutige ObjektID zurückgeliefert.

Namen dienen auch nicht der Identifikation eines Objekts, da diese ja beliebig angepasst werden können. Genau aus dem Grund sind diese ja beliebig anpassbar damit der Nutzer das angezeigt bekommt was er will.

Danke Fonzo, soweit verstanden und mit Blick auf die Module ist das nachvollziehbar,

aber

für meinen eigenen, handgeschrieben Code mit meinen diversen KNX-Datenpunkten könnte ich sehr wohl die Eindeutigkeit der Variablenbezeichner (Ident) sicherstellen. Nur lässt mich IPS leider keinen solchen „verständlichen“ Variablenbezeichner im GUI vergeben und ich muß mit numerischen ID arbeiten.

Das nervt schon sehr, denn der Code wird unübersichtlich und schwer wartbar. Ich schreibe viel Code für diverse Automatisierung. In IPS ist’s mir immer ein Graus, wenn ich ehrlich bin, und daran sind vor allem die blöden IDs schuld.

Grüße
Volker

Das IPS-Entwicklungsteam empfiehlt im Fall von Änderungswünschen stets ein eigenes „Workaround“; es gibt da einige Dinge, die historisch gewachsen sind und als alternativlos dargestellt werden.
Eines ist, dass die ID-Nummer eines Objektes per Zufallsgenerator zugewiesen wird und damit gleiche Routinen auf verschiedenen Systemen nicht einfach reproduzierbar sind. :banghead:

Themen sind aber schon alle durchdiskutiert und so hat sich jeder seine eigene Systematik erarbeitet.

Da war z.B. das Thema Zentrale Ablage der IDs, meine Lösung hatte ich mal hier beschrieben.

Methode ist problemlos, wenn man nur ein IPS-System laufen hat. Mit Einführung der Raspis, auf denen auch IPS läuft, wurde die Pflege dieses individuell angepaßten Skriptes „ObjIDsIPS.ind.inc.php“ schon aufwendiger.

Ich rufe deshalb Skripte und Variablen nur noch über einen Identpfad auf, Methode mal hier beschrieben.
Meine Routine „GetObjectIDByIdentPath“ hatte ich auch mal beschrieben.

Das ganze nur mal als Futter zum Nachlesen.

Viele Grüsse
Harald

Hi,

Ich programmiere zwar nicht sooo häufig aber wo ist das Problem das so zu lösen?

$Mein_variablen_namen = 12345 // irgendeine Variable ;

Danach nimmst du nur noch $Mein_variablen_namen und bist glücklich.

Wenn ich wiederholende Funktionen brauche, erstelle ich eine Kategorie und
Packe darin aliases der Variablen rein und mache eine foreach schleife auf die Kategorie… dann brauche ich weder objekt-id oder ident.

Viele Grüße

Gesendet von iPhone mit Tapatalk

Moin Volker,

so ganz kann ich dein Problem nicht nachvollziehen. Die Objekt ID wird im Script doch durch den Namen ersetzt, wenn du den entsprechenden Haken gesetzt hast.

Oder bezieht sich dein Wunsch darauf, während der Erfassung eines Scriptes bereits mit Bezeichnungen zu arbeiten?
Gruß
Hans

Hallo,

Danke für eure Antworten und Lösungsvorschläge!

Ja, genau das. Dann kann man den Code zügig runterschreiben, anstatt ständig nach irgendwelchen IDs suchen zu müssen.

Natürlich kann man sich vorher selbst Mappings anlegen, um die IDs auf eigene Variablen mit sinnvollen Namen zu mappen. Dazu muß man auch halt jede ID einzeln nachschauen. Es bleibt irgendwie eine Arbeitsbeschaffungsmaßnahme.

Viel einfacher und weniger fehlerträchtig wäre es, wenn man das direkt in der Instanz im User Interface zuweisen könnte. Der Ident wäre für mich dafür ideal, wenn es denn im GUI editierbar wäre. Daß das in anderem Zusammenhang nicht sinnvoll ist, habe ich verstanden, aber für meine Anwendung mit handgemachten Code wäre es hilfreich.

Und was spricht dagegen einfach STRG+O zu drücken wenn man Code schreibt? So langsam ist das ja auch nicht und das ist der ganz normale Weg ohne irgendwie Umwege bauen zu müssen.

Hallo Fonzo,

besten Dank, das Kürzel kannte ich nicht und damit wird es nun tatsächlich viel einfacher!

Bin ich der einzige, der dieses Tastenkürzel nicht kennt? Gibt’s dafür auch ein Icon im Editor und falls nein, sollte man das nicht hinzufügen?

Grüße
Volker

Es gibt das so einige Tastenkombinationen ;).

Dann markiere im Objektbaum Objekte (STRG für Mehrere geht auch).
Und dann Strg + C und im Editor dann Strg + V.
Ist noch einfacher.
Michael

Einige der Tastenkürzel gibt es im Kontextmenü :slight_smile:

paresy

Guten Abend,

der Nörgler nochmal:

So richtig konsequent wird das mit den Tastenkürzeln (hier Ctrl-O zur Objektauswahl) nicht unterstützt, kann das sein? Für meinen Code im Ereignis-Dialog scheint es nicht zu funkionieren. Bug oder Feature?

Viele Grüße
Volker