Ankündigung

Einklappen
Keine Ankündigung bisher.

Einfacher "Lichtschalter"

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

    [Webserver] Einfacher "Lichtschalter"

    Hallo Zusammen,

    ich bin gerade beim Testen des EibPC und konnte ohne weitere Probleme die Aufgabenstellung des Kunden weitestgehend bearbeiten. Doch bei einer noch so einfachen Problemstellung stehe ich nun völlig auf dem Schlauch.

    Über den Webserver möchte ich ein Lichtband einschalten und auch über den gleichen Button wieder ausschalten können.
    Nun - das Licht einschalten funktioniert sehr gut - nur ich bekomme es nicht hin, dass ich mit dem gleichen Button das Licht auch wieder ausschalte.
    Hier der Codeausschnitt des "einfachen AN-Schaltens":
    [EibPC]
    [highlight=epc]
    /*Bereich A4*/
    if ((Taster_2 and Handsteuerung) or (button(ButtonBereichA4) == 1) and Handsteuerung) then {
    write("LED Hallenbel.Stama EMAG-0/0/2",EIN);
    webdisplay(ButtonBereichA4,$EIN$c14,LIGHT,ACTIVE,B LINKBLUE)
    }endif
    [/highlight]
    Hier der Codeausschnitt des Umschaltens:
    [highlight=epc]
    Handsteuerung = 1b01
    /*Bereich A3*/
    if ((Taster_1 and Handsteuerung) or (button(ButtonBereichA3) == 1) and Handsteuerung) then {
    if ("LED Hallenbel.Waschmasch.Chiron-0/0/1"b01) then {
    write("LED Hallenbel.Waschmasch.Chiron-0/0/1"b01,AUS)
    }endif;
    if (!"LED Hallenbel.Waschmasch.Chiron-0/0/1"b01) then {
    write("LED Hallenbel.Waschmasch.Chiron-0/0/1"b01,EIN)
    }endif
    }endif
    if ("LED Hallenbel.Waschmasch.Chiron-0/0/1"b01) then {
    webdisplay(ButtonBereichA3,$EIN$c14,LIGHT,ACTIVE,B LINKBLUE)
    } else {
    webdisplay(ButtonBereichA3,$AUS$c14,LIGHT,INACTIVE ,GREY)
    }endif
    [/highlight]
    [WebServer]
    [highlight=epc]
    page(ID_Page_Manuell)[$Allgemein$,$Manuelle Steuerung$]
    header(Header)
    footer(Footer)
    design$blue$
    line$Bereich A$
    button(ButtonBereichA3)[LIGHT]$Bereich A3$ button(ButtonBereichA4)[LIGHT]$Bereich A4$
    [/highlight]
    Wenn ich den Button betätige, tut sich auch nichts in EibStudio, wenn ich die Schaltvorgänge beobachte (unter "Meldungen"). Wenn ich aber einen Button habe, der nur einschaltet, dann sehe ich bei Meldungen, dass sich auch etwas tut.

    Das Makro "UmschaltButtonZustand" habe ich auch schon versucht, leider genauso erfolglos...

    Danke schonmal für eure Hilfe!!

    Gruß,
    Fabian
    Viele Grüße,
    Fabian

    #2
    Moin Fabian,

    [highlight=epc]
    if ((Taster_1 and Handsteuerung) or (button(ButtonBereichA3) == 1) and Handsteuerung) then {
    if ("LED Hallenbel.Waschmasch.Chiron-0/0/1"b01) then {
    write("LED Hallenbel.Waschmasch.Chiron-0/0/1"b01,AUS)
    }endif;
    if (!"LED Hallenbel.Waschmasch.Chiron-0/0/1"b01) then {
    write("LED Hallenbel.Waschmasch.Chiron-0/0/1"b01,EIN)
    }endif
    }endif
    [/highlight]

    Schreib das einfach erstmal um:

    [highlight=epc]
    if (Handsteuerung and (Taster_1 or button(ButtonBereichA3) == 1) then {
    write("LED Hallenbel.Waschmasch.Chiron-0/0/1"b01,!"LED Hallenbel.Waschmasch.Chiron-0/0/1"b01)
    }endif
    [/highlight]

    Gruß,
    Bernd

    Kommentar


      #3
      Hallo Bernd,

      vielen Dank für deine schnelle Antwort!

      Ich habe es umgeschrieben, kann das Licht nun einschalten, aber immernoch nicht ausschalten.

      Habe ich es eventuell noch nicht verstanden...?

      Gruß,
      Fabian
      Viele Grüße,
      Fabian

      Kommentar


        #4
        Welchen Wert hat denn Taster_1 bei Dir? Wenn der auf EIN ist, dann ist egal was Du mit dem button machst weil der schon einmal sicherstellt, das sich das Or Ergebnis nicht mehr ändert.

        Je nachdem was der Taster_1 ist: Wenn es eine Gruppenadresse ist, kannst Du auch schreiben event( Taster_1 ), alternativ auch change( Taster_1 ). Aber dafür müßte man etwas mehr als diese Codefragmente kennen ...

        Gruß,
        Bernd

        Kommentar


          #5
          Hallo Bernd,

          nochmals Danke für deine schnelle Hilfe!

          Anscheinend hast du deinen Code nochmals im Nachhinein in der if-anweisung geändert, allerdings fehlt da noch ein ")" am Ende der if-Anweisung:
          [highlight=epc]
          if (Handsteuerung and (Taster_1 or button(ButtonBereichA3) == 1)) then {
          write("LED Hallenbel.Waschmasch.Chiron-0/0/1"b01,!"LED Hallenbel.Waschmasch.Chiron-0/0/1"b01)
          }endif
          [/highlight]

          Jedenfalls ist der Tipp schonmal gut und spart auch Zeichen. Danke hierfür!

          Prinzipiell gibt es diesen Code im Gesamten 9x - für 9 Bereiche.
          Jeder Bereich hat einen örtlichen Taster, der auf einen Binäreingang geht.
          Zusätzlich zu den örtlichen Tastern möchte ich noch über den Webserver die Lichtbänder in den Bereichen ein- und ausschalten können.

          Ich möchte es erst an einem Bereich verstehen und ausprobieren, sodass ich dann die anderen 8 Bereiche ohne Probleme realisieren kann.

          Die weitere Aufgabenstellung, wie WebServer-Oberfläche, Energieanzeige über Energieaktoren und Zentral-Funktionen sind fertig und funktionieren.

          Entschuldige, ich hätte das auch schon ganz oben mit dazu schreiben können.

          Gruß,
          Fabian
          Viele Grüße,
          Fabian

          Kommentar


            #6
            Zitat von fahu Beitrag anzeigen
            Anscheinend hast du deinen Code nochmals im Nachhinein in der if-anweisung geändert
            Ja, ich fand die Optimierung im If ... then sinnvoll.

            Im Normalfall sollte in der write-Anweisung in etwa write(GA, !StatusGA) stehen.
            Vermeide else-Konstrukte. Sie funktionieren selten so wie man das gerne möchte. Daher die Optimierung mit dem write().

            Jeder Bereich hat einen örtlichen Taster, der auf einen Binäreingang geht.
            Zusätzlich zu den örtlichen Tastern möchte ich noch über den Webserver die Lichtbänder in den Bereichen ein- und ausschalten können.
            Heißt das denn nun, das Taster_1 nicht direkt auf den Binäreingang geht sondern via EibPC?

            Gruß,
            Bernd

            Kommentar


              #7
              Hallo Bernd,

              Heißt das denn nun, das Taster_1 nicht direkt auf den Binäreingang geht sondern via EibPC?
              Nein, nicht, dass wir uns falsch verstehen:

              Taster_1 ist ein örtlicher Taster und geht auf den Binäreingang. Dieser ist ganz normal in ETS programmiert und schaltet den jeweiligen Aktorkanal wie er auch soll. Bis hier her passt es.

              Nun soll das Ganze auch im EibPC realisiert werden, so dass ich vom örtlichen Taster_1 oder vom Webserver aus den jeweiligen Aktorkanal schalten kann.
              Wenn vom Taster_1 geschaltet wird, soll der Status natürlich auch auf dem Webserver zu erkennen sein. Dies sollte aber schon gehen mittels "webdisplay()", sofern ich das bisher richtig verstanden habe.

              Die örtlichen Taster (Taster_1 bis Taster_9 == 9 Bereiche) sind in der Halle angebracht und der Webserver läuft auf dem PC der Instandhaltung, die den Status "beobachten", schalten und eben den Rest einsehen möchte.

              Gruß,
              Fabian
              Viele Grüße,
              Fabian

              Kommentar


                #8
                Hi Fabian,

                also ist
                Taster_1 = "MeinOertlicherTaster_1"b01?

                Dann solltest Du mit arbeiten mit z.B.

                if event("MeinOertlicherTaster_1"b01) and "MeinOertlicherTaster_1"b01 == EIN then

                dann wird im if ... then nur dann invalidiert, wenn entweder ein event eingetreten ist und dieser auch gleichzeitig an ist oder aber wenn der Webbutton betätigt wurde.
                Also im Ergebnis sowas:

                [highlight=epc]
                if (Handsteuerung and (event("MeinOertlicherTaster_1"b01) and "MeinOertlicherTaster_1"b01 == EIN or button(ButtonBereichA3) == 1)) then {
                write("LED Hallenbel.Waschmasch.Chiron-0/0/1"b01,!"Status_LED Hallenbel.Waschmasch.Chiron-0/0/1"b01)
                }endif
                [/highlight]

                Gruß,
                Bernd

                Kommentar


                  #9
                  Hallo Bernd,

                  danke für die Antwort!

                  Ich probiere es einfach mal aus und berichte wieder!

                  Danke!

                  Gruß,
                  Fabian
                  Viele Grüße,
                  Fabian

                  Kommentar


                    #10
                    Hallo Bernd,

                    also ich habe es gerade nochmal getestet, weil es mir einfach keine Ruhe gelassen hat.

                    Dabei habe ich festgestellt, dass ich die Funktion "event()" noch nicht richtig verstanden habe. Denn beim ausprobieren habe ich das Licht anschalten können, nicht mehr aus und er hat mehrmals in der Sekunde ein EIN-Telegramm gesendet...

                    Das hat mich dann so verwirrt, dass ich nochmal ganz neu an den Button rangegangen bin und habe es dem Anschein nach auch hinbekommen. Jedenfalls funktioniert es am Webserver so, wie ich es mir vorstellte.

                    Morgen teste ich es mal live an der Anlage.

                    Hier noch der Code, wie es geklappt hat. Eventuell nicht die beste Methode, aber ich bin immer für Tipps, Tricks, Kritik und Anmerkdungen offen.

                    [EibPC]
                    [highlight=epc]
                    if (Handsteuerung and ((button(ButtonBereichA3) == 1) or (Taster_1 == EIN))) then {
                    write("LED Hallenbel.Waschmasch.Chiron-0/0/1"b01,EIN);
                    webdisplay(ButtonBereichA3,$EIN$c14,LIGHT,ACTIVE,B LINKBLUE)
                    }endif

                    if (Handsteuerung and ((button(ButtonBereichA3) == 1) or (Taster_1 == AUS))) then {
                    write("LED Hallenbel.Waschmasch.Chiron-0/0/1"b01,AUS);
                    webdisplay(ButtonBereichA3,$AUS$c14,LIGHT,INACTIVE ,GREY)
                    }endif
                    [/highlight]

                    Schönen Abend noch!

                    Gruß,
                    Fabian
                    Viele Grüße,
                    Fabian

                    Kommentar


                      #11
                      Zitat von fahu Beitrag anzeigen
                      Hallo Bernd,
                      Hier noch der Code, wie es geklappt hat. Eventuell nicht die beste Methode, aber ich bin immer für Tipps, Tricks, Kritik und Anmerkdungen offen.
                      Was mir auffällt, dass Du mit globalen Elementen arbeitest. Du wirst später sicher mit mehreren Seiten arbeiten wollen, also eher pbutton- Element und zugehörige Funktionen pbutton() und pdisplay() im Handbuch anschauen.
                      offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
                      Enertex Produkte kaufen

                      Kommentar


                        #12
                        Hallo Fabian,

                        vielleicht habe ich die Anforderung nicht ganz verstanden, aber mir scheint dein Code zu kompliziert. Wozu braucht man hier den "Taster_1"? Der wird doch schon über die ETS mit der Gruppenadresse verbunden, oder nicht?

                        Wenn man von mehreren Stellen einen Kanal schalten möchte, halte ich eine Status-GA für sehr hilfreich.

                        Bei mir hat ein einfacher Umschalter vom Webserver genau diesen Code:
                        [highlight=epc]if pbutton(BtLeseleuchte,SeiteLichtWohnen)==1 then {
                        write("Leseleuchte schalten-1/1/57",!"Leseleuchte Status-1/4/57")
                        } endif[/highlight]

                        Um die Anzeige zu aktualisieren gibt es dann noch:
                        [highlight=epc]
                        if "Leseleuchte Status-1/4/57" then {
                        pdisplay(BtLeseleuchte,$Licht an$,LIGHT,STATE7,GREY,SeiteLichtWohnen)
                        } else {
                        pdisplay(BtLeseleuchte,$Licht aus$,LIGHT,INACTIVE,GREY,SeiteLichtWohnen)
                        } endif
                        [/highlight]

                        Und das funktioniert - egal ob ich den Kanal per Webserver, Taster, Zentralfunktion, Zeitschaltuhr oder sonstwas schalte.

                        Vielleicht hilft es dir ja.
                        Gruß,
                        Jens.

                        Kommentar


                          #13
                          Hallo Zusammen,

                          ...sicher mit mehreren Seiten arbeiten wollen, also eher pbutton- Element und zugehörige Funktionen pbutton() und pdisplay() im Handbuch anschauen.
                          Genau - es wird mehr Seiten geben. Vielen Dank für den Hinweis - werde ich ausprobieren und berichten.

                          Wozu braucht man hier den "Taster_1"? Der wird doch schon über die ETS mit der Gruppenadresse verbunden, oder nicht?
                          Also Taster_1 ist der örtliche Taster irgendwo in der Halle, der geht auf den Binäreingang und ist über die ETS verbunden...Richtig....
                          Ah - dann brauche ich diese Taster gar nicht im EibPC abbilden und abfragen?

                          Nur, wenn ich diesen Status des örtlichen Tasters haben möchte, mache ich eine einfache Abfrage der dazugehörigen Gruppenadresse wie bei dir im Beispiel, richtig?

                          Ich glaube, jetzt wird mir nochmal einiges klar.

                          ==================
                          Heute habe ich den EibPC beim Kunden ausprobiert und habe auch ganz gut den Support in Anspruch genommen, da die Netzwerkverbindung nicht geklappt hat und wir über den "Enertex KNXnet/IP-Router" auf den Bus gehen möchten. Der Fehler lag an falschen Vorgaben der IT und damit falschen Einstellungen des Netzwerks...

                          Nun, ich möchte hier mal ganz öffentlich im Forum den Support der Firma Enertex so richtig loben - stets freundlich und überaus hilfsbereit!
                          So einen Support wünscht man sich einfach öfter! Empfehlenswert!

                          Vielen Dank für eure Hilfe!

                          Ich berichte wieder!

                          Gruß und schönen Feierabend!
                          Fabian
                          ("Bin am programmieren - *husch und weg*")
                          Viele Grüße,
                          Fabian

                          Kommentar


                            #14
                            Zitat von fahu Beitrag anzeigen
                            Nur, wenn ich diesen Status des örtlichen Tasters haben möchte, mache ich eine einfache Abfrage der dazugehörigen Gruppenadresse wie bei dir im Beispiel, richtig?
                            Nicht ganz. Die Abfrage geht nicht an den Status des Tasters sondern an den Status des Aktors.
                            (Genau genommen hat der Taster gar keinen festen Status; es ist ja ein Taster und kein Schalter.)

                            Wenn man mehrere Schaltstellen für 1 Kanal hat, würde ich sehr dazu raten, die Status-Rückmeldung des Aktors zu verwenden. Das ist deutlich verständlicher und pflegbarer als auf alle potentiellen Schaltstellen zu hören - insbesondere wenn auch eine Visu im Spiel ist.

                            Kommentar


                              #15
                              Zitat von DerRenovator Beitrag anzeigen
                              nal hat, würde ich sehr dazu raten, die Status-Rückmeldung des Aktors zu verwenden. Das ist deutlich verständlicher und pflegbarer als auf alle potentiellen Schaltstellen zu hören - insbesondere wenn auch eine Visu im Spiel ist.
                              Wenn man kein Statusobjekt hat (warum auch immer), kann man dieses auch mit der Funktion "comobject" nachbilden.
                              offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
                              Enertex Produkte kaufen

                              Kommentar

                              Lädt...
                              X