IPS_GetStatusVariableIDs (MIT s)

Es wird immer gepredigt, dass man mit ID’s statt Namen arbeiten soll. IPS hält sich da aber auch nicht strikt dran - oder habe ich mal wieder eine undocumented function übersehen?

Wenn man die (systemspezifischen, NICHT User-definierten) Variablen einer Instanz (z.B. einem FS20 Aktor) bekommen will, muss man im Moment über die StatusVariablenIdents gehen um dann erst im nächsten Schritt die ID’s der Statusvariablen auszulesen:

ChildrenIDs des Objekts ist keine gute Idee, weil es sich dabei nicht zwingend nur um systemspezifische Variablen handeln muss.

Es wäre daher nur konsequent, wenn man die StatusVariablenIDs auch direkt abrufen kann. Entweder also als Arrayelemente des Objekts „Instance“ oder aber als Funktion.

Im Moment mache ich das mit


function IPS_GetStatusVariableIDs( &$d, $id )
{
  $d['i']['id'] = $id; // INSTANCE-ID
  $d['i']['idents'] = IPS_GetStatusVariableIdents( $d['i']['id'] );
  foreach($d['i']['idents'] as $d['i']['ident'])
  {
     $d['i']['ids'][] = IPS_GetStatusVariableID ( $d['i']['id'], $d['i']['ident'] );
  };
  return( $d['i']['ids'] );
};

P.S.: Die Doku ist hier auch falsch für IPS_GetStatusVariableID:
http://www.ip-symcon.de/service/dokumentation/befehlsreferenz/instanzenverwaltung/statusvariablen/

Dort steht:
„liefert alle Status Variablen zu einer bestimmten Instanz“ richtig wäre: „Liefert die ObjektID einer Statusvariablen“

jwka

Das ist ein Designfehler, der mich ständig nervt. Kann ich aber ohne größere Veränderungen an der „API“ nicht ändern…

paresy

wäre denn nicht wenigstens die Implementierung der von mir als PHP Code bereits vorliegenden Funktion nicht eine Option?

jwka

Jein. Wir haben solch eine Funktion auch in PHP in Benutzung, aber da ich langfristig das ganze Konzept dahinter umbauen will, damit es ordentlich ist (unter anderem kombiniert mit deinem Identifier Konzept) würde diese Funktion dann wegfallen. Und mir gefällt es nicht so sehr, da die Komplexizität der Funktion dann verdeckt wäre. Die meisten Funktionen in IP-Symcon sind O(1) oder O(n).

paresy

Ich sehe gerade das deine Funktion ja nur eine Auflistung der IDs macht. Das werde ich nicht einbauen. (Grund wie gesagt… fällt langfristig eh weg)

Übrigens: Viel interessanter ist es, herauszufinden, zu welcher Instanz eine bestimmte Variable gehört und welchen StatusVariableIdent sie dann hat.