Ankündigung

Einklappen
Keine Ankündigung bisher.

- √ - 3-Byte-Wert kommt nicht in Plugin an (DPT 232.600)

Einklappen
Dieses Thema ist geschlossen.
X
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    [wiregate] - √ - 3-Byte-Wert kommt nicht in Plugin an (DPT 232.600)

    Hallo zusammen,

    ich sitze grad an einem Problem und komme nicht mehr weiter:
    Ich möchte einen Wert vom Typ 232.600 (3 Byte RGB) an mein Plugin senden. Das Plugin reagiert auf die entsprechende GA, jedoch wird mir der Wert ($msg{'value'}) im Plugin-Log nicht angezeigt. Muss ich das noch irgendwie speziell behandeln, dass ich den 3-Byte-Wert loggen kann? Mit Strings etc. gibt's keine Probleme bei der Ausgabe im Log.

    so sieht der relevante Teil momentan aus:
    Code:
    if ($gv_event eq EVENT_BUS) {
        if ($msg{'apci'} eq "A_GroupValue_Write" and $msg{'dst'} eq $ga_rgb){
            plugin_log($plugname, "(BUS) Wert: ".$msg{'value'}."ENDE");
        } 
    }
    Und so das Log:
    Code:
    2014-12-06 17:29:05.448,led1.pl,(BUS) Wert: ENDE
    Die GA ist im WG als DPT 232.600 bekannt.
    Hat jemand ne gute Idee, wie ich weiterkomme?
    Wenn ich erst mal nen Wert im Plugin habe, wird dieser (nach aktuellem Wissensstand) mit ein paar Bit-Operationen auf die einzelnen Farbwerte aufgedröselt - außer es hat jemand ne bessere Idee...

    PS: was soll das Ganze?
    Ich möchte über das Plugin ne Farbe für einen LED-Stripe ansteuern, der an einem Raspberry hängt. Die Kommunikation zwischen Plugin und Raspberry erfolgt (momentan) über SSH. Das funktioniert bereits mit festen Farben, die im Plugin definiert werden. Jetzt muss es "nur" noch Farbwerte über den Bus annehmen....
    CU,
    Mathias

    #2
    Kleiner Nachtrag: es kommt nicht "nix" an, sondern "0"...
    CU,
    Mathias

    Kommentar


      #3
      Nur eine Vermutung aus der Hüfte (wirklich nur geraten):

      Ich könnte mir vorstellen, dass der DPT 232.600 vom WireGate und dessen Dekodierung nicht out-of-the Box unterstützt wird.

      Die Codierung der Werte in den drei Bytes ist nicht festgelegt sondern vom Device abhängig.

      Die Konnex schreibt dazu im Standard: "Because of the device dependent interpretation of RGB, this coding is only suitable for point-to-point communication, this is, if there is only a single receiver".

      ==> Ich denke Du wirst Dir die Dekodierung vermutlich selbst bauen müssen.

      Das war auch schon Thema hier: https://knx-user-forum.de/forum/supp...wiregate/29552

      lg

      Stefan

      Kommentar


        #4
        Hallo Stefan,

        dass ich den Wert erst noch irgendwie decodieren muss, um was Sinnvolles damit anzufangen, war mir fast schon klar. Aber nach meinem Verständnis müsste doch, wenn ich über groupwrite oder ETS nen Wert wie z.B. "33 33 33" schicke, irgendwas ankommen, was nicht "0" ist.
        Die Werte in ETS und groupwrite stimmen zumindest überein; auf dem Bus ist der Wert also schonmal....

        Laut WG-Bus-Log steht da
        Code:
        2014-12-07 09:46:14.417,A_GroupValue_Write,1.1.254,7/1/1,21 21 21,,,232.600,0,low,5,T_DATA_XXX_REQ,0
        CU,
        Mathias

        Kommentar


          #5
          Ich weiss nicht wie sich das WG intern verhällt wenn du einen unbekanten DPT importierst. Aber ich würde mal versuchen den Eintrag in der GA Verwaltung zu entfernen und den Wert in einer direkten Abfragen als Rohwert einzulesen...

          Also etwa so: (ungetestet!)

          Code:
          if ($msg{'apci'} eq "A_GroupValue_Write" and $msg{'dst'} eq $rgb_ga) {
                  
             $rgb_rohwert = knx_read($msg{'dst'},0,'');
          }
          Gruss Patrik alias swiss

          Kommentar


            #6
            Hallo Patrik,

            interessanter Ansatz, leider auch ohne Erfolg
            Jetzt krieg ich im Bus -Log
            Code:
            2014-12-07 10:25:38.844,A_GroupValue_Write,1.1.254,7/1/1,21 21 21,,,,0,low,5,T_DATA_XXX_REQ,0
            knx_read($msg{'dst'},0,'') bedeutet doch, dass der Wert der gerade aktuellen GA aus dem Cache gelesen werden soll, richtig?
            Kann ich den Inhalt des gesamten Cache irgendwo einsehen? Vielleicht bringt mich das ja weiter....

            Edit:
            eibd wurde nach dem Entfernen der GA aus der-Verwaltung neu gestartet
            CU,
            Mathias

            Kommentar


              #7
              Hallo Mathias

              Aber da steht doch ein Wert drin!? 21 HEX entspricht 33 Dezimal.

              also A_GroupValue_Write,1.1.254,7/1/1,21 21 21, bedeutet nix anderes als:

              A_GroupValue_Write bedeutet dass der Wert aktiv auf den BUS geschrieben wurde und nicht eine Antwort auf eine Leseanfrage ist
              Telegramm von PA 1.1.254
              An GA: 7/1/1
              Wert in HEX: 21 21 21 == 33 33 33

              Also ist doch alles da oder nicht?
              Gruss Patrik alias swiss

              Kommentar


                #8
                Hallo Patrik,

                auf dem Bus ist schon alles da, aber im Plugin liefert ein
                if ($msg{'value'} eq "") ein TRUE zurück, also habe ich hier keinen Wert, mit dem ich weitermachen kann :-(
                CU,
                Mathias

                Kommentar


                  #9
                  Desshalb ja dieser Ansatz:

                  Code:
                  if ($msg{'apci'} eq "A_GroupValue_Write" and $msg{'dst'} eq $rgb_ga) {
                               my $rgb_rohwert = knx_read($msg{'dst'},0,232.600);
                  }
                  Danach sollte in $rgb_rohwert dein String mit dem Inhalt des Datenpakete enthalten sein. Dies funktioniert aber nur, wenn im eibd das cachen von Gruppenadressen auch aktiviert ist! Ansonnsten muss zwingend beim Sender das Lesen Flag gesetzt werden da das Plugin sonst nirgends den Wert lesen kann.
                  Gruss Patrik alias swiss

                  Kommentar


                    #10
                    Testwert (über ETS): 33 33 33 (dez) => 21 21 21 (hex)

                    $msg{'value'} == 0 #true
                    $msg{'value'} eq "" #true
                    $msg{'value'} eq "0" #false
                    $msg{'value'} eq "21 21 21" #false
                    $msg{'value'} eq "33 33 33" #false
                    CU,
                    Mathias

                    Kommentar


                      #11
                      ist im eibd das cachen der Gruppenadressen aktiviert??
                      Gruss Patrik alias swiss

                      Kommentar


                        #12
                        Caching ist aktiviert und war's auch schon immer.
                        Ich hab den DPT im knx_read mal in '' gesetzt:
                        Code:
                        $rohwert = knx_read($msg{'dst'},0,'232.600');
                        CU,
                        Mathias

                        Kommentar


                          #13
                          Ich halte die Read Variante für Sinnvoll denn damit stellst du sicher das der richtige Wert gelesen und übergeben wird. Dazu kommt dass Perl beim übergeben an die Variable $rohwert eine Typenkonvertierung vornimmt. Denn wir wissen ja nicht was $msg{value} für einen Inhalt hat...

                          Jetzt sollte zumindest etwas in der Variable Rohwert stehen. Erst wenn du weist, was darin steht, kannst du dich um die if Abfrage kümmern. Denn da könnte theoretisch auch 212121 oder 0x21 0x21 0x21 oder sonst was drin stehen... (also macht auch ein eq 0 nicht unbedingt Sinn)
                          Gruss Patrik alias swiss

                          Kommentar


                            #14
                            Hi,

                            da stimme ich dir zu.
                            Aber wenn ein eq "" true liefert, dann steht da nix drin. Oder sehe ich das falsch?
                            ein length($rohwert) liefert passend dazu "0"

                            komplett sieht der Code gerade so aus:
                            Code:
                            if ($gv_event eq EVENT_BUS) {
                                if ($msg{'apci'} eq "A_GroupValue_Write" and $msg{'dst'} eq $ga_rgb){
                                    my $rohwert;
                                    $rohwert = knx_read($msg{'dst'},0,'232.600');
                                    plugin_log($plugname, "(BUS) Rohwert: ".$rohwert.", Länge: ".length($rohwert)." ENDE");
                                } 
                            }
                            Und liefert den Logeintrag
                            Code:
                            2014-12-07 11:27:06.396,led1.pl,(BUS) Rohwert: , Länge: 0 ENDE
                            In der WG-GA-Verwaltung ist die GA (7/1/1) momentan nicht enthalten.
                            CU,
                            Mathias

                            Kommentar


                              #15
                              Mach mal aus reiner neugier DPT auf 1.001 und sende an die gleiche GA ein 1bit Befelt mit der ETS. z.B. ein EIN. Wenn dann in der Variable 01 steht, ist der Code korrekt und das Problem liegt nicht am Plugin...
                              Gruss Patrik alias swiss

                              Kommentar

                              Lädt...
                              X