Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Simulation, Istwert zu Sollwert laufen lassen

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Simulation, Istwert zu Sollwert laufen lassen

    This topic has been deleted. Only users with topic management privileges can see it.
    • J
      JojoS last edited by 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 1 Reply Last reply Reply Quote 0
      • T
        ticaki Developer @JojoS last edited by 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 1 Reply Last reply Reply Quote 1
        • J
          JojoS @ticaki last edited by

          @ticaki Danke, funktioniert noch besser.

          1 Reply Last reply Reply Quote 0
          • First post
            Last post

          Support us

          ioBroker
          Community Adapters
          Donate

          897
          Online

          31.8k
          Users

          80.0k
          Topics

          1.3m
          Posts

          2
          3
          195
          Loading More Posts
          • Oldest to Newest
          • Newest to Oldest
          • Most Votes
          Reply
          • Reply as topic
          Log in to reply
          Community
          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
          The ioBroker Community 2014-2023
          logo