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:
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?
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.
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
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
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.
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.
Themen sind aber schon alle durchdiskutiert und so hat sich jeder seine eigene Systematik erarbeitet.
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.
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.
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
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.
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?