Ankündigung

Einklappen
Keine Ankündigung bisher.

[mmh] Basics: Button und Dimmer synchron

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

    [mmh] Basics: Button und Dimmer synchron

    Hallo,

    ich versuche einen Button (AUS vs. AN, wenn mind. 1% gedimmt) und den Dimmschieber synchron zu bekommen.
    Bisher habe ich definiert:

    [DIGITAL];;
    2510;TOGGLE;<KNX><SETVALUE=1/1/1,1></KNX><SYS><SETANALOGJOIN=2509,255></SYS>;<KNX><SETVALUE=1/1/1,0></KNX><SYS><SETANALOGJOIN=2509,0></SYS>;<KNX>GETVALUE=1/1/1-Licht Bett Tom E/A=1|OK</KNX>;<KNX>GETVALUE=1/1/1-Licht Bett Tom E/A=0|OK</KNX>


    [ANALOG];;;
    2509;#;255;<KNX><SETVALUE=1/2/8,\#></KNX><SYS><SETDIGITALJOIN=2510,1></SYS>;1/2/8=\*.

    1/1/1 ist die Schalt GA des Dimmers
    1/2/8 ist die Dimmwert GA des Dimmers

    Vier Fragen:
    1)
    Betätige ich nun den Dimmschieber, wird auch der Button automatisch gedrückt. Jetzt fehlt mir jedoch noch der Schritt, dass der Button wieder auf losgelassen wird, sobald ich den Dimmer auf 0 runterschiebe (dann ist das Licht ja aus). Wie muss ich das anstellen? Also eine Abfrage: wenn Dimmwert 0, dann Aktion: Button-->Off.

    2)
    Mit dem Dimmer ganz ausschalten funktioniert nicht immer - manchmal bleibt er beim kleinsten Dimmwert stehen und geht nicht ganz aus.

    3)
    Wie schaffe ich es, dass nicht nur der erste Dimmwert, den ich drücke verarbeitet wird, sondern danach die weiteren auch ?

    4)
    Zusätzlich wird der Dimmer NICHT auf 0 gestellt, wenn der Button (nicht durch Drücken des Buttons, sondern) durch den Dimmschieber aktiviert wird und ich dann durch den Button ausschalte. Dann geht das Licht zwar aus, aber der Schieber bleibt stehen. Es müsste doch der Analogjoin mitverändert werden. Schalte ich den Button manuell ein, wird beim Ausschalten durch Button auch der Analogjoin mitgesetzt. Das ist mir gar nicht erklärlich.


    Grüße!

    #2
    ich scheine noch etwas falsch zu machen:
    in der knx.csv habe ich:

    1/1/1;#;<SYS><SETDIGITALJOIN=2510,#></SYS>;


    um für das oben genannte Beispiel den Button auch bei Änderungen vom BUS synchron zu halten. Ist der Button gedrückt, wird er durch Schalten auf dem BUS losgelassen. Andersrum wird er aber nicht gedrückt, wenn ich über den BUS einschalte.
    Angehängte Dateien

    Kommentar


      #3
      Ich sehe von Ansatz her einige kozeptionelle Dinge....
      1. würde ich die Rückmeldungen autom. vom Aktor generieren lassen. D.h.: wenn Du den Aktor über ein Wertobjekt schaltest, was generell ausreichend ist, setze mal das "Ü" Flag am Schaltobjekt, dass wirkt wunder.
      2. Dein Ansatz ist IMHO doppelt gemoppelt. Ich schalte über Slider EIN, warum soll der Button den Status noch anzeigen ?? Ich schalte über den Button lediglich aus.. dann mußt mit dem Slider auch nicht exakt die "0" treffen...
      3. Dein Eventeintrag ist zu lang und IMHO falsch, da ein GETAVALUE enthalten ist, dies setzt natürlich eine vorherige Abfrage vorraus.
        Also nicht <KNX>GETVALUE=1/1/1-Licht Bett Tom E/A=1|OK</KNX> sondern ein 1/1/1-Licht Bett Tom E/A=1| sollte ausreichend und zielführend sein...
      versuche mal, sonst baue ich es mir mal nach...

      LG

      Kommentar


        #4
        Zitat von meudenbach Beitrag anzeigen
        Dein Eventeintrag ist zu lang und IMHO falsch, da ein GETAVALUE enthalten ist, dies setzt natürlich eine vorherige Abfrage vorraus.Also nicht <KNX>GETVALUE=1/1/1-Licht Bett Tom E/A=1|OK</KNX> sondern ein 1/1/1-Licht Bett Tom E/A=1|sollte ausreichend und zielführend sein...
        Das funktioniert tatsächlich, aber nachvollziehen kann ich das nicht mehr, denn in der Form (mit dem =1) taucht das ja gar nicht im Logging Monitor auf?! Der Screenshot von oben zeigt:
        knx: 1.0.7 -> 1/1/1 , write, length: 0, data:0x01
        knx: received value event for address 1/1/1 (Licht Bett Tom E/A), value 1

        Ist also der Logging Monitor den ich sehe, nicht das, was intern als Textschnipsel ausgewertet werden kann? Was genau wird denn dann intern für eine auswertbare Befehlszeile erzeugt, aus der ich Infos klauben kann? (Licht Bett Tom E/A), value 1 würde ja vermutlich nicht funktionieren?

        Kommentar


          #5
          Wir lauschen nicht auf den Monitor Port (1039), sondern eben auf den Statusport (1038) und ich glaube auf den "command" Port 1037 auch... weiss es aber nun auch nicht genau, da ich persönlich immer auf 1038 lausche und die Feedbacks von 1037 eben auch auf 1038 umleite.

          Du kannst natürlich auch auf 1039 lauschen, dass geht aber nur mit dem Eventserver.

          Schalte einfach mal den BC Monitor im ScriptClient ein, dann wird es klarer.
          Das Geheimnis ist auch so schwierig nicht....

          <KNX>GETVALUE=1/1/1-Licht Bett Tom E/A=1|OK</KNX>

          ist die Antwort auf eben ein <..><GETVALUE=..<..>, die kommt über Port 1037 auch zurück. Wenn Du nun auf ein Event matchen willst, welche eben nicht durch ein GETVALUE initiiert wurde, darf der zu vergleichende String eben kein "<KNX>GETVALUE=" enthalten.

          Ich werde mal darüber nachdenken, dass wir auch ein Log für den BC Monitor ins PrefPane bauen....

          LG

          Kommentar


            #6
            Hier mal ein Beispiel aus dem BC Monitor, wie die Meldungen dort eintreffen:

            <KNX><15/2/20-mike.DimBelLlp.ein/aus=0></KNX>

            oder

            <KNX><15/2/21-mike.DimBelLlp.ein/ausStatus=0></KNX>


            Alles ohne initiierte Abfrage, also rein eventbasiert, wie eben der BUS es ins Netz hustet.

            Ein Match auf den Wet vom 15/2/20 würde ich dann wie folgt definieren:

            15/2/21-mike.DimBelLlp.ein/ausStatus=\*>

            oder optimal

            15/2/21-\%=\*>

            Die Matchbedingung "\%" ignoriert alle Zeichen zwischen eben "15/2/21-" und dem folgendem "="
            Sollte es zumindest, hab da grad nen Bug gefunden ...

            LG

            Kommentar


              #7
              Hallo,

              ich habe mich gestern mal auf die neueste Version (1.1 RC7) geupdated, aber bei mir läufts immer noch nicht rund.

              Ich erstelle einen Button, der als Funktion lediglich einen Slider bewegt:

              2510;TOGGLE;<SYS><SETANALOGJOIN=2509,255></SYS>;<SYS><SETANALOGJOIN=2509,0></SYS>

              Ich kann über meinen Ipod zuverlässig den Button toggeln und es ändert sich auch den Slider mit. Hier kann ich auch den Slider verschieben und beim nächsten Buttondruck wird der Slider wieder entsprechend mit verstellt.

              Jetzt zum Problem:
              1) zunächst den Zustand für beide 'aus'.
              2) Ich verschiebe den Slider mit der Hand auf > 0.
              3) Ich nehme den Skripting Client und setzt den Button auf 1. (<SYS><SEtdigitalJOIN=2510,1></SYS>). Das wird ausgeführt, der Button ist nun gedrückt.

              4) Was müsste jetzt passieren, wenn ich nun wieder über den Ipod toggele, also jetzt ausschalte.
              SOLL: Der Button müsste losgelassen werden und die Release Action müsste ausgeführt werden.
              IST: Der Button wird losgelassen, die Release Action (<SYS><SETANALOGJOIN=2509,0></SYS>) wird nicht ausgeführt.

              Um den Fehler weiter einzugrenzen, habe ich die Release Action um einen weiteren Befehl erweitert. Ich schalte also mit dem Loslassen des Buttons eine KNX Lampe.

              2510;TOGGLE;<SYS><SETANALOGJOIN=2509,255></SYS>;<SYS><SETANALOGJOIN=2509,0></SYS><KNX><SETVALUE=1/1/1,0></KNX>

              Also nochmal Schritt 1-3:
              Um es abzukürzen. Lampe schaltet, aber der Slider wird nicht gesetzt.

              --> BUG or Feature? ;-)



              Zweites Problem:
              Ich ändere meinen Button jetzt so, dass er nicht mehr den Join setzt, sondern eine Lampe schaltet.

              2510;TOGGLE;<KNX><SETVALUE=1/1/1,1></KNX>;<KNX><SETVALUE=1/1/1,0></KNX>

              Zunächst keine Rückmeldeobjekte vom Aktor.
              Schalten über Ipod funktioniert. Wenn der Button gedrückt ist und ich über den BUS ausschalte, wird der Button auch losgelassen. Andersrum jedoch nicht: über den BUS einschalten, drückt den Button nicht.
              Hier der Logging Output fürs Schalten über den BUS:
              Code:
              09:12:39.771 - knx: 1.0.7 -> 1/1/1, write, length: 0, data: 0x00  ( RC:5 P:LOW value:0 )
              09:12:39.772 - knx: received valid event for address 1/1/1 (Licht Bett Tom E/A), value: 0
              09:12:39.775 - parser: parsing sequence: <SYS><SETDIGITALJOIN=2510,#></SYS>
              09:12:39.775 - parser: command: SYS - SETDIGITALJOIN=2510,#
              09:12:39.777 - mRemote: sending  sequence: d2510=0\0x03
              09:12:39.779 - parser: reply sequence: <SYS>SETDIGITALJOIN=|OK</SYS>
              09:12:40.755 - mRemote: received sequence: h=0\0x03
              09:12:40.755 - mRemote: sending  sequence: h=1\0x03
              09:12:42.072 - knx: 1.0.7 -> 1/1/1, write, length: 0, data: 0x01  ( RC:5 P:LOW value:1 )
              09:12:42.073 - knx: received valid event for address 1/1/1 (Licht Bett Tom E/A), value: 1
              [B]09:12:42.075 - parser: parsing sequence: <SYS><SETDIGITALJOIN=2510,#></SYS>[/B]
              09:12:42.075 - parser: command: SYS - SETDIGITALJOIN=2510,#
              09:12:42.077 - parser: reply sequence: <SYS>SETDIGITALJOIN=|OK</SYS>
              Scheint doch irgendwie so zu sein, als wäre etwas beim Setzen der Joins nicht in Ordnung, oder?

              PS: Woher weiss mmh eigentlich, dass join 2510 und KNX GA 1/1/1 zusammengehören (fett markierung)? Wird der Zusammenhang automatisch erzeugt, wenn in einer Join-Definition ein KNX Befehl vorkommt?

              Kommentar


                #8
                Zu Problem 1)

                bitte poste doch mal den Eintrag für den analog JOIN... Dein beschriebener Fehler wäre mir sicherlich aufgefallen...


                Zu Problem 2)

                Das Log passt nicht zu den von Dir geposteten JOIN Definitionen... Theoretisch dürfte der DJOIN gar nicht gesetzt werden, wenn Du über den Bus schaltest... mir ist hier der Zusammenhang hier nicht klar. Daher bitte ... s.o.

                Generell werden die Feedbacks zu den Joins über entsprechende Events generiert, die in Deinen Definitionen aber fehlen. Die SETxJOIN Befehle aktualisieren nur den Wert des Joins und haben keine Auswirkungen auf die Funktionen !!

                LG

                Kommentar


                  #9
                  Der Analog Join sieht so aus:

                  2509;#;255;<KNX><SETVALUE=1/2/8,\#></KNX>;1/2/8=\*.

                  (1/2/8 ist das Wertobjekt des Dimmers, aber das ist noch gar nicht relevant)

                  die unter PS gestellte Frage erübrigt sich: Ich hab in der knx.csv den Datapoint:
                  1/1/1;#;<SYS><SETDIGITALJOIN=2510,#></SYS>; - daher also das Syncen mit dem BUS. Immerhin eine Erleuchtung. Aber nichtsdestotrotz liefert das noch keine Antwort auf die o.g. Probleme, oder?

                  Kommentar


                    #10
                    Dat mut so !!

                    1/1/1;#;<SYS><SETDIGITALJOIN=2510,\#></SYS>

                    ...

                    LG

                    Kommentar


                      #11
                      und den a2509 bitte so:

                      2509;#;255;<KNX><SETVALUE=1/2/8,\#></KNX>;1/2/8=\*.;NOCACHE

                      ....

                      LG

                      Kommentar


                        #12
                        Hi,

                        habe gerade getestet. Problem 2 ist gelöst!

                        Problem 1 hingegen ist noch da! Müsste sich bei dir ja reproduzieren lassen.

                        Ich habe jetzt mal beide Rückmeldeobjekte des Dimmers (an/aus und Wert) hinzugefügt. Wenn ich jetzt über den Slider einen Wert einstelle, wird sofort vom Dimmer das EIN Bit gesetzt und der Button gedrückt. Wenn ich jetzt über den Button wieder ausschalte, bevor auch der Wert als Rückmeldung kommt, wird über das Wert -Objekt eine 0 geschickt, aber der Slider bleibt wo er war!
                        Anbei der Screenshot als Beweis. Wertobjekt wird auf 0 gesetzt, aber in der GUI nicht aktualisiert.
                        Das ganze funzt hingegen, wenn ich warte bis einmal ein Wertobjekt > 0 gesendet wird.
                        Da ist wohl bei euch was buggy beim Nullsetzen der Slider über den Join. Passt ja auch zu Problem 1.

                        Nachtrag: Ist es eigentlich so, dass Drücken des Sliders den Join nicht verändert, sondern nur das Rückmeldeobjekt des Aktors? So ist es bei mir nämlich genau so, wenn ich SimulateFeedback ausmache. Dann drücke ich und erst wenn die Rückmeldung vom Aktor kommt, wird die GUI aktualisiert.
                        Wenn ich das richtig interpretiere ist es so, dass der Join immer dann nicht neugeschrieben/aktualisiert wird, wenn der gleiche Wert schon drin ist. Deswegen das obrige Ergebnis (Anzeige stimmt, aber Join ist gar nicht gesetzt), wenn SimulateFeedback an ist.
                        Angehängte Dateien

                        Kommentar


                          #13
                          So komme ich nicht weiter...

                          bitte wieder die JOINS bzw. wie Du die nun verändert hast...

                          Ich bekomme das hier nicht reproduziert! Hast Du den fehlerhaften Eintrag in der KNX.csv auch geändert ???

                          Simulate Feedback:

                          wenn gesetzt, wir der Wert, also das Feedback direkt in der GUI erzeigt... wenn nicht, wird das Feedback ausschließlich von mmh erzeugt. Ein Join wird immer gecashed, also nur geschrieben, wenn sich der Wert ändert... das ist auch völlig unabhängig von der Simulate Feedback Einstellung. Die Einstellung "NOCACHE" besagt, dass eben immer gesendet wird...

                          LG

                          Kommentar


                            #14
                            Zitat von meudenbach Beitrag anzeigen
                            wenn gesetzt, wir der Wert, also das Feedback direkt in der GUI erzeigt... wenn nicht, wird das Feedback ausschließlich von mmh erzeugt.
                            von mmh erzeugt - das heißt über das Rückmeldeobjekt vom BUS, durch welches der JOIN dann gesetzt wird ?

                            Zitat von meudenbach Beitrag anzeigen
                            Ein Join wird immer gecashed, also nur geschrieben, wenn sich der Wert ändert...
                            Was heißt gecashed? Anzeigt, aber nicht weggeschrieben?

                            Also hier meine Konfig (entsprechend deiner Änderungen):
                            Ich hab nen Dimmer mit Schalt-, Wertobjekt und aktiven Rückmeldeobjekten.

                            In der knx.esf:
                            Beleuchtung.Schalten (Dimmer).1/1/1 Licht Bett Tom E/A EIS 1 'Switching' (1 Bit) Low 0/0/1 0/0/3 0/0/2
                            Beleuchtung.Dimmen (Dimmer).1/2/8 Lichtszene Wert 10 % TOM Uncertain (1 Byte) Low

                            in der knx.csv:
                            1/1/1;#;<SYS><SETDIGITALJOIN=2510,\#></SYS>;
                            1/2/8;#;<SYS><SETANALOGJOIN=2509,\#></SYS>;

                            in der mremote.csv:

                            unter DIGITAL:
                            2510;TOGGLE;<SYS><SETANALOGJOIN=2509,255></SYS><KNX><SETVALUE=1/1/1,1></KNX>;<SYS><SETANALOGJOIN=2509,0></SYS><KNX><SETVALUE=1/1/1,0></KNX>

                            unter ANALOG:
                            2509;#;255;<KNX><SETVALUE=1/2/8,\#></KNX>;1/2/8=\*.;NOCACHE

                            Der einfachste Fall das Problem zu erzeugen müsste jedoch sein wie unter Problem 1 beschrieben.

                            Kommentar


                              #15
                              Mike,

                              hast du das mittlerweile eigentlich mal nachgebaut und kannst bestätigen, dass bei dir der Fehler auch auftritt?

                              Gruß!

                              Kommentar

                              Lädt...
                              X