Skript hilfe

Hallo,ich habe folgendes Skript

<? 
/* 
******************************* 
 IP-SYMCON Event Scripting 
******************************* 
File     : 
Trigger1 : 
Interval :  
Trigger2 :  
Interval :  
*/ 

MXC_ShutterMoveUp(43429);

Pause 27 sec

MXC_ShutterStop(43429);

Pause 5 sec

MXC_ShutterMoveDown(43429);

Pause 12

MXC_ShutterStop(43429);

?>

mein problem ist, was muss ich eintragen wenn ich zwischen den Anweisungen (Pause) eine Wartezeit von,wie oben genannt, eine pause benötige bevor die nächste Anweisung ausgeführt wird?
Hoffe das mir jemand helfen kann.

IPS_Sleep ist dein Freund :wink:

IPS_Sleep

Hy ralf,

Der Befehl setzt die Abarbeitung des Skripts für Wartezeit Millisekunden aus. Nach Ablauf dieser Zeit wird das Skript fortgesetzt. Mit Hilfe dieses Befehls lassen sich kurze (!) Wartezeiten realisieren. IPS_Sleep hat keinen Einfluss auf andere, gleichzeitig laufende Skripts

Dachte es wäre für Millisekunden, kurze Wartezeiten, wie kurz maximal?

Das funktioniert auch bei vielen Millisekunden, bis zum Anschlag aus der php.ini (150 Sekunden). Dann schießt IPS das Script ab.

IPS_Sleep() ist das Gegenstück zum PHP sleep(), allerdings ohne IPS so stark zu behindern. Mit sleep() steht das Script und blockiert eine „Ausführungsslot“. Wenn du also genug sleep() Scripte parallel hast, steht alles :eek:.

Danke,
und wie kann man es besser machen?

Z.B. IPS_SetScriptTimer
IPS_SetScriptTimer

damit setzt du einen Timer auf ein Script, z.B. sich selber und wertest auch, ob das Script durch den Timer aufgerufen wurde.

Damit sorge ich für zeitgesteuerte Abschaltungen.

Bei mehreren Zeitschritten wird das dann komlexer. Da müsstest du dir den aktuellen „Status-Punkt“ in einer Variablen merken.

Als Denkansatz :wink: (nicht erschrecken, davon ist viel LCN und enocean und hier nicht so relevant, wichtig ist der äußere Switch-Block auf $IPS_SENDER)

<?
/*
*******************************
 IP-SYMCON Event Scripting
*******************************
File     : Terassentuer_links.ips.php
Trigger  :
Interval :
*/

//GlobalDefines lesen
include_once(IPS_GetKernelDir() . "scripts\GlobalDefines.ips.php");

$debug = true; // local debug
$griffposition = $IPS_VALUE;

switch($IPS_SENDER) {
  case "Variable":
    // Griffbewegung
    switch($griffposition){
      case 3:
        // Fenster ist geschlossen worden
        if ($debug)
          IPS_LogMessage($IPS_SELF, "Griffposition: " . $griffposition . "- Fenster zu" );
        IPS_SetScriptTimer($IPS_SELF, 0);
        // Gartenbeleuchtung aus, wenn ein und dunkel
        $gartenbeleuchtung = GetValueBoolean("M090R5");
        $dunkel = GetValueBoolean("M143R3");
        if ($gartenbeleuchtung AND $dunkel ) {
          $TX_BUF = ">M000090.RL----0---".chr(10).">M000091.RL-0------".chr(10).">M000143.TXB------E-".chr(10);
          $result = COMPort_SendText(LCN_Port, $TX_BUF);
        }
        $pumpe = GetValueBoolean("M091R1");
        if ($pumpe) {
          $TX_BUF = ">M000091.RL0-------".chr(10);
          $result = COMPort_SendText(LCN_Port, $TX_BUF);
        }
      break;
      case 1:
        // Fenster ist gekippt worden
        if ($debug)
          IPS_LogMessage($IPS_SELF, "Griffposition: " . $griffposition . "- Fenster gekippt" );
        // Timer setzen, um Offen-Meldung auszugeben
        $aussentemp = GetValueFloat("M143.r1.temp");
        $innentemp = GetValueFloat("M130.r1.temp");
        if ( $aussentemp < $innentemp ) {
          IPS_SetScriptTimer($IPS_SELF, 900);
        }
        // NOTLÖSUNG, bei KIPP soll keine Licht an sein
        // Gartenbeleuchtung aus, wenn ein und dunkel
        $gartenbeleuchtung = GetValueBoolean("M090R5");
        $dunkel = GetValueBoolean("M143R3");
        if ($gartenbeleuchtung) {
          $TX_BUF = ">M000090.RL----0---".chr(10).">M000091.RL-0------".chr(10);
          $result = COMPort_SendText(LCN_Port, $TX_BUF);
        }
        $pumpe = GetValueBoolean("M091R1");
        if ($pumpe) {
          $TX_BUF = ">M000091.RL0-------".chr(10);
          $result = COMPort_SendText(LCN_Port, $TX_BUF);
        }
      break;
      case 0:
      case 2:
        // Fenster ist geöffnet worden
        if ($debug)
          IPS_LogMessage($IPS_SELF, "Griffposition: " . $griffposition . "- Fenster offen" );
        $aussentemp = GetValueFloat("M143.r1.temp");
        // Timer setzen, um Offen-Meldung auszugeben
        if ( $aussentemp < 16 ) {
          IPS_SetScriptTimer($IPS_SELF, 900);
        }
        // Gartenbeleuchtung ein, wenn aus und dunkel
        $gartenbeleuchtung = GetValueBoolean("M090R5");
        $dunkel = GetValueBoolean("M143R3");
        if (!$gartenbeleuchtung AND $dunkel ) {
          $TX_BUF = ">M000090.RL----1---".chr(10).">M000091.RL-1------".chr(10).">M000143.TXB------S-".chr(10);
          $result = COMPort_SendText(LCN_Port, $TX_BUF);
        }
        $pumpe = GetValueBoolean("M091R1");
        if (!$pumpe) {
          $TX_BUF = ">M000091.RL1-------".chr(10);
          $result = COMPort_SendText(LCN_Port, $TX_BUF);
        }
      break;
    }
    break;
  case("TimerEvent"):
   if ($debug)
     IPS_LogMessage($IPS_SELF, "Timer abgelaufen => WARNUNG Balkontür auf");
     // hier muss noch eine geeignete Meldungsform hin
     IPS_SetScriptTimer($IPS_SELF, 300);
  break;
}
?>

Hallo Uwe,

habe auf der grünen Wiese mal ein Skript für Dich zusammen gebastelt. Der Grundsatz ist der selbe wie bei ralf´s Skript.


<?
/*
*******************************
 IP-SYMCON Event Scripting
*******************************
File     : Rolladen_Uwe.ips.php
Trigger  : Taster, Temp-Sensor
Interval : OnChange & Timer-Event
*/

$debug                  = true;                          // Ausgabe der debug-Texte im Custom-Log
$shutter                = 61092;                         // Deine Shutter-Instanz
$zeithoch               = 25;                            // Laufzeit hoch in Sekunden
$zeitrunter             = 15;                            // Laufzeit runter in Sekunden
$letzte_richtung_hoch   = 1;                             // Letzte Laufrichtung des Moeller-Shutters HOCH
$letzte_richtung_runter = 2;                             // Letzte Laufrichtung des Moeller-Shutters HOCH


switch($IPS_SENDER)                                      // Durch wen wurde Skript gestartet (Variable oder Timer)
{
   case "Variable":                                      // Wenn duch Variable (Taster oder Temp) aufgerufen
      MXC_ShutterMoveUp($shutter);
      IPS_SetScriptTimer($IPS_SELF, $zeithoch);              // Timer für 25 Sekunden hochfahren
      if ($debug) IPS_LogMessage("Rollladenskript","Rollladen fährt hoch");
   break;

   case("TimerEvent"):                                   // Wenn durch Timer aufgerufen

      switch(GetValueInteger("Shutter_Letzte_Richtung")) //Variable des Shutters für letzte Richtung
      {
         case $letzte_richtung_hoch:                     // Letzte Richtung Hoch evtl. 1 mit 2 tauschen
            MXC_ShutterStop($shutter);
            MXC_ShutterMoveDown($shutter);
            IPS_SetScriptTimer($IPS_SELF, $zeitrunter);      // Timer für 15 Sekunden runterfahren
            if ($debug) IPS_LogMessage("Rollladenskript","Rollladen stoppt oben und fährt runter");
         break;
         
         case $letzte_richtung_runter:                   // Letzte Richtung runter evtl. 2 mit 1 tauschen
            MXC_ShutterStop($shutter);                   // Shutter-Instanz ändern
            IPS_SetScriptTimer($IPS_SELF, 0);            // Timer stoppen
            if ($debug) IPS_LogMessage("Rollladenskript","Rollladen stoppt endgültig");
      }
   break;
}
?>


Skript ist komplett durchkommentiert.

Das einzige wo ich mir nicht sicher bin ist der Rückgabewert des Moeller-Jalousieaktors
für die letzte Laufrichtung (Last Move). War jetzt 1 rauf oder runter bzw. umgekehrt. Evtl. noch anpassen.

Die Debug-Meldungen die ins Custom-Log von IPS laufen kannst Du bei Bedarf mit $debug = false; ausschalten.
War nur zum entwickeln des Skriptes gedacht.

Falls denoch Fragen auftauchen sollten kannst Du mich morgen per Messenger erreichen.

Werner du bist mein GOTT:D