Ampel für 10 Minuten einschalten

Hallo,

bin gerade an meinem zweiten IPS-Projekt und stehe vor einem Problem… Ich muss eine Blink-Ampel steuern. Diese muss man im Dash manuell ein- und ausschalten können, was natürlich null Problem ist.

Mein Problem nun: Ich brauche auch einen Button „10 min“ ein. Wie kann ich das realisieren? ips_sleep soll da ja nicht Mittel der Wahl sein, da ich damit alles blockiere. Aber wie mache ich es richtig?

Das hier ist wohl der falscheste aller falschen Wege :wink:

SetValueBoolean(27802 /*[haussteuerung\variablen\ampel]*/, True);

ips_sleep(10*60);

SetValueBoolean(27802 /*[haussteuerung\variablen\ampel]*/, False);

Wäre super, wenn mir da jemand helfen könnte… Stelle dann auch hoffentlich bald mein „IPS-gesteuertes Feuerwehrhaus“ mit kompletter Haussteuerung über IPS und EIB incl. Einsatz-Anzeige-Tableau über IPS etc. vor… :wink:

Gruss Daniel

Ist nicht getestet, sollte aber funktionieren:

<?php
    if($IPS_SENDER == "TimerEvent")
    {
        FS20_SwitchMode(12345, false);
        IPS_SetScriptTimer($IPS_SELF, 0);
    }
    else
    {
        FS20_SwitchMode(12345, true);
        IPS_SetScriptTimer($IPS_SELF, 600);
    }
?>

… getestet (oben fehlt das Ausschalten des Timers): Praxis-Beispiel einer Außenbeleuchtung.
Wenn es dunkel ist (hier: $daylight == 0) und die Küchentür geöffnet wird,
wird die Beleuchtung für 5 Minuten eingeschaltet.


//Trigger: Variablen-Änderung: "STATE"
$daylight = GetValue(24934 /*[6_Szenarien\Tageslicht]*/); 
$status = GetValue(59610 /*[1_EG\Küche\Kontakt Tür\STATE]*/);
$id_aktor = 12599 /*[3_Hof Garten\Beleuchtung]*/;
	
if($IPS_SENDER == "TimerEvent"){
	HM_WriteValueBoolean($id_aktor , "STATE" , False);
	IPS_SetScriptTimer($IPS_SELF, 0);
}else{
	if (($daylight == 0) and ($status == True)){
		HM_WriteValueBoolean($id_aktor , "STATE" , True);
		IPS_SetScriptTimer($IPS_SELF, 5 * 60);    // 5 Minuten
	}
}

Tipp: ich habe das Skript bei mir um eine Variable erweitert: Status des Bewegungsmelder außen
Dadurch geht die Beleuchtung nur dann an, wenn man von innen nach außen geht.

MST

Mein weiterer Fehler hat sich erledigt… Hatte noch einen falschen Timer drin…

Danke für die Hilfe… Bin echt gespannt, ob auch alles im Realbetrieb so klappt wie aktuell in der Simulation :wink:

Gruss Daniel

Guten Tag,
ich vermute, daß ich mit Ihrem Skript erreichen könnte, daß in meinem Fall die Lampe angeht, 10 Minuten nachdem das Bad-Fenster geöffnet wurde.
Wie soll ich es dann machen ?

vielen dAnk für Ihre Unterstzutzung & Gruß!

Genau so, wie es in dem Skript steht. Ansonsten, wenn etwas nicht geht, dann mal bitte das bisher probierte hier zeigen und dazu schreiben, was nicht geht.

vielen Dank für die schnelle Rückmeldung!
Ich habe das hier als Ereignis getestet:

 //Trigger: Variablen-Änderung: "STATE"
$status = GetValue(13709 );
$id_aktor = 57730;
if($IPS_SENDER == "TimerEvent"){
    HM_WriteValueBoolean($id_aktor , "STATE" , False);
    IPS_SetScriptTimer($IPS_SELF, 0);
}else{
       if (($status == True)){
        IPS_SetScriptTimer($IPS_SELF, 1 * 60);    // es wird 1 Minute gewartet ...
        TPLHS_PowerOn($id_aktor);  // ... bis Lampe (Stecker TPLink) angeht
    }
}  

leider passiert nach 1 Minute nichts, und auch nach x Minuten… :frowning:
Was mach eich falsch ? bin für jeden Vorschlag dankbar!
Gruß, A.

Du hast Systemvariablen aus einer gaaaaanz alten Version von IP-Symcon genutzt. Hier findest Du die aktuellen:

https://www.symcon.de/service/dokumentation/konzepte/skripte/systemvariablen/

Ich bin mir gerade nicht sicher, ob die aktuellen Versionen von IPS die noch emulieren. Verwende aber besser die aktuellen.

Versuche mal diese Script, erstelle für das Script ein Auslösendes Ereignis mit Deiner Auslöser ID 13709 unter Ereignis hinzufügen.
Script sollte dann so funktionieren.
Was " TPLHS_PowerOn" für ein Befehl sein soll weiß ich nicht, ich vermute das hängt an dem HM Aktor ?

 <?php

 //Trigger: Variablen-Änderung: zB auf Änderung besser auf True , 
 //in Ereignis (als Auslösendes Ereignis die Variablen ID 13709) definieren !!

$id_aktor = 57730 ;
if($_IPS['SENDER'] == "TimerEvent")
{  
    HM_WriteValueBoolean($id_aktor , false);
    IPS_SetScriptTimer($_IPS['SELF'], 0);
}else{       
       // TPLHS_PowerOn($id_aktor);  // ... bis Lampe (Stecker TPLink) angeht
       // ????? was ist TPHS usw wahrscheinlich willst Du den HM Aktor schalten, dann 
	   HM_WriteValueBoolean($id_aktor , true);	   
        IPS_SetScriptTimer($_IPS['SELF'], 1 * 6);    // es wird 6 Sekunden (Test) gewartet ...
     } 

In der Doku findest Du es unter Systemvariablen und unter Wie kann ich .
Gruß Helmut

Ausschalten um nach 6 Sekunden noch mal auszuschalten ist - wenn ich den Fragesteller richtig verstanden habe - nicht das Ziel. Wenn das Skript auf das Badfenster getriggert wird, dann muss die Lampe im else-Teil angeschaltet werden.

Super, ich wieder, hab’s geändert.
Ziele sind manchmal schwer zu erreichen… und zu erkennen, Danke für’s aufpassen.
Gruß Helmut

Hallo Zusammen,
zunächst vielen Dank für die schnelle Rückmeldungen!
ich habe es mit folgendem Code versucht, allerdings schaltet sich die Lampe (an einem TPLink-Stecker) sofort, nicht erst nach 60 Sekunden

//Trigger: Variablen-Änderung: "STATE"
$id_aktor = 49439;
if($_IPS['SENDER'] == "TimerEvent"){
    TPLHS_PowerOff($id_aktor);                     // TPLink-Stecker ausschalten
    IPS_SetScriptTimer($_IPS['SELF'], 0);
}else{
        IPS_SetScriptTimer($_IPS['SELF'], 1 * 60);    // 1 Minuten
        TPLHS_PowerOn($id_aktor);                // TPLink-Stecker einschalten
    }

Übrigens kommt in der Konsole folgen Warnung:

<b>Warning</b>:  Skript #0 exisitert nicht in <b>/-</b> on line <b>7</b><br />

Linie 7 ist die wo er 1 Minute warten sollte…
ich bin erneut für jeden Tipp dankbar…:confused:

Gruß, A.

In $_IPS[SELF] wird eine ID übergeben.
Vermutlich hast Du das Script direkt von Hand gestartet.
Wenn es richtig (Sender = TimerEvent) getriggert wird, dann steht ein Wert <> 0 drin und der Timer wird korrekt gesetzt.

Viele Grüße aus dem Unterallgäu
Harry

Faszinierend, was hier für verwirrendes Zeug geschrieben wird. $_IPS[‚SELF‘] ist nicht 0, egal wer das Skript startet. Mit $_IPS[‚VARIABLE‘] passiert das schon mal, aber wenn mich nicht alles täuscht, kann $_IPS[‚SELF‘] in einem Skript nicht 0 sein.

So … jetzt versuch bitte mal, das Skript zu verstehen und führe Dir vor Augen, was es macht. Wenn es durch ein Ereignis gestartet wird, wird das Ding eingeschaltet und ein SkriptTimer wird gesetzt. Wenn der SkriptTimer das Skript aufruft, wird das Ding ausgeschaltet und der Timer auf 0 gesetzt. Möchtest Du das? Ich glaube nicht.

Du möchtest beim ersten Aufruf des Skriptes - welcher durch das Ereignis passiert - den Timer setzen. Wenn der abgelaufen ist, dann soll das Ding angeschaltet werden. Richtig?

Versuche das irgendwie zu verstehen. Wenn es Dir irgendwer vorbetet, hast Du nix gelernt und nix verstanden.

Das was ich in #10 schrieb ist natürlich auch Quatsch. Sorry.

OK, Du hast vielleicht Recht und ich hatte spontan die falsche Idee, ohne dass ich es ausprobiert habe.
Ich hatte nur überlegt warum $_IPS[‚SELF‘] 0 sein kann.
Mein Fehler, sorry. Das Gegenteil von gut ist gut gemeint.

Gruß
Harry

Ich nehme einen Teil mal vorweg:

//Trigger: Variablen-Änderung: "STATE"
$id_aktor = 49439;
// wenn das Skript durch das Timer-Event gestartet wird:
if($_IPS['SENDER'] == "TimerEvent"){
    // Aktor ausschalten
    TPLHS_PowerOff($id_aktor);                     // TPLink-Stecker ausschalten
    // SkriptTimer des Skriptes auf 0 setzen (deaktivieren)
    IPS_SetScriptTimer($_IPS['SELF'], 0);
// wenn das Skript NICHT durch das TimerEvent gestartet wurde, also durch ein Ereignis oder per Hand (zum Beispiel)
}else{
        // SkriptTimer auf 1 Minute setzen, d.h. nach einer Minute wird das Skript wieder ausgeführt.
        IPS_SetScriptTimer($_IPS['SELF'], 1 * 60);    // 1 Minuten
        // Aktor einschalten
        TPLHS_PowerOn($id_aktor);                // TPLink-Stecker einschalten
    }  

Guten Tag,
zunächst vielen Dank für die schnellen Reaktionen!
ich habe das Skript von #12 mit #16, und finde keinen Unterschied… :confused:
Wie beschrieben wird die Lampe sofort, nicht erst nach 60 Sekunden eingeschaltet.
Gruß,
A.

Guten Tag,
zunächst vielen Dank für die schnellen Reaktionen!
ich habe das Skript von #12 mit #16 verglichen, und finde keinen Unterschied…
Wie beschrieben wird die Lampe sofort, nicht erst nach 60 Sekunden eingeschaltet.
Gruß,
A.

Der Unterschied ist, dass ich in #16 alles kommentiert habe, damit Du verstehst, was dort passiert.

Wenn ich noch was zur Fastination beitragen kann:

  ich habe es mit folgendem Code versucht, allerdings schaltet sich die Lampe (an einem TPLink-Stecker) sofort, nicht erst nach 60 Sekunden 

Wenn Du nach 60 Sekunden „AUS“ haben willst, drehe die Befehle in der Schleife um, hab’s aber anders verstanden.
Ich sehe nicht, ob Du ein Ereignis in diesen Script erstellt hast, ich gehe mal davon aus.
Gruß Helmut