Variablen dynamisch

Hi ich weis nicht wie ich es beschreiben soll :wink: Aber ich versuche es mal so…

Ich eine dynamische Anzahl an Geräten, und will ein Script schreiben, was unter jeder Instance eine Variable erstellt.

So war mein Ansatz:

$wert=get_room_instance_device_typ_ids(„Wohnzimmer“,„dimmer“);
$zahl=count($wert); Z.B. 4

for ($zahl; $zahl > 0; $zahl–)
{
$test=GetValue($wz_dimmer$zahl);
}

Wie bekomme ich es hin, das ich eine Variable z.B. $wz_dimmer + den $Zahl zusammen bekomme, das ich es so weiter verarbeiten kann, so das es wäre, als würde ich z.b. $wz_dimmer4 hinschreiben ?

$test="$".„wz_dimmer$Zahl“;

Klappt leider nicht, weil er schreibt zwar richtig hin, wird aber nicht aufgelöst…

Sorry ich verstehe es nicht.
Was hast du genau vor ?
Mit IPS_GetChildrenIds solltest du alle Objekte unterhalb eines Objektes bekommen.
Oder was ist deine Frage ?
Michael

ja das ist das Problem, ich weis nicht wie es erklären soll…

Also ich will per Schleife etwas bearbeiten, und die Variablen z.B. $WZ_Dimmer1 $WZ_Dimmer2 usw. sind nicht fix, sonder dynamisch…

Also dachte ich mir ich kann auslesen wo viele $WZ_Dimmer es sind, und kann dann in Schleife es so umsetzten :

$WZ_DimmerX

X müsse eben immer ausgetauscht werden…

Hmm,

meinst Du das da verschiedene Aktoren (in IPS als Instanz hinterlegt) mit einem Scipt bedienen willst, sich aber die Anzahl der Aktoren dynamisch verändern kann (und damit auch deren Instanz-ID)?

Dann such doch per Script alle IDs eines Modultyps mit

$IDarray=IPS_GetInstanceListByModuleID("{E85C40B3-C1E9-4A60-85C7-6CDDA3D8D7BF}");  // schreibt alle IDs aller WuT-Outputs in ein array

Das array kann du dann in einer Scheife aufdröseln so wie du es schon oben geschrieben hast.

Gruß
hardlog

Hi ne ich meine was ganz anderes, ich versuche es mal an einem Beispiel zu erklären:

//IPS_GetConfiguration

// Existiert das die Modul Quelle schon ?
foreach (MC_GetModuleList($ModulInstanzID) as $Modulname)
    {
    //print "$Modulname ";
        if ($Modulname == 'symcon-php-homekit') $mv=1;
	 }
// Wenn nicht, füge Sie hinzu !
if ($mv !=1 ) MC_CreateModule($ModulInstanzID,"git://github.com/w-andre/symcon-php-homekit.git");

// Instanz anlegen



// Wohnzimmer
$wohnzimmer_dimmer=get_room_instance_device_typ_ids("Wohnzimmer","dimmer");
$wohnzimmer_dimmera=count($wohnzimmer_dimmer);
$wohnzimmer_level_id1=@IPS_GetObjectIDByIdent("LEVEL", $wohnzimmer_dimmer['1'] );
$wohnzimmer_level_id2=@IPS_GetObjectIDByIdent("LEVEL", $wohnzimmer_dimmer['2'] );
$wohnzimmer_level_id3=@IPS_GetObjectIDByIdent("LEVEL", $wohnzimmer_dimmer['3'] );
$wohnzimmer_level_id4=@IPS_GetObjectIDByIdent("LEVEL", $wohnzimmer_dimmer['4'] );

$cid=GetOrCreateCategory("Homebridge", "0"); // Instance anlegen
$iid=GetOrCreateinstanz("Wohnzimmer_test", "{E75002FE-58B7-4711-9DE6-BE1D3F089A32}", $cid); // HB Raummodul anlegen !
IPS_SetProperty($iid, "LightBulb", $wohnzimmer_dimmera);
IPS_ApplyChanges($iid);

$hb_wz_dimmer1=@IPS_GetObjectIDByName("LightBulb 1",$iid);
$hb_wz_dimmer2=@IPS_GetObjectIDByName("LightBulb 2",$iid);
$hb_wz_dimmer3=@IPS_GetObjectIDByName("LightBulb 3",$iid);
$hb_wz_dimmer4=@IPS_GetObjectIDByName("LightBulb 4",$iid);


for ($wohnzimmer_dimmera; $wohnzimmer_dimmera > 0; $wohnzimmer_dimmera--)
{
$hb_v_id="$"."hb_wz_dimmer$wohnzimmer_dimmera";

$wz_l_id="$"."wohnzimmer_level_id$wohnzimmer_dimmera";

print $hb_v_id;

IPS_SetProperty($hb_v_id, "OnVariableId", $wz_l_id);
IPS_SetProperty($hb_v_id, "BrightnessVariableId", $wz_l_id );
IPS_SetProperty($hb_v_id, "BrightnessMaxValue", "1" );
IPS_SetName($hb_v_id,IPS_GetName ($wohnzimmer_dimmer[$wohnzimmer_dimmera]));
IPS_ApplyChanges($wz_l_id);

}

Ich glaube er sucht das Gegenstück zu: PHP: call_user_func - Manual
…Das gleiche für Variablen :slight_smile: Hatte ich letztens noch, aber mir fällt einfach nicht mehr ein was es war bzw. wie ich es gelöst habe :rolleyes: :smiley:

Quasi einen Variablennamen als String haben und dann aber an den Inhalt der Variable kommen die den Namen vom String hat.

Grüße,
Chris

Hi habe es hinbekommen :smiley:

Ka wie ich es euch erklären hatten können aber so habe ich es gelöst :


$iid=53649 /*[Homebridge\Wohnzimmer_test]*/;
$zahl=4;

for ($i = 1; $i <= $zahl ; $i++)
{
   ${"hb_wz_dimmer".$i}=@IPS_GetObjectIDByName("LightBulb ".$i,$iid);


}