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] Refresh eines externen Systems

NEWS

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    20
    1
    750

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

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

[gelöst] Refresh eines externen Systems

Geplant Angeheftet Gesperrt Verschoben JavaScript
10 Beiträge 4 Kommentatoren 724 Aufrufe 4 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

    Hallo,

    ich möchte meine in ioBroker vorhandenen Tür- und Fensterkontakte nutzen um meine Heizung zu deaktivieren, so lange das Fenster offen ist.
    Das geht per HTTP Request, in dem ich die Zieltemperatur in dem betroffenem Raum heruntersetze. Konkret wird dabei in der Heizungssteuerung ein weiterer Offset erzeugt, der Einfluss auf die Zieltemperatur hat.
    Leider hat dieser nur eine Lebenszeit von 10 Minuten und muss dann erneuert werden.

    Mir fehlt hier zur Zeit der gedanklich richtige Ansatz. Bei Öffnen eines Fensters einen Trigger zu starten und dann den HTTP - Request zu senden.
    Aber nun muss dieser Request alle 10 Minuten wiederholt werden, solange das Fenster noch offen ist.
    Ich habe schon überlegt mit SetStateDelayed rekursiv das an zu gehen, bin mir aber nicht sicher, ob es eine elegantere Variante gibt.

    Wie löse ich das am besten in Javascript? Kann ich einen 10minütigen Timer starten, solange ein Fenster offen ist?

    Vielen Dank im Voraus

    paul53P 1 Antwort Letzte Antwort
    0
    • G Gwenselah

      Hallo,

      ich möchte meine in ioBroker vorhandenen Tür- und Fensterkontakte nutzen um meine Heizung zu deaktivieren, so lange das Fenster offen ist.
      Das geht per HTTP Request, in dem ich die Zieltemperatur in dem betroffenem Raum heruntersetze. Konkret wird dabei in der Heizungssteuerung ein weiterer Offset erzeugt, der Einfluss auf die Zieltemperatur hat.
      Leider hat dieser nur eine Lebenszeit von 10 Minuten und muss dann erneuert werden.

      Mir fehlt hier zur Zeit der gedanklich richtige Ansatz. Bei Öffnen eines Fensters einen Trigger zu starten und dann den HTTP - Request zu senden.
      Aber nun muss dieser Request alle 10 Minuten wiederholt werden, solange das Fenster noch offen ist.
      Ich habe schon überlegt mit SetStateDelayed rekursiv das an zu gehen, bin mir aber nicht sicher, ob es eine elegantere Variante gibt.

      Wie löse ich das am besten in Javascript? Kann ich einen 10minütigen Timer starten, solange ein Fenster offen ist?

      Vielen Dank im Voraus

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

      @Gwenselah sagte:

      Kann ich einen 10minütigen Timer starten, solange ein Fenster offen ist?

      Ja, mit setInterval(callback, cycle).

      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
      0
      • M Offline
        M Offline
        Mephist0
        schrieb am zuletzt editiert von
        #3

        Ich habe ein ähnliches Szenario. Ich will dass nach 30 Sekunden mein Licht ausgeschaltet wird, außer der Bewegungsmelder erkennt weiterhin Bewegung. Das prüfe ich alle 30 Sekunden. Vielleicht hilft dir mein Skript:

        on({id: 'hm-rpc.2.00091569950FCC.1.MOTION', change: "ne"}, function (obj) {
            //Licht einschalten
            setState("hue-extended.0.groups.002-flur_vorne.action.on", true);
        
            //Prüfe alle [checkInterval] Sekunden auf weitere Bewegung
            checkNoFutherMovement();
        });
        
        function checkNoFutherMovement(){
            //Bewegungsmelder wieder scharf schalten
            setState('hm-rpc.2.00091569950FCC.1.RESET_MOTION', true);
            
            var nextMovementCheck = new Date();
            nextMovementCheck.setSeconds(nextMovementCheck.getSeconds() + checkInterval);
            var hrs = nextMovementCheck.getHours();
            var mins = nextMovementCheck.getMinutes();
            var secs = nextMovementCheck.getSeconds();
        
            //console.log("Next Check: " + hrs + ":" + mins  + ":" + secs);
        
            //Prüfe in [checkInterval] Sekunden ob noch Bewegung vorhanden ist
            schedule({hour: hrs, minute: mins, second: secs}, 
                function(){
                    if( getState("hm-rpc.2.00091569950FCC.1.MOTION").val == true ){
                        checkNoFutherMovement();
                    } else {
                        flurlichtAusschalten();
                    }
                }
            );
        }
        
        function flurlichtAusschalten(){
            setState("hue-extended.0.groups.002-flur_vorne.action.on", false);
        }
        
        G 1 Antwort Letzte Antwort
        0
        • G Offline
          G Offline
          Gwenselah
          schrieb am zuletzt editiert von
          #4

          Vielen Dank für die Anregungen, ich werde diese in mein Script einfließen lassen.

          1 Antwort Letzte Antwort
          0
          • M Mephist0

            Ich habe ein ähnliches Szenario. Ich will dass nach 30 Sekunden mein Licht ausgeschaltet wird, außer der Bewegungsmelder erkennt weiterhin Bewegung. Das prüfe ich alle 30 Sekunden. Vielleicht hilft dir mein Skript:

            on({id: 'hm-rpc.2.00091569950FCC.1.MOTION', change: "ne"}, function (obj) {
                //Licht einschalten
                setState("hue-extended.0.groups.002-flur_vorne.action.on", true);
            
                //Prüfe alle [checkInterval] Sekunden auf weitere Bewegung
                checkNoFutherMovement();
            });
            
            function checkNoFutherMovement(){
                //Bewegungsmelder wieder scharf schalten
                setState('hm-rpc.2.00091569950FCC.1.RESET_MOTION', true);
                
                var nextMovementCheck = new Date();
                nextMovementCheck.setSeconds(nextMovementCheck.getSeconds() + checkInterval);
                var hrs = nextMovementCheck.getHours();
                var mins = nextMovementCheck.getMinutes();
                var secs = nextMovementCheck.getSeconds();
            
                //console.log("Next Check: " + hrs + ":" + mins  + ":" + secs);
            
                //Prüfe in [checkInterval] Sekunden ob noch Bewegung vorhanden ist
                schedule({hour: hrs, minute: mins, second: secs}, 
                    function(){
                        if( getState("hm-rpc.2.00091569950FCC.1.MOTION").val == true ){
                            checkNoFutherMovement();
                        } else {
                            flurlichtAusschalten();
                        }
                    }
                );
            }
            
            function flurlichtAusschalten(){
                setState("hue-extended.0.groups.002-flur_vorne.action.on", false);
            }
            
            G Offline
            G Offline
            Gwenselah
            schrieb am zuletzt editiert von
            #5

            @Mephist0 said in Refresh eines externen Systems:

            checkInterval

            Wie setzt Du "checkInterval"?

            1 Antwort Letzte Antwort
            0
            • M Offline
              M Offline
              Mephist0
              schrieb am zuletzt editiert von Mephist0
              #6

              @Mephist0 sagte in Refresh eines externen Systems:

              var nextMovementCheck = new Date();

              Das ist einfach ein Zahlenwert in Sekudnen. Da du alle 10 Minuten prüfen willst, sähe es bei dir so aus:

                  var nextCheck = new Date();
              
                  nextCheck.setMinutes(nextCheck.getMinutes() + 10);
              
                  var hrs = nextCheck.getHours();
              
                  var mins = nextCheck.getMinutes();
                 (...)
              
              1 Antwort Letzte Antwort
              1
              • T Nicht stören
                T Nicht stören
                ticaki
                schrieb am zuletzt editiert von ticaki
                #7

                Hallo,

                ich hab es in meinem Luftbefeuchter-Script so gelöst:

                var myPowerInterval = null;
                //....
                    if (isOutletOn) {
                        if (myPowerInterval) clearInterval(myPowerInterval);
                        myPowerInterval = setInterval(function(){
                            var currentWatt = getState('sonoff.0.Gesund Steckdose 2.ENERGY_Power').val;
                            setState('0_userdata.0.Automation.Luftbefeuchtungsscript_Wohnzimmer.StatusFault', (currentWatt < 10));
                        },11000);
                    } else if (myPowerInterval) clearInterval(myPowerInterval);
                

                Gruß Tim

                Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                Spenden

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

                  Ich hab dazu noch einen Verständnisfrage. Wie verhält sich die TimerVariable "myPowerInterval" bei mehrfachen Aufrufen?
                  Ein Beispiel basierend auf dem Script von tictaki:

                  function TueIrgendwas (Raum){
                  	var myPowerInterval = null;
                      if (isOutletOn) {
                          if (myPowerInterval) clearInterval(myPowerInterval);
                          myPowerInterval = setInterval(function(){            
                              setState(Raum, "-5");
                          },11000);
                      } else if (myPowerInterval) clearInterval(myPowerInterval);
                  }
                  
                  on {(TriggerRaum1),function(){
                  	TueIrgendwas("Raum1");
                  }
                  
                  on {(TriggerRaum2),function(){
                  	TueIrgendwas("Raum2");
                  }
                  
                  

                  Übersteht die Variable myPowerInterval (bzw. deren Inhalt) von Aufruf "Raum1" den Aufruf durch "Raum2"? (Sind die Aufrufe von TueIrgandwas von einander gekapselt?)
                  Oder benötige ich für jeden Raum eine eigene Variable?

                  T 1 Antwort Letzte Antwort
                  0
                  • G Gwenselah

                    Ich hab dazu noch einen Verständnisfrage. Wie verhält sich die TimerVariable "myPowerInterval" bei mehrfachen Aufrufen?
                    Ein Beispiel basierend auf dem Script von tictaki:

                    function TueIrgendwas (Raum){
                    	var myPowerInterval = null;
                        if (isOutletOn) {
                            if (myPowerInterval) clearInterval(myPowerInterval);
                            myPowerInterval = setInterval(function(){            
                                setState(Raum, "-5");
                            },11000);
                        } else if (myPowerInterval) clearInterval(myPowerInterval);
                    }
                    
                    on {(TriggerRaum1),function(){
                    	TueIrgendwas("Raum1");
                    }
                    
                    on {(TriggerRaum2),function(){
                    	TueIrgendwas("Raum2");
                    }
                    
                    

                    Übersteht die Variable myPowerInterval (bzw. deren Inhalt) von Aufruf "Raum1" den Aufruf durch "Raum2"? (Sind die Aufrufe von TueIrgandwas von einander gekapselt?)
                    Oder benötige ich für jeden Raum eine eigene Variable?

                    T Nicht stören
                    T Nicht stören
                    ticaki
                    schrieb am zuletzt editiert von ticaki
                    #9

                    @Gwenselah
                    Hallo,

                    die Variable myPowerInterval muß fürs Skript (global, außerhalb einer Funktion) deklariert werden.

                    var myPowerInterval = null;
                    
                    function TueIrgendwas (Raum){
                    ...
                    

                    Aber die gilt nur für 1 gleichzeitigen Timer. Du benötigst für jeden Raum eine eigene. Mein Vorschlag:

                    var myPowerInterval = [null,null];
                    
                    function TueIrgendwas (Raum, index){
                    	
                        if (isOutletOn) {
                            if (myPowerInterval[index]) clearInterval(myPowerInterval[index]);
                            myPowerInterval[index] = setInterval(function(){            
                                setState(Raum, "-5");
                            },11000);
                        } else if (myPowerInterval[index]) clearInterval(myPowerInterval[index]);
                    }
                     
                    on {(TriggerRaum1),function(){
                    	TueIrgendwas("Raum1", 0);
                    }
                     
                    on {(TriggerRaum2),function(){
                    	TueIrgendwas("Raum2", 1);
                    }
                    

                    Gruß Tim

                    Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                    Spenden

                    G 1 Antwort Letzte Antwort
                    0
                    • T ticaki

                      @Gwenselah
                      Hallo,

                      die Variable myPowerInterval muß fürs Skript (global, außerhalb einer Funktion) deklariert werden.

                      var myPowerInterval = null;
                      
                      function TueIrgendwas (Raum){
                      ...
                      

                      Aber die gilt nur für 1 gleichzeitigen Timer. Du benötigst für jeden Raum eine eigene. Mein Vorschlag:

                      var myPowerInterval = [null,null];
                      
                      function TueIrgendwas (Raum, index){
                      	
                          if (isOutletOn) {
                              if (myPowerInterval[index]) clearInterval(myPowerInterval[index]);
                              myPowerInterval[index] = setInterval(function(){            
                                  setState(Raum, "-5");
                              },11000);
                          } else if (myPowerInterval[index]) clearInterval(myPowerInterval[index]);
                      }
                       
                      on {(TriggerRaum1),function(){
                      	TueIrgendwas("Raum1", 0);
                      }
                       
                      on {(TriggerRaum2),function(){
                      	TueIrgendwas("Raum2", 1);
                      }
                      

                      Gruß Tim

                      G Offline
                      G Offline
                      Gwenselah
                      schrieb am zuletzt editiert von
                      #10

                      @ticaki
                      Auf Grundlage Deines Vorschlags habe ich nun mein Script entwickelt. Vielen Dank für Deine Hilfe.
                      Man muss nur aufpassen, dass SetIntervall erst mit dem Delay beginnt und dann die Funktion ausführt.

                      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

                      872

                      Online

                      32.5k

                      Benutzer

                      81.6k

                      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