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. Simulation, Istwert zu Sollwert laufen lassen

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.2k

Simulation, Istwert zu Sollwert laufen lassen

Geplant Angeheftet Gesperrt Verschoben JavaScript
3 Beiträge 2 Kommentatoren 288 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.
  • J Offline
    J Offline
    JojoS
    schrieb am zuletzt editiert von JojoS
    #1

    JS ist nicht so meine Welt, obwohl das sogar meine Namensinitialien sind...
    Ich möchte für eine Simulation von Rolladen in vis eine Simu machen die zwei DP enthält, Soll und Istwert. Wenn Soll geändert wird, dann soll der Istwert dahin laufen.
    Ich ersten Schuß hat das Script den JavaScript Adapter lahmgelegt, wohl durch viele neu angelegte Timer? Was ist falsch, oder geht das generell viel einfacher?

    
    on({id:'0_userdata.0.example_state.testRolladen1Soll'/*testRolladen1 Soll*/, change:"any"}, function(data){
        var intervall_id = setInterval(function(){
            var ist = getState('0_userdata.0.example_state.testRolladen1'/*testRolladen1 Ist*/).val;
            
            if (Math.abs(data.state.val - ist) < 1) {
                clearInterval(intervall_id);
                return;
            }
               
            var diff = data.state.val > ist ? 1 : -1;
            setState('0_userdata.0.example_state.testRolladen1'/*testRolladen1 Ist*/, ist + diff, true);
    
            //console.log("Ist: " + ist);
        }, 100);
    })
    
    

    edit:

    1. Version gelöscht, so funktioniert es, kann aber vielleicht noch verschönert werden?
    T 1 Antwort Letzte Antwort
    0
    • J JojoS

      JS ist nicht so meine Welt, obwohl das sogar meine Namensinitialien sind...
      Ich möchte für eine Simulation von Rolladen in vis eine Simu machen die zwei DP enthält, Soll und Istwert. Wenn Soll geändert wird, dann soll der Istwert dahin laufen.
      Ich ersten Schuß hat das Script den JavaScript Adapter lahmgelegt, wohl durch viele neu angelegte Timer? Was ist falsch, oder geht das generell viel einfacher?

      
      on({id:'0_userdata.0.example_state.testRolladen1Soll'/*testRolladen1 Soll*/, change:"any"}, function(data){
          var intervall_id = setInterval(function(){
              var ist = getState('0_userdata.0.example_state.testRolladen1'/*testRolladen1 Ist*/).val;
              
              if (Math.abs(data.state.val - ist) < 1) {
                  clearInterval(intervall_id);
                  return;
              }
                 
              var diff = data.state.val > ist ? 1 : -1;
              setState('0_userdata.0.example_state.testRolladen1'/*testRolladen1 Ist*/, ist + diff, true);
      
              //console.log("Ist: " + ist);
          }, 100);
      })
      
      

      edit:

      1. Version gelöscht, so funktioniert es, kann aber vielleicht noch verschönert werden?
      T Offline
      T Offline
      ticaki
      schrieb am zuletzt editiert von ticaki
      #2

      @jojos

      var intervall_id = null;
      on({id:'0_userdata.0.example_state.testRolladen1Soll'/*testRolladen1 Soll*/, change:"any"}, function(data){
          if (intervall_id) clearInterval(intervall_id);
          intervall_id = setInterval(function(){
              var ist = getState('0_userdata.0.example_state.testRolladen1'/*testRolladen1 Ist*/).val;
              
              if (Math.abs(data.state.val - ist) < 1) {
                  clearInterval(intervall_id);
                 ist = data.state.val;
              }  else ist += data.state.val > ist ? 1 : -1;
              setState('0_userdata.0.example_state.testRolladen1'/*testRolladen1 Ist*/, ist, true);
       
              //console.log("Ist: " + ist);
          }, 100);
      })
      

      Der erste clearInterval() ist ein muß, sonst hast du, wenn du beim Laufen des Skripts die Richtung wechsels, 2 Interval laufen, die gegeneinander arbeiten. Den Rest kann man muß man aber nicht. :)

      Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

      Spenden

      J 1 Antwort Letzte Antwort
      1
      • T ticaki

        @jojos

        var intervall_id = null;
        on({id:'0_userdata.0.example_state.testRolladen1Soll'/*testRolladen1 Soll*/, change:"any"}, function(data){
            if (intervall_id) clearInterval(intervall_id);
            intervall_id = setInterval(function(){
                var ist = getState('0_userdata.0.example_state.testRolladen1'/*testRolladen1 Ist*/).val;
                
                if (Math.abs(data.state.val - ist) < 1) {
                    clearInterval(intervall_id);
                   ist = data.state.val;
                }  else ist += data.state.val > ist ? 1 : -1;
                setState('0_userdata.0.example_state.testRolladen1'/*testRolladen1 Ist*/, ist, true);
         
                //console.log("Ist: " + ist);
            }, 100);
        })
        

        Der erste clearInterval() ist ein muß, sonst hast du, wenn du beim Laufen des Skripts die Richtung wechsels, 2 Interval laufen, die gegeneinander arbeiten. Den Rest kann man muß man aber nicht. :)

        J Offline
        J Offline
        JojoS
        schrieb am zuletzt editiert von
        #3

        @ticaki Danke, funktioniert noch besser.

        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

        639

        Online

        32.6k

        Benutzer

        82.2k

        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