Ankündigung

Einklappen
Keine Ankündigung bisher.

- √ - Linknx: OR-Condition & Trigger ärgern mich

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

    - √ - Linknx: OR-Condition & Trigger ärgern mich

    Hallo zusammen,

    ich versuche gerade mein linknx davon zu überzeugen mir auf einer GA die Info zu senden, ob im EG eine Lampe an ist, oder nicht. Irgendwie scheint er bei mir nur den ersten Eintrag der OR-Condition zu bewerten und sendet dann korrekt "eine Lampe ist an" auf den Bus. Wird die Lampe für den ersten Eintrag ausgeschaltet, sendet er nicht "eine Lampe ist aus", sondern ein Telegram für die deaktivierte Lampe (so verstehe ich zumindest das Log). Bei dem Schalten z.B. der zweiten oder dritten Lampe aus der Condition wird zwar irgendwas gemacht, aber nichts sinniges.

    Hier ein Ausschnitt aus der Config:
    <object type="1.001" id="EG_DL_Garderobe" gad="1/1/3">EG DL Garderobe</object>
    <object type="1.001" id="EG_DL_HWR" gad="1/1/5">EG DL HWR</object>
    <object type="1.001" id="EG_DL_WC" gad="1/1/7">EG DL WC</object>
    <object type="1.001" id="EG_WL_WC" gad="1/1/8">EG WL WC</object>
    <object type="1.001" id="CHECK_LIGHT_EG" gad="15/0/1" flags="cwtuf">Es ist ein Licht an im EG</object>
    </objects>
    <rule id="Pruefen_auf_Licht_im_EG">
    <condition type="or" trigger="true">
    <condition type="object" id="EG_DL_Garderobe" value="on" trigger="true"/>
    <condition type="object" id="EG_DL_HWR" value="on" trigger="true"/>
    <condition type="object" id="EG_DL_WC" value="on" trigger="true"/>
    <condition type="object" id="EG_WL_WC" value="on" trigger="true"/>
    </condition>
    <actionlist type="if-true">
    <action type="set-value" id="CHECK_LIGHT_EG" value="on"/>
    </actionlist>
    <actionlist type="on-true">
    <action type="set-value" id="CHECK_LIGHT_EG" value="on"/>
    </actionlist>
    <actionlist type="on-false">
    <action type="set-value" id="CHECK_LIGHT_EG" value="off"/>
    </actionlist>
    <actionlist type="if-false">
    <action type="set-value" id="CHECK_LIGHT_EG" value="off"/>
    </actionlist>
    </rule>

    Schalte ich das Licht in der Garderobe an, passiert:
    2014-08-04 00:38:40 [ INFO] Object: New value on for object EG_DL_Garderobe (type: 1.001)
    2014-08-04 00:38:40 [ INFO] Rule: Evaluate rule Pruefen_auf_Licht_im_EG
    2014-08-04 00:38:40 [ INFO] ObjectValue: SwitchingObjectValue: Compare value_m='1' to value='1'
    2014-08-04 00:38:40 [ INFO] Condition: ObjectCondition (id='EG_DL_Garderobe') evaluated as '1'
    2014-08-04 00:38:40 [ INFO] Rule: Rule Pruefen_auf_Licht_im_EG evaluated as 1, prev value was 1
    2014-08-04 00:38:40 [ INFO] Action: Execute SetValueAction: set CHECK_LIGHT_EG with value on
    2014-08-04 00:38:40 [ INFO] KnxConnection: write(gad=15/0/1, buf, len=2)
    2014-08-04 00:38:40 [ INFO] Object: New value on for object CHECK_LIGHT_EG (type: 1.001)
    2014-08-04 00:38:40 [ INFO] Action: Execute SetValueAction: set CHECK_LIGHT_EG with value on
    2014-08-04 00:38:40 [ INFO] KnxConnection: write(gad=15/0/1, buf, len=2)
    2014-08-04 00:38:40 [ INFO] Object: New value on for object CHECK_LIGHT_EG (type: 1.001)
    2014-08-04 00:38:40 [ INFO] Object: New value on for object CHECK_LIGHT_EG (type: 1.001)
    2014-08-04 00:38:40 [ INFO] Object: New value on for object CHECK_LIGHT_EG (type: 1.001
    ==> Das entspricht meiner Erwartung.

    Schalte ich die Lampe wieder aus:
    2014-08-04 00:39:24 [ INFO] Object: New value off for object EG_DL_Garderobe (type: 1.001)
    2014-08-04 00:39:24 [ INFO] Rule: Evaluate rule Pruefen_auf_Licht_im_EG
    2014-08-04 00:39:24 [ INFO] ObjectValue: SwitchingObjectValue: Compare value_m='0' to value='1'
    2014-08-04 00:39:24 [ INFO] Condition: ObjectCondition (id='EG_DL_Garderobe') evaluated as '0'
    2014-08-04 00:39:24 [ INFO] ObjectValue: SwitchingObjectValue: Compare value_m='0' to value='1'
    2014-08-04 00:39:24 [ INFO] Condition: ObjectCondition (id='EG_DL_HWR') evaluated as '0'
    ==> Er erkennt richtig, aber sendet kein Signal für aus.

    Schalte ich ich im HWR ein:
    2014-08-04 00:40:49 [ INFO] Object: New value on for object EG_DL_HWR (type: 1.001)
    2014-08-04 00:40:49 [ INFO] Rule: Evaluate rule Pruefen_auf_Licht_im_EG
    2014-08-04 00:40:49 [ INFO] ObjectValue: SwitchingObjectValue: Compare value_m='0' to value='1'
    2014-08-04 00:40:49 [ INFO] Condition: ObjectCondition (id='EG_DL_Garderobe') evaluated as '0'
    2014-08-04 00:40:49 [ INFO] ObjectValue: SwitchingObjectValue: Compare value_m='1' to value='1'
    2014-08-04 00:40:49 [ INFO] Condition: ObjectCondition (id='EG_DL_HWR') evaluated as '1'
    2014-08-04 00:40:49 [ INFO] Rule: Rule Pruefen_auf_Licht_im_EG evaluated as 1, prev value was 1
    2014-08-04 00:40:49 [ INFO] Action: Execute SetValueAction: set CHECK_LIGHT_EG with value on
    2014-08-04 00:40:49 [ INFO] KnxConnection: write(gad=15/0/1, buf, len=2)
    2014-08-04 00:40:49 [ INFO] Object: New value on for object CHECK_LIGHT_EG (type: 1.001)
    2014-08-04 00:40:49 [ INFO] Action: Execute SetValueAction: set CHECK_LIGHT_EG with value on
    2014-08-04 00:40:49 [ INFO] KnxConnection: write(gad=15/0/1, buf, len=2)
    2014-08-04 00:40:49 [ INFO] Object: New value on for object CHECK_LIGHT_EG (type: 1.001)
    2014-08-04 00:40:49 [ INFO] Object: New value on for object CHECK_LIGHT_EG (type: 1.001)
    2014-08-04 00:40:49 [ INFO] Object: New value on for object CHECK_LIGHT_EG (type: 1.001)
    ==> Er erkennt wieder richtig und setzt die GA auf "an"

    Schalte ich wieder aus:
    2014-08-04 00:41:46 [ INFO] Object: New value off for object EG_DL_HWR (type: 1.001)
    2014-08-04 00:41:46 [ INFO] Rule: Evaluate rule Pruefen_auf_Licht_im_EG
    2014-08-04 00:41:46 [ INFO] ObjectValue: SwitchingObjectValue: Compare value_m='0' to value='1'
    2014-08-04 00:41:46 [ INFO] Condition: ObjectCondition (id='EG_DL_Garderobe') evaluated as '0'
    2014-08-04 00:41:46 [ INFO] ObjectValue: SwitchingObjectValue: Compare value_m='0' to value='1'
    2014-08-04 00:41:46 [ INFO] Condition: ObjectCondition (id='EG_DL_HWR') evaluated as '0'
    ==> passiert wieder das selbe wie eben.

    Lass ich übrigens in der OR-Condition den Trigger weg, verändert sich bei den Meldungen zum Einschalten der Garderobenbeleuchtung nichts, beim Ausschalten wird jedoch das Signal für HWR (an oder aus) auf den Bus gesendet:
    2014-08-04 00:43:55 [ INFO] Object: New value off for object EG_DL_Garderobe (type: 1.001)
    2014-08-04 00:43:55 [ INFO] Rule: Evaluate rule Pruefen_auf_Licht_im_EG
    2014-08-04 00:43:55 [ INFO] ObjectValue: SwitchingObjectValue: Compare value_m='0' to value='1'
    2014-08-04 00:43:55 [ INFO] Condition: ObjectCondition (id='EG_DL_Garderobe') evaluated as '0'
    2014-08-04 00:43:55 [ INFO] KnxConnection: write(gad=1/1/5, buf, len=2)
    ==> das ist zwar anders, aber auch total falsch.


    Wie komme ich zu einem richtigen Ergebnis und der korrekten Meldung ? Ich habe jetzt viel gelesen, verglichen und probiert, aber mittlerweile sind mir die Ideen ausgegangen.

    Vielleicht benötige ich ja nur einen kleinen Stups ?!?

    #2
    Hi,

    nach dem ersten lesen Deiner Config hätte ich erwartet, dass es läuft...
    Allerdings ist da einiges zu viel, deswegen versuch es mal mit folgendem:
    Code:
    <object type="1.001" id="EG_DL_Garderobe" gad="1/1/3">EG DL Garderobe</object>
    <object type="1.001" id="EG_DL_HWR" gad="1/1/5">EG DL HWR</object>
    <object type="1.001" id="EG_DL_WC" gad="1/1/7">EG DL WC</object>
    <object type="1.001" id="EG_WL_WC" gad="1/1/8">EG WL WC</object>
    <object type="1.001" id="CHECK_LIGHT_EG" gad="15/0/1" flags="[B]crwtu[/B]">Es ist ein Licht an im EG</object>
    
    
    <rule id="Pruefen_auf_Licht_im_EG">
      <condition type="or">
        <condition type="object" id="EG_DL_Garderobe" value="on" trigger="true"/>
        <condition type="object" id="EG_DL_HWR" value="on" trigger="true"/>
        <condition type="object" id="EG_DL_WC" value="on" trigger="true"/>
        <condition type="object" id="EG_WL_WC" value="on" trigger="true"/>
      </condition>
      <actionlist type="on-true">
        <action type="set-value" id="CHECK_LIGHT_EG" value="on"/> 
      </actionlist>
      <actionlist type="on-false">
        <action type="set-value" id="CHECK_LIGHT_EG" value="off"/>
      </actionlist>
    </rule>
    Das sollte reichen und funktionieren...

    Gruß, Waldemar
    OpenKNX www.openknx.de

    Kommentar


      #3
      Hallo Waldemar,

      Danke für den Tipp, jetzt funktioniert es. Da die if-true und if-false Actions garantiert nicht den Unterschiede gemacht haben, muss es ja an dem Trigger in der OR-Condition und den abweichenden Flags gelegen haben. Kannst Du mir grob beschreiben, warum meine Variante nicht tauglich war ?

      Danke,

      Thorsten

      Kommentar


        #4
        Hi Thorsten,

        ich habe das nicht ausprobiert, insofern kann ich auch nur vermuten, aber hier mal die Gedanken, die ich mit gemacht habe:
        1. trigger
          Auch wenn von der Notation her möglich, sollten trigger nur an den conditions stehen, die eine Auswertung der condition auslösen (triggern) sollen. Ich habe schon öfters linknx-configs hier im Forum gesehen, wo man einfach per try-and-error trigger an alle möglichen Stellen hingeschrieben hat, bis es funktioniert. Dann haben es andere gesehen und gedacht, das muss so sein...
          Also grundsätzlich: trigger gehören an conditions, die etwas auslösen sollen. Eine or-condition ist eine reine Auswertung, da gehört kein trigger dran.
        2. flags
          Die flags sollten bei dieser Sache nichts verändert haben, Du hattest das r vergessen (der ermittelte Wert sollte nicht nur bei der Änderung gesendet werden können sondern auch vom Bus per READ gelesen werden können).
          Ferner hattest Du das f gesetzt, das bewirkt nur, dass nicht nur Wertänderungen, sondern auch Wertwiederholungen gesendet werden. Du hättest also nicht nur beim ersten eingeschalteten Licht ein true bekommen, sondern auch bei jedem weiteren Licht.
        3. actionlist
          on-true/false und if-true/false: Ich weiss immer noch nicht exakt, wie linknx arbeitet, wenn on-xxx und if-xxx gleichzeitig angegeben werden, deswegen vermeide ich das und mache nur eines von beiden.


        Wenn Du die Ursache genau wissen willst, musst Du einzelne Teile wieder rückbauen und schauen, wann es wieder schiefgeht.
        Würde mich auch interessieren, woran es lag...

        Gruß, Waldemar
        OpenKNX www.openknx.de

        Kommentar


          #5
          Hallo Waldemar,

          fein. Ich werde also mal ein wenig mit den actionlists spielen.

          1. verstanden - so habe ich es mir ursprünglich auch angelesen, und bin dann wohl über das Ziel hinaus geschossen
          2. verstanden - wahrscheinlich ein verschreiber von mir. r und f liegen recht nah zusammen ;-)
          3. s.o. - hier werde ich mal verschiedene kombis ausprobieren und bei Gelegenheit einen Bericht aus der Praxis abgeben.

          Nochmals Danke,

          Thorsten

          Kommentar

          Lädt...
          X