Ankündigung

Einklappen
Keine Ankündigung bisher.

Probleme mit eval

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

    Probleme mit eval

    Hallo,

    ich möchte gerne, dass ein Item dann zurück gesetzt wird, wenn in meinem Fall die Steckdose ausgeschaltet wird. Jedoch funktioniert mein Eval nicht, wie gedacht, denn das Item "on_off" wird so gar nicht mehr True.

    Code:
    %YAML 1.1
    ---
    EG:
        living:
            socket:
    
                television:
                    type: bool
                    visu_acl: rw
                    knx_dpt: 1
                    knx_listen: 6/3/7
                    knx_send: 6/3/6
                    knx_init: 6/3/7
    
                    on_off:
                        type: bool
                        visu_acl: rw
                        knx_dpt: 1
                        eval: 0 if sh.EG.living.socket.television()== False else None
                        eval_trigger: EG.living.sicket.television
                        knx_listen: 
                                   - 6/3/5
                                   - 0/1/0
    .
    Was mache ich da falsch ?

    Gruß Manuel

    #2
    Hi,

    Du setzt es ja gar nicht auf 1... ferner hast Du noch einen Tippfehler beim eval_trigger: Da steht "sicket" statt socket.

    Dein Coding macht folgendes: Wenn EG.living.socket.television geschaltet wird, oder 6/3/5 oder 0/1/0 irgendwas auf dem Bus macht, dann wird geprüft, ob television() aus ist und dann wird auch on_off auf 0 gesetzt. Da es wahrscheinlich schon auf 0 war, passiert einfach gar nichts.

    Was soll denn genau passieren, also wann soll es auf 1 und wann auf 0 gesetzt werden? Genau das musst Du angeben.

    Gruß, Waldemar
    OpenKNX www.openknx.de

    Kommentar


      #3
      Hallo Waldemar,

      es soll eigentlich folgendes passieren. Die Steckdose hat eine Strommessung. Die Steckdose wird per BWM eingeschaltet. Wenn nun der Fernseher eingeschaltet wird, soll das Item: ON/OFF geschaltet werden. Diese wird per Stromüberwachung (Schwellwert) gemacht. Wenn der Fernseher nun per Fernbedienung ausgeschaltet wird, wird auch per Schwellwert das Item "ON/Off" ausgeschaltet.

      Wenn nun aber die Steckdose ausgeschaltet wird, dann bleibt das ITEM ON/Off an und wird nicht abgeschaltet. Dass soll nun per eval passieren.

      Gruß Manuel

      Kommentar


        #4
        OK, um das mal mit meinen Worten zu wiederholen:

        Das Item on_off funktionierte mit knx_listen wie gewünscht (außer bei Steckdose ausschalten) und sobald Du Dein eval und eval_trigger hinzugefügt hast, klappt es nicht mehr?

        Das mit eval scheint schwer zu verstehen zu sein... ich versuch die Erklärung mal in 2 Schritten:

        Wenn Du kein eval in einem Item hast, musst Du Dir trotzdem vorstellen, dass da eine Art "Standard-eval" steht der Form
        Code:
        eval: value
        In value steht der neue Wert, den das Item bekommen soll. Da stehen also z.B. die True- bzw. False-Werte aus dem knx_listen. Wenn Du jetzt das eval ersetzt durch irgendwas anderes, dass nicht mehr "value" enthällt, können diese Werte an das Item nie gesetzt werden.

        Du willst jetzt eigentlich sagen: "mach alles so wie vorher und zusätzlich übernimm noch den Wert von television(), wenn dieser auf 0 gesetzt wurde". Dazu müsstest Du im eval abfragen können, ob das Item von television() getriggert wurde und das geht nicht (so viel ich weiß). Aber über ein Hilfsitem geht es:

        Code:
        ...
            television:
                type: bool
                visu_acl: rw
                knx_dpt: 1
                knx_listen: 6/3/7
                knx_send: 6/3/6
                knx_init: 6/3/7
                switched_off:
                    type: bool
                    eval: 0 if sh.EG.living.socket.television()== False else None
                    eval_trigger: EG.living.socket.television
                    enforce_updates: yes            
                on_off:
                    type: bool
                    visu_acl: rw
                    knx_dpt: 1
                    eval: value
                    eval_trigger: EG.living.socket.television.switched_off
                    knx_listen:
                        - 6/3/5
                        - 0/1/0
        switched_off wird jetzt immer 0 wenn television() auf 0 geht und Dein on_off bekommt diese 0 dann mit, aber auch alle 1 und 0 der anderen Objekte, auf die das Item hört.

        Gruß, Waldemar
        Zuletzt geändert von mumpf; 08.03.2018, 12:04.
        OpenKNX www.openknx.de

        Kommentar


          #5
          Danke Waldemar,

          funktioniert wie gedacht. Allerdings hast du noch ein Schreibfehler bei "enforrce_updates: yes". Da ist ein "r" zuviel.

          Gruß und Danke

          Kommentar


            #6
            Hi, habe den Tippfehler oben korrigiert.

            Gruß, Waldemar
            OpenKNX www.openknx.de

            Kommentar

            Lädt...
            X