Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Befehl, erst wenn vorheriger bestätigt wurde (Ack-State)

    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

    Befehl, erst wenn vorheriger bestätigt wurde (Ack-State)

    This topic has been deleted. Only users with topic management privileges can see it.
    • S
      SaschaS last edited by

      Hallo zusammen,

      ich stehe aktuell vor dem Problem, dass ich meine Raffstores nicht ordentlich anfahren kann, da sich die Befehle gegenseitig killen/überlagern.

      Daher benötige ich eine Strategie für folgendes Szenario: Start der Funktion "Schließe Rolladen mit übergebenen Variablen x und y"
      x ist dabei die Höhe des Raffstores und y der Neigungswinkel der einzelnen Lamellen

      function Raffstore (x,y) {
      SetState(ID,x);
      Hier würde ich gerne einen Delay haben, solange die Endposition x nicht erreicht und der Wert nicht bestätigt wurde.
      SetState(ID,y);
      Hier würde ich gerne einen Delay haben, solange die Position y nicht erreicht und der Wert nicht bestätigt wurde.
      ...
      weiterer Programmcode
      }

      Gibt es hierfür Möglichkeit? Entweder gerne per Blockly oder JavaScript.

      paul53 1 Reply Last reply Reply Quote 0
      • paul53
        paul53 @SaschaS last edited by paul53

        @SaschaS sagte:

        Gibt es hierfür Möglichkeit?

        Versuche mal den Ansatz (nicht getestet):

        const idRollo = '...';
        var move = false;
        var timer = null;
        var soll = getState(idRollo).val;
        
        function raffstore(x, y) {
            soll = x;
            setState(idRollo, soll);
            move = true;
            timer = setInterval(function() {
                if(!move) {
                    soll = y;
                    setState(idRollo, soll);
                    move = true;
                    clearInterval(timer);
                }
            }, 1000);
        }
        
        on(idRollo, function(dp) {
            if(dp.state.ack && dp.state.val == soll) move = false;
        });
        
        if(!move) raffstore(50, 45);
        else {
            timer = setInterval(function() {
                if(!move) {
                    clearInterval(timer);
                    raffstore(50, 45);
                }
            }, 1000);
        }
        
        S 1 Reply Last reply Reply Quote 0
        • S
          SaschaS @paul53 last edited by

          @paul53 Danke für die schnelle Antwort. Das schaut auf den ersten Blick (für meine Verhätlnisse) dann doch ziemlich komplexer. Muss ich mir genauer anschauen.
          Lässt sich das Verfahren auch in Blockly realisieren?

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

          Support us

          ioBroker
          Community Adapters
          Donate

          969
          Online

          31.9k
          Users

          80.2k
          Topics

          1.3m
          Posts

          blockly javascript
          2
          3
          262
          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