Fehler in der Doku?

Hallo zusammen,

ich möchte mir einen Timer bauen.
Hintergrund: ich habe mir auf Basis eines ESP8266 und einem Bewegungsmeldermodul einen Bewegungsmelder gebaut. Dieser meldet nun Dank dem tasmota-Modul hier in IPS und einem MQTT Server den Status. Die Bewegung an sich wird dabei jedoch nur für einen Bruchteil einer Sekunde gemeldet. Daher der Timer, der meine Lampe im Falle einer Bewegung für (exemplarisch) 10 Sekunden einschalten soll.

In der Doku finde ich dazu folgendes: Wie kann ich…? — IP-Symcon :: Automatisierungssoftware
Wen ich das Script für mich anpasse, dann sieht es wie folgt aus:

<?

if($_IPS[23845 /*[Sonoff\Garage Bewegungssensoren\POWER]*/] == "TimerEvent")
{
    //Aus Befehl
    SetValue(30676 /*[Sonoff\Garage Bewegungssensoren\POWER\Dummy Licht]*/,false);
 
    //Timer ausschalten
    IPS_SetScriptTimer($_IPS['SELF'], 0);
} else {
    //An Befehl
 	SetValue(30676 /*[Sonoff\Garage Bewegungssensoren\POWER\Dummy Licht]*/,true);
 
    //Timer anschalten
    IPS_SetScriptTimer($_IPS['SELF'], 10);
}

?>

Das Script starte ich per Ereignis. Es funktioniert aber nicht.
Die Lampe erfährt keine Änderung. Liege ich falsch, oder ist die Vorgabe fehlerhaft?


if($_IPS[23845 /*[Sonoff\Garage Bewegungssensoren\POWER]*/] == "TimerEvent")

Das muss so sein:


if($_IPS["SENDER"] == "TimerEvent")

Da warst du beim Ersetzen etwas eifrig :wink:

paresy

Hallo,

sowas habe ich für meinen Monitor auch gebaut.

Ich habe wie folgt gemacht:

Eine Variable Bewegung, diese setze ich bei erkannter Bewegung auf true.
Das mache ich mit einem Hilfsscript:


if(!GetValue(37648 /*[Sonoff-Module\Kai\IPS_Sonoff TH45 Verteilung\Bewegung]*/)) {
SetValue(37648 /*[Sonoff-Module\Kai\IPS_Sonoff TH45 Verteilung\Bewegung]*/, true);
}
IPS_SetScriptTimer(26292 /*[Sonoff-Module\Kai\IPS_Sonoff TH45 Verteilung\Bewegung\Bewegungs Timer resetten und false setzen]*/, 0);
ips_sleep(100);
IPS_SetScriptTimer(26292 /*[Sonoff-Module\Kai\IPS_Sonoff TH45 Verteilung\Bewegung\Bewegungs Timer resetten und false setzen]*/, 300);


Das Script wird ausgeführt sobald eine Bewegung von dem Sonoff Gerät erkannt wird.

Dann habe ich mir ein zweites Script angelegt:


SetValue(37648 /*[Sonoff-Module\Kai\IPS_Sonoff TH45 Verteilung\Bewegung]*/, 0);

Unter diesem Script habe ich einen Scripttimer angelegt.
Der läuft für 300 Sekunden. In dem ersten Script siehst du, dass ich diesen ScriptTimer sobald eine Bewegung erkannt wurde kurz auf 0 setze und dann wieder auf 300, heißt also die Variable Bewegung bleibt so lange true, bis 300 Sekunden keine Bewegung erkannt wurde.

Ich hoffe ich konnte es einigermaßen verständlich erklären und du kannst es für dein Vorhaben anpassen.

Edit: Die Lösung von paresy ist natürlich wesentlich eleganter. :smiley:

Grüße,
Kai

mit der alternativen Firmware „ESPEASY Mega“ könnte dir der ESP von sich aus, die Bewegung an einen Server Socket von IPS schicken. D.h. kein MQTT dazwischen oder sonstige Verenkungen notwendig :slight_smile:

Ich bin von ESPEasy in Verbindung mit meinem Sonoff 4Channel super zufrieden. Für mich gehört MQTT/IFTT… nativ in IPS integriert. So gut die Module von den tollen Programmieren hier inzwischen auch sind… aber mit jedem Update, jeder Änderung an IPS, kann es sein, dass irgendwas nicht mehr geht… Inzwischen nütze ich nur noch „Keep it simple“…

Stimmt ausfallend … nun funktioniert es super!
DANKE!