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. JavaScript
  5. [gelöst] timeout in der Schleife

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.8k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.2k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.4k

[gelöst] timeout in der Schleife

Geplant Angeheftet Gesperrt Verschoben JavaScript
javascript
5 Beiträge 2 Kommentatoren 448 Aufrufe 1 Watching
  • Ä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.
  • G Offline
    G Offline
    Gwenselah
    schrieb am zuletzt editiert von Gwenselah
    #1

    Guten Abend,

    ich habe eine Verständnisfrage: Werden innerhalb eines ON-Triggers enthaltene Funktionen oder Variablen instanziert, also als eigene Funktion gesehen?

    Ein Beispiel:

    var SonoffAlertDevices = [
        {Name: '3D Drucker', Objekt: 'sonoff.0.Ender.ENERGY_Power', ThresholdOn: 30, ThresholdOff: 5},
        {Name: 'Test', Objekt 'sonoff.0.Test.ENERGY_Power', ThresholdOn: 30, ThresholdOff: 2}
    	];
    	
    	
    for (var i=0; i<SonoffAlertDevices.length;i++) {
    
        on({id: SonoffAlertDevices[i].Objekt,  change: 'ne'}, function (obj) {
            /*Device zerlegen*/
            var objArr  = obj.id.match(/(^.+)\.(.+)\.(.+)$/, ""); //Aufteilung in Pfad + Device + CMD
            var DeviceID=objArr[1]+"."+objArr[2];
    
            var SonoffAlertDevice = SonoffAlertDevices.find(x => x.ObjektBase === DeviceID); //Im Array den richtigen Wert finden
     
            if (obj.state.val > SonoffAlertDevice.ThresholdOn) {
     
                log("läuft");
                //hier mit cleartimeout(timeout) den timeout löschen
            } 
            if (obj.state.val < SonoffAlertDevice.ThresholdOff) ) {
    
                log("fertig");
                //hier timeout=timeout(...) setzen
            }       
        });
       
    }
    

    Ich möchte nun bei >log ("fertig")< mit Hilfe von timeout eine Abschaltung nach 10 Minuten realisieren, sofern nicht über das erste if-Statement erkannt wurde, dass wieder Strom verbraucht wird.
    Wenn ich nun mit timeout=timeout(...) eine Variable setze, ist die dann beim erneuten Aufruf des on-Triggers innerhalb dieser Funktion eindeutig?
    Oder anders gefragt: Ich habe im Array zwei Geräte deklariert. Würde, wenn das Gerät "Test" los läuft, die bereits gesetzte Variable "timeout" des Gerätes "3D Drucker" löschen?

    Vielen Dank

    paul53P 1 Antwort Letzte Antwort
    0
    • G Gwenselah

      Guten Abend,

      ich habe eine Verständnisfrage: Werden innerhalb eines ON-Triggers enthaltene Funktionen oder Variablen instanziert, also als eigene Funktion gesehen?

      Ein Beispiel:

      var SonoffAlertDevices = [
          {Name: '3D Drucker', Objekt: 'sonoff.0.Ender.ENERGY_Power', ThresholdOn: 30, ThresholdOff: 5},
          {Name: 'Test', Objekt 'sonoff.0.Test.ENERGY_Power', ThresholdOn: 30, ThresholdOff: 2}
      	];
      	
      	
      for (var i=0; i<SonoffAlertDevices.length;i++) {
      
          on({id: SonoffAlertDevices[i].Objekt,  change: 'ne'}, function (obj) {
              /*Device zerlegen*/
              var objArr  = obj.id.match(/(^.+)\.(.+)\.(.+)$/, ""); //Aufteilung in Pfad + Device + CMD
              var DeviceID=objArr[1]+"."+objArr[2];
      
              var SonoffAlertDevice = SonoffAlertDevices.find(x => x.ObjektBase === DeviceID); //Im Array den richtigen Wert finden
       
              if (obj.state.val > SonoffAlertDevice.ThresholdOn) {
       
                  log("läuft");
                  //hier mit cleartimeout(timeout) den timeout löschen
              } 
              if (obj.state.val < SonoffAlertDevice.ThresholdOff) ) {
      
                  log("fertig");
                  //hier timeout=timeout(...) setzen
              }       
          });
         
      }
      

      Ich möchte nun bei >log ("fertig")< mit Hilfe von timeout eine Abschaltung nach 10 Minuten realisieren, sofern nicht über das erste if-Statement erkannt wurde, dass wieder Strom verbraucht wird.
      Wenn ich nun mit timeout=timeout(...) eine Variable setze, ist die dann beim erneuten Aufruf des on-Triggers innerhalb dieser Funktion eindeutig?
      Oder anders gefragt: Ich habe im Array zwei Geräte deklariert. Würde, wenn das Gerät "Test" los läuft, die bereits gesetzte Variable "timeout" des Gerätes "3D Drucker" löschen?

      Vielen Dank

      paul53P Offline
      paul53P Offline
      paul53
      schrieb am zuletzt editiert von paul53
      #2

      @Gwenselah
      Ich habe das bisher mit einem Array für die Timer-Variablen gemacht.

      Die Zeilen 10 bis 14 verstehe ich nicht. Was soll dort erreicht werden ? Zeile 16 sollte so funktionieren:

              if (obj.state.val > SonoffAlertDevices[i].ThresholdOn) {
      

      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
      Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

      G 1 Antwort Letzte Antwort
      0
      • paul53P paul53

        @Gwenselah
        Ich habe das bisher mit einem Array für die Timer-Variablen gemacht.

        Die Zeilen 10 bis 14 verstehe ich nicht. Was soll dort erreicht werden ? Zeile 16 sollte so funktionieren:

                if (obj.state.val > SonoffAlertDevices[i].ThresholdOn) {
        
        G Offline
        G Offline
        Gwenselah
        schrieb am zuletzt editiert von
        #3

        @paul53

        Danke für die schnelle Antwort, ich werds mal über ein Array probieren
        Zeile 10-14 ermittelt den Objektpfad des Triggers

        Bezüglich "if (obj.state.val > SonoffAlertDevices[i].ThresholdOn) {"
        Bist Du sicher, dass Variable i noch zur Verfügung steht, wenn der Trigger losläuft?

        paul53P 1 Antwort Letzte Antwort
        0
        • G Gwenselah

          @paul53

          Danke für die schnelle Antwort, ich werds mal über ein Array probieren
          Zeile 10-14 ermittelt den Objektpfad des Triggers

          Bezüglich "if (obj.state.val > SonoffAlertDevices[i].ThresholdOn) {"
          Bist Du sicher, dass Variable i noch zur Verfügung steht, wenn der Trigger losläuft?

          paul53P Offline
          paul53P Offline
          paul53
          schrieb am zuletzt editiert von
          #4

          @Gwenselah sagte:

          Bist Du sicher, dass Variable i noch zur Verfügung steht, wenn der Trigger losläuft?

          Mal kurz getestet:

          Blockly_temp.JPG

          Javascript / Node.js kennt offenbar keine Unterprogramme, sondern kopiert alles. Deshalb auch der enorme RAM-Verbrauch.

          Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
          Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

          1 Antwort Letzte Antwort
          1
          • G Offline
            G Offline
            Gwenselah
            schrieb am zuletzt editiert von
            #5

            @paul53 said...

            Habs jetzt erst geschafft mein Script entsprechend umzubauen. Hat mit Deinem Ansatz tadellos funktioniert.
            Vielen Dank für Deine Hilfe

            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

            420

            Online

            32.4k

            Benutzer

            81.5k

            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