Abweichender Name für Instanzvariablen von EIB-Instanzen (Wert statt Value)

Hallo,

ich habe gestern versucht, einen Teil meiner KNX-Objekte auf die Raspberry zu verlagern Dabei musste ich feststellen, dass in der neuen IPS-Version der Name der Status-Variablen „Wert“ heisst. Der Identname ist weiterhin „Value“.
Das Gleiche passiert, wenn ich eine Instanz über den KNX-Import aus dem Konfigurator anlege.
Das ist insofern ärgerlich, da ich in meinen zentralen Klassen sehr häufig mit dem Befehl „IPS_GetObjectIDByName()“ arbeite. Eine Umstellung auf „IPS_GetObjectIDByIdent()“ ist auch nicht ohne Probleme möglich, da nicht alle Objekte standardmäßig einen gefüllten Ident haben. Ich habe auch noch keine Stelle in der Konsole gefunden, an der der Ident sichtbar ist.
In der Doku und im Forum habe ich bisher auch noch keine Hinweis auf diese Änderung gefunden, oder hatte ich da ein Brett vorm Kopf. Wenn dem nicht so ist, kann das doch wohl nur ein Fehler sein, oder wollt Ihr Euren Kunden wegen dieser Änderung solch unsinnige Umstellungsprojekte zumuten?
Ich wäre ja schon froh, wenn es eine Möglichkeit gäbe, die Namen von Instanzvariablen an zentraler Stelle vorzugeben.

Bin verärgert :mad:
BONOX

Hallo.

Ich habe den zweiten Post mal gelöscht da beide bis auf die Überschrift identisch waren.

Der Ident ist dafür da, dass er sich nicht ändert. Der Name ist nur schall und rauch und kann sich jederzeit ändern. (Sogar du kannst ihn versehentlich ändern)

Erklär uns vielleicht was dein Skript macht… ich glaube du kannst dein Skript ganz sicher auf Idents umstellen. Ich schiebe das Thema somit auch in die Skripte Ecke… Hat ja wenig mit der Beta an sich zu tun.

paresy

Hallo Parey,
da der Name nach Deiner Aussage Schall und Rauch ist, kann ich nicht nachvollziehenn, warum Ihr ihn dann bei den EIB-Instanz-Variablen ändern musstet. Natürlich weiss ich, dass der schwer zu ändernde Ident besser geeignet ist. Aber meine Klassen sind historisch gewachsen und ich habe kein Interesse, neben der Portierung noch weiter Neben-Kriegsschauplätze aufzumachen. Außerdem wird der Ident nirgendwo angezeigt und ich möchte nicht für jede Variable, wenn ich sie ansprechen will, den Ident per IPS_getObjekt ermitteln. Zu Deiner Script-Frage:

  1. Es gibt bei mir eine zentrale Home-Klasse, die Superclass für alle anderen Klassen ist. Dort sind alle Funktionen eingebettet, die allgemeingültig und auch plattformunabhängig sind (sein sollen).
  2. Ich habe eine Funktion, mit der ich ganze Objektstrukturen kopieren und zusammenmischen kann und zwar per RPC über die Systemgrenzen hinweg (z.B. von Windows auf Raspberry). Wenn Interesse besteht, kann ich das Script gern veröffentlichen, müsste es dann jedoch noch mehr „profesionellisieren“.

Lege ich nun eine EIB-Instanz an, so wird die Instanzvariable mit dem Namen „Wert“ automatisch angelegt. Damit stellt die Funktion fest, dass die Quellvariable „Value“ noch nicht unter der Instanz existiert und legt sie zusätzlich an.

Natürlich kann man das alles programmtechnisch abfangen, aber, um mich zu wiederholen: Muss dieser zusätzliche Aufwand tatsächlich sein, nur weil sich ein Entwickler ind den Kopf gesetzt hat, den Namen einer Instanzvariable im neuen Release zu ändern. Andere wichtigere „Eindeutschungen“ sollten da doch Priorität haben.

Bei der Gelegenheit noch ein Wunsch zu der sehr guten Duplizierfunktion in der Konsole. Wenn mann mehrer Objekte auf einen Schlag dupliziert, geht die Baumstruktur verloren, Man muss dann immer nachbessern.

Wenn Du noch eine bessere Begründung für die Namensänderung hast, her damit, vielleich sehe ich es dann ja ein.

BONOX

Alle Namen können und sollen übersetzt werden. In der guten Version 3.4 haben wir diese anscheinend bei der EIB Instanz übersehen. Da ich mir jetzt aber die Mühe gemacht habe nachzusehen, habe ich den Fehler zum nächsten Update korrigiert und alles wird korrekt mit „Wert“ als Namen erstellt werden :slight_smile:

Somit möchte ich dir noch einmal dringend empfehlen auf die Idents zurückzugreifen. Dafür sind die gemacht. Wenn es Idents gibt, zeigt die Konsole sie dir übrigen im „Objekt editieren“ Dialog an. Und jede Statusvariable hat per Definition einen Ident.

paresy

Hallo Paresy,

zunächst einmal Danke für den Hinweis bzgl. der Anzeige des Ident. Da ich bisher damit noch nicht viel gearbeitet habe, war mir das noch nicht aufgefallen.

Sorry, wenn ich weiterhin nerve.

Ich hatte mittlefristig ohnehin eine Umstellung auf Ident geplant, aber bei einer Installtion von 2000 Variablen und 800 Scrips ist das mit Sicherheit ohne genaue konzeptionelle Planung nicht mal eben durchzuführen und Fehler und negative Seitenefekte sind zu erwarten. Daher werde ich zunächst per Script die alten Namen wieder herstellen.
Das Risiko einer Umstellung „in the Flight“ ist mir zu groß.

Daher bin ich nach wie vor mit Eurer Vorgehensweise nicht einverstanden. Die Umstellung im laufenden Relase 3.4 führt ja noch zu weiteren Verwirrungen, denn dann gibt es ja wohl beide Zusände gemischt, alte Instanzen haben die Instanzvariablen mit dem Namen Value, neu angelegte heissen dann Wert.

Aber ich weiss, der Kunde hat schuld, wenn er ein sicherlich sinnvolles Feature nicht nutzt, welches es um Zeitpunk des Startes seines Projektes noch gar nicht gab. :confused:

Von meinen bisherigen 5 Sternen für IPS muss ich nun leider einen abziehen. Schade.

Damit ist dieser Disput für mich beendet.
BONOX

Hallo Bonox,

ich bin leider mit deiner Vorgehensweise auch nicht einverstanden. Besonders nicht mit der Kritik an uns, wenn wir in neuen Versionen Fehler korrigieren und auf Konsistenz bei der Software achten. Ich verstehe dich, und verstehe dass es für dich Aufwand ist. Aber es ist ein Aufwand, weil du konzeptionell deine Skript nicht optimal entworfen hast. Es wäre nett, wenn du für diese Tatsache nicht uns als schuldigen siehst. Hier noch die Doku zum Befehl IPS_SetIdent. Oben rechts steht, dass es die Funktion übrigens seit dem 2.5er Release gibt, welches Dezember 2011 kam. Du bist laut Forum seit Apr. 2012 dabei. Somit gab es dem Befehl bereits, als du mit der Software angefangen hast. Damit ist das Thema auf für mich erledigt :loveips:

Nun zum Konstruktiven: Ich weiß um den Aufwand, wenn man viele Skripte anfassen und ändern müsste, aber in diesem Fall ist es meiner Meinung der richtige Schritt. Wir versuchen hier im Forum bestmöglichen Support für die Softwarearchitektur zu geben und möchten dir in keinem Fall Aufwand machen, wenn er auf langfristige Sicht nicht lohnenswert wäre. Da du in deiner Installation ja bereits einiges an Instanzen konfiguriert hast, kannst du aber ein Skript schreiben, welches dir die Namen und Idents vergleicht. Dadurch solltest du recht schnell feststellen können, ob eine Änderung auf den Ident Probleme macht. Und wenn ja, bei welchen Instanzen du damit rechnen musst. Damit solltest du in der Lage sein den Umbau sehr geplant und getestet umsetzen zu können.

paresy

Dann ist jetzt die beste Möglichkeit dazu, auch wenn…

…bei einer Installtion von 2000 Variablen und 800 Scrips ist das mit Sicherheit ohne genaue konzeptionelle Planung nicht mal eben durchzuführen und Fehler und negative Seitenefekte sind zu erwarten.

… freu dich, dass das Projekt nicht von damals IPS-V1 auf V2 hättest umstellen müssen (Einführung für eindeutige Idents), denn jetzt hast du ganz andere Möglichkeiten, als…

Daher werde ich zunächst per Script die alten Namen wieder herstellen.

z.B. Suchen und Ersetzen in (allen) Scripten

Es gab „anno dazumal“ nichts Besseres als auf eindeutige Idents zu setzen, als mit Namen weiter zu arbeiten.
Das hat sich da bewährt und in Zukunft!

P.S. Namen sind wie erwähnt, „Schall und Rauch“, oder einfach gesagt… Wieviele „Hans Müller“ gibt es und wie eindeutig dazu ist die Identifikationsnummer im PA?