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. Befehl, erst wenn vorheriger bestätigt wurde (Ack-State)

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.5k

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

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
javascriptblockly
3 Beiträge 2 Kommentatoren 354 Aufrufe 2 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.
  • S Offline
    S Offline
    SaschaS
    schrieb am zuletzt editiert von
    #1

    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.

    paul53P 1 Antwort Letzte Antwort
    0
    • S SaschaS

      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.

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

      @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);
      }
      

      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

      S 1 Antwort Letzte Antwort
      0
      • paul53P 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 Offline
        S Offline
        SaschaS
        schrieb am zuletzt editiert von
        #3

        @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 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

        638

        Online

        32.7k

        Benutzer

        82.4k

        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