Einfacher Timer

  • Hallo allerseits, bin neu hier und bitte um Euren Input.

    Habe meinen Raspi wiedergefunden und mir gedacht "pack mal ioBroker drauf und schau was passiert.

    Naja hat mich gepackt.



    Nun habe ich direkt mal einen Timer Programmiert. Dabei haben mich natürlich die Videos von Elzershark inspiriert.

    Da ich aber nu mal gar keine Ahnung von der Materie habe, möchte ich euch bitten mal über das Timerscript zu schauen und mir zu helfen es zu verbessern.



    zumindest läuft es schonmal. Aber das geht sicher besser.
    Ich freue mich auf Euer Feedback.
    Und guten Ritsch allerseits.






    var wert_schalter, counter, iv_counter;



    // benoetigt drei virtuelle Geräte

    // Licht_Abzugshaube; Timer_Abzugshaube; schalter_mAzg

    // und ein zweites script abzgstate

    // Dieses Script bewirkt, dass bei

    // Alexa schalte Licht Abzugshaube an

    // Ein einstellbarer Zeitschalter laeuft.

    // Alexa stelle Licht Abzugshaube auf 50

    // ersetzt den voreingestellten Wert

    // Alexa stelle Timer Abzugshaube auf 60

    // aendert den voreingestellten Wert

    on({id: "0_userdata.0.Licht_Abzugshaube"/*Licht_Abzugshaube_*/, change: "any"}, function (obj) {

    var value = obj.state.val;

    var oldValue = obj.oldState.val;

    (function () {if (iv_counter) {clearInterval(iv_counter); iv_counter = null;}})();

    setState("0_userdata.0.schalter_mAzg"/*schalter_mAzg*/, false);

    // setzt die Info, dass der Timer an ist

    // der elektrische Schalter wird den Timer nicht

    // zurücksetzen. Sonst setzt der Schalter auf 100.

    if (getState("0_userdata.0.Licht_Abzugshaube").val == 100) {

    wert_schalter = getState("0_userdata.0.timer_abzugshaube1").val;

    // falls des Licht ohne Zeitvorgabe angeschaltet wird

    // wird die Standarttimerdauer von

    // von timer_abzugshaube verwendet.

    } else {

    // sonst die momentan gewuenschte Dauer

    wert_schalter = getState("0_userdata.0.Licht_Abzugshaube").val;

    }

    if (wert_schalter > 0) {

    setState("shelly.0.SHSW-1#8CAAB54B5CA6#1.Relay0.Switch"/*Switch*/, true);

    // hier schaltet der shelly

    counter = 0;

    iv_counter = setInterval(function () {

    counter = (typeof counter == 'number' ? counter : 0) + 1;

    // der Counter zaehlt bis zur gewuenschten oder

    // voreingestellten Dauer

    if (counter == wert_schalter - 1) {

    setState("alexa2.0.Echo-Devices.G000MW0475050M77.Commands.speak"/*speak*/, ('Das Licht der Abzugshaube wird in einer Minute ausgeschaltet,' + ',um die Dauer zu verlängern, sage Licht Abzugshaube an.'));

    }

    if (counter >= wert_schalter) {

    wert_schalter = 0;

    // diese Zeile ist eigentlich unnötig, da Switch

    // auf false eh den Wert auf 0 setzt

    (function () {if (iv_counter) {clearInterval(iv_counter); iv_counter = null;}})();

    setState("shelly.0.SHSW-1#8CAAB54B5CA6#1.Relay0.Switch"/*Switch*/, false);

    setStateDelayed("0_userdata.0.schalter_mAzg"/*schalter_mAzg*/, true, 1000, false);

    // Freigabe für den Lichtschalter den Timer zu stellen

    }

    }, 60000);

    }

    // Hier die Option zur Abschaltung

    // bei laufendem Timer

    if (wert_schalter == 0) {

    setState("shelly.0.SHSW-1#8CAAB54B5CA6#1.Relay0.Switch"/*Switch*/, false);

    setStateDelayed("0_userdata.0.schalter_mAzg"/*schalter_mAzg*/, true, 1000, false);

    }

    });






    // script abzgstate

    on({id: "shelly.0.SHSW-1#8CAAB54B5CA6#1.Relay0.Switch"/*Switch*/, change: "ne"}, function (obj) {

    var value = obj.state.val;

    var oldValue = obj.oldState.val;

    if (getState("shelly.0.SHSW-1#8CAAB54B5CA6#1.Relay0.Switch").val == true && getState("0_userdata.0.schalter_mAzg").val == true) {

    setState("0_userdata.0.Licht_Abzugshaube"/*Licht_Abzugshaube_*/, 100);

    }

    if (getState("shelly.0.SHSW-1#8CAAB54B5CA6#1.Relay0.Switch").val == false) {

    setState("0_userdata.0.Licht_Abzugshaube"/*Licht_Abzugshaube_*/, 0);

    }

    });