Timer durch Ergeignis auslösen

Moin zusammen,

ich suche mir jetzt seit längerem einen Wolf und finde einfach nicht die passende Lösung, vielleicht suche ich zu kompliziert?

ich habe meinen Rasenmäher so weit automatisiert, dass über ein Script mit einem Klick die jeweils zu mähende Zone zugeschaltet wird, der Rollladen von der Hütte hoch fährt und die entsprechend gewünschte Mähfahrt startet. Dafür habe ich extra unter das Bedienfeld des Roboters einen 4 Kanal Schaltaktor gelötet, sonst lässt sich das Modell nicht über’s Handy steuern.

Da ich den Mähvorgang aktuell noch manuell starte, möchte ich einfach, dass der Rollladen der Hütte immer nach 1,5 Stunden wieder zu fährt. Dann müsste der Roboter wieder drin sein.

Da hakt es bei mir jetzt. Sobald ich das Script „Hauptzone Mähen“ starte, müsste eigentlich der Timer anspringen, der 1,5 Stunden später den Rollladen schließt. Wie programmiere ich das?

In der Anleitung: Wie kann ich…? — IP-Symcon :: Automatisierungssoftware

nu 60 Sekunden gegen 1,5 Stunden tauschen

okay, dann ist es wirklich einfacher als Gedacht. Ich war irritiert weil ich irgendwo gelesen habe, dass ein Script nicht über 30 Minuten dauern darf.

ist es dann so in der richtigen Reihenfolge? Ich habe manchmal noch mit der Logik zu kämpfen:

<?php

if($_IPS['59536'] == "TimerEvent")
{
    //An Befehl
HM_WriteValueFloat(12698, "FLOAT", 1.0)
 
    //Timer anschalten
    IPS_SetScriptTimer($_IPS['42117'], 5400);
} else {
    //Aus Befehl
HM_WriteValueFloat(12698, "FLOAT", 0.0)
 
    //Timer ausschalten
    IPS_SetScriptTimer($_IPS['42117'], 0);
}

Ne, schon so wie im Beispiel, du hast es verdreht.
Und das Script läuft nicht lange, der Timer wird ja aufgezogen und startet mit dem eingestellten Abstand das Script erneut.

if($_IPS['SENDER'] == "TimerEvent")
{
    //Aus Befehl
   HM_WriteValueFloat(12698, "FLOAT", 0.0)
 
    //Timer ausschalten
    IPS_SetScriptTimer($_IPS['SELF'], 0);
} else {
    //An Befehl
   HM_WriteValueFloat(12698, "FLOAT", 1.0)
 
    //Timer anschalten
    IPS_SetScriptTimer($_IPS['SELF'], 5400);
}

und auch das IF so lassen bitte

Mir fehlt in der Logik der Bezug zu dem Script, welches den Mähvorgang startet. Woher „weiß“ der Timer, dass er starten soll?

OK, man soll ja angeln lernen statt Fische verteilen…

Also, das Script wird von dir „von Hand“ gestartet, damit dein Rasenmäher los fährt.

  1. Zeile prüft das Script ob es von einem Scripttimer gestartet wurde (der Sender) , wurde es nicht, also jetzt in den Else-Zweig:
  2. dort startet er deinen Rasenmäher und zieht einen Timer auf (kennst du diese Baby-Spieluhren, da wurde jetzt am Faden gezogen).
    und erstmal Ende…

jetzt läuft der Timer (der Faden wird eingezogen) und nach 1,5 Stunden ruft der Timer das gleiche Script wieder auf (deswegen übergibst du SELF an den Timer). Jetzt

  1. IF ist diesmal TRUE da es vom Timer aufgerufen wurde also nicht in den Else-Zweig
  2. dort wird der Rasenmäher wieder abgeschaltet (oder das Toor geschlossen oder was auch immer)
  3. der Timer wird gelöscht (auf 0 gesetzt) und alles ist fertig.

Wenn du dieses Script aber mit einem Zeit-Timer (jeden Tag um 8 Uhr oder so) starten willst musst du die Abfragen noch ein wenig anpassen.

Vielen Dank, jetzt habe ich es glaube ich, wenn das Tor in 1,5 Stunden zu ist :D.

Mein Problem war: Ich wollte mit dem Script den Rollladen selbst steuern und nicht das gesamte Script an machen. Dieser Timer ist damit ja quasi übergeordnet und wird nicht durch das Ausführen des ursprünglichen Scripts gestartet. Da war das Problem :).

Moin noch mal :). Gibt es vielleicht auch die Möglichkeit, einen Timer zu starten sobald der Rollladen auf 100% (offen) steht? Dann könnte ich mit einem Script alle unterschiedlichen Mähprogramme einfangen und den Rollladen 1,5h später wieder zu fahren

Du kannst einen Script Timer setzen und in dem Script dann darauf reagieren.

Nach der Beschreibung habe ich keine Idee wie das mit PHP umzusetzen wäre, dafür reichen meine Kenntnisse nicht aus.

Du setzt ein Ereignis auf deinen Rolladen-Status (wie auch immer der heisst) und bestimmten Wert (100%) und als zu startenden Script nimmst du das hier zusammen erstellte

Okay, das habe ich verstanden. Es gab gestern allerdings noch einen Fehler mit dem Script.

In Zeile 1 steht <?php

24.07.2019, 18:45:37 | ScriptEngine | Result for Event 17270
Warning: HomeMatic Fehler: Unknown parameter in on line 1

17270 muss aber was anderes als das Script sein, da steht etwas von Homematic-Fehler

Ich habe den Fehlerspeicher noch zurückgesetzt und werde noch mal darauf achten, was jetzt passiert

Noch eine andere Frage: Wenn ich das untenstehende Script durch den Rollladen bei 100% offen auslöse, dann startet er ja immer wieder die Fahrt in der Hauptzone (Script 12698) Es soll aber ja auch bei anderen Mähvorgängen funktionieren.

<?php

if($_IPS['SENDER'] == "TimerEvent")
{
    //Aus Befehl
HM_WriteValueFloat(12698, "LEVEL", 0.0);
 
    //Timer ausschalten
    IPS_SetScriptTimer($_IPS['SELF'], 0);
} else {
    //An Befehl
IPS_RunScript(59536);
 
    //Timer anschalten
    IPS_SetScriptTimer($_IPS['SELF'], 5400);
}  

Hier noch das eigentliche Script für den Mähvorgang:

<?php

HM_WriteValueFloat(12698, "LEVEL", 1.0); //Rollladen
 IPS_Sleep(5000);
HM_WriteValueBoolean(39441, "STATE", true); // Draht Hauptzone
HM_WriteValueBoolean(20533, "STATE", false); // Draht Nebenzone1
HM_WriteValueBoolean(18130, "STATE", true); // Stoptaste zum Aufwecken
 IPS_Sleep(2000);
HM_WriteValueBoolean(18130, "STATE", true); // Stoptaste um sicher im Mainmenü zu sein
 IPS_Sleep(2000);
HM_WriteValueBoolean(51826, "STATE", true); // Taste für Mähen, automatisch zuerst Hauptzone ausgewählt
 IPS_Sleep(2000);
HM_WriteValueBoolean(25572, "STATE", true); // Taste OK

jemand eine Idee, warum der folgende Befehl den Rollladen nicht schließt in meiner Ausführung? Es scheint alles wie gewünscht abzulaufen, nur geht der Rollladen nach der zeit halt einfach nicht zu. Das öffnen hingegen im Script funktioniert einwandfrei.

//Aus Befehl
HM_WriteValueFloat(12698, "LEVEL", 0.0);

Gruß

Die ID 12698 gehört auch dem HM Device?