Ankündigung

Einklappen
Keine Ankündigung bisher.

Tips zur programmierung If-Abfrage

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

    Tips zur programmierung If-Abfrage

    kann man eigentlich if abfragen AND und OR abfragen verbinden bzw gruppieren

    also z.b. IF (A AND B == 1) OR (C AND D == 0) then ...

    mir war so das das nicht ging.

    hintergrund ich würde gerne im folgenden Code nur je einmal publishmqtt haben.

    Code:
    if pbutton(ButtonID,PageID)==1 and (TasmotaMqtt^PlugName^Power == $OFF$) then {
        publishmqtt(uHandle, $cmnd/^PlugName^/POWER$, 0, 0b01, $ON$, 0u16);
        GruppenAdresse == AUS;
    } endif  
    if pbutton(ButtonID,PageID)==1 and (TasmotaMqtt^PlugName^Power == $ON$) then {
        publishmqtt(uHandle, $cmnd/^PlugName^/POWER$, 0, 0b01, $OFF$, 0u16);
        GruppenAdresse == EIN;
    } endif  
    
    if eventwrite(GruppenAdresse) and (GruppenAdresse == EIN) then {
        publishmqtt(uHandle, $cmnd/^PlugName^/POWER$, 0, 0b01, $ON$, 0u16);
    }endif
    if eventwrite(GruppenAdresse) and (GruppenAdresse == AUS) then {
        publishmqtt(uHandle, $cmnd/^PlugName^/POWER$, 0, 0b01, $OFF$, 0u16);
    }endif
    ​

    #2
    Ich habe eigentlich noch ein zweites problem:

    Aufagestellung ist das ich eine Steckdose Schalten will von verschiedenen Systemen bzw oberflächen.
    Möglich soll es vom KNX Bus sein, von der Webseite der Steckdose, von der Webseite EibPc2 und auch an der Steckdose selber (Schalter).

    Den code den ich unten habe ist leider "SUBOPTIMAL" :-) Gerät in dauer umschalten.

    Code:
    if pbutton(ButtonID,PageID)==1 or change(TasmotaMqtt^PlugName^Power) then {
        if (TasmotaMqtt^PlugName^Power == $OFF$) then {
        Write(GruppenAdresse,EIN);
        } endif;
    } endif  
    
    if pbutton(ButtonID,PageID)==1 or change(TasmotaMqtt^PlugName^Power) then {
        if (TasmotaMqtt^PlugName^Power == $ON$) then {
        write(GruppenAdresse,AUS);
        } endif;
    } endif  
    
    if eventwrite(GruppenAdresse) and (GruppenAdresse == EIN) then {
        publishmqtt(uHandle, $cmnd/^PlugName^/POWER$, 0, 0b01, $ON$, 0u16);
    }endif
    if eventwrite(GruppenAdresse) and (GruppenAdresse == AUS) then {
        publishmqtt(uHandle, $cmnd/^PlugName^/POWER$, 0, 0b01, $OFF$, 0u16);
    }endif​

    hat jemand eine Idee

    Kommentar


      #3
      ich lasse euch mal Mit leben.

      folgender Code schein zu funktionieren, kleiner Nachteil die KNX Adressen werden manchmal doppelt gesendet und somit auch ein doppelter Mqtt publish.
      Wenn jemand eine Idee hat wie man den Code optimieren kann, wäre ich dankbar.

      Code:
      if pbutton(ButtonID,PageID)==1 and (TasmotaMqtt^PlugName^Power == $OFF$) then {
          Write(GruppenAdresse,EIN);
      } endif  
      
      if pbutton(ButtonID,PageID)==1 and (TasmotaMqtt^PlugName^Power == $ON$) then {
          write(GruppenAdresse,AUS);
      } endif  
      
      if (TasmotaMqtt^PlugName^Power == $OFF$) then {
          Write(GruppenAdresse,AUS);
      } endif  
      
      if (TasmotaMqtt^PlugName^Power == $ON$) then {
          write(GruppenAdresse,EIN);
      } endif  
      
      if (GruppenAdresse == EIN) then {
          publishmqtt(uHandle, $cmnd/^PlugName^/POWER$, 0, 0b01, $ON$, 0u16);
      }endif
      if (GruppenAdresse == AUS) then {
          publishmqtt(uHandle, $cmnd/^PlugName^/POWER$, 0, 0b01, $OFF$, 0u16);
      }endif​

      Kommentar


        #4
        Verbesserungsvorschlag zum Probieren:
        Der eibPC kennt ein else um zwei if-Abfragen mit sich gegenseitig ausschließenden Bedingungen zusammenzufassen. Bsp:
        Code:
        if ("Schalter-1/0/0"==EIN) then {
           write("Lampe-1/1/1",EIN);
           write("Dimmer-1/1/2"u08,80%)
        } else {
           write("Lampe-1/1/1",AUS);
           write("Dimmer-1/1/2"u08,0%)
        } endif​
        Das ist im THB sehr ausführlich beschrieben.

        Kommentar


          #5
          Zitat von knxPaul Beitrag anzeigen
          Verbesserungsvorschlag zum Probieren:
          Der eibPC kennt ein else um zwei if-Abfragen mit sich gegenseitig ausschließenden Bedingungen zusammenzufassen. Bsp:
          Code:
          if ("Schalter-1/0/0"==EIN) then {
          write("Lampe-1/1/1",EIN);
          write("Dimmer-1/1/2"u08,80%)
          } else {
          write("Lampe-1/1/1",AUS);
          write("Dimmer-1/1/2"u08,0%)
          } endif​
          Das ist im THB sehr ausführlich beschrieben.
          Moin,
          erstmal danke für deinen tipp, das Problem bei Else abfragen ist das du nur zwei Bedingungen haben darfst. bei 0 oder 1 boolean wäre das möglich.
          Bei ON OFF gibt es aber auch noch leer oder anderen Text da es ein String ist.

          Kommentar


            #6
            Das stimmt natürlich.
            Nächster Versuch ist die Verwendung einer Variable, um doppelte Mqtt publish zu verhindern in der Art:
            Code:
            sinnvollerVariablenname = TasmotaMqtt^PlugName^Power;
            if pbutton(ButtonID,PageID)==1 and (sinnvollerVariablenname == $OFF$) then {
            Write(GruppenAdresse,EIN);
            } endif​
            Das hat gleich den Vorteil, dass sich der abgefragte Inhalt nicht zwischen den if Abfragen ändern kann.

            Kommentar

            Lädt...
            X