Ankündigung

Einklappen
Keine Ankündigung bisher.

Jalousieautomatik und eval und eval_trigger mit bool ohne else

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

    Jalousieautomatik und eval und eval_trigger mit bool ohne else

    Hallo,

    ich habe eine Frage zu eval und eval_trigger bei der Verwendung direkt in den items.

    Im Grunde möchte ich die Rollladen automatisch in Abhängigkeit von Sonne fahren. Die Freigabe dafür soll über ein weiteres item erfolgen.
    In Summe habe ich dafür 5 Items konfiguriert:
    1. Automatikmodul als bool
    2. Auslöser für hochfahren als bool mit crontab
    3. Auslöser für runterfahren als bool mit crontab
    4. Hochfahren, wenn Automatik = 1 und Auslöser für Hochfahren = 1
    5. Runterfahren, wenn Automatik = 1 und Auslöser für Runterfahren = 1

    Hier der Auszug aus den Items:

    Code:
    [Rollladen]
        [[EG]]
            [[[Automatik]]]
                type = bool
                visu_acl = rw
                knx_dpt = 1
                knx_send = 0/0/64
                knx_listen = 0/0/64
                knx_init = 0/0/64
                enforce_updates = yes
                cache = yes
            [[[hoch]]]
                type = bool
                visu_acl = rw
                enforce_updates = yes
                autotimer = 1 = 0
                crontab = 5:50<sunrise-8 = 1
                enforce_updates = yes
            [[[runter]]]
                type = bool
                visu_acl = rw
                enforce_updates = yes
                autotimer = 1 = 0
                crontab = sunset-7<22:20 = 1
                enforce_updates = yes
            [[[AutoMoveDown]]]
                type = bool
                visu_acl = rw
                eval = 0 if sh.Rollladen.EG.Automatik() == 1 and sh.Rollladen.EG.runter() == 1 else value
                eval_trigger = Rollladen.EG.runter | Rollladen.EG.Automatik
                knx_dpt = 1
                knx_send = 0/0/10
                enforce_updates = yes
            [[[AutoMoveUp]]]
                type = bool
                visu_acl = rw
                eval = 1 if sh.Rollladen.EG.Automatik() == 1 and sh.Rollladen.EG.hoch() == 1 else value
                eval_trigger = Rollladen.EG.hoch | Rollladen.EG.Automatik
                knx_dpt = 1
                knx_send = 0/0/10
                enforce_updates = yes
    Problem ist,
    - das der Aktor bei gesendeten 0 und 1 fährt (hoch oder runter)
    - bei Verwendung von if bei eval direkt in den items immer ein else sein muss
    und dann die Rolladen immer irgendwas machen. Ich dachte, dass wenn ich else = value setze, nicht auf den KNX gesendet wird.

    Es soll so sein, dass [[[AutoMoveDown]]] und [[[AutoMoveUp]]] nur dann was auf den KNX senden, wenn die Bedingung erfüllt ist.
    Wer kann mir hier einen Tip geben?
    DANKE.

    #2
    Probier's mal ohne enforce_updates=yes, dann sollte er nur bei tatsächlicher Wertänderung senden.
    /tom

    Kommentar


      #3
      Mit value sendest du den Wert, welcher das Item aus dem eval_trigger hat.
      Du kannst else None schreiben, gibt zwar eine Warnung im Log, aber funktioniert problemlos.

      Kommentar


        #4
        So hier noch die finale Umsetzung, die nun auch funktioniert:

        Code:
        [Rollladen]
            [[EG]]
                [[[Alle]]]
                    [[[[Automatik]]]]
                        value = 1
                        type = bool
                        visu_acl = rw
                        knx_dpt = 1
                        knx_send = 0/0/64
                        knx_listen = 0/0/64
                        knx_init = 0/0/64
                        enforce_updates = yes
                        cache = yes
                    [[[[move]]]]
                        type = bool
                        visu_acl = rw
                        enforce_updates = yes
                        crontab = sunset-7<22:20 = 1 | 5:50<sunrise-8 = 0    
                        eval = value if sh.Rollladen.EG.Alle.Automatik() == 1 else sh.Rollladen.EG.Alle.move()            
                        knx_dpt = 1
                        knx_send = 0/0/10
                        cache = yes
                    [[[[stop]]]]
                        type = bool
                        visu_acl = rw
                        enforce_updates = yes
                        knx_dpt = 1
                        knx_send = 0/0/11
                    [[[[pos]]]]
                        type = num
                        visu_acl = rw
                        enforce_updates = yes
                        knx_dpt = 5
                        knx_listen = 0/0/35
                        knx_send = 0/0/36
                        knx_init = 0/0/35
        Vielleicht kann es noch jemand brauchen.

        Kommentar

        Lädt...
        X