Ankündigung

Einklappen
Keine Ankündigung bisher.

Dummy DPT3-Wert (KNX) senden um manuelles Dimmen zu signalisieren

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

    Dummy DPT3-Wert (KNX) senden um manuelles Dimmen zu signalisieren

    Liebe SmartHomeNG'ler,

    ich beiße mir momentan die Zähne an einen "kleinen Problem" aus. Ich muß einem "BEG PD2 KNX" aus SmartHomeNG heraus vorgaugeln, dass manuell gedimmt wird. Hierzu will ich auf die 4-Bit DPT3 GA einen Dummy-Wert schicken. Ich weiß aber nicht wie ich das syntaktisch korrekt mache, weil der ist ja vom Type "list".​

    Code:
                        Status4Bit:
                            type: list
                            knx_dpt: 3
                            knx_send: 2/2/221
                            enforce_updates: true
                            eval: XXXXX if sh...()==1 else None
                            eval_trigger:
                                - ..
    Was muß man im eval-Statement als XXXXX bei Type list genau in welcher Syntax einfügen damit es klappt? Es reicht eine einfache 1 oder sonst was zu schicken.

    Syntaktisch falsch mit DPT1 funktioniert es eigentlich, aber inkorrekt (und man will es ja sauber haben):

    Code:
                        Status4Bit:
                            type: bool
                            knx_dpt: 1
                            knx_send: 2/2/221
                            enforce_updates: true
                            eval: 1 if sh...()==1 else None
                            eval_trigger:
                                - ..
    ​​
    Wie macht man das nun richtig?

    Hintergründe, warum ich das benötige, findet sich im folgenden SmartVisu-Beitrag. Vielen Dank im Voraus für Eure Hilfe!

    Grüße, Ralf
    Zuletzt geändert von ralf9000; 23.10.2022, 12:59.

    #2
    Das Encoding des Itemwertes (Liste) im im knx Plugin so gelöst:
    Code:
    def en3(vlist):
        # direction, value
        return [(int(vlist[0]) << 3) & 0x08 | int(vlist[1]) & 0x07]
    Du müsstest also dafür sorgen das der Itemwert eine Liste mit zwei Einträgen hat mit [direction,value]

    Code:
    Status4Bit:
        type: bool
        knx_dpt: 1
        knx_send: 2/2/221
        enforce_updates: true
        eval: [0,1] if sh...()==1 else None
        eval_trigger:
            - ..
    müsste dann dort stehen

    Kommentar


      #3
      Hallo bmx,

      Danke, aber mit type: bool und dpt:1 geht das doch nicht, oder? Meintest Du:
      Code:
      Status4Bit:
           type: list
           knx_dpt: 3
           knx_send: 2/2/221
           enforce_updates: true
           eval: [0,1] if sh...()==1 else None
           eval_trigger:
                - ..
      ​
      Ich werde das morgen mal ausprobieren ...

      Ralf

      Kommentar


        #4
        Ja, sorry, falschen Teil kopiert und dann eingefügt. Probier's mal aus und berichte dann

        Kommentar


          #5
          juckte es in den Fingern und habs ausprobiert:
          Code:
          eval: [0,1] if sh...()==1 else None
          Mag der eingebaute Web-Editor nicht und wenn man es dann mit nem anderen Editor so einfügt, wird die ganze Gruppe nicht genommen. [0,1] in " oder ' eingeschlossen geht auch nicht, ohne eckige Klammern auch nicht .....

          Gerade gemerkt, es liegt an dem if nach [0,1], [0,1] alleine schluckt der eval:-Ausdruck ...
          Zuletzt geändert von ralf9000; 23.10.2022, 20:18.

          Kommentar


            #6
            Also

            Code:
            FooBarBaz:
                type: bool
                enforce_updates: True
            
            Status4Bit:
                 type: list
                 knx_dpt: 3
                 knx_send: 2/2/221
                 enforce_updates: true
                 eval: '[0,1] if value==1 else [1,1]'
                 eval_trigger: FooBarBaz
            funktioniert hier. Wenn FooBarBaz True ist wird Status3Bit auf [0, 1] gesetzt und bei False dann auf [1,1]

            Kommentar


              #7
              ... oh, bin ich blöd, die ' ' um den ganzen Ausdruck hinter eval: , da war ich nicht draufgekommen !!! Jetzt schluckt er es, muß nur noch auf dem Bus gucken (morgen dann) ...
              Code:
              eval: '[0,1] if sh...()==1 else None'
              Herzlichen Dank! Ralf

              Kommentar

              Lädt...
              X