Probleme mit IPS_SetEventActive mehrere Skripte

Hallo,

ich habe für meine Ozoneinspeisung am Teich insgesamt 8 Skripte mit 8 zyklischen Ereignissen.

Diese Ereignisse würde ich gerne über ein Skript alle aktivieren bzw. deaktivieren.

Sprich, wenn ich dieses Skript starte, dann sollen alle Ereignisse deaktiviert werden und eben an diesem Tag nicht die Skripte auslösen.

Das ganze soll so lange deaktiviert bleiben bis ich mit einem anderen Skript die Ereignisse wieder aktiviere.

Habe im Handbuch dazu das hier gefunden.

IPS_SetEventActive

Bräuchte aber dennoch eure Hilfe, da ich es mir wohl zu leicht gemacht habe.


<?

IPS_SetEventActive($37080, true);
IPS_SetEventActive($31240, true);
IPS_SetEventActive($18981, true);
IPS_SetEventActive($10563, true);
IPS_SetEventActive($58160, true);
IPS_SetEventActive($21868, true);
IPS_SetEventActive($52513, true);
IPS_SetEventActive($41598, true);
?>


So gehts jedenfalls nicht :frowning:

Nimm die $ mal raus in der Funktion.
Und zum deaktivieren muss es glaube ich false sein.
Michael

peinlich :rolleyes:

Das wars schon :stuck_out_tongue:

Danke :slight_smile:

Eine kurze Sache noch :slight_smile:

Würde jetzt gerne über ein Skript abfragen, ob die Ereignisse aktiv oder inaktiv sind und das ganze in eine Variable schreiben.

Dazu habe ich das gefunden…


<?
$EreignisID = 58160;
$EreignisInfo = IPS_GetEvent($EreignisID);
print_r($EreignisInfo);
?>

Aber…

  1. Es müssen ja mehrere Ereignisse abgefragt werden
  2. Wie schreibe ich das ganze jetzt in eine „On/Off Variable“ ?

Das wären die IDs
IPS_SetEventActive(37080, true);
IPS_SetEventActive(31240, true);
IPS_SetEventActive(18981, true);
IPS_SetEventActive(10563, true);
IPS_SetEventActive(58160, true);
IPS_SetEventActive(21868, true);
IPS_SetEventActive(52513, true);
IPS_SetEventActive(41598, true);

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 ?

Gesendet von meinem iPhone mit Tapatalk

Ich muss sicher sein, dass alle 8 Ereignisse immer gleichzeitig aktiv oder deaktiv sind. Und das würde ich gerne in einer Variable ablesen können :slight_smile:

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 … :wink:
Am Ende natürlich das Ergebnis noch in eine passende IPS-Variable schreiben.

Schönen Abend noch

Julian


<?

$HMEventID[]=37080;
$HMEventID[]=31240;
$HMEventID[]=18981;
$HMEventID[]=10563;
$HMEventID[]=58160;
$HMEventID[]=21868;
$HMEventID[]=52513;
$HMEventID[]=41598;

$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;
		}

?>

Wie müsste das ausschauen?

Habe eine Boolean Variable erstellt.

Macht man das so?


 <?

$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.

Perfekt :slight_smile: So geht es…Vielen Vielen Dank :):):):slight_smile: