Auslesen von Ereignissen

Hallo

Blöde Überschrift, aber ich weiß nicht, wie es besser geht
folgendes:

Ich habe ein Script, welches mir einen Durchschnitt der Helligkeit im Haus errechnet (über Bewegungsmelder)

ausgelöst wird das Script, wenn sich die Helligkeit bei einem der Bewegungsmelder ändert.

dazu lege ich mir mit:

$variables[1] = 'BRIGHTNESS';         //BRIGHTNESS

//Nachts wird geprüft, ob es neue relevante Variablen gibt. Falls ja wird ein Ereignis angelegt.
if (($IPS_SENDER=='TimerEvent') or ($IPS_SENDER=='Execute'))
{
    foreach(IPS_GetInstanceListByModuleType(3) as $id)
    //foreach(IPS_GetInstanceListByModuleID("{EE4A81C6-5C90-4DB7-AD2F-F6BBD521412E}") as $id)
    {
        //echo IPS_GetName($id)."
";
       //print_r (IPS_GetStatusVariableIdents($id));

        foreach ($variables as $CurrentVarName)
        {
           if(IPS_StatusVariableExists($id, $CurrentVarName))
            {
               $var = IPS_GetStatusVariable($id, $CurrentVarName);

                  //Ereignis zum Skriptaufrufen anlegen
                   if(@IPS_GetEventIDByName($var['VariableID'], $IPS_SELF) === false)
                    {
      					$ereignis = IPS_CreateEvent(0);        //Ausgelöstes Ereignis
							IPS_SetEventTrigger($ereignis, 1, $var['VariableID']); //Bei Änderung von Variable mit ID
							IPS_SetParent($ereignis, $IPS_SELF); //Ereignis zuordnen
							IPS_SetName($ereignis, $var['VariableID']); // Name vergeben
							IPS_SetEventActive($ereignis, true);    //Ereignis aktivieren
						  }
				}
        }
    }
}

die erreignise an.

Ich muss aber immer noch die ID des BRIGHTNESS manuell eintragen, damit dies errechnet wird.

//Wenn eine Variable ein Ereignis auslöst, wird die Message erzeugt und verschickt
if ($IPS_SENDER=='Variable')
{

$IDs = IPS_GetChildrenIDs(17322 /*[Scripts\Licht\Aktoren]*/); //ID der Kategorie mit Links zu den Booleans, Schlataktoren



####################

$HELL1 = getValue (27169 /*[Obergeschoss\Vorzimmer\Bewegungsmelder OG\BRIGHTNESS]*/ );
$HELL2 = getValue (39597 /*[Erdgeschoss\Vorhaus\Bewegungsmelder AB\BRIGHTNESS]*/ );
$HELL3 = getValue (39207 /*[Erdgeschoss\WC\Bewegungsmelder\BRIGHTNESS]*/ );
$HELL4 = getValue (24198 /*[Erdgeschoss\Aufgang\Bewegung\BRIGHTNESS]*/  );
#$HELL5 = getValue (39597 /*[Erdgeschoss\Vorhaus\Bewegungsmelder AB\BRIGHTNESS]*/ );
#$HELL6 = getValue (39597 /*[Erdgeschoss\Vorhaus\Bewegungsmelder AB\BRIGHTNESS]*/ );





$HELL = (($HELL1 + $HELL2 + $HELL3 + $HELL4) / 4);

setValueFloat (10332 /*[Scripts\Sonstiges\helligkeit\Helligkeit]*/  , $HELL);

}

Es muss doch eine möglichkeit geben, die Inhalte der LINKS in ein array zu bekommen, damit da den Durchschnitt errechnen kann, oder?

ich beantworte mir mal meine Frage selber :smiley:

ich habs jetzt so gelöst,

geht sicherlich einfacher, aber es funkt…

<?


//HIER ANPASSEN
$CurrentVarName  = 'BRIGHTNESS';

//beim ausführen wird geprüft, ob es neue relevante Variablen gibt. Falls ja wird ein Ereignis angelegt.
if (($IPS_SENDER=='TimerEvent') or ($IPS_SENDER=='Execute'))
{
    foreach(IPS_GetInstanceListByModuleType(3) as $id)
     {
        if(IPS_StatusVariableExists($id, $CurrentVarName))
            {
               $var = IPS_GetStatusVariable($id, $CurrentVarName);

						//Ereignis zum Skriptaufrufen anlegen
                   if(@IPS_GetEventIDByName('Event '.$var['VariableID'], $IPS_SELF) === false)
                    {
      					$ereignis = IPS_CreateEvent(0);        //Ausgelöstes Ereignis
							IPS_SetEventTrigger($ereignis, 1, $var['VariableID']); //Bei Änderung von Variable mit ID
							IPS_SetParent($ereignis, $IPS_SELF); //Ereignis zuordnen
							IPS_SetName($ereignis, 'Event '.$var['VariableID']); // Name vergeben
							IPS_SetEventActive($ereignis, true);    //Ereignis aktivieren
						  }
				}
     }
}
##########################################

//Wenn eine Variable ein Ereignis auslöst, wird die Message erzeugt und verschickt
if ($IPS_SENDER=='Variable')
  {
		$i=0;
		$HELL1=0;
		foreach(IPS_GetInstanceListByModuleType(3) as $id)
  	    {
         if(IPS_StatusVariableExists($id, $CurrentVarName))
            {
               $var = IPS_GetStatusVariable($id, $CurrentVarName);
               $HELL = getValue ($var['VariableID']);

					//eventuelle Defekte Sensoren ausschliessen
					//BRIGHTNESS Umbenennen in DEF !!!
					if ((IPS_GetName($var['VariableID'])) != "DEF")
					  {
						$HELL1 = $HELL1 + $HELL;
						$i++;
 						}
  				}

   }
   
$HELL_DURCH = $HELL1/($i);
setValueFloat (10332 /*[Scripts\Sonstiges\helligkeit\Helligkeit]*/  , $HELL_DURCH);




}
?>

Die Abfrage wegen Defekter Sensoren brauche ich, weil mein Aussen Bewegungsmelder falsche Werte sendet. Keine Ahnung warum.