Ankündigung

Einklappen
Keine Ankündigung bisher.

Eval und Autotimer

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

    Eval und Autotimer

    Hi zusammen,
    kann ich eigentlich einen eval und einen autotimer in der conf kombinieren. Folgendes habe ich vor

    + Wenn es klingelt wird ein VISU Item auf true gesetzt
    + Dieses VISU Item wird wieder Fals gesetzt, wenn jemand die Türe öffnet
    + Alternativ wird das VISU Item auf jeden Fall nach 3min wieder auf False gesetzt

    Ich schalte damit ein Tablet um, so dass es mir das Kamerabild vor der Haustür zeigt. Wenn aber 3min nichts passiert, soll das Tablet wieder zurückschalten. Leider passiert nach 3min einfach nichts. Was mache ich falsch?

    Anbei die Config

    Code:
    [VISU]
        [[DISPLAY_CAMERA_FRONTDOOR]]
            name = Anzeige des Kamerabildes vor der Haustüre
            type = bool
            visu_acl = rw
            value = False
            enforce_updates = True
            eval = True if (sh.R91.KLINGEL() == True) else False if (sh.R12.HAUSTUER.GESCHLOSSEN() == False) else sh.VISU.DISPLAY_CAMERA_FRONTDOOR()
            eval_trigger = R91.KLINGEL | R12.HAUSTUER.GESCHLOSSEN
            autotimer = 3m = False
    
    [R12]
        [[HAUSTUER]]
            [[[GESCHLOSSEN]]]
                name = R12 Haustuer geschlossen (1=zu, 0=auf)
                type = bool
                visu_acl = rw
                cache = True
                knx_dpt = 1
                knx_listen = ...
                knx_init = ...
    
    [R91]
        [[KLINGEL]]
            name = R91 Haustuer Klingel
            type = bool
            visu_acl = rw
            value = False
            #knx_dpt = 1
            #knx_listen = ...
            #knx_init = ...
            autotimer = 1 = False # Wird nach 1sek wieder auf False gesetzt


    Zuletzt geändert von loeserman; 24.02.2017, 22:30.

    #2
    Sollte machbar sein, ist ja nichts anderes als z.B. eine Stoßlüftung oder ein Treppenlichtautomat. Mal diesen Fred durchforsten; ab der kommenden shNG-Version wird's durch das 'fehlerlose' Schreiben auf fremde Items noch einfacher. Ich will demnächst dafür sowas mal einen Wiki-Eintrag mit einem 'How to' und Beispielen schreiben, werd aber diese und nächste Woche nicht dazu kommen ...
    /tom

    Kommentar


      #3
      Ich finde keine Fehler in Deiner Items.conf. Ich erinnere mich nur irgendwo gelesen zu haben, dass es Schwierigkeiten mit der Zeitangabe in Minuten für den Autotimer gibt. Probier doch mal "180" statt "3m".
      Ansonsten Backend aufmachen oder smarthome im Debug-Modus starten und beobachten, wie die Items sich ändern.

      Gruß Wolfram

      P.S.: im eval kannst Du statt dem ganzen item "sh.VISU...()" einfach "value" schreiben.

      Kommentar


        #4
        Der autotimer löst ebenfalls das eval aus.

        Wenn nach 3 Minuten die Türe nicht geöffnet wurde, herrscht folgender Zustand:
        sh.R91.KLINGEL() == False
        sh.R12.HAUSTUER.GESCHLOSSEN() == True
        sh.VISU.DISPLAY_CAMERA_FRONTDOOR() == True

        Nun kommt der autotimer und löst das eval aus:
        1. Bedingung (sh.R91.KLINGEL() == True) trifft nicht zu
        2. Bedingung (sh.R12.HAUSTUER.GESCHLOSSEN() == False) trifft nicht zu
        also gibt das eval sh.VISU.DISPLAY_CAMERA_FRONTDOOR() zurück und ändert den Wert des Items nicht.

        Kommentar


          #5
          Ah verstehe! Es wird nochmal der eval getriggert und nicht der Wert vom Autotimer übernommen.
          Habe meinen eval Ausdruck angepasst. Nun geht es. Danke euch allen für die Infos.

          Code:
          eval = True if ((sh.R91.KLINGEL() == True) and (sh.R12.HAUSTUER.GESCHLOSSEN() == True)) else
                 False if (sh.R12.HAUSTUER.GESCHLOSSEN() == False) else
                 False if ((sh.VISU.DISPLAY_CAMERA_FRONTDOOR() == True) and (sh.VISU.DISPLAY_CAMERA_FRONTDOOR.age() > (180 - 10))) else      
                 sh.VISU.DISPLAY_CAMERA_FRONTDOOR()

          Kommentar


            #6
            AFAIK müsste es auch einfacher gehen:
            Code:
            eval = True if (sh.R91.KLINGEL() == True) else False if (sh.R12.HAUSTUER.GESCHLOSSEN() == False) else value
            Soweit ich SH bislang verstanden habe, steht auf value der Wert mit dem der eval getriggert wurde. In deinem Szenario wäre es das False des Autotimers. Value ist daher nicht das selbe wie der Wert des Items, in deinem Fall der Wert von sh.VISU.DISPLAY_CAMERA_FRONTDOOR().

            Wäre nett, wenn du es mal ausprobieren könntest und Rückmeldung geben.

            Daniel
            Zuletzt geändert von dafra; 26.02.2017, 12:57. Grund: Formatierung

            Kommentar


              #7
              Hi,
              habe es mal ausprobiert. Leider ist es nicht ganz so einfach. Das Problem ist, dass das Klingel Signal ja auch wieder auf False wechselt. Damit rutsche ich dann durch die ganze Prüfung bis ans Ende und der letzte else Zweig wird ausgeführt. Damit bekomme ich das Item sofort wieder auf False sobald das Klingelsignal auf False geht. Aber ich möchte ja, dass dieses Item 3min ansteht, es sei denn es wird die Türe geöffnet.

              Gruß
              Christoph

              Kommentar


                #8
                Das Problem ist, dass das Klingel Signal ja auch wieder auf False wechselt
                Stimmt, daran hatte ich nicht gedacht. Aber dann kannst du ja den Klingel-Autotimer auf 3 Minuten stellen und den Autotimer im Visu item weglassen. Oder habe ich schon wieder was übersehen? Egal, gibt sicher noch zig Varianten...

                Gruß, Daniel

                Kommentar

                Lädt...
                X