andere Möglichkeit für IPS_Sleep

Mhhh,
mir ist gerade aufgefallen das die Relais für „Rollladen rauf“ 70Sek. eingeschaltet dann kurz aus- und wieder 70Sek. eingeschaltet… werden. :confused:


<?
switch($IPS_SENDER)
{
    case "WebFront":
    SetValueBoolean(13427 /*[Rollladen\Rollladen Wohnzimmer\Rollladen rauf]*/, true);
    IPS_RunScript($IPS_SELF);
    break;
    case "TimerEvent":
    ModBus_WriteCoil(11682 /*[Wago\DigitalOut 2DO 230V\Relais 1.1]*/, false); //Gerät ausschalten
    ModBus_WriteCoil(27098 /*[Wago\DigitalOut 2DO 230V\Relais 2.1]*/, false); //Gerät ausschalten
    SetValueBoolean(13427 /*[Rollladen\Rollladen Wohnzimmer\Rollladen rauf]*/, false);
   if($IPS_EVENT == 49320 /*[Rollladen\Rollladen Wohnzimmer\Rollladen rauf\Rollladen alle rauf\]*/) // ID des Scripttimer
   {
       IPS_SetScriptTimer($IPS_SELF, 0);
       return;
   }
    break;
}
ModBus_WriteCoil(11682 /*[Wago\DigitalOut 2DO 230V\Relais 1.1]*/, true); //Gerät einschalten
ModBus_WriteCoil(27098 /*[Wago\DigitalOut 2DO 230V\Relais 2.1]*/, true); //Gerät einschalten
IPS_SetScriptTimer($IPS_SELF, 70);
?>

Huhu,
irgendwie sieht das recht kompliziert aus. Laienhaft nehme ich meist das Beispiel aus der IPS-Anleitung:

------------schnipp-------------
Wie kann ich…?
Viele dieser Skripte verwenden spezielle IP-Symcon Funktionen.
Bitte nutzen Sie die Befehlsreferenz/Modulreferenz, wenn Sie die genaue Funktionsweise verstehen wollen.
… ein Gerät einschalten und nach z.B. 60 Sekunden wieder aussschalten?

 if($IPS_SENDER == "TimerEvent")
 {
  //Aus Befehl
  ...

  //Timer ausschalten
  IPS_SetScriptTimer($IPS_SELF, 0);
 } else {
  //An Befehl
  ...
  
  //Timer anschalten
  IPS_SetScriptTimer($IPS_SELF, 60);
 }

----------schnipp----------------------

Ergibt also:

 
  if($IPS_SENDER == "TimerEvent")
    {
      //Aus Befehl
      ModBus_WriteCoil(11682 /*[Wago\DigitalOut 2DO 230V\Relais 1.1]*/, false); //Gerät ausschalten
      ModBus_WriteCoil(27098 /*[Wago\DigitalOut 2DO 230V\Relais 2.1]*/, false); //Gerät ausschalten
      SetValueBoolean(13427 /*[Rollladen\Rollladen Wohnzimmer\Rollladen rauf]*/, false);  
      
      IPS_SetScriptTimer($IPS_SELF, 0); //Timer ausschalten

    } else {
    
    //An Befehl
    SetValueBoolean(13427 /*[Rollladen\Rollladen Wohnzimmer\Rollladen rauf]*/, true);
    ModBus_WriteCoil(11682 /*[Wago\DigitalOut 2DO 230V\Relais 1.1]*/, true); //Gerät einschalten
    ModBus_WriteCoil(27098 /*[Wago\DigitalOut 2DO 230V\Relais 2.1]*/, true); //Gerät einschalten
        
    IPS_SetScriptTimer($IPS_SELF, 70); //Timer anschalten
 }

So sollte es doch egal sein, wer dieses Script Triggert…

Genau das ist ja das Problem.
Manuell funktioniert es nur Astro steuert es nicht.

Gruß

switch($IPS_SENDER)
{
   case "WebFront":
   SetValueBoolean(13427 /*[Objekt #13427 existiert nicht]*/, true);
   break;
   case "TimerEvent":
   if($IPS_EVENT == 49320  /*[Objekt #40582 existiert nicht]*/) // ID des Scripttimer
   {
       ModBus_WriteCoil(11682 /*[Objekt #11682 existiert nicht]*/, false); //Gerät ausschalten
       ModBus_WriteCoil(27098 /*[Objekt #27098 existiert nicht]*/, false); //Gerät ausschalten
       SetValueBoolean(13427 /*[Objekt #13427 existiert nicht]*/, false);
       IPS_SetScriptTimer($IPS_SELF, 0);
       return;
    }
   break;
}
ModBus_WriteCoil(11682 /*[Objekt #11682 existiert nicht]*/, true); //Gerät einschalten
ModBus_WriteCoil(27098 /*[Objekt #27098 existiert nicht]*/, true); //Gerät einschalten

IPS_SetScriptTimer($IPS_SELF, 70);

Danke für den Tip.
Habe die Zeit verstellt, leider ohne Erfolg. Die Relais werden nicht angesteuert. :frowning:

…leider wieder nicht, manuell ja nur von Astro nicht.

…habe das Bild vergessen.

So, jetzt machst Du erst mal Übungen.

Leg dir noch ein Ereignis an mit 20 sec. Das Ereignis simuliert dein Astro. Wenn Du kein TTS hast, lass es über echo ausgeben und sieh dir an was passiert.

switch($IPS_SENDER)
{
    case "WebFront":
   SetValueBoolean(13427 /*[Objekt #13427 existiert nicht]*/, true);
   break;
   case "TimerEvent":
   if($IPS_EVENT == 49320  /*[Objekt #40582 existiert nicht]*/) // ID des Scripttimer
   {
      TTS_Speak(28627 /*[Sprachausgabe\Text To Speech]*/, "Ausgeschaltet" , true);
      SetValueBoolean(13427 /*[Objekt #13427 existiert nicht]*/, false);
       IPS_SetScriptTimer($IPS_SELF, 0);
       return;
    }
   break;
}
TTS_Speak(28627 /*[Sprachausgabe\Text To Speech]*/, "Eingeschaltet" , true);
IPS_SetScriptTimer($IPS_SELF, 10);

Wenn Du damit nicht zurecht kommst, nimm das hier.

<?
switch($IPS_SENDER)
{
    case "Execute": // im Sript ausführen. Simuliert Button im Webfront
   break;
   case "TimerEvent":
   if($IPS_EVENT == 35641 /*[Test\2Timer\]*/) // ID des Scripttimer
   {
      TTS_Speak(28627 /*[Sprachausgabe\Text To Speech]*/, "Ausgeschaltet" , true);
      IPS_LogMessage($IPS_SELF, "Aus"); // Ausgabe in Meldungen
       IPS_SetScriptTimer($IPS_SELF, 0);
       return;
    }
   break;
}
TTS_Speak(28627 /*[Sprachausgabe\Text To Speech]*/, "Eingeschaltet" , true);
IPS_LogMessage($IPS_SELF, "Ein"); // Ausgabe in Meldungen
IPS_SetScriptTimer($IPS_SELF, 10);

?>

Mal sehen ob ich es richtig verstanden habe:

[ul]
[li]Ereignis hinzugefügt
[/li][li]Aktion Skript starten
[/li][li]test Script ausgewählt
[/li][/ul]
Im Webfront erscheint nur bei manueller Ausführung ein Fenster, siehe Anhang. Sonst passiert nichts.


<?
  switch($IPS_SENDER)
{
    case "WebFront":
   SetValueBoolean(15528 /*[Rollladen\Rollladen Wohnzimmer	est]*/, true);
   break;
   case "TimerEvent":
   if($IPS_EVENT == 32102 /*[Rollladen\Rollladen Wohnzimmer\]*/ ) // ID des Scripttimer
   {
       echo "Ausgeschaltet";
      //TTS_Speak(28627 /*[Objekt #28627 existiert nicht]*/, "Ausgeschaltet" , true);
      SetValueBoolean(15528 /*[Rollladen\Rollladen Wohnzimmer	est]*/, false);
       IPS_SetScriptTimer($IPS_SELF, 0);
       return;
    }
   break;
}
echo "Eingeschaltet";
//TTS_Speak(28627 /*[Objekt #28627 existiert nicht]*/, "Eingeschaltet" , true);
IPS_SetScriptTimer($IPS_SELF, 10);
?>

Hier muss glaube ich die ID des „70er“-Timers rein, nicht die des Astro.

Auch bei Deinem Versuch muss die ID des 10er-Timers rein.

Gruß
Bruno

Nimm das 2te Script und schau in den Meldungen.

Hallo,

ja kann sein das der Astro Timer nur einmalig ausgeführt wird, weil,…

Normalerweise wird das Astro-Script doch einmal Täglich getriggert um dann alle Astro-Timer zu setzen. Die Zeiten ändern sich doch täglich… Sonnenaufgang, untergang, usw. Bevor ihr euch den Wolf sucht… das zum Thema Astro.

Gruß aus der Pause…

Bruno hat natürlich recht. Deshalb steht dort auch ID des Scripttimer und nicht ID des Ereignis. :frowning:

Das hatten wir schon geklärt. :smiley:

(Bezog sich auf die Antwort von Voss)

Gruß
Bruno

Auf welche Feinheiten man doch achten muss :confused: , beim Anlegen heissen beide Dinger „Ereignis“ und plötzlich wird unterschieden … schließt den Kreis zum „täglichen“ Ereignis welches „einmalig“ ausgeführt wird … :smiley:

Gruß
Bruno

Das Ding heisst beim anlegen Scripttimer. Es sein denn Du vergibst einen eigenen Namen.

…so 3 Screenshots im Anhang.

Großen DANK für eure Geduld!

Gruß

Du hast schon wieder die ID des Ereignis eingetragen und nicht die des Scripttimer!!!

Haaah!! Ich habe es gesehen

Jo, ich habe es geändert und sie fahren rauf und runter.

Eine Frage habe ich da noch.
Wenn das Script „Rollladen rauf oder runter“ von Astro gestartet wird, warum zeigt der Button im Webfront nicht den aktuellen Zustand „An“ an?
Kann man das ändern?

Gruß

Schau an welcher Stelle Du im Script die Variable änderst, dann sollte diese Frage geklärt sein. :smiley:

Gruß
Bruno

Danke, guter Hinweis :slight_smile: auch das funktioniert jetzt!

Ich hätte da noch ne Frage:
Kann man beim starten eines Scriptes abfragen ob schon ein anderes bereits gestartet ist und verhindern das ein neues gestartet wird.

Wenn Script „Rollladen rauf“ läuft dann darf nicht "Rollladen runter gestartet werden.

Gruß


<?
switch($IPS_SENDER)
{
   case "WebFront":
   SetValueBoolean(13427 /*[Rollladen\Rollladen Wohnzimmer\Rollladen rauf]*/, true);
   break;
   case "TimerEvent":
   if($IPS_EVENT == 46784 /*[Rollladen\Rollladen Wohnzimmer\Rollladen rauf\Rollladen alle rauf\]*/ ) // ID des Scripttimer
   {
       ModBus_WriteCoil(11682 /*[Wago\DigitalOut 2DO 230V\Relais 1.1]*/, false); //Gerät ausschalten
       ModBus_WriteCoil(27098 /*[Wago\DigitalOut 2DO 230V\Relais 2.1]*/, false); //Gerät ausschalten
       SetValueBoolean(13427 /*[Rollladen\Rollladen Wohnzimmer\Rollladen rauf]*/, false);
       IPS_SetScriptTimer($IPS_SELF, 0);
       return;
    }
   break;
}
SetValueBoolean(13427 /*[Rollladen\Rollladen Wohnzimmer\Rollladen rauf]*/, true);
ModBus_WriteCoil(11682 /*[Wago\DigitalOut 2DO 230V\Relais 1.1]*/, true); //Gerät einschalten
ModBus_WriteCoil(27098 /*[Wago\DigitalOut 2DO 230V\Relais 2.1]*/, true); //Gerät einschalten

IPS_SetScriptTimer($IPS_SELF, 70);
?>