Timer Skript funktioniert nicht zuverlässig

Hallo zusammen,

irgendwie habe ich so einige Probleme mit meinem Timer-Skript für die Warmwasser-Zirkulationspumpe. Irgendwo ist da der Wurm drin, ich finde es aber einfach nicht, woran es liegen kann. Vielleicht hat jemand von Euch ein Adlerauge und ihm fällt direkt etwas ins Auge?

Angesteuert wird das Skript über LongPush von Tastern (Shelly-Eingänge), als auch bei „Änderung von STATE eines Homematic Zwischensteckers“

Das funktioniert auch soweit.

Weiterhin habe ich eine Boolean-Variable angelegt, welche als Aktionsskript auf das Timer-Skript verweist. Auch dieses funktioniert soweit (für das Webfront).

Allerdings ist es wie folgt:
Wird über die Boolean-Variable das Timer-Skript gestartet und die Boolean-Variable vor Ablauf des Timers manuell wieder auf false gesetzt, so läuft der Timer weiter bis die 300 Sekunden erreicht sind. Das bedeutet: Schaltet man für 1 min die Boolean auf true, danach auf false, dann läuft das Timer-Skript für 240sek. weiter. Was wiederum zur Folge hat, das bei einem erneuten Einschalten der Variablen das Timer-Skript keine 300sek mehr läuft (sondern nur noch die Restzeit).

Wird der Schaltaktor selbst geschaltet (Homematic IP Zwischenstecker), so greift das Timer-Skript gar nicht…
Wäre sinnvoll, wenn es hier auch greifen würde, dann bräuchte ich die zusätzliche Variable nicht.

<?php

switch($_IPS['SENDER']){
    case "TimerEvent":
        //Aus Befehl
        RequestAction(54748, false);
    
        //Timer ausschalten
        IPS_SetScriptTimer($_IPS['SELF'], 0);
        break;

    case "WebFront":

        RequestAction(54748, $_IPS['VALUE']);

        if ($_IPS['VALUE']){ //An Befehl
            //Timer anschalten
            IPS_SetScriptTimer($_IPS['SELF'], 300);
        }
        break;

    
    case "Variable": 
        if ($_IPS['VARIABLE'] == 54748){
            SetValueBoolean(51827, $_IPS['VALUE']);
        
        } else { //LongPush über Shelly Aktor
            RequestAction(54748, true);

            //Timer anschalten
            IPS_SetScriptTimer($_IPS['SELF'], 300);
        }
        
        break;

    default:
        trigger_error('Nicht erwarteter Sender: ' . $_IPS['SENDER']);
}

In deiner Case und dann If Bedinung „Variable = BooleanVariable“ wird der Timer ja auch nicht bearbeitet. Du möchtest hier vmtl auch noch einbauen, dass der Timer auf (int)$_IPS[‚VALUE‘] * 300 gesetzt wird. $_IPS[‚VALUE‘] ist true (1) oder false (0) durch den cast zu int kannst du damit rechnen und bist mit einer Zeile fertig.

Hat der Schaltaktor einen State Kanal der mit dem Script verknüpft ist? Ich empfehle dir noch einige Zeilen mehr IPS_LogMessage einzubauen (script wurde gestartet, befindet sich jetzt in if Bedingung „bla“ in Zeile xy, $_IPS[‚VALUE‘] ist true/false, Sender ist TimerEvent, etc.)

Leider hast du die Variablen IDs nicht dokumentiert (ja liegt am Rauskopieren aus dem neuen Editor), aber das macht es schwierig sich hier ein Bild zu machen, worum es sich bei den Variablen handelt.

PS: Wie löst du das Long-Press des Shellys?

@tobiasr

Puuuhhh… so richtig verstehen tu ich es nicht.

Zu Deiner Frage:

Longpush über Shelly:

Das wird ausgewertet über ‚Auslösende Variable = Longpush bei Aktualisierung‘ und ‚Weitere Bedingung: Longpush = true‘.
Das funktioniert so einwandfrei.