Ankündigung

Einklappen
Keine Ankündigung bisher.

Anfänger: Linknx Logik

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

    Anfänger: Linknx Logik

    Hallo Zusammen,

    ich habe wahrscheinlich eine Anfängerfrage. Ich habe mir folgende Logik zum Testen in die linknx.XML geschrieben.

    <condition type="and">
    <condition type="object" id="Licht_Buero" value="1" trigger="true"/>
    </condition>
    <actionlist type="if-true">
    <action type="set-value" id="Licht_Behandlung" value="on"/>
    </actionlist>
    </rule>

    Objekte sind alle definiert und das Objekt Licht_Behandlung wird richtig auf 1 gesetzt sobald ich das Licht im Büro einschalte.

    Wie bekomme ich aber nun den Wert des Objekt_Behandlung auf den Bus, damit auch dort im Raum das Licht angeht?

    Vielen Dank für die Hilfe.

    Gruß Jens
    Zuletzt geändert von KNXJens; 03.05.2015, 21:13.

    #2
    Moin Jens
    Du hast eine AND condition ohne 2te condition an zugeben geschrieben.
    Hier gibt es Tipps und Tricks zu dem Thema linknx
    Zuletzt geändert von Knaller; 03.05.2015, 19:35. Grund: Such ml nach mumpf

    Kommentar


      #3
      Hallo,

      danke für die schnelle Antwort. An der fehlenden 2ten Kondition liegt es aus meiner Sicht nicht. Hatte auch schon zwei drin und es ging trotzdem nicht. Der Wert im Objekt passt ja auch. Aber ich bekomme den Wert vom Objekt nicht automatisch auf die Adresse des Objektes geschrieben. Was übersehe ich?

      Gruß Jens

      Kommentar


        #4
        Hallo Jens,

        wie sind die Flags vom Objekt Licht_Behandlung gesetzt? Der Default ist cwtu, das passt dann. Eine Objektänderung wird in dem Fall automatisch auf den Bus gesendet.
        Hast Du schon getestet, ob Du über den eibd schreiben kannst (mit groupswrite)?
        Bei weiteren Fragen schickst Du am besten immer auch die Objektdefinition mit, damit man nicht immer raten muss...

        Gruß, Waldemar

        OpenKNX www.openknx.de

        Kommentar


          #5
          Hallo Waldemar,

          das war es. Also doch Anfängerfehler. Da ich Linknx bisher nur für Diagramme genutzt hatte, habe ich nur cwu verwendet. Mit cwtu klappt es nun. Wer das Wiki lesen kann ist klar im Vorteil.

          Vielen Dank für die schnelle Hilfe.

          Gruß Jens

          Kommentar


            #6
            Hallo zusammen
            Ich bin auf der Suche nach einer Einschaltverzögerung für eine Condition. Bei der action kann ich die Verzögerung via delay realisieren wie kann ich dies bei einer Conditon erreichen? .
            Könnte mir da jemand etwas Entwicklungshilfe leisten, ich möchte den Taster_Alarm_intern um 60 Sekunden Einschaltverzögern.
            Gruss
            Reto
            Code:
              <rule id="Alarm_intern">
              <condition type="and">
              [B]<condition type="object" id="Taster_Alarm_intern" value="1" trigger="true" />[/B]
              <condition type="or">
              <condition type="object" id="Alarm" value="1" trigger="true" />
              </condition>
              </condition>
              <actionlist type="if-true">
              <action type="cycle-on-off" id="Blinklicht" on="5" off="2" count="6" />
              </actionlist>
              </rule>

            Kommentar


              #7
              Hi,

              ich verstehe nicht ganz, was du erreichen möchtest. Das Ereignis Taster_Drücken tritt eben ein, wenn der Taster gedrückt wird. Was dann passieren soll, also die Action lässt sich verzögern, aber nicht das Ereignis....

              Grüße
              Andreas

              Kommentar


                #8
                Hi,

                schreib doch mal, was Du erreichen möchtest. Wie schon Andreas sagte, kannst Du das Ereignis nicht verzögern, das passiert einfach irgendwann. Wahrscheinlich willst Du was anderes...

                Gruß, Waldemar
                OpenKNX www.openknx.de

                Kommentar


                  #9
                  Hallo zusammen

                  Sorry wenn ich mein Problem zu wenig genau beschrieben habe. Im Grundsatz geht es um die Alarmanlage. Wenn ich das Haus verlasse und den Taster „Alarm_extern" betätige, möchte ich noch ca. 60 sec. Zeit haben das Haus zu verlassen bevor der Alarm scharf geschalten wird.
                  Beim Zurückkommen kann ich den Alarm ja bei der Action um 30 sec. verzögern, so bleiben mir 30 sec. um den Alarm unscharf zu schalten.

                  Ich vermute ich muss mir die Verzögerung in etwa so zusammen bauen…


                  Code:
                    <!-- :::::::::::::::::::::::::::::.Alarm-Freigabe-Verzögerung ::::::::::::::::::::::::::::: -->
                    <rule id="Alarm-Freigabe-time-counter">
                    <condition type="and">
                    <condition type="object" id="T_Alarm_extern" value="1" trigger="true" />
                    </condition>
                    <actionlist type="if-true">
                    <action type="set-value" id="T_Alarm_extern_verz" delay="60" value="on" />
                    </actionlist>
                    </rule>
                    <!-- :::::::::::::::::::::::::::::.Alarm_Freigabe_extern ::::::::::::::::::::::::::::: -->
                    <rule id="Alarm_extern">
                    <condition type="and">
                    <condition type="object" id="T_Alarm_extern_verz" value="1" trigger="true" />
                    <condition type="or">
                    <condition type="object" id="Licht_Garage" value="1" trigger="true" />
                    </condition>
                    </condition>
                    <actionlist type="if-true">
                    action type="cycle-on-off" id="Blinklicht" on="5" off="2" count="6" /> 
                    </actionlist>
                    </rule>

                  Besten Dank fürs Feedback.
                  Gruss
                  Reto

                  Kommentar


                    #10
                    Hi,

                    man kann eine Verzögerung so machen, allerdings solltest Du immer genau wissen, was Du machst. Ich schreib mal auf, was ich an deinem Coding nicht so toll finde:
                    • Das "and" in der ersten rule ist vollkommen überflüssig
                    • if-true funktioniert nur vernünftig, wenn das zugehörige Trigger-Objekt das s-Flag gesetzt hat (weiß nicht, ob Du es gesetzt hast)
                    • Das "or" in der 2. rule ist ebenso überflüssig
                    • Du setzt nie "T_Alarm_extern_verz" auf 0, somit wird die 2 rule immer durch "Licht_Garage" getriggert, sobald einmalig "T_Alarm_extern_verz" gesetzt wurde
                    • Ich sehe an Deinem Beispiel nicht, dass das was mit der Alarmanlage zu tun hat - hier wird nur das Licht ein paar mal blinken lassen...
                    Du solltest Dir für Deinen Anwendungsfall auch überlegen, durch welche Bedingung Du die 60 Sekunden-Verzögerung unterbrechen kannst - falls Du den Einschalt-Taster drückst und dann feststellst, dass Du es nicht schaffst, das Haus innerhalb von 60 Sekunden zu verlassen.

                    Ein kleiner allgemein-Tip: Aus Deinem Vorgehen (arbeiten mit if-true) erkennt man, dass Du bei Linknx-Logiken an statische Logiken denkst. Linknx ist aber (wie knx) event basiert. Denke bei einer Logik nicht nur die Fälle durch, in den die Objekte eine 1 werden, sondern an alle 4 Fälle:
                    1. Objekt-Übergang von 0 auf 1
                    2. Objekt ist 1
                    3. Objekt-Übergang von 1 auf 0
                    4. Objekt ist 0
                    Deine 2 rule weist alle 4 Fälle auf (durch das and bedingt).

                    Gruß, Waldemar
                    OpenKNX www.openknx.de

                    Kommentar


                      #11
                      Hallo Waldemar

                       
                       
                      Vorerst mal herzlichen Dank für deine Hilfe und ups…. da muss ich wohl noch an den Basics arbeiten ;-)

                      Meine Idee war beim Rausgehen den Taster „T_Alarm_extern_verz" zu drücken (KNX Umschalter 1x drücken Ein erneut drücken AUS) und diesen mit 45 sec. zu verzögern. Wenn ich nochmal ins Haus zurück muss drücke ich den Taster erneut (vor auslösen eines Alarms).
                      Wenn ich ein paar Stunden später wieder nach Hause komme, werde ich mit reinkommen den Alarm auslösen, wenn ich aber in der vorgegebenen Zeit (Verzögerung Alarm SMS minus Verzögerung T_Alarm_extern_verz ) den Taster „T_Alarm_extern_verz" erneut drücke, sollte die Rule "Alarm-Freigabe-time-counter" nicht mehr true sein und somit auch die Rule „Alarm_extern" nicht mehr ziehen.

                      Jetzt kommt vermutlich die Knacknuss oder mein unwissen ;-) , da ich beim Hineinkommen den Alarm ausgelöst habe, wird <action type="send-sms" auf true sein wird diese jetzt unterbrochen wenn ich nach dem Auslösen des Alarms innerhalb von ca. 30 sec. den Taster „T_Alarm_extern" drücke?

                      Gruss Reto



                      <object type="1.001" id="T_Alarm_extern" init="persist" flags="cwtu" gad="1/2/6">T_Alarm_extern</object>
                      <object type="1.001" id="T_Alarm_extern_verz" init="persist" flags="cwtu" gad="1/2/8">T_Alarm_extern_verz</object>

                      <!-- :::::::::::::::::::::::::::::.Alarm-Freigabe-Verzögerung ::::::::::::::::::::::::::::: -->
                      <rule id="Alarm-Freigabe-time-counter">
                      <condition type="object" id="T_Alarm_extern" value="1" trigger="true" />
                      <actionlist type="if-true">
                      <action type="set-value" id="T_Alarm_extern_verz" delay="45" value="on" />
                      </actionlist>
                      </rule>
                      <!-- :::::::::::::::::::::::::::::.Alarm_Freigabe_exter n ::::::::::::::::::::::::::::: -->
                      <rule id="Alarm_extern">
                      <condition type="and">
                      <condition type="object" id="T_Alarm_extern_verz" value="1" trigger="true" />
                      <condition type="or">
                      <condition type="object" id="Licht_Garage" value="1" trigger="true" />
                      <condition type="object" id="Entree_Licht" value="1" trigger="true" />
                      <condition type="object" id="Bad_EG_Licht" value="1" trigger="true" />
                      <condition type="object" id="Wachkueche_Licht" value="1" trigger="true" />
                      <condition type="object" id="Geraeteraum_Licht" value="1" trigger="true" />
                      <condition type="object" id="Abstellraum_Licht" value="1" trigger="true" />
                      <condition type="object" id="Keller_Licht" value="1" trigger="true" />
                      <condition type="object" id="UG_Gang_Licht" value="1" trigger="true" />
                      <condition type="object" id="UG_Treppe_to_EG_Licht" value="1" trigger="true" />
                      <condition type="object" id="FK_Bad_OG" value="1" trigger="true" />
                      <condition type="object" id="FK_Kueche" value="1" trigger="true" />
                      <condition type="object" id="FK_Buero" value="1" trigger="true" />
                      <condition type="object" id="FK_Bad_EG" value="1" trigger="true" />
                      <condition type="object" id="TK_Essen" value="1" trigger="true" />
                      <condition type="object" id="TK_Sitzplatz" value="1" trigger="true" />
                      </condition>
                      </condition>
                      <actionlist type="if-true">
                      <action type="send-sms" id="handynummer" delay="90" value="Alarm es wird eingebrochen." />
                      </actionlist>
                      /rule>
                      Zuletzt geändert von fox007; 22.05.2015, 09:17.

                      Kommentar


                        #12
                        Hi Reto,

                        ich kommentier Deinen Ausschnitt mal und versuche beispielhaft zu zeigen, was ich mit Übergang 0-1 bzw. Zustand meine:
                        1. Du startest linknx. Objekt "T_Alarm_extern" (von mir im folgenden "A" genannt) und Objekt "T_Alarm_extern_verz" (von mir im folgenden "B" genannt) sind beide 0 (oder false oder off, alles gleich zu behandeln).
                        2. Nun drückt jemand auf den Alarm-Taster, dadurch wechselt "A" von 0 auf 1. Die Rule "Alarm-Freigabe-time-counter" (von mir im folgenden "R1" genannt) wird getriggert und wird true. Dadurch wird die if-true-action abgesetzt, die startet einen timer (45 Sec)
                        3. Nach dieser Zeit geht B von 0 auf 1. Das triggert den einen Eingang vom AND in der Rule "Alarm_extern" (von mir im folgenden "R2" genannt). Die eine Seite vom AND ist jetzt true, die Rule selbst noch immer false.
                        4. Jetzt geht Licht_Garage von 0 auf 1. Das triggert das OR in R2, das OR wird true, der andere Eingang vom AND in R2 wird true, damit wird die gesamte R2 true. Jetzt wird die action ausgeführt und ein timer gestartet (90 Sec).
                        5. Nach 90 Sec wird die SMS verschickt.
                        Das war jetzt der "straight-forward"-Fall, an den Du gedacht hast. Dieser würde wohl funktionieren. Du musst aber alle anderen Fälle bedenken, die auch zum Alarm führen, die aber eigentlich keine sind. Hier einige Beispiele (keinesfalls vollständig):
                        • 40 Sec nach Punkt 2 geht jemand wieder rein und drückt den Taster, um den Alarm wieder zu deaktivieren. Objekt A geht von 1 auf 0. Das Triggert R1, diese wird false. Da es aber keinen false-Zweig in der actionlist gibt, passiert hier gar nichts. 5 Sek. später wird normal mit Punkt 3 weiter gemacht. Derjenige, der rein ist, macht Entree_Licht an (in der Annahme, er hat den Alarm abgeschaltet), das OR wird getriggert und 90 sek später hast Du die SMS auf dem Handy.
                        • Nehmen wir an, die Nachlaufzeit von Deinem PM in der Garage ist 120 Sek. Jemand ist in der Garage (mit Licht). Jetzt geht er da raus und drückt nun den Taster für Alarm und geht aus dem Haus. Nach 45 + 90 Sec. hast Du Deine Alarmmeldung auf dem Handy. Warum? Weil nach 45 Sek. R2 getriggert wird. Da hier aber durch das (immer noch leuchtende) Garagenlicht das OR true ist, wird sofort der Timer auf 90 Sec gesetzt und die SMS anschließend verschickt.
                        • Da bei Dir Objekt B nie auf 0 zurückgesetzt wird (also immer im Zustand 1 ist, sobald es einmal von 0 auf 1 gegangen ist), wirst Du immer nach 90 Sek eine SMS bekommen, sobald irgendein Objekt aus dem OR-Zweig in R2 auf true geht, da die UND-Bedingung immer erfüllt ist und Du die action mit if-true triggerst (on-true würde es immerhin erfordern, dass das OR erstmal false wird, dann true, bevor die action wieder ausgeführt wird - reicht aber nicht in Deinem Fall).
                        Ich könnte jetzt noch einige Fälle aufführen, aber das musst Du schon selber machen, ist ja Dein Haus .
                        Grundsätzlich musst Du Logiken nicht nur für den Einschalt-Fall (die 1) schreiben, sondern auch für den Ausschalt-Fall. Das ist im obigen Fall gar nicht gegeben.

                        Gruß, Waldemar
                        OpenKNX www.openknx.de

                        Kommentar


                          #13
                          Hallo Waldemar

                          Besten Dank für deine Mühe, da werde ich wohl noch einiges nachpflegen müssen.

                          Nochmals herzlichen Dank.

                          Gruss aus CH
                          Reto

                          Kommentar

                          Lädt...
                          X