Ankündigung

Einklappen
Keine Ankündigung bisher.

autotimer schaltet nicht

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

    autotimer schaltet nicht

    Hallo

    eigentlich sollte das doch funktionieren:

    Code:
    [TestCounter]
        type = num
        cache = yes
        knx_dpt = 13
        knx_listen = 0/2/0
        knx_init = 0/2/0
    [TestCounterTimer]
        type = bool
        value = 0
        eval_trigger = TestCounter
        eval = 1 if sh.TestCounter.changed_by() == "KNX:1.0.254" else 0
        autotimer = 5s = 0
        enforce_updates = yes
    tut es aber nicht:

    Code:
    2018-10-21 15:12:29 DEBUG items.TestCounterTimer-Timer Triggering TestCounterTimer eval - by: Autotimer source: None dest: None value: {'value': '0', 'caller': 'Autotimer', 'd
    2018-10-21 15:12:54 DEBUG Main Triggering TestCounterTimer - by: KNX source: 1.0.254 dest: 0/2/0 value: {'value': 35, 'source': '
    2018-10-21 15:12:54 DEBUG TestCounterTimer Item TestCounterTimer = True via Eval TestCounter None
    2018-10-21 15:12:59 DEBUG items.TestCounterTimer-Timer Triggering TestCounterTimer-eval - by: Autotimer source: None dest: None value: {'value': '0', 'caller': 'Autotimer', 'd
    ???

    Gruss, Micha
    Zuletzt geändert von bmx; 21.10.2018, 16:09. Grund: Bitte [CODE] verwenden und nicht [QUOTE]

    #2
    Hi,

    autotimer =5s =0

    ist nicht gültig. Versuch mal

    autotimer = 5 = 0

    Gruß, Waldemar
    OpenKNX www.openknx.de

    Kommentar


      #3
      Mein Taster fürs Garagentor in der Visu tastet 2 Sekunden und das Item sieht so aus und funktioniert:
      als yaml...

      Code:
      Garage:
          Taster:
              type: bool
              autotimer: 'yes'
              autotimer: 2 = false
              visu_acl: rw
              knx_dpt: 1
              knx_listen: 1/2/0
              mqtt_topic_out: 'Garage_Taster'
      Gruß Torsten
      Zuletzt geändert von bmx; 21.10.2018, 16:11. Grund: Bitte [CODE] verwenden für yaml Schnipsel

      Kommentar


        #4
        ne klappt nicht. Hätte mich auch gewundert. Weil nach 5s kommt ja:

        Code:
        items.TestCounterTimer-Timer Triggering TestCounterTimer-eval - by: Autotimer source: None dest: None value: {'value': '0', 'caller': 'Autotimer', 'd
        Das Problem muss im eval liegen. Ich verstehe es nur nicht
        Zuletzt geändert von bmx; 21.10.2018, 16:12.

        Kommentar


          #5
          Ich meine zu erinnern, dass bei zwei konkurrierenden Anforderungen/Attributen an ein Item (hier: eval und autotimer) eval gewinnt.

          Du solltest das nicht versuchen in einem Item zu lösen.
          Viele Grüße
          Martin

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

          Kommentar


            #6
            Wenn ein eval nicht klappt, macht es durchaus Sinn das ganze mal zuerst mit einer Logik zu probieren. Da kann man bequem loggen, während der Laufzeit die Logik neu laden nach Änderungen und Annahmen die man macht überprüfen.

            Code:
            eval = 1 if sh.TestCounter.changed_by() == "KNX:1.0.254" else 0
            Ich bezweifle, das da "KNX:1.0.254" stimmen wird, "KNX" wohl eher.

            Kommentar


              #7
              das eval allein funktioniert. aber der Hinweis von Msinn könnte zum Erfolg führen..mal schauen..

              Kommentar


                #8
                Msinn bringt zwar den richtigen Punkt zur Sprache, aber die Erklärung stimmt meines Wissens nicht.

                Das eval konkurriert nicht mit autotimer sondern wird auf jeden zu setzenden Wert angewendet, unabhängig von der Source (und nicht wie man vielleicht meinen könnte nur auf eval_trigger).
                Sprich der Autotimer löst das eval mit value = 0 aus.

                Wenn dein Counter nie negativ sein kann, könntest du das z.B. so lösen:
                Code:
                [TestCounterTimer]
                   ...
                    eval_trigger = TestCounter
                    eval = 1 if sh.TestCounter.changed_by() == "KNX:1.0.254" and value != -1 else 0
                    autotimer = 5s = -1

                Kommentar


                  #9
                  schöne Idee...klappt leider auch nicht bleibt auf true.

                  Kommentar


                    #10
                    Gibt es irgendwelche Logeinträge dazu?
                    Wieso brauchst du diese Prüfung sh.TestCounter.changed_by() == "KNX:1.0.254" überhaupt, wird der Counter tatsächlich auch von anderen Quellen geändert, welche TestCounterTimer auf keinen Fall auslösen dürfen?

                    Kommentar


                      #11
                      ja, immer beim Start. Siehe auch https://knx-user-forum.de/forum/supp...r-bei-neustart

                      Kommentar


                        #12
                        Hi,

                        es gibt derzeit ziemlich viele Möglichkeiten, das Zusammenspiel zwischen den Wertübergaben von autotimer und cycle und deren Auswertung in eval zu versaubeuteln
                        Der Vorschlag von smai ist super, kann aber durch Voreinstellungen zunichte gemacht werden. Meiner Meinung nach sollte folgendes auf jeden Fall funktionieren:

                        Code:
                        eval = 1 if sh.TestCounter.changed_by() == "KNX:1.0.254" and [COLOR=#FF0000]int([/COLOR]value[COLOR=#FF0000])[/COLOR] != -1 else 0
                        autotimer = 5s = -1 [COLOR=#FF0000]= compat_1.2[/COLOR]
                        Eventuell kannst Du auch das compat_1.2 weglassen, das hängt aber von Voreinstellungen ab, so sollte es auf jeden Fall gehen.

                        Gruß, Waldemar
                        OpenKNX www.openknx.de

                        Kommentar


                          #13
                          Klasse!!!! Das klappt! Vielen vielen Dank!!! was macht compat_1.2 ?

                          Gruss, Micha

                          edit: ahhh..alles klar. hab es in der doku gefunden.

                          Kommentar


                            #14
                            Stimmt, mit compat_1.2 wird der Wert von autotimer als string übergeben, ohne wird er zuerst in bool konvertiert. Dadurch ist das -1 nicht so angekommen.

                            Es wäre noch transparenter, wenn man anstatt -1 z.B. einen string wie z.b. autotimer angibt:
                            Code:
                            eval = 1 if sh.TestCounter.changed_by() == "KNX:1.0.254" and value != "autotimer" else 0
                            autotimer = 5s = autotimer = compat_1.2

                            Kommentar


                              #15
                              Zitat von lexxmm Beitrag anzeigen
                              was macht compat_1.2 ?
                              Ein Blick in die Doku kann helfen https://www.smarthomeng.de/user/konf...autotimer.html
                              Viele Grüße
                              Martin

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

                              Kommentar

                              Lädt...
                              X