NEWS
Simulation, Istwert zu Sollwert laufen lassen
-
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:
- Version gelöscht, so funktioniert es, kann aber vielleicht noch verschönert werden?
-
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:
- Version gelöscht, so funktioniert es, kann aber vielleicht noch verschönert werden?
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. :)
-
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. :)
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden