TimerEvent in ToogleButton

Hallo,

ich habe ein Problem mit einem Button der ein Script schalten soll - was soweit funktioniert, z.B. Wenn ich den Button „Warmwasser“ einschalte oder ausschalte, dann wird mit dem folgenden Script geschaltet:

SetValue($_IPS['VARIABLE'], $_IPS['VALUE']);

if ($_IPS['VALUE']) {
  // Aktionen für An
  SetValueInteger(21984, 2);
  IPS_Sleep(5000);
  SetValueInteger(21984, 1);
  SetValueBoolean(11786,false);
}
else {
  // Aktionen für Aus
  SetValueInteger(21984, 1);
  SetValueBoolean(11786,false);
}

Nun, aber die Herausforderung:

Wenn eingeschaltet wurde, soll automatisch nach 30 Minuten wieder ausgeschaltet werden, beim Test mit IPS_Sleep funktioniert es z.B. mit 5 Sekunden, dies soll jedoch nicht bei längeren Unterbrechungen als 30 Sekunden verwendet werden. Deshalb habe ich es mit dem Timerevent versucht (z.B. Test 1 Minute) - aber das funktioniert nicht und ich bekomme ein rotes Ausrufezeichen vor dem Script. Ich habe versucht einfach ein TimerEvent Script in die „An“ Schleife des bestehenden Scriptes zu packen - was wahrscheinlich nicht funktioniert.

Ich habe folgendes Verwendet:

SetValue($_IPS['VARIABLE'], $_IPS['VALUE']);

if ($_IPS['VALUE']) {
    if($_IPS[‚SENDER‘] == „TimerEvent“)
        {
            //Aus Befehl
            SetValueInteger(21984, 1);
            SetValueBoolean(11786,false);
            //Timer ausschalten
            IPS_SetScriptTimer($_IPS['SELF'], 0);
        } else {
            //An Befehl
            SetValueInteger(21984, 2);
            //Timer anschalten
            IPS_SetScriptTimer($_IPS['SELF'], 1);
        }
}
else {
    // Aktionen für Aus
    SetValueInteger(21984, 1);
    SetValueBoolean(11786,false);
    //Timer ausschalten
    IPS_SetScriptTimer($_IPS['SELF'], 0);
}

Könnt ihr mit bitte weiterhelfen bei dem Problem? Habe ich gar einen komplett falschen Denkansatz?

Danke für eure Unterstützung :slight_smile: .

Erstmal sind in deinem Code teilweise falsche Anführungszeichen vorhanden.
Vermutlich Copy Paste Fehler?
Dann immer zuerst auf den ‚SENDER‘ prüfen.
Weil ‚VARIABLE‘ ist bei einem TimerEvent nicht vorhanden, was auf jeden Fall einen Fehler wirft.
Michael

Kleiner logischer Fehler soweit ich sehe.

Versuch mal:

<PHP?
if($_IPS['SENDER'] == „TimerEvent“)
    //Aus Befehl
    SetValueInteger(21984, 1);
    SetValueBoolean(11786,false);
    //Timer ausschalten
    IPS_SetScriptTimer($_IPS['SELF'], 0);
    return;
}

if (!isset($_IPS['VARIABLE'])) return;

SetValue($_IPS['VARIABLE'], $_IPS['VALUE']);

if ($_IPS['VALUE']) {
    //An Befehl
    SetValueInteger(21984, 2);
    //Timer anschalten
    IPS_SetScriptTimer($_IPS['SELF'], 30);
}
else {
    // Aktionen für Aus
    SetValueInteger(21984, 1);
    SetValueBoolean(11786,false);
    //Timer ausschalten
    IPS_SetScriptTimer($_IPS['SELF'], 0);
}
?>

Logische Fehler: Du willst ja nur nach 30 Sekunden ausschalten wenn es eingeschaltet wurde, d.h. Timer nur starten wenn angeschaltet wurde. Wenn Timer nicht läuft die Aktion normal ausführen lassen.

Ralf

Hallo @HarmonyFan - danke für deine Hilfe.

Leider funktioniert das nicht - dachte das das zuerst daran lag, das es beim ersten if eine geöffnete geschweifte Klammer fehlt, aber auch das hilft nicht.

Dann erhalte ich ein Ausrufezeichen und kann auch den Button per Alexa nicht mehr bedienen (Idee ist, warmes Wasser auf Alexa Zuruf einzuschalten und dann automatisch nach 30 Minuten wieder abzuschalten - zum testen sind natürlich 30 Sekunden besser :wink: ).

Aber da scheint noch ein Fehler zu sein :thinking:.

Hi,
sorry da gab es bei „TimerEvent“ die falschen Anführungzeichen. Ich habe das Script mal auf ein Minimum gekürzt. Es gibt nur die Toggle-Variable was Du dann zusätzlich machst liegt an dir. Toggle kann ich simulieren den Rest leider nicht.

<?php
if($_IPS['SENDER'] == 'TimerEvent'){
    //Aus Befehl
    SetValueBoolean(40102,false);
    //Timer ausschalten
    IPS_SetScriptTimer($_IPS['SELF'], 0);
    return;
}

if (!isset($_IPS['VARIABLE'])) return;

SetValue($_IPS['VARIABLE'], $_IPS['VALUE']);

if ($_IPS['VALUE']) {
    //Timer anschalten
    IPS_SetScriptTimer($_IPS['SELF'], 30);
}
else {
    // Aktionen für Aus
    SetValueBoolean(40102,false);
    //Timer ausschalten
    IPS_SetScriptTimer($_IPS['SELF'], 0);
}
?>

Ach ja 40102 ist eine Boolean Variable mit diesem Script als Aktionsscript.

Ralf