Weshalb müssen mehrere ereignisse abgefragt werden ?
Die müssten doch alle denselben Status haben ? Sonst reicht doch auch eine Variable nicht zum Visualisieren ? Oder stehe ich gerade auf dem Schlauch ?
Dann würde ich das so oder so ähnlich machen …
Mir erschliesst sich aber irgendwie nicht, wie deine Events in die Verlegenheit kommen können nicht gleich zu sein, wenn sie immer gleichzeitig verändert werden.
Script nicht getestet … aber da hast du mal einen Ansatz …
Am Ende natürlich das Ergebnis noch in eine passende IPS-Variable schreiben.
<?
$HMEventID[]=37080 /*[Skripte\Teich\Ozon\Abend\Konzentrator\KonzANFertig\]*/;
$HMEventID[]=31240 /*[Skripte\Teich\Ozon\Abend\Konzentrator\KonzAUSFertig\]*/;
$HMEventID[]=18981 /*[Skripte\Teich\Ozon\Abend\Pumpe\PumpeANFertig\]*/;
$HMEventID[]=10563 /*[Skripte\Teich\Ozon\Abend\Pumpe\PumpeAUSFertig\]*/;
$HMEventID[]=58160 /*[Skripte\Teich\Ozon\Früh\Konzentrator\Konzentrator AN Fertig\]*/;
$HMEventID[]=21868 /*[Skripte\Teich\Ozon\Früh\Konzentrator\Konzentrator AUS Fertig\]*/;
$HMEventID[]=52513 /*[Skripte\Teich\Ozon\Früh\Pumpe\Pumpe AN Fertig\]*/;
$HMEventID[]=41598 /*[Skripte\Teich\Ozon\Früh\Pumpe\Pumpe AUS Fertig\]*/;
$Count = 0;
foreach($HMEventID as $Event)
{
$EreignisInfo = IPS_GetEvent($Event);
if ($EreignisInfo['EventActive'])
$Count++
}
if ($Count ==0)
{
$Aktiv = 0;
}
elseif ($Count == count ($HMEventID))
{
$Aktiv = 1;
}
else
{
$Aktiv = -1;
}
SetValueBoolean(37104 /*[Skripte\Teich\Ozon\EreignisSkripte\Teich Ozon Ereignisse ]*/, true);
?>
Bekomme leider einen Error
Parse error: syntax error, unexpected ‚}‘ in C:\IPS\ips\scripts\32864.ips.php on line 18
Abort Processing during Fatal-Error: syntax error, unexpected ‚}‘
Error in Script C:\IPS\ips\scripts\32864.ips.php on Line 18
Wenn du das so machen willst, wie ich das verstanden habe, dann reicht eine Boolean Variable nicht, du hast doch 3 mögliche Stati ? Alle an, alle aus und mindestens einer verschieden zu den anderen.
Der Fehler liegt an einem fehlenden „;“ in Zeile 18 …
Habe dir nochmal alles richtig zusammengefasst. Die Variable ganz am Ende müsste eine Integer sein. Der kannst du dann noch ein Variablenprofil hinterlegen. 0 = alle aus, 1 = alle ein, -1 = Fehler bzw. wenn der Fall eintreten darf, = unterschiedlichkeit.
Grüße
Julian
<?
/* ------------------------------ IDs ---------------------------------------------------------------*/
$VisualisierungsID = 12345 ;// Integer Variable um den Status darzustellen. 0 alle aus, 1 alle an, -1 Fehler
$EventID[]=37080 /*[Skripte\Teich\Ozon\Abend\Konzentrator\KonzANFertig\]*/;
$EventID[]=31240 /*[Skripte\Teich\Ozon\Abend\Konzentrator\KonzAUSFertig\]*/;
$EventID[]=18981 /*[Skripte\Teich\Ozon\Abend\Pumpe\PumpeANFertig\]*/;
$EventID[]=10563 /*[Skripte\Teich\Ozon\Abend\Pumpe\PumpeAUSFertig\]*/;
$EventID[]=58160 /*[Skripte\Teich\Ozon\Früh\Konzentrator\Konzentrator AN Fertig\]*/;
$EventID[]=21868 /*[Skripte\Teich\Ozon\Früh\Konzentrator\Konzentrator AUS Fertig\]*/;
$EventID[]=52513 /*[Skripte\Teich\Ozon\Früh\Pumpe\Pumpe AN Fertig\]*/;
$EventID[]=41598 /*[Skripte\Teich\Ozon\Früh\Pumpe\Pumpe AUS Fertig\]*/;
/* ---------------------------------------------------------------------------------------------------*/
$Count = 0;
foreach($EventID as $Event)
{
$EreignisInfo = IPS_GetEvent($Event);
if ($EreignisInfo['EventActive'])
{
$Count++;
}
}
if ($Count ==0)
{
$Aktiv = 0;
}
elseif ($Count == count ($EventID))
{
$Aktiv = 1;
}
else
{
$Aktiv = -1;
}
SetValueInteger ($VisualisierungsID, $Aktiv);
?>
Edit:
Zum Verständnis, ob ich die Frage richtig verstanden habe und damit du evtl. was dazu lernen kannst,
das Script geht nacheinander alle Events durch und guckt ob sie aktiv sind.
Am Anfang wird ein Zähler Initialisiert und dann bei jedem aktiven Event hochgezählt.
Wenn am Ende der Zähler 0 ist, sind alle Events aus, wenn der Zähler = Anzahl an Events ist, sind alle Events an und in jedem anderen Fall stimmt was nicht. Ich bin allerdings kein Programmierer, gibt bestimmt noch elegantere Methoden das abzufragen, mir fällt aber gerade keine ein.