Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. StefanS

    NEWS

    • Wir empfehlen: Node.js 22.x

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker goes Matter ... Matter Adapter in Stable

    S
    • Profile
    • Following 0
    • Followers 0
    • Topics 1
    • Posts 2
    • Best 0
    • Groups 0

    StefanS

    @StefanS

    0
    Reputation
    6
    Profile views
    2
    Posts
    0
    Followers
    0
    Following
    Joined Last Online

    StefanS Follow

    Latest posts made by StefanS

    • RE: Test Adapter klf200 v1.0.x latest

      Hallo Michael,

      auch von mehr erstmal vielen Dank für die Entwicklung des Adapters.
      Bei mir funktioniert er bisher einwandfrei. Was mir im ioBroker wichtig war, endlich die Sicherheitsfeatures zu implementieren, die in der besch****nen gekapselten Velux ioHomecontrol Welt nicht möglich sind. Wer schonmal sein elektrisches Rollo ins offene Fenster gesemmelt hat, weiß was ich meine 😉

      Ich habe dazu zwei Script entwicklet, die ich gerne mit der Community teilen möchte und genau das verhindern:

      /* Prüfe, ob Fenster weiter als bisher geöffnet werden soll*/
      on({ id: 'klf200.0.products.1.targetPosition'/*Position Fenster*/, change: "gt", ack: false }, async function (obj) {
          var valueFenster = obj.state.val;
          var oldValueFenster = obj.oldState.val;
          /* Prüfe, ob Rolle weiter als 50% geöffnet ist*/
          if (getState("klf200.0.products.0.currentPosition").val > 50) {
              /* Fenster anhalten */
              setState('klf200.0.products.1.stop'/*stop*/, true);
              /* Rolle auf 50% zurückfahren, dann kann das Fenster gefahrlos geöffnet werden */
              setState('klf200.0.products.0.targetPosition', 50, false, function () {
                  /* Callback: Trigger, wenn Rolloänderung fertig (Status 5) */
                  on({ id: 'klf200.0.products.0.state'/*state*/, val: 5, ack: true }, async function (obj) {
                      var valueRollo = obj.state.val;
                      var oldValueRollo = obj.oldState.val;
                      /* Wenn Trigger erfüllt, Fenster auf ursprünglich gewünste Position öffnen */
                      setState('klf200.0.products.1.targetPosition', valueFenster, false, function () {
                      /* Trigger auf Rolladenstatus abmelden*/
                      unsubscribe('klf200.0.products.0.state')
                      });
                  })
              })
          };
      });
      
      /* Prüfe, ob Rolle weiter als bisher geschlossen werden soll*/
      on({ id: 'klf200.0.products.0.targetPosition'/*Position Fenster*/, change: "gt", ack: false }, async function (obj) {
          var valueRolle = obj.state.val;
          var oldValueRolle = obj.oldState.val;
          /* Prüfe, ob Fenster weiter als 10% geöffnet ist (dies ist der Stellwert für den Dampfabzug)*/
          if (getState("klf200.0.products.1.currentPosition").val > 10) {
              /* Rollo anhalten */
              setState('klf200.0.products.0.stop'/*stop*/, true);
              /* Fenster auf 10% zurückfahren, dann kann das Rolle gefahrlos geschlossen werden */
              setState('klf200.0.products.1.targetPosition', 10, false, function () {
                  /* Callback: Trigger, wenn Fensteränderung fertig (Status 5) */
                  on({ id: 'klf200.0.products.1.state'/*state*/, val: 5, ack: true }, async function (obj) {
                      var valueFenster = obj.state.val;
                      var oldValueFenster = obj.oldState.val;
                      /* Wenn Trigger erfüllt, Rollo auf ursprünglich gewünste Position schließen */
                      setState('klf200.0.products.0.targetPosition', valueRolle, false, function () {
                      /* Trigger auf Fensterstatus abmelden*/
                      unsubscribe('klf200.0.products.1.state')
                      });
                  })
              })
          };
      });
      

      Wer mag kann sich gerne bedienen.

      Viele Grüße,
      Stefan

      posted in Tester
      S
      StefanS
    • (Gelöst) Warten des Triggers auf anderes Objekt

      Hallo zusammen,

      ich bin neu im IO-Broker und versuche nun meine Rolläden/Fenster-Kombinationen (Velux, angebunden über KLF200) ans Laufen zu kriegen. Dabei habe ich folgendes Problem:

      Fall ein Fenster öffnen Befehl kommt, soll er zuerst prüfen, ob der Rolladen weiter an 50% geöffnet ist. Denn sonst scheppert das Fenstern in den Rolladen hinein. Leider bekomme ich die Logik in Blocky nicht hin.
      d44f6201-9d37-4d65-8c1e-aac32b180091-image.png
      mit dieser Logik fährt er erst das Fenster durch und danach erst den Rolladen.

      Folgende Anlternative habe ich auch probiert:
      d08dba98-0058-46f1-9d8c-f451f5d0ebf9-image.png
      Aber dann geht das Script in die Todesschleife, weil sich die Änderungsbefehle gegenseitig triggern.

      Wie bekomme ich es also hin, das der eigentliche Trigger (targetPosition des Fensters) auf die Ausführung des Rolladenchecks und ggf. Korrektur wartet?

      Vielen Dank!

      Stefan


      Die Lösung war mit Blocky nicht zu erreichen, im JS über die richtigen Callbacks gar nicht so schwer.
      Die Schwierigkeit war lediglich, dass der Callback nicht beim Abschluss der physischen Aktion, sondern beim erfolgreichen Funktionsaufruf erfolgt. Daher habe ich die Statuswerte der KLF200 als eigentliche Bedingung für die fertige Bewegung des Rolladens verwendet. Hier mein finaler Code:

      /* Prüfe, ob Fenster weiter als bisher geöffnet werden soll*/
      on({ id: 'klf200.0.products.1.targetPosition'/*Position Fenster*/, change: "gt", ack: false }, async function (obj) {
          var valueFenster = obj.state.val;
          var oldValueFenster = obj.oldState.val;
          /* Prüfe, ob Rolle weiter als 50% geöffnet ist*/
          if (getState("klf200.0.products.0.currentPosition").val > 50) {
              /* Fenster anhalten */
              setState('klf200.0.products.1.stop'/*stop*/, true);
              /* Rolle auf 50% zurückfahren, dann kann das Fenster gefahrlos geöffnet werden */
              setState('klf200.0.products.0.targetPosition', 50, false, function () {
                  /* Callback: Trigger, wenn Rolloänderung fertig (Status 5) */
                  on({ id: 'klf200.0.products.0.state'/*state*/, val: 5, ack: true }, async function (obj) {
                      var valueRollo = obj.state.val;
                      var oldValueRollo = obj.oldState.val;
                      /* Wenn Trigger erfüllt, Fenster auf ursprünglich gewünste Position öffnen */
                      setState('klf200.0.products.1.targetPosition', valueFenster, false, function () {
                      /* Trigger auf Rolladenstatus abmelden*/
                      unsubscribe('klf200.0.products.0.state')
                      });
                  })
              })
          };
      });
      
      posted in Blockly
      S
      StefanS
    Community
    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
    The ioBroker Community 2014-2023
    logo