Zyklisches Ereignis löst Skript nicht aus

Moin,
ich habe keine Lösung hier im Forum gefunden.
Ich habe ein zyklisches Ereignis unter einem Skript erstellt. Wenn ich das Skript manuell ausführe, funktioniert alles. Das zyklische Ereignis startet jedoch das Skript nicht.
Ich nutze Symcon 5.5. Dadurch habe ich die Option „Führe Automation aus“ gar nicht.
Einstellt ist: Führe Skript aus und das richtige Skript ist auch ausgewählt (ich habe ja das zyklische Ereignis per Rechtsklick auf das Skript erstellt).
An der Systemuhr kann es nicht liegen, das ist bei der Symbox richtig, jedenfalls wird die Zeit bei Änderungen von Variablen z.B. richtig angezeigt.

Hat alles schonmal geklappt. Wo hab ich einen Knoten im Hirn? Vielen Dank!

Hi,
gebe am Anfang vom Script mal einen Text im Log aus um zu sehen ob es wirklich nicht startet. Dein Script zu kennen wäre auch hilfreich.

Ralf

Moin Ralf, danke für die Antwort.
Hier das Skript:

if($_IPS[‚SENDER‘] == „TimerEvent“)
{
//Aus Befehl
KNX_WriteDPT1(18200,false);
//Timer ausschalten
IPS_SetScriptTimer($_IPS[‚SELF‘], 0);
} else {
//An Befehl
KNX_WriteDPT1(18200,true);
//Timer anschalten
IPS_SetScriptTimer($_IPS[‚SELF‘], 180);
}

Welchen Code nutze ich, um im Skript einen Text fürs Log zu generieren?

Er meint ev. echo ?
echo " Hallo";
if($_IPS[‚SENDER‘] == „TimerEvent“)
{
//Aus Befehl
KNX_WriteDPT1(18200,false);
//Timer ausschalten
IPS_SetScriptTimer($_IPS[‚SELF‘], 0);
} else {
//An Befehl
KNX_WriteDPT1(18200,true);
//Timer anschalten
IPS_SetScriptTimer($_IPS[‚SELF‘], 180);
}

Ich denke IPS_LogMessage sollte funktionieren:

Gemäß Screenshot würde die Bewässerung von 00:08 (Tippfehler?) bis 20:00 alle 10 Minuten für 3 Minuten eingeschaltet, da wird also noch eine weitere Bedingung vorhanden sein?

Wie sieht es also mit diesen „weiteren Bedingungen“ in deinem zyklischen Ereignis aus, verhinden die die Ausführung?

Das funktioniert nicht, weil du auf „TimerEvent“ prüfst.
Da aber sowohl dein Ereignis als auch dein ScriptTimer ein TimerEvent sind, wirst du nie in den Else-Zweig gelangen.

1 „Gefällt mir“

Hallo Slummi, danke! Das klingt vernünftig.
Wie kann ich das Problem denn am besten lösen?
Kann ich im Skript auf ein TimerEvent mit bestimmtem Namen prüfen?

Moin,
ich mach das so:

if (isset($_IPS['EVENT'])){
    switch ($_IPS['EVENT']){
        case ID von Deinem Event:
            break;
    }
}

Ralf

Es gibt viele Möglichkeiten, wie du das prüfen kannst. Du kannst, wie von @HarmonyFan beschrieben, auf die ID des Events prüfen.

Du kannst auch prüfen, ob das Skript vom ScriptTimer ausgelöst wurde:

<?php

// Wenn das Skript durch den ScriptTimer aufgerufen wurde, den ScriptTimer deaktivieren
if (@$_IPS['EVENT'] === @IPS_GetObjectIDByName('ScriptTimer', $_IPS['SELF'])) {
    IPS_SetScriptTimer($_IPS['SELF'], 0);
}

// Wenn das Skript nicht durch den ScriptTimer aufgerufen wurde, ScriptTimer aktivieren
else {
    IPS_SetScriptTimer($_IPS['SELF'], 60);
}

Du könntest auch ganz ohne Skript arbeiten und einfach Events an die Instanz hängen.

Alternativ einen Ablaufplan, der hat die Wartezeit als Aktion mit integriert und benötigt keinen Skript-Timer.

Danke an alle für die Hilfe! Ich bin erstmal happy, dass ihr mir sagen konntet, woran es liegt. Ich muss schauen, welche Lösung ich favorisiere. Wochenplan finde ich schwierig, weil der jedenfalls in meiner Symcon Version schwierig einzustellen ist, wenn man kurze Zeiträume hat.

Niels meint den Ablaufplan anstelle eines Scripts. Ablaufplan (Script-Alternative) und Wochenplan (Schaltuhr) sind unterschiedliche Dinge.

Achso. Danke!
Ablaufpläne habe ich mit meiner alten Symcon Version gar nicht. Aber ihr habt mir ja schon gezeigt, wie es sonst auch geht.