Ankündigung

Einklappen
Keine Ankündigung bisher.

Seltsames Verhalten einer Rule

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

    Seltsames Verhalten einer Rule

    Hallo!

    Ich habe eine Rule, deren Verhalten ich nicht ganz verstehe bzw. finde ich den Fehler nicht.

    Als Absicherung im Winter möchte ich, dass bei einem irrtümlichen Einschalten der Poolbeleuchtung diese nach ein paar Sekunden sich wieder ausschaltet, so kann die Hitze der Lampen nichts beschädigen, wenn kein Wasser im Becken ist.

    Ich habe daher folgende Rule:


    Code:
      [COLOR=#000000]var Timer timer = null[/COLOR]
        [COLOR=#000000]rule "Pool Winter"[/COLOR]
      [COLOR=#000000]when[/COLOR]
      [COLOR=#000000]    Item Light_GN_Pool received command[/COLOR]
      [COLOR=#000000]then[/COLOR]
      [COLOR=#000000]    if(receivedCommand==ON) {[/COLOR]
      [COLOR=#000000]        if(timer === null) {[/COLOR]
      [COLOR=#000000]            [/COLOR]
      [COLOR=#000000]            timer = createTimer(now.plusSeconds(20)) [[/COLOR]
      [COLOR=#000000]                sendCommand(Light_GN_Pool, OFF)[/COLOR]
      [COLOR=#000000]            ][/COLOR]
      [COLOR=#000000]        } else {[/COLOR]
      [COLOR=#000000]            [/COLOR]
      [COLOR=#000000]            timer.reschedule(now.plusSeconds(20))[/COLOR]
      [COLOR=#000000]        }[/COLOR]
      [COLOR=#000000]    } else {  [/COLOR]
      [COLOR=#000000]        if(timer !== null) {[/COLOR]
      [COLOR=#000000]            timer.cancel[/COLOR]
      [COLOR=#000000]            timer = null[/COLOR]
      [COLOR=#000000]        }[/COLOR]
      [COLOR=#000000]    }[/COLOR]
      [COLOR=#000000]end[/COLOR]
    Schalte ich über Openhab das Licht ein, dann funktioniert die Rule einwandfrei, das Licht geht nach 20 sec aus.

    Schalte ich aber über den Lichtschalter ein, dann passiert nichts.

    Im Kanal Schalten in der ETS sind S und Ü Flag gesetzt, bei Rückmeldung L und Ü.

    In der events.log findet sich auch die Änderung des Itemzustands (2019-11-05 21:55:21.987 [vent.ItemStateChangedEvent] - Light_GN_Pool changed from OFF to ON), aber die Rule sendet kein Kommando OFF.

    Sieht wer den Fehler?

    LG

    #2
    Hmm, Du scheinst auf received command zu triggern. Wenn der Schalter betätigt wird kommt aber auf changed from off to on

    evtl. triggerst Du mal auf changed status?

    Kommentar


      #3
      Wenn Du das KNX 2 Binding verwendest brauchst Du für den „received command“ trigger einen „control“ channel. Mit changed sollte es ohne gehen.

      Aber warum sperrst Du ohne Wasser nicht einfach den Aktor?

      Kommentar


        #4
        Ich werde mal auf changed triggern, ich muss mir erst ansehen, wie es geht.

        Wie sieht der "Control" channel aus?

        Das mit dem Aktor habe ich mir überlegt, es sind allerdings auch noch andere Lampen, die mitgeschaltet werden, wenn man etwas draussen hört, ist es nicht so schlecht, wenn man diese einschalten kann - wenn auch nur kurzzeitig.

        Kommentar


          #5
          Schau mal in der Doku des Bindings unter „Control channel Type“: https://www.openhab.org/addons/bindings/knx/

          Kommentar


            #6
            Ok, hab ich gerade gelesen, aber da steht auch, dass es eher für andere Bindings gedacht ist.
            Wenn ich mir die Beispiele ansehe, sehe ich auch verschiedene GAs, soll man dem Aktor dann zwei GAs zuweisen? Kommt mir spanisch vor.
            Und es wird ja auf den Bus gemeldet, weil OH ja die Änderung des Schaltzustandes in der events.log protokolliert

            Kommentar


              #7
              Problem gelöst...

              Wenn ich auf Change triggere, läuft es problemlos.

              Code:
                [COLOR=#000000]var Timer timer = null[/COLOR]
                  [COLOR=#000000]rule "Pool Winter"[/COLOR]
                [COLOR=#000000]when[/COLOR]
                [COLOR=#000000]    Item Light_GN_Pool changed from OFF to ON[/COLOR]
                [COLOR=#000000]then[/COLOR]
                [COLOR=#000000]    if(Light_GN_Pool.state==ON) {[/COLOR]
                [COLOR=#000000]        if(timer === null) {[/COLOR]
                [COLOR=#000000]            [/COLOR]
                [COLOR=#000000]            timer = createTimer(now.plusSeconds(20)) [[/COLOR]
                [COLOR=#000000]                sendCommand(Light_GN_Pool, OFF)[/COLOR]
                [COLOR=#000000]            ][/COLOR]
                [COLOR=#000000]        } else {[/COLOR]
                [COLOR=#000000]            [/COLOR]
                [COLOR=#000000]            timer.reschedule(now.plusSeconds(20))[/COLOR]
                [COLOR=#000000]        }[/COLOR]
                [COLOR=#000000]    } else {  [/COLOR]
                [COLOR=#000000]        if(timer !== null) {[/COLOR]
                [COLOR=#000000]            timer.cancel[/COLOR]
                [COLOR=#000000]            timer = null[/COLOR]
                [COLOR=#000000]        }[/COLOR]
                [COLOR=#000000]    }[/COLOR]
                [COLOR=#000000]end[/COLOR]

              Kommentar


                #8
                Der Trigger auf changed ist in diesem Fall die korrekte Variante.

                Es ist übrigens normal, zwei GA zu einem Channel zuzuordnen, die erste ist die GA, über die man einen Schaltbefehl an den Aktor sendet, die zweite GA ist die zugehörige Rückmelde GA. Wenn man es richtig macht, sind die GA exclusif für den Aktorkanal und das L-Flag gesetzt, so kann openHAB beim Start des Systems sofort den korrekten Status anzeigen, ohne dass der Kanal geschaltet wird. Das gilt also nicht nur für *-control Channel.

                Kommentar


                  #9
                  Ich hab mich anscheinend falsch ausgedrückt, ich habe zB am Aktor den Kanal schalten mit GA 1/0/1 und S-Flag, den Kanal Rückmeldung schalten mit GA 1/1/1 und L-Flag.

                  In der Things dann zB: [ga="1/0/1+<1/1/1"]

                  Das läuft auch, OH zeigt immer den korrekten Status an. Nur die Rule in der ursprünglichen Version ging nicht richtig.

                  Ich habe es so verstanden, dass man für einen Control Channel der Rückmeldung eine zusätzliche GA, zB 1/2/1 anfügen muss, das kam mir seltsam vor.

                  Kommentar


                    #10
                    Zitat von fred07 Beitrag anzeigen
                    Ich hab mich anscheinend falsch ausgedrückt, ich habe zB am Aktor den Kanal schalten mit GA 1/0/1 und S-Flag, den Kanal Rückmeldung schalten mit GA 1/1/1 und L-Flag.

                    In der Things dann zB: [ga="1/0/1+<1/1/1"]

                    Das läuft auch, OH zeigt immer den korrekten Status an. Nur die Rule in der ursprünglichen Version ging nicht richtig.

                    Ich habe es so verstanden, dass man für einen Control Channel der Rückmeldung eine zusätzliche GA, zB 1/2/1 anfügen muss, das kam mir seltsam vor.
                    Ah. Nein, eine zusätzliche Rückmeldeadresse ergibt gar keinen Sinn, da die *-Control Channel per Definition ihren Status selbst halten, denn openHAB übernimmt in diesem Fall die Rolle des Aktors. Es ist also im Gegenteil so, dass openHAB bei einem *-control Channel den Status an den knx Bus sendet, damit auf knx-Seite z.B. Statusanzeigen auf Wandtastern aktualisiert werden können.

                    Kommentar

                    Lädt...
                    X