Ankündigung

Einklappen
Keine Ankündigung bisher.

Sony Projektor PJ-Talk Steuerung

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

    Sony Projektor PJ-Talk Steuerung

    Hallo,

    ich versuche meinen Projektor über den EibPC ein- und auszuschalten. Der unten verlinkte KNX-Forum Beitrag hat mir insofern geholfen, dass ich mittels dem PJTalkCommandChecker den Projektor ein und ausschalten kann. D.h. den HEX String habe ich also.

    Soweit ich verstanden habe, ist PJ-Talk eine Abwandlung des TCP Protokolls. Wie allerdings den HEX String "020A534F4E59000130020001" (Ein-Befehl) mittels der sendtcp Funktion schicken kann, erschließt sich mir nicht. sendtcp interpretiert die Daten als c1400 und wandelt diesen dann nochmal in HEX im (konnte ich im Wireshark mitschneiden)

    Danke schon mal vorab!
    Zuletzt geändert von JAK; 28.12.2020, 12:04.

    #2
    Welche Version vom EibPC hast Du denn?
    offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
    Enertex Produkte kaufen

    Kommentar


      #3
      noch den EibPC NP V3 v4.015 mit EibStudio 4.039

      Kommentar


        #4
        Du kannst z.B. einen String definieren:
        zString=tostring(0x02,0x0A,0x53 ....)
        Alternativ mit stringcasts oder stringset arbeiten.
        offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
        Enertex Produkte kaufen

        Kommentar


          #5
          Hallo enertegus,

          danke erstmal für Deine schnelle Unterstützung. Die Befehle hatte ich im Handbuch auch gesehen. Die Erklärung zur Funktion hat sich mir allerdings nicht erschlossen.

          Ich habe nun im Experten Modus die Variablen für EIN und AUS definiert (wie das im Logikeditor zu machen ist, hat sich mir auch nicht erschlossen)

          PowerOn_Sony=tostring(0x02,0x0A,0x53,0x4F,0x4E,0x5 9,0x00,0x01,0x30,0x02,0x00,0x01)
          //Ein: "02 0A 53 4F 4E 59 00 01 30 02 00 01"
          PowerOff_Sony=tostring(0x02,0x0A,0x53,0x4F,0x4E,0x 59,0x00,0x01,0x30,0x02,0x00,0x00)
          //Aus: "02 0A 53 4F 4E 59 00 01 30 02 00 00"

          Wieder programmiert und mit Wireshark den Traffic mit geschnitten. Beim Einschalten werden allerdings nicht alle Daten übertragen. Es kommt nur 020a534f4e5900 an.

          Irgendeine Idee? Anbei noch die Programmierung im Logikeditor.
          ​​​​
          Danke schon mal vorab!
          Angehängte Dateien
          Zuletzt geändert von JAK; 28.12.2020, 17:16.

          Kommentar


            #6
            0x00 ist das String-Ende-Zeichen. Schicke jeweils ab einem 0x00 als neuen String als weiteres Argument.

            Falls der Logikknoten keine weiteren Parameter erlaubt, musst du auf die Experten-Funktion sendtcp ausweichen. Kann ich grade nicht testen.
            Zuletzt geändert von foobar0815; 28.12.2020, 17:31.

            Kommentar


              #7
              Zitat von JAK Beitrag anzeigen
              Wieder programmiert und mit Wireshark den Traffic mit geschnitten. Beim Einschalten werden allerdings nicht alle Daten übertragen. Es kommt nur 020a534f4e5900 an.
              Irgendeine Idee? Anbei noch die Programmierung im Logikeditor.
              Die Funktion sendtcp (oder Logikknoten TCP: Senden) schickt Strings bis zum ersten Nullbyte. Bei Dir ist aber der String binär, d.h. du musst die Funktion sendtcparray oder Knoten: "TCP Array senden" nutzen. Dafür musst du dann die Länge der Bytes der Übertragung mit angeben. Da wäre also Ein: "02 0A 53 4F 4E 59 00 01 30 02 00 01" genau 12 Bytes.
              offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
              Enertex Produkte kaufen

              Kommentar


                #8
                Hallo enertegus, danke für den Support.

                Es funktioniert. Allerdings hat es ein wenig gedauert, hinter die Logik des EibPC und seiner Befehle zu kommen.

                Ich habe im Logikeditor auf "TCP Array senden" umgestellt. Die hex Daten zum Einschalten mit tostring umgewandelt (PowerOn_Sony=tostring(0x02,0x0A,0x53,0x4F,0x4E,0x 5 9,0x00,0x01,0x30,0x02,0x00,0x01)

                Das Ergebnis des tostring kann aber nicht so ohne weiteres verwenden werden, da der Rückgabewert ein c1400 String ist. Mittels der Typkonvertierung habe ich den Wert in einen c65534 String konvertiert. Damit ließ sich dann die Variable mit dem Eingang des "TCP Array senden" verknüpfen.

                P.S. die von foobar0815 vorgeschlagenen Befehle stringcast und stringset wären nicht zielführend verwendbar, oder? Anbei noch der Code aus dem Logikeditor. Wuerde das mit Eurem Experten Wissen ggf. auch einfacher umzusetzen gewesen?

                Danke nochmals. Guten Start ins neue Jahr.
                You do not have permission to view this gallery.
                This gallery has 1 photos.
                Zuletzt geändert von JAK; 01.01.2021, 11:28.

                Kommentar


                  #9
                  enertegus ,

                  bei mir hat sich bzgl. der Steuerung des Sony Projektor eine weitere Frage ergeben.

                  Ich möchte die Lampenzeit des Projektor abfragen. Mit dem Sony Tool funktioniert das wie folgt:
                  Anfrage zu Lampenzeit: 02 0A 53 4F 4E 59 01 01 13 00
                  Reply: 02 0A 53 4F 4E 59 01 01 13 02 01 73

                  der HEX Wert "01 73" entspricht der verbrauchten Lampenzeit von 371h

                  Mit meinem Script im EibPC funktioniert die Abfrage soweit. Ich bekomme die Antwort aber in der verkehrten Bytereihenfolgen. Wie kann ich das Problem lösen?
                  Die Antwort sieht so aus:
                  image_2022-02-02_082721.png

                  Kommentar


                    #10
                    Angenommen der Wert mit der falschen Bytereihenfolge heißt bei Dir uWert16Endian und der richtige soll uWert16 heißen:
                    Code:
                    uWert16=shift(uWert16Endian, -8s08)+ shift(uWert16Endian & 255u16,8s08)
                    offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
                    Enertex Produkte kaufen

                    Kommentar


                      #11
                      danke für die schnelle Antwort. Verstehe ich das richtig, dass bei mir dann so aussehen sollte?
                      die Variable ...Endian müsste ich dann noch anlegen, auf der dann die Rückmeldung 73 01 eingeht. Im Handbuch steht kein Beispiel. Kannst Du mir noch die genaue Wirkung der beiden Operanden erklären?

                      73 01h = 111 0011 0000 0001 --> mit dem 1 Operanden werden 8bits nach rechts geschiftet 0000 0001 111 0011?
                      was genau macht der 2. Operand?

                      AnswerLampHour=shift(AnswerLampHourEndian, -8s08)+ shift(AnswerLampHourEndian & 255u16,8s08)

                      Kommentar


                        #12
                        Achtung, shiften ist nicht rotieren! Was hinten rausfällt, ist weg.

                        Der zweite Operand isoliert das zweite Byte durch die Verundung mit 255:
                        Code:
                        0000 0000 0000 0001
                        und schiebt sie um 8 Stellen nach links zu
                        Code:
                        0000 0001 0000 0000
                        Durch die Addition werden dann die beiden vertauschten Bytes wieder zusammengefasst. Du kannst genauso auch
                        Code:
                        or
                        zum Zusammenfassen verwenden, also eine Bitweise-Veroderung.
                        Zuletzt geändert von foobar0815; 02.02.2022, 17:29.

                        Kommentar


                          #13
                          foobar0815 , besten Dank für Deinen ausführlichen Support. Leider funktioniert es noch nicht ganz. Der 1. Operand mit dem Shift nach rechts funktioniert, der 2. nicht. Das "&" Zeichen wird vom Compiler mit einem Fehler quittiert. Ein Plus Zeichen führt aber nicht zum gewünschten Ergebnis (00hex, anstelle 01hex , s. Bild)

                          if event(readtcp(Port@,IP@,Lamp1@,Lamp2@,Lamp3@,Lamp4 @,Lamp5@,Lamp6@)) and IP==IP@ and ConnectionState@ == 12 then {
                          Result = shift(Lamp6@, -8s08) + shift(Lamp6@ + 255u16, 8s08)
                          } endif
                          Angehängte Dateien
                          Zuletzt geändert von JAK; 03.02.2022, 07:00.

                          Kommentar


                            #14
                            Statt + 255 -> and 255.

                            Kommentar


                              #15
                              ...das war der Trick.


                              image_2022-02-03_100620.png image_2022-02-03_100742.png
                              Angehängte Dateien

                              Kommentar

                              Lädt...
                              X