Dynamisch Variable anlegen

Hallo,

hat da jemand für mich eine Idee wie ich dynamisch Variabel anlegen kann. Das heißt,
ich habe ein Script, das lege ich unterhalb von einem Objekt an, führe es aus, und in dem Script gebe ich die Namen der Variabel und die Parameter vor, wie die darunter liegenden Childs als Variabel deklariert sein sollen.

Gruß
MacToolz

So ?
Geklaut aus:
Shutter Control — IP-Symcon :: Automatisierungssoftware

function CreateVariableByName($id, $name, $type) {
    $vid = @IPS_GetVariableIDByName($name, $id);
    if($vid===false) {
        $vid = IPS_CreateVariable($type);
        IPS_SetParent($vid, $id);
        IPS_SetName($vid, $name);
        IPS_SetInfo($vid, "This Variable was created by Script");
    }
    return $vid;
}

Michael

Hi,

im ersten Ansatz richtig und das kenne ich schon, nur das wäre ja für eine Variabel.
Mir ist irgendwie der Umgang mit den Arrays in PHP nicht ganz klar. Ich glaube darauf läuft das hinaus.

Ich gebe eine Liste vor mit den Variabelnamen, dann konfiguriere ich die dazugehörigen Parameter
und dann würde ich ja die eigene Funktion aufrufen die dann die Variabel erstellt …

Gruß

Wenn Du einen Array mit den Infomationen hast dann nutzt Du eine
foreach Schleife
und rufst dann die Funktion in der Schleife auf. Ich würde wenn Du schon mit einem Array arbeitest aber die Variable nicht nach Name anlegen sondern nach Ident das stellt sicher das Du den Namen später noch umbenennen kannst und das Skript dann nicht erneut die Variable anlegt wenn es noch mal aufgerufen wird.


function CreateVariableByIdent($id, $ident, $name, $type, $profile = "")
		{
			 $vid = @IPS_GetObjectIDByIdent($ident, $id);
			 if($vid === false) {
				 $vid = IPS_CreateVariable($type);
				 IPS_SetParent($vid, $id);
				 IPS_SetName($vid, $name);
				 IPS_SetIdent($vid, $ident);
				 if($profile != "")
					IPS_SetVariableCustomProfile($vid, $profile);
			 }
			 return $vid;
		}

Hi,

ja jaaa … Schleife ist schon ein Begriff :slight_smile:

Nur ist bin zu dämlich die Array anzulegen … kann man nicht direkt


$VarObject = Array
(
„ParentID“,
„VarName“,
„VarType“,
„SetInfo“,
);

$arVarList = $VarObject(2);


oder wie auch immer … blick das nicht …

Gruß

Das zu erklären dauert länger.
Besser gleich die PHP Doku lesen wie man Array benutzt.
PHP: Arrays - Manual
Zumal mir der Weg sich sehr umständlich erscheint.
Parentid, Name und Typ sind in den Funktionen oben schon als Parameter vorhanden.
Kannst ja Info auch einfach als Parameter ergänzen.
Dann reicht es auch 10 Mal die Funktion mit den Parametern aufzurufen, anstatt jetzt ein mehrdimensionalen Array alle Werte zu geben.

Michael

Hi,

umständlich?

Mein Grundgedanke für mich wäre generell folgender. Ein Script hat eine bestimmte Aufgabe, zudem braucht es dann noch weitere Systemvariabel.
In diesem Script werden dann die Systemvariabel geprüft ob die vorhanden sind, wenn diese fehlen werden die automatisch angelegt.

Ich nenne mal dieses Script Bewegungsmelder. Ich stelle mir dann folgendes vor.
Mein Bewegungsmelder hat momentan folgende Systemvariabel

  • AnAbwahl (bezieht sich darauf das automatisch das Licht über den BWM ein.-Aus gesteuert wird)
  • Zeit als Variabel , mit der dann erst nach Ablauf geprüft wird ob alle Bewegungsmelder keine Bewegung mehr anzeigen
  • Helligkeit etc …

reicht ja erst mal.

Also wäre mein Weg das ich mir ein Array anlege, Namen mit weiteren Parameter vergebe und das wird dann alles abgearbeitet.

So und jetzt zu meinem Grundgedanke.
Bevor ich jetzt an mein Script alles möglich von Hand dran hänge und konfiguriere, starte ich mein Script.
das legt die Variabel an und dann läuft es.

Der eigentlich Bewegungsmelder bekommt dann das Ereignis was dann dieses Script aufruft und dann den EvenTimer startet etc … Und das Script welches diese Systemvariable hat läuft halt als Timer prüft die Bewegungsmelder und stoppt sich dann wenn es passt …

Der Rest macht dann der weitere eigentliche Teil vom Script …

Ich rede ja hier nicht nur von einem BWM etc … Ich rede hier von Massen etc …

Gruß
MacToolz

Hallo,

das sieht mir wie ein aufwendiger Top->Down-Entwurf aus. Mag funktionieren, wenn man sich (für hier) in PHP und IPS super auskennt.
Für mich als immer noch Lernender auf diesen Gebieten ist der Weg vom Kleinen zum Großen der leichtere: zuerst den einen Bewegungsmelder ins System bringen, dann den nächsten… Und dabei Gemeinsamkeiten entdecken oder gute Beispiele von hier. Dabei bin ich bestimmt schneller und sicherer unterwegs. Das Testen fällt (mir) dabei auch leicher.

Bei solchen Gelegenheiten entsteht dann schon mal ein Installationsscript für Erweiterungen, etc - auch mit dynamischen Variablen.

Grüße, Gerhard

Hi,

ja so sieht es aus … die Hardware ist ja schon drin …

Gruß
MacToolz