Ankündigung

Einklappen

Serverwartung 21.2.



Am 21.2. im Laufe des späten Abends wird eine Serverwartung durchgeführt. Das Forum ist dadurch für gut zwei Stunden nicht erreichbar.
Es wird eine Wartungsseite geschaltet.

Mehr anzeigen
Weniger anzeigen

Zeitmessung in einer Regel

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Zeitmessung in einer Regel

    Ich habe einen Schalter via digitalem Eingang auf ein Switch-Item gemapt. Ist es möglich, je nachdem wie lange der Schalter gedrückt wird, unterschiedliche Commands abzusetzen?

    Oder ist es alternativ möglich festzustellen, wie lange der letzte Statechange aus ist?

    Beispiel:

    Code:
    rule MyRule
    when
        Item MySwitch changed to ON
    then
        MyOutputSwitch.sendCommand(ON)
    end
    
    rule MySecondRule
    when
        Item MySwitch changed to OFF
    then
        if([letzter Statechange liegt mehr als zwei Sekunden zurück])
        {
            [warte x Sekunden]
            MyOutputSwitch.sendCommand(OFF)
        }
        else
        {
            MyOutputSwitch.sendCommand(OFF)
        }
    end
    Zur Info: Der Ausgang geht auf einen Motor für meine Rollläden. Wenn die Taste länger gedrückt bleibt, möchte ich, dass die Rollläden ganz herunter/hinauf fahren.

    #2
    Schau Dir mal die Persistence Services an. Alternativ könntest Du beim ersten Drücken auch einen Timer starten und den beimmzweiten mal Auswerten, ggf. über eine Hilfsvariable.

    Kommentar


      #3
      Danke für den Hinweis. Ein erster Test mit folgender Regel hat sehr gut funktioniert:

      Code:
      rule Rollershutter_Storeroom_Switch_Up_OFF
      when
          Item Rollershutter_GF_Storeroom_Up received command OFF
      then
          if(!Rollershutter_GF_Storeroom_Up.changedSince(now.minusSeconds(2)))
          {
              logInfo("test", "Button was pressed 2 or more seconds...")
              Thread::sleep(5000)
              
              if(!Rollershutter_GF_Storeroom_Down.changedSince(now.minusSeconds(5)) &&
                  !Rollershutter_GF_Storeroom_Up.changedSince(now.minusSeconds(5)))
              {
                  Rollershutter_GF_Storeroom_Move_Up.sendCommand(OFF)
              }
          }
          else
          {
              Rollershutter_GF_Storeroom_Move_Up.sendCommand(OFF)        
          }
      end

      Kommentar


        #4
        Hallo PairOfOldShoes,

        evtl. hilft die der folgenden Beitrag weiter um deine gewünschte Funktionen zu realisieren.

        https://knx-user-forum.de/openhab/24...derzimmer.html


        Gruß
        mepi0011

        Kommentar


          #5
          Sehr schön, danke. Die Verwendung von Timern erspart mir die umfangreiche Nutzung der Persistence.

          Kommentar

          Lädt...
          X