Auslesen von IDs anhand des Namens

Hi,
ich baue mal wieder ein Modul und habe folgende Herausforderung: Ich lege mehre IDs durch Abfrage eines Webservice ab und lege die in Variablen: Also habe ich in meinem Objektbauen 1ID = 123, 2ID =456, 3ID = 789 als Namen.

Jetzt muss ich für eine 2. Funktion an den Inhalt dieser ID Variablen. Wie ich eine Variable anspreche ist mir soweit klar - jetzt dachte ich, ich könnte mit foreach durch alle Namen durch itterieren:


$i = 1; 
foreach ($this->GetIDForIdent($i.'Pet_ID') = $pet) {
			
       $PET_ID = GetValue($this->GetIDForIdent($i.'Pet_ID'));
       var_dump ($PET_ID);
	$i++;
}

Leider geht das so nicht … GetVariableList scheint ja alle IDs abzufragen? Wie mache ich das am elegantesten?

Alle Variablen unterhalb deines Moduls sind dir doch sowieso bekannt. Oder was hast du mit den „fremden“ Variablen vor?

Die Variablen sind bekannt, aber mit ist nicht bekannt wie viele es sind. Also Pet 1 bis Pet N …n deswegen wollte ich ja dynamisch auf die Variablen zugreifen

Alle Variablen unterhalb der Instanz erhälst du über die mir gerade nicht auswendig bekannte interne Funktion des Moduls, oder über Sinngemäß „GetVariableMitParentInstanz($Instanz)“. Allerdings brauchst du innerhalb deines Moduls die VariablenID nicht wissen, denn du kannst sie über den Ident aufrufen.

Danke Tobias … Deine Denkanstöße gaben nochmal den Push in die richtige Richtung. Ich muss nur wissen wieviel Variablen es gibt.

$var = 3;
$i=1;
while ($i < $var) {
    $VarID = @IPS_GetVariableIDByName('Pet '.$i.' ID', $this->InstanceID);
    echo $VarID;
$i++;
}

Morgen mache ich weiter :slight_smile: … damit sollte es aber gehen.

IPS_GetVariableIDByName
Ist nicht dein Ernst für ein Modul?
Davon abgesehen das deine Frage im falschen Bereich ist.
Wenn du irgendwo die Variablen anlegst und es nur um eine maximale Anzahl von 1 bis n geht, warum n nicht als Zahl in einem Attribut schreiben?
Michael

Es schon eine Spur komplizierter - aber inzwischen habe ich es. Das getvariablebyname macht in diesem Fall schon Sinn, da es mehrere Vairablen pro Haustier sind und die Abfragen in mehreren Funktionen laufen.

Das macht null Sinn. Da der Name vom User geändert werden kann. Und dann läuft im Modul etwas falsch / ist kaputt / wirft Fehler.
Vielleicht solltest du überlegen einen IO und pro Haustier eine Device Instanz zu benutzen.
Da auch sortieren und Sichtbarkeit des User Hoheit sind.
Michael

Das mit dem Namen ist natürlich leider richtig … hmmm. Ich könnte die benötigen config Variablen aber auch in einen Array packen. So lange dieses Feld nicht geändert würde, würde es gehen - oder die eigenen Konfiguratoren - vor denen Drücke ich mich noch.

Gesendet von iPhone mit Tapatalk

Du kannst das Array serialisiert in eine String-Attribute schreiben.
Und ja, ein Konfigurator wäre eventuell praktisch. Zumal, wenn du pro Tier eine Instanz benutzt, du dann nicht alle Variablen in einer langen Liste unterhalb einer Instanz hast, sondern ‚identisch‘ Variablen unterhalb einzelner Instanzen.
Michael

Aktuell gehe ich ja gegen den Namen, also den im Objektbaum. Im Ursprung wollte ich gegen den internen Namen gehen - den man ja nicht ändern kann. Kann man diesen Namen auch ansprechen? Das wäre dann sicherer als der sichtbare Name.

Gesendet von iPhone mit Tapatalk

Es gibt nur den Objektnamen und den ObjektIdent.
Und mit GetIDForIdent bekommst du die eine ID von diesem Objekt unterhalb deiner Instanz.
Aber wenn du nur den Wert der Variable setzen willst, brauchst du die ID gar nicht.
SetValue aus dem SDK benutzt auch den Ident.
Michael