Timer Script (Licht aus nach X min)

Habe nun alles komplett neu eingerichtet, das Skript geht schon, es startet nur nicht sobald die Lampe an geht.
Durch das Skript wird ein ScriptTimer erstellt, dieser ist aber inaktiv und wird nicht aktiv, es sei dem ich gehe in das Skript und starte es.

Was ist so falsch das das Skript nicht selbstständig läuft?

<?php

if($_IPS['SENDER'] == "TimerEvent")
{
    //Aus Befehl (Licht aus)
    
    RequestAction(12245, false); 
 
    //Timer ausschalten
    IPS_SetScriptTimer($_IPS['SELF'], 0);
} else {
    //An Befehl
   RequestAction(12245, true); 
    $istTag = GetValue(15727);
    
    if($istTag) {
        $dauer = 30;
    } else {
        $dauer = 30;
    }        
    IPS_SetScriptTimer($_IPS['SELF'], $dauer);
} 
?>

Es muss schon einen Auslöser geben damit das Script startet.
Oder woher soll das Script wissen wann es starten soll?

Du musst Dir ein Ereignis erstellen wann es passieren soll und das Script auswählen und
dann noch Script starten auswählen.
Und ein gute Tipp dazu, bei dem Eregnis kannst weitere Bedingungen hinzufügen, das ersparrt manchmal
viel Scripterei… ( Sehr nützliche Funktion!)

Edit: Hier mal mein beispiel eines Scriptes, diesen kannst Du dir anpassen, kannst aber
auch als Beispiel anschuen. Bei mir müssen schon viele Bedingungen erfüllt sein.
Der muss jetzt nicht super korrekt sein, aber läuft astrein!

<?

$bm1=GetValue(26546);
$bm2=GetValue(34854);
$bm3=GetValue(33648); // Das sind Bewegusmelder
$tr=GetValue(26900); // Tür
$zeitmuster=GetValue(28594); 
$zeitmuster2=GetValue(43085);
$zeitmuster3=GetValue(10804); // Verschiedene Zeiten
$hell=GetValue(10019); // Helligkeit draußen
$auto=GetValue(51114); // Automatik oder aus

if(($_IPS['SENDER'] == "TimerEvent") && ($bm1 === true && $bm2 === true && $bm3 === true && $tr === false && $zeitmuster === false && $zeitmuster2 === false && $zeitmuster3 === false))
{
RequestAction(47173,0);
    	IPS_SetScriptTimer($_IPS['SELF'], 0);
} 		
if(($_IPS['SENDER'] == "TimerEvent") && ($bm1 === true && $bm2 === true && $bm3 === true && $tr === false && $zeitmuster === true or $zeitmuster2 === true or $zeitmuster3 === true))
{
RequestAction(47173,200);
    	IPS_SetScriptTimer($_IPS['SELF'], 0);
		
} 

elseif (($bm1 === false or $bm2 === false or $bm3 === false or $tr === true) and ($hell === false) and ($auto === true))
{
RequestAction(47173,1000);
        IPS_SetScriptTimer($_IPS['SELF'], 30); 
}
?>

Und so muss es bei Dir inetwa aussehen, beim Auslösen des Bewegungsmelders soll das Script gestartet werden:

Beispiel.png

Hoffe das hilft es Dir.

Könnte so bei Dir aussehen, für serre musst Dir nen Boalen erstellen.
Aber ohne gewähr, das es funktioniert…:

 <?

$bm=GetValue(); 			// Bewegungsmelder
$sperre=GetValue(); 		// Sperre des Timers

if(($_IPS['SENDER'] == "TimerEvent") && (($bm === false) and ($sperre === false))
{
RequestAction(12245, false);
        IPS_SetScriptTimer($_IPS['SELF'], 0);
}         
if(($_IPS['SENDER'] == "TimerEvent") && (($bm === false) and ($sperre === true))
{
RequestAction(12245, true);
        IPS_SetScriptTimer($_IPS['SELF'], 0);
        
} 

elseif ($bm === true)
{
RequestAction(12245, true);
        IPS_SetScriptTimer($_IPS['SELF'], 30); 
}
?> 

Danke!!!

Klingt schon logisch mit dem Auslöser :banghead:
Manchmal sieht man den Wald vor lauter Bäumen nicht…:banghead:
Ok eingerichtet und klappt.
Theoretisch könnte man es auch auf den Status einrichten, egal ob manuell oder über Bewegungsmelder, wird eingeschaltet läuft der Timer, oder bringt der Status etwas negatives mit?

Jetzt benötige ich in WebFront und App nur die Möglichkeit den Timer zu deaktivieren, falls mal länger Licht benötigt wird.
Wie ginge das?
„Button Timer aus“ (Quasi)

Na im letzten Beispiel habs sogar schon zusammen geschmissen.
Aber ohne Gewähr ist ungetestet.

Erstellst Dir dort im Webfront wo Du die Taste haben möchtest
einen Boalen. Damit Du true und false umschalten kannst.
Dann die ID des Tasters in das Script eintragen.
Und testen, kann sein das es auch nicht korrekt ist,
kann selber nicht so gut programmieren…

Gruß

Wie müsste das Skript angepasst werden wenn die Helligkeit nur X% sein sollten?

Um X% zu bekommen müsste ich auf die Variable der Helligkeit wechseln, das ist klar, aber wie muss der Rest aussehen?

<?php
if($_IPS['SENDER'] == "TimerEvent")
{
    //Aus Befehl (Licht aus)
    
    RequestAction(31843, false); 
 
    //Timer ausschalten
    IPS_SetScriptTimer($_IPS['SELF'], 0);
} else {
    //An Befehl
    RequestAction(31843, true); 
 
    //Timer anschalten
    IPS_SetScriptTimer($_IPS['SELF'], 60);
} 
?>

Abschalten sollte es dann komplett, da würde das Skript unverändert bleiben.
Tag/Nacht und Helligkeit steuere ich über das auslösende Ergebnis, weitere Bedingungen, das ist einfach.

Oder macht es mehr Sinn ein 2. Ergebnis zum Skript hinzuzufügen das einiges steuert?
Als blutiger Anfänger in php finde ich ein Ergebnis sympatischer, aber lernen möchte ich ja auch.
Wenn das so überhaupt geht?

Wenn das Licht auf eine weitere Gegebenheit reagieren soll musst du ein weiteres Ereignis erstellen. Je Ereignis kann es nur einen Auslöser geben.

Wenn das Licht nur mit X% angehen soll dann musst du einfach den einschaltbefehl ändern. Schau in die moduldoku wie der Befehl aussieht.

Das Ergebnis landet dann aber automatisch bei Helligkeit, macht das keine Probleme?
Unter dem Skript lässt es sich nicht erstellen.

Und im Skript wird mit True geschalten, sollte es dann nicht auf 100% gehen, also „nur“ an?
Macht er zwar nicht aber irgendwie widersprüchlich, oder?

Bei der Nutzung ist noch eine Frage aufgetaucht.
Ist es möglich den Timer bei erneuter Bewegung zurückzusetzen, damit er neu läuft?

Der Timer läuft immer von vorne bei erneuten Ereignissen.
Würde ja sonst keinen Sinn machen.

Habe Dir oben mein Script als Beispiel hinzugefügt, schaue Dir den
genau an. Bei mir ist es auch so, das bei bestimmten Ereignissen
was anderes passiert.
Schaue Dir bitte genau an, ist nicht so schwer.
Wenn Du fragen hast, frag ruhig. Bin aber auch kein Profi…

Habe nun versucht eine Sperre, wie in euren Beiträgen erwähnt, einzurichten.
Komme aber nicht weiter.

Habe ein Dummy Modul eingerichtet.
Darunter eine Variable mit Boolean (True).
Aber diese zeigt nur true und false an, ein Schalter entsteht so ja keiner.

Wie erstellt man aus einer Variablen einen Schalter?
Wie ich ihn in die Ergebnisse bekomme weiß ich dann, glaube ich, wieder.

Aktionsskripte — IP-Symcon :: Automatisierungssoftware

Gesendet von iPhone XS mit Tapatalk

Habe das Skript aus Beispiel 2 genommen.
Nun könnte ich schalten in dem ich im WebFront manuell etwas eingebe.
Allerdings ein Schalter entsteht so nicht.

if (FS20_SwitchMode(12345, (boolean)$_IPS['VALUE'])) {
    SetValue($_IPS['VARIABLE'], $_IPS['VALUE']);
}

Mir ist auch nicht klar auf was sich die 12345 beziehen sollte.
Weder Variable, noch Instanz sind damit offenbar gemeint, da kommt ein Fehler.
Auf was müsste sich dies beziehen?
Verstehe ich es richtig das ein Aa/Aus zurückgegeben wird (bzw. true/false) wenn der
Schalter betätigt wird und dies wird im Ergebnis der eigentlichen Schaltung als „Weitere Bedingung“
im auslösenden Ereignis hinterlegt?

Nimm Beispiel 1 bzw musst du nur die Standardaktion aktivieren.

Und ja…

Hatte ich versucht, geht aber nicht.

<?php

//Documentation: https://www.symcon.de/en/service/documentation/concepts/scripts/action-scripts/
SetValue($_IPS['VARIABLE'], $_IPS['VALUE']);

Kam als Meldung:
Notice: Undefined index: VARIABLE in /var/lib/symcon/scripts/21782.ips.php on line 4
Notice: Undefined index: VALUE in /var/lib/symcon/scripts/21782.ips.php on line 4
Warning: Variable #0 existiert nicht in /var/lib/symcon/scripts/21782.ips.php on line 4

1.JPG

2.JPG

Was mach ich falsch?
(Umbennen würde ich alles noch vernünftiger)

Keine eigenen Aktion! Du willst ja nur die Variable schalten und kein Gerät. Einfach die Standardaktion nehmen. Da musst du auch nichts im Script anpassen. Und nimm als variablenprofil Switch

Super hat funktioniert, scheint alles gut zu laufen!!!

Gibt es eine Möglichkeit an den „Schalter“ eine „Restartzeit“ zu hängen?
Wird über den Schalter das Ergebnis Abgeschalten (inaktiv gesetzt) sollte dies selbstständig wieder
rückgängig gemacht werden nach z.B. 24 Std.

Am einfachsten geht es mit einer festen Uhrzeit z.B. Immer um 0.00 Uhr. Einfach ein Ereignis für die Variable erstellen. Wenn du es nach X Stunden haben willst musst du es wieder mit einem scripttimer machen. Wie beim Licht nach x Minuten aus…

Alternativ könnte auch das treppenhauslicht Modul funktionieren. Nur das es eben kein Licht schaltet sondern deine Variable.

Hab ich gebastelt, als Resetsteuerung.
Es gibt nun einen zusätzlichen Schalter Resetsteuerung, dieser wird im normalen WebFront nicht angezeigt.
Da ich viel unterwegs bin habe ich ein Admin-WebFront gebastelt in dem ALLE Geräte und Einstellungen sichtbar sind.
So kann meine Frau zur Not auch etwas schalten wenn ich nicht da bin und das Bedienungswebfront etwas nicht anzeigt.

Etwas wundert mich dann nun aber.
Beim Reset 4 Uhr Nachts ist ein grüner Haken das dieser aktiv ist, unter weitere Bedingungen steht aber blockiert.
Sollte wenn es blockiert ist statt des grünen Hakens nicht das gelbliche Kreuz sein?

1.PNG

2.PNG

Bis jetzt lief es gut, offenbar ist nun alles ok.
Mal sehen ob in den nächsten Tagen noch ein Problem auftaucht, vermutlich nicht. :cool:

Danke an alle die Geholfen haben und an deren Geduld!!!

Mit der Darstellung hast du vollkommen recht. Die sollte an beiden Stellen synchron sein. Welche Aussage war denn korrekt? Sollte das Ereignis blockiert sein oder nicht? Welchen Browser und welche Version von IP-Symcon verwendest du?

Es sollte blockiert sein.

Interessant ist das es heute gelb wird.
Seit 5.3 kommt es mir vor als dauert alles ein wenig länger.

Auf jeden Fall hat der Reset geklappt.