Ankündigung

Einklappen
Keine Ankündigung bisher.

- √ - Oder Verknüpfung bei if Anweisung Spagetticode vermeiden

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

    - √ - Oder Verknüpfung bei if Anweisung Spagetticode vermeiden

    Folgende If Anweisung würde ich gerne vereinfacht haben (wenn möglich).

    Es soll ENTWEDER über die sun() Funktion die Rolladen gefahren werden ODER über Taster im Webinterface.

    Code:
    if ( (sun()==EIN) ) then {
        write ("Rollade-1/1/42",ZU);
    }endif
    if ( (button(RolladenZU_ID)==1)) then {
        write ("Rollade-1/1/42",ZU);
    }endif
    //-------------
    if ( (sun()==AUS) ) then {
        write ("Rollade-1/1/42",AUF);
    }endif
    if (  (button(RolladenAUF_ID)==1)) then {
        write ("Rollade-1/1/42",AUF);
    }endif
    Sobald ich button und sun mit "or" verknüpft in eine if Anweisung schreibe, blockiert mich die sun() funktion den button.

    #2
    Ich würde eine Hilfsvariable, etwa Rolladen_Aktiv einführen, die jeweils bei sun() oder Webserver-Bedienung auf EIN gesetzt wird und die jeweils andere Funktion damit blockiert.

    Um die Logik einfache/übersichtlicher zu machen, kannst du in jedem if Zweig 4 Klammern (2-mal öffnen und 2-mal schließen) weglassen.

    Kommentar


      #3
      Danke schonmal. Ich denke da hab ich mich nicht klar genug ausgedrückt oder ich habe deinen Ansatz mit mit "der jeweils anderen Funktion blockieren" noch nicht begriffen.

      Der von mir oben gepostete code funktioniert, wie ich es will.

      Folgender Code leider nicht, da entweder sun() immer true oder false ist und damit den Button blockiert, da die if Anweisung ja schon mal ausgeführt wurde.

      Code:
      if ( (sun()==EIN) or (button(RolladenZU_ID)==1)) then {
          write ("Rollade-1/1/42",ZU);
      }endif
      
      if ( (sun()==AUS) or (button(RolladenAUF_ID)==1)) then {
          write ("Rollade-1/1/42",AUF);
      }endif
      Mit einer Hilfsvariablen hatte ich es auch schon mal versucht, leider drehe ich mich dann im Kreis.
      Könntest Du einen pseudocode schreiben?

      Kommentar


        #4
        Hi Thomas,

        vielleicht meinst Du sowas?

        [highlight=epc]

        Sonne = sun()

        if ( (button(RolladenZU_ID)==1) or (change(Sonne) and Sonne == EIN) then {
        write ("Rollade-1/1/42",ZU);
        }endif

        if ( (button(RolladenAUF_ID)==1) or (change(Sonne) and Sonne == AUS) then {
        write ("Rollade-1/1/42",AUF);
        }endif

        [/highlight]

        Gruß,
        Bernd

        Kommentar


          #5
          Ja das funktioniert, wenn man eine Klammer wegnimmt. Danke!

          Kommentar


            #6
            Zitat von rennsemmel Beitrag anzeigen
            Ja das funktioniert, wenn man eine Klammer wegnimmt. Danke!
            Noch schlanker:
            [highlight=epc]
            if change((button(RolladenZU_ID)==1)) or sun() then {
            write ("Rollade-1/1/42",ZU);
            }endif

            if change(button(RolladenAUF_ID)==1) or !sun() then {
            write ("Rollade-1/1/42",AUF);
            }endif
            [/highlight]
            Das Prinzip ist aber das gleiche wie von BMX vorgeschlagen.
            offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
            Enertex Produkte kaufen

            Kommentar

            Lädt...
            X