Ankündigung

Einklappen
Keine Ankündigung bisher.

autotimer schaltet nicht

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

    #16
    ich hatte noch mal edit -> "edit: ahhh..alles klar. hab es in der doku gefunden."

    Kommentar


      #17
      Hi,

      jetzt wo es funktioniert, kann ich auch gerne mal erklären, warum es schief ging und was die Hintergründe zu eval und value sind.

      Allgemein:
      Wichtig ist zu wissen, dass eval IMMER läuft, bei jeder Wertänderung eines Items! Beim Aufruf des eval gibt es eine Variable "value", die den neuen Wert enthält, den das Item bekommen soll. Also durchaus auch den Wert, den cycle, crontab oder ein autotimer mitbringen. Allerdings wurden bei letzteren die Werte immer als String übermittelt (bis shNG 1.2). Also auch ein bool-Item (wie bei Dir) hat ein string-value bekommen und man musste das eval typgerecht aufbauen. Darüber haben viele User gemeckert und Martin hat dann ab shNG 1.3 die Möglichkeit eingebaut, dass die Werte von cycle, crontab und autotimer immer typgerecht ans Item übertragen werden. Ich persönlich bin der Meinung, dass das eine "Verschlimmbesserung" ist, da es dann zu solchen Späßen wie bei Dir führt, dass ein bool-Item ein -1 als True bekommt und man sucht sich den Wolf, früher gab es im Log eine Meldung zur fehlender Typkonvertierung. Mit compat_1.2 gibt man aber an, dass das alte Verhalten (ohne Typkonvertierung, übergabe als String) gewollt wird.

      Versuch 1 ohne value im eval:
      Das war recht simpel: Dein Autotimer hat getriggert, der eval hat festgestellt, dass TestCounter immer noch von KNX zuletzt geändert worde ist und somit war der eval 1 (also True).

      Versuch 2 mit value = -1 im eval:
      Hier wurde durch die automatische Typkonvertierung aus der -1 ein True gemacht, somit war value (True) immer ungleich -1 und der eval blieb bei 1.

      Versuch 3 mit meinem Vorschlag:
      Hier wurde die -1 als "-1" übertragen, der int("-1") ist -1 und das konnte im eval abgefragt werden.

      Finaler Vorschlag von Smai (bei dem ich aber str(value) schreiben würde):
      Hier wird mit "autotimer" auf einen Wert abgefragt, der vom anderen Trigger (TestCounter) nie geliefert werden kann, damit ist das die sicherste zum zuverlässigste Lösung. Die oberen Lösungen würden alle nicht funktionieren, wenn TestCounter den Wert -1 bekommen würde.

      Hoffentlich habe ich jetzt alle Klarheiten beseitigt

      Gruß, Waldemar
      OpenKNX www.openknx.de

      Kommentar


        #18
        Vielen Dank für die Erklärung!

        Kommentar

        Lädt...
        X