Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. [Gelöst] Verständnisfrage Datenpunkt für setTimeout nutzen?

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    3.3k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    1.1k

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.4k

[Gelöst] Verständnisfrage Datenpunkt für setTimeout nutzen?

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
3 Beiträge 2 Kommentatoren 264 Aufrufe
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • M Offline
    M Offline
    malc
    schrieb am zuletzt editiert von
    #1

    Guten Moorgen!

    Ich baue gerade an meiner Bewässerungssteuerung und da ich gern alles so dynamisch wie möglich gestalten möchte bin ich auf eine Situation gestossen wo ich mal ne Grundsatzfrage habe:

    In dem Projekt gibt es arg viele Devices die jeweils eigene Timer nutzen. Ich kann diese natürlich als Array definieren aber scheinbar funktioniert das auch wenn ich das als jeweiligen Datenpunkt (Integer) zuweise.

    Schön das es funktioniert doch bin ich mir nicht sicher ob das ein legitimer Weg ist. Gibt es da Gründe die dagegen sprechen?

    Malc

    Fan von ioBroker!

    <size size="50">und falls ich eine Frage stelle die irgendwo schon mal beantwortet wurde: "Ja, Suchfunktion genutzt, aber keine Lösung gefunden / nicht die richtigen Suchbegriffe gewusst."

    …</size>

    1 Antwort Letzte Antwort
    0
    • apollon77A Online
      apollon77A Online
      apollon77
      schrieb am zuletzt editiert von
      #2

      Best practice ist es die timeout ids in dem Skript Lokal vorzuhalten zb in einem array oder Objekt wo sie gesetzt werden.

      Die Werte in States zu persistieren mach wenig Sinn weil wenn das Skript beendet wird oder js Adapter neu gestartet wird sind die ids weg und ungültig. Im Notfall verweisen sie auf andere Timeouts. …

      Gesendet vom Handy ...

      Beitrag hat geholfen? Votet rechts unten im Beitrag :-) https://paypal.me/Apollon77 / https://github.com/sponsors/Apollon77

      • Debug-Log für Instanz einschalten? Admin -> Instanzen -> Expertenmodus -> Instanz aufklappen - Loglevel ändern
      • Logfiles auf Platte /opt/iobroker/log/… nutzen, Admin schneidet Zeilen ab
      1 Antwort Letzte Antwort
      0
      • M Offline
        M Offline
        malc
        schrieb am zuletzt editiert von
        #3

        @apollon77:

        Best practice ist es die timeout ids in dem Skript Lokal vorzuhalten zb in einem array oder Objekt wo sie gesetzt werden. `

        Das macht Sinn!

        In Meinem Beispiel hätte ich erwartet das beim 2. Aufruf "StartTimer(0, false);" der Bereich "log("CLEAR " + Device[id][0]);" aufgerufen wird da ich beim ersten Aufruf den Timer dem Array Device[1][1] zugeordnet habe. Das geschieht aber nicht. Vermutlich habe ich da noch nen Hänger. Ich bin noch nicht so fit in Javascript, habe ich da was übersehen?

        Ich muss da mal mehr über die Gültigkeitsbereiche von Javascript lesen :-)

        Malc

        var Device = [];
        Device[0]           = ['Device1',  null, 0];
        Device[1]           = ['Device2',  null, 0];
        
        StartTimer(0, true);
        StartTimer(0, false);
        
        function StartTimer(id, on) {
        
            var d = Device[id][0];
            var t = Device[id][1];
        
            var Duration = 2;
        
            if (on) {
            	 log("Start TImer für  " +d );
        
                t = setTimeout(function (){                                                                             
                    log("Expired  " + d );
                    clearTimeout(t);
                    t = null;
                }, Duration * 5 * 1000); 
        
            } else {
                log("OFF  " + d);
                if(t) {
                    log("CLEAR " + d);
                    clearTimeout(t);
                }
            } 
        
        

        Edit:

        Wenn ich var t = Device[id][1]; (war nur wegen der Lesbarkeit) weglasse und direkt auf das Arrayelement gehe klappt es.

        Die Deklaration var t = De… ist wohl kein Zeiger, da scheint es doch im Javascript Eigenarten zu geben.

        var Device = [];
        Device[0]           = ['Device1',  null, 0];
        Device[1]           = ['Device2',  null, 0];
        Device[2]           = ['Device3',  null, 0];
        
        StartTimer(0, true);
        StartTimer(0, false);
        
        function StartTimer(id, on) {
        
            // log(Device[id][0]);
        
            //var t = Device[id][1];
            //var t = x;
            var Duration = 2;
        
            if (on) {
                Device[id][1] = setTimeout(function (){                                                                             
                    log("Expired  " + Device[id][0]);
                    clearTimeout(Device[id][1]);
                    Device[id][1] = null;
                }, Duration * 5 * 1000); 
        
            } else {
                log("OFF  " + Device[id][0]);
                if(Device[id][1]) {
                    log("CLEAR " + Device[id][0]);
                    clearTimeout(Device[id][1]);
                }
            } 
        
        }
        
        

        Fan von ioBroker!

        <size size="50">und falls ich eine Frage stelle die irgendwo schon mal beantwortet wurde: "Ja, Suchfunktion genutzt, aber keine Lösung gefunden / nicht die richtigen Suchbegriffe gewusst."

        …</size>

        1 Antwort Letzte Antwort
        0
        Antworten
        • In einem neuen Thema antworten
        Anmelden zum Antworten
        • Älteste zuerst
        • Neuste zuerst
        • Meiste Stimmen


        Support us

        ioBroker
        Community Adapters
        Donate

        650

        Online

        32.7k

        Benutzer

        82.3k

        Themen

        1.3m

        Beiträge
        Community
        Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
        ioBroker Community 2014-2025
        logo
        • Anmelden

        • Du hast noch kein Konto? Registrieren

        • Anmelden oder registrieren, um zu suchen
        • Erster Beitrag
          Letzter Beitrag
        0
        • Home
        • Aktuell
        • Tags
        • Ungelesen 0
        • Kategorien
        • Unreplied
        • Beliebt
        • GitHub
        • Docu
        • Hilfe