Ankündigung

Einklappen
Keine Ankündigung bisher.

Messwert von Fenstersensor invertieren und auf KNX-Bus senden.

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

    Messwert von Fenstersensor invertieren und auf KNX-Bus senden.

    Ich krieg's einfach nicht hin, wer kann mir helfen?

    Es geht um einen Reed-Kontakt am Fenster, der über einen 1-Wire Multi-I/O-Sensor per 1-Wire-Plugin abgefragt und auf den KNX-Bus gesendet wird. So weit funktioniert alles mit folgendem Code in meiner 1wire.conf:

    Code:
    [OW]
        [[Fenster]]
            [[[EsszimmerLinks]]]
                type = bool
                visu_acl = rw
                ow_addr = 3A.CBF713000000
                ow_sensor = IB
                knx_dpt = 1
                knx_send = 2/1/82
                knx_reply = 2/1/82
    Leider sind die Werte vertauscht, 0 soll 1 sein und umgekehrt, ein geschlossenes Fenster wird geöffnet angezeigt und umgekehrt. Bevor ich verzweifle, nun die Frage in die Runde: Warum funktioniert folgender Code in meiner onewire.conf nicht?

    Code:
    [OW]
        [[Fenster]]
            [[[EsszimmerLinks]]]
                type = bool
                eval = not sh.Invert()
                eval_trigger = Invert
                knx_dpt = 1
                knx_send = 2/1/82
                knx_reply = 2/1/82
                enforce_updates = true
            [[[Invert]]]
                type = bool
                ow_addr = 3A.CBF713000000
                ow_sensor = IB
                enforce_updates = true
    Damit wird gar nichts mehr auf den Bus gesendet, verstehe nicht warum. Ich wäre für Hilfe sehr dankbar!

    Uli

    #2
    Ich bin zwar momentan nicht ganz in der materie mit eval etc.
    Aber muss es nicht wenn dann OW.Fenster.Invert heissen?

    Oder es fehlt bei Invert noch eine eckige Klammer, damits zum Childitem wird.

    Gruß Wolfi

    Kommentar


      #3
      Ich habe es gerade mal so probiert:

      Code:
      [OW]
          [[Fenster]]
              [[[EsszimmerLinks]]]
                  type = bool
                  eval = OW.Fenster.Invert
                  eval_trigger = Invert
                  knx_dpt = 1
                  knx_send = 2/1/82
                  knx_reply = 2/1/82
                  enforce_updates = true
              [[[Invert]]]
                  type = bool
                  ow_addr = 3A.CBF713000000
                  ow_sensor = IB
                  enforce_updates = true
      Leider auch ohne Erfolg.

      Kommentar


        #4
        Hab zwar eine ganze Weile nicht mehr an meinen Items rumgebastelt und mag falsch liegen, aber versuche mal bitte:

        Code:
        eval = not sh.OW.Fenster.Invert()
        eval_trigger = OW.Fenster.Invert
        /tom

        Kommentar


          #5
          Tom, Du bist mein Held. Ich danke Dir herzlich!

          So geht's:

          Code:
                  [[[EsszimmerLinks]]]
                      type = bool
                      eval = not sh.OW.Fenster.Invert()
                      eval_trigger = OW.Fenster.Invert
                      knx_dpt = 1
                      knx_send = 2/1/82
                      knx_reply = 2/1/82
                  [[[Invert]]]
                      type = bool
                      ow_addr = 3A.CBF713000000
                      ow_sensor = IA
                      enforce_updates = true

          Kommentar


            #6
            Ich bin mir nicht so sicher, ob du das Hilfsitem überhaupt brauchst, evtl. reicht auch folgendes:
            Code:
             [OW]
                [[Fenster]]
                    [[[EsszimmerLinks]]]
                        type = bool
                        visu_acl = rw
                        ow_addr = 3A.CBF713000000
                        ow_sensor = IB
                        knx_dpt = 1
                        knx_send = 2/1/82
                        knx_reply = 2/1/82
                        eval = not value
            Ein eval funktioniert nämlich auch ohne eval_trigger.

            Kommentar


              #7
              Sehr cool! Hab's direkt heute Morgen noch vor der Frühschicht ausprobiert, funktioniert! Das ist natürlich die eleganteste Lösung, vielen Dank für den Tipp!

              Ich hatte auch schon Versuche in diese Richtung unternommen, leider ohne Erfolg. Mir war nicht klar was "value" genau bedeutet. In der Doku steht nur: "Ein optionaler Startwert für dieses Item".

              Kommentar


                #8
                Das klingt tatsächlich nicht so richtig, wo steht das?
                value ist der Wert, welcher eigentlich hätte gesetzt werden sollen. Also der z.B. von einem Plugin wie OneWire oder KNX übertragen wird oder per sh.foo.bar() gesetzt wird. Bei Verwendung von eval_trigger ist es der Wert des triggerenden Items.
                Bevor der Wert dann tatsächlich auf das Item geschrieben wird, durchläuft er das eval.

                Kommentar


                  #9
                  Hi,

                  ​​​​​​es gibt verschiedene "value". Wenn es als Attribut (linke Seite des gleich Zeichens) verwendet wird, ist es der Startwert des items, wenn es im eval verwendet wird, ist es der Wert, mit dem getriggert wurde. Und - wie smai schon sagte - das setzen eines Wertes ist abstrakt betrachtet auch ein Trigger.

                  Gruß Waldemar
                  OpenKNX www.openknx.de

                  Kommentar


                    #10
                    Haben wir eigentlich im Wiki eine Seite für solche kurzen, kleinen "Textbausteine"? Stefans Vorschlag wäre ein Kandidat dafür, Negieren von Items kommt sicher häufiger mal vor ...
                    /tom

                    Kommentar


                      #11
                      Ich habe mal im Wiki unter Items (rechts in der Übersicht) eine Seite Tipps und Tricks eingerichtet und diesen Tipp dort verewigt.
                      Viele Grüße
                      Martin

                      There is no cloud. It's only someone else's computer.

                      Kommentar


                        #12
                        Zitat von UliSchirm Beitrag anzeigen
                        In der Doku steht nur: "Ein optionaler Startwert für dieses Item".
                        Zitat von smai Beitrag anzeigen
                        Das klingt tatsächlich nicht so richtig, wo steht das?
                        Das steht in der Wiki unter "Items" Abschnitt "Standard Attribute"

                        Ich habe mal im Wiki unter Items (rechts in der Übersicht) eine Seite Tipps und Tricks eingerichtet und diesen Tipp dort verewigt.
                        ​​​​​​​Super Sache, vielen Dank!

                        Kommentar


                          #13
                          Genau, aber das ist nicht das value im eval!

                          Gruß Waldemar
                          OpenKNX www.openknx.de

                          Kommentar


                            #14
                            Weiter unten steht noch:

                            "Wenn ein Item einen neuen Wert zugewiesen bekommen soll (z.B. via KNX oder Logik), wird der neue Wert zunächst in value zwischengespeichert. Wenn ein Attribut eval existiert, so wird der Ausdruck hinter eval = ... ausgeführt und das Ergebnis dieses Ausdrucks als neuer Wert ins Item übernommen."

                            Also jetzt ist die Verwirrung komplett (bei mir zumindest).

                            Kommentar


                              #15
                              Wie Waldemar schreibt, hat das von dir zitierte Attribut "value = " nichts mit der Variable "value" im Attribut "eval = " zu tun.

                              Kommentar

                              Lädt...
                              X