Ankündigung

Einklappen
Keine Ankündigung bisher.

Autotimer

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

    Autotimer

    Ich versuche gerade mit einem Präsenzmelder ein Licht bei Dunkelheit zu schalten, so dass es nach einer bestimmten Zeit mittels autotimer wieder ausgeht.

    Der Präsenzmelder schickt zyklisch alle 5s ein EIN-Telegramman Gruppenadresse 2/3/30, wenn er Anwesenheit detektiert.

    Der untere eval-Ausdruck schaltet eg.flur.b1.a1 zwar ein, aber nicht mehr aus, obwohl laut Debugging der Autotimer das Item mit 0 aufruft.

    Code:
    [eg]
      [[flur]]
        [[[b1]]]
          [[[[a1]]]]
            name = Präsenzmelder
            type = bool
            knx_dpt = 1
            knx_listen = 2/3/30
            enforce_updates = On
            eval = value and ((sh.eg.flur.b1.lux() < 10) and (sh.eg.flur.b1.a1()))
            autotimer = 20 = 0
          [[[[lux]]]]
            name = Lux
            type = num
            knx_dpt = 9
            knx_listen = 2/3/31
    Wo liegt der Fehler?
    Zuletzt geändert von zittho; 23.11.2016, 21:41.

    #2
    Versuchs mal mit autotimer = 20 = False
    Der Wert beim autotimer wird meines Wissens als String übergeben und "0" wird wohl zu True gecastet oder so.
    Ich hatte jedenfalls eben heute Abend das Problem, dass ein crontab nur mit False anstelle von 0 funktioniert hat.

    Und noch mein schon oft angebrachter Hinweis zu relativen Itempfaden:
    Im eval kannst du statt sh.eg.flur.b1.a1() einfach self() schreiben und statt sh.eg.flur.b1.lux() self.return_parent.lux()
    Bei ersterem ist der Vorteil wohl offensichtlich, zweiteres ist z.B. praktisch, wenn du das Pattern für andere Räume kopieren willst, weil es dann keine Anpassungen braucht oder wenn du b1 einmal umbenennst oder verschiebst.
    Zuletzt geändert von smai; 23.11.2016, 22:24.

    Kommentar


      #3
      Danke! Dein Tipp gab den entscheidenden Hinweis. Allerdings wird der Wert bei autotimer wohl generell als String übermittelt. Folgende Ausdruck funktioniert nun:

      (value != 'False') and ((sh.eg.flur.b1.lux() < 10) or (sh.eg.flur.b1.a1())) returns False

      Das scheint mir aber eher ungewollt zu sein, dass autotimer nach string castet. Was sagen die Entwickler?

      Kommentar


        #4
        Das ist anscheinend gewollt, es gab vor nicht all zu langer Zeit irgendwo im Forum eine Diskussion dazu.

        EDIT: Habe den Beitrag mit der Erklärung eben gefunden: https://knx-user-forum.de/forum/supp...528#post999528

        Kommentar


          #5
          Hmm. Irgendwie gar nicht intuitiv.

          Die Dokumentation in der Wiki ist auch falsch: autotimer setzt den Wert des Items nach einer Zeitspanne auf einen bestimmten Wert. 'autotimer = 5m = 0' setzt nach 5 Minuten den Wert des Items auf 0.

          Müsste heissen: setzt [...] den Wert auf "0" (String!).

          Kommentar


            #6
            Ich teile deine Meinung, wie du in dem verlinkten Thread sehen kannst.
            Aber ich verstehe auch, dass man diesen Fehler aus der Vergangenheit wegen der Rückwärtskompatibilität nun nicht einfach korrigieren kann.

            Kommentar


              #7
              Ich denke ein "issue" sollte man dazu im github erfassen. Entweder ist die Funktion zu überarbeiten, oder die Dokumentation. Habe erst vor ein paar Tagen noch mal den Thread gelesen, als mknx die Funktion eingeführt hat. Da war nicht die Rede davon, dass die Werte als String übergeben werden.

              Nachtrag: habe jetzt mal ein issue erfasst und gleich einen feature request dran gehängt (variable Parameter für autotimer).
              Zuletzt geändert von wvhn; 23.11.2016, 23:33.

              Kommentar


                #8
                Um Rückwärtskompatibilität zu wahren, könnte man auch das zwingende Schlüsselwort compat in der Konfiguration einführen.

                Mit compat = latest wird die jüngste Syntax und Semantik verwendet.
                Mit compat = <Versionsstand> der entsprechende Versionsstand.

                Bei Upgrade von Smarthome müsste man sich spätestens entscheiden, was man will. Unterstützung für sehr alte Versionen könnte man dann auch in Zukunft aufgeben, indem der entsprechende <Versionsstand> nicht mehr akzeptiert wird.

                Der Issue ist unter https://github.com/smarthomeNG/smarthome/issues/160. Hier sollte die Diskussion weiter gehen.

                Kommentar

                Lädt...
                X