Ankündigung

Einklappen
Keine Ankündigung bisher.

Yamaha Musiccast API - CRLF ohne Leerzeichen senden

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

    Yamaha Musiccast API - CRLF ohne Leerzeichen senden

    Ich möchte einen Yamahe RXV779 über die Musiccast API steuern.

    Folgender Code funktioniert nicht, da ich vermute, dass sendtcp eine NULL sendet zwischen HTTP/1.1 und 0x0Du08...
    Das zeigt mir zumindest Wireshark.

    if pbutton(WebRadioID, MultimediaPageID)==1 then WebRadioVar=EIN endif
    if (WebRadioVar) then connecttcp(YamahaRXV779_Port,YamahaRXV779_IP) endif
    if (after (WebRadioVar,1000u64)) then {
    sendtcp(YamahaRXV779_Port,YamahaRXV779_IP,$GET /YamahaExtendedControl/v1/main/setPower?power=standby HTTP/1.1$,0x0Du08,0x0Au08,0x0Du08,0x0Au08);
    closetcp(YamahaRXV779_Port,YamahaRXV779_IP);
    WebRadioVar = AUS;
    }endif
    Hat jemand einen Tip, wie ich den String bauen muss um das zu umgehen?

    Ansonsten versuche ich es die Tage mal mit der EnertexTCP.llib.

    Der o.g. Code funktioniert in ähnicher Weise mit der Dreambox, die offensichtlich nicht so penibel ist.
    Ich hatte gehofft, dass ich den Code auch beim Yamahe Receiver verwenden kann.


    #2
    So sieht es aus ("on" durch "standby" ersetzt):
    test.jpg
    Zuletzt geändert von knxTest; 11.12.2017, 23:40.

    Kommentar


      #3
      Du benötigst sendtcparray:
      Dazu zunächste den zu senden String generieren und dann damit wegschicken:
      Code:
      MyString = $GET /YamahaExtendedControl/v1/main/setPower?power=standby HTTP/1.1$ + CRLF
      MySize = size(MyString)
      
      if (after (WebRadioVar,1000u64)) then {
      sendtcparray (YamahaRXV779_Port,YamahaRXV779_IP, MyString, MySize );
      closetcp(YamahaRXV779_Port,YamahaRXV779_IP);
      WebRadioVar = AUS;
      }endif
      offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
      Enertex Produkte kaufen

      Kommentar


        #4
        test2.jpgDanke Leider kein Erfolg. So ähnlich habe ich das auch schon ausprobiert, mal mit einem CRLF und hier im Mittschnitt mal mit Zwei. CRLF wird in ein Hex: 5c 6e = /n umgewandelt. und nicht in ein Hex: 0d 0a.

        Zuletzt geändert von knxTest; 13.12.2017, 21:23.

        Kommentar


          #5
          Folgendes geht auch nicht: sondern wandelt die Hex 0D 0A in eine Hex 31 30 um und hängt sie brav an..
          MyString1 = $GET /YamahaExtendedControl/v1/main/setPower?power=standby HTTP/1.1$
          MySize = size(MyString)
          cr=0x0Du08
          lf=0x0Au08
          MyString = MyString1+convert(cr,MyString1)+convert(lf,MyStrin g1)

          Kommentar


            #6
            Kann ich nicht nachvollziehen:
            Code:
            MyString = $GET /YamahaExtendedControl/v1/main/setPower?power=standby HTTP/1.1$ + CRLF
            MySize = size(MyString)
            Wenn ich diesen String (am besten über die Kommandozeile) abfrage - man wuss wissen, welche ID (Nummer) die Variable im Programm hat, bei mir ist das die 279, erkennt man ganz gut im Meldungsfenster und Debugger-, steht da
            Code:
            C:/Users/Michi/Desktop/Test/nconf.exe -q 279 192.168.33.140
            Wert von Objekt 279: 47 45 54 20 2f 59 61 6d 61 68 61 45 78 74 65 6e 64 65 64 43 6f 6e 74 72 6f 6c 2f 76 31 2f 6d 61 69 6e 2f 73 65 74 50 6f 77 65 72 3f 70 6f 77 65 72 3d 73 74 61 6e 64 62 79 20 48 54 54 50 2f 31 2e 31 0d 0a 00 00
            [[I]Weitere 0 Bytes folgen[/I]] {2017-12-14 09:38:59}
            Wird das genau richtig gemacht (CRLF ist bereits eine vordefinierte Konstante).
            D.h. in diesem Fall wird das Nullbyte nach dem String nicht gesendet. Nur Mut, einfach mal probieren.
            offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
            Enertex Produkte kaufen

            Kommentar


              #7
              Ich habe Deinen ersten Vorschlag mit einem CRLF und mit zwei CRLF getestet. Beides ohne Erfolg.
              Das Nullbyte wird bei mir mit der Funktion sendtcparray auch nicht gesendet. Das Problem verlagert sich aber.
              CRLF ist zwar vor definiert, wird bei mir aber als 5c 6e gesendet und nicht wie bei Dir gezeigt als 0d 0a. Das Zeigt der Mittschnitt über Wireshark.

              Sende ich den Befehl " http://xxx.xxx.xxx.xxx/YamahaExtende...Power?power=on " über den Browser funktioniert es.
              Im Wireshark Mittschnitt sieht man dann auch die 0d 0a.

              Was ich noch nicht verstanden habe, ist wie man die
              Zitat von enertegus Beitrag anzeigen
              diesen String (am besten über die Kommandozeile)
              abfragt.


              Wie komme ich an die ID Nummer der Variablen?

              Während ich das Schreibe... ...fällt mir auf, dass Du einen Windows PC verwendest. Ich verwende einen osX. Könnte das die Ursache sein, dass die Zeichen falsch übersetzt werden?





              Kommentar


                #8
                Ich Denke ich habe die ID gefunden. Unter eibPC/Variablen vorgeben und abfragen und dann mit der rechten Maustaste auf "Wert aus eibPC lesen"...
                test3.jpg

                Kommentar


                  #9
                  Jetzt fehlt mir noch "nconf.exe" Derivate für den Mac um die Variable auszulesen.

                  Kommentar


                    #10
                    Du kannst den Pfad einfach im Meldungfenster erkennen. Nconf ist Bestandteil von EibStudio, wird aber als eigenständiges Programm entpackt.
                    EDIT: Poste doch mal den String sowie Du ihn generierst bzw. was zeigt es denn bei Dir an, wenn du meinen Code oben eingibst?
                    offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
                    Enertex Produkte kaufen

                    Kommentar


                      #11
                      Sorry Ich habe es mit all meinem begrenzten Wissen versucht, aber ich bekomme weder die .exe noch die .bin auf meinem Mac zum laufen. Bitte nochmal um Hilfe. Ich vermute Du hast das mit dem Mac überlesen.

                      Eingabe im Programmordner:

                      $ nconf.bin -q xxx.xxx.xxx.xxx
                      Fehlermeldung ist: -bash: nconf.bin: command not found
                      Zuletzt geändert von knxTest; 15.12.2017, 21:24.

                      Kommentar


                        #12
                        So ich habe eine Virtuelle Maschiene auf dem Mac installiert und Windows 7 am laufen. Dabei zeigt sich folgendes Ergebnis:
                        test4.jpg

                        Kommentar


                          #13
                          Fehler gefunden! Jetzt geht es.

                          Die Variable CRLF wurde bei mir im Programmcode bereits verwendet. Ich habe das Geändert. Dann habe ich mir noch den Code von BMX besorgt, wo er CRLF definiert hat.
                          https://knx-user-forum.de/forum/supp...ht-wie-gewollt Beitrag #7

                          Dabei ist zu beachten, dass bei neueren Versionen CRLF wohl schon definiert ist. Bei mir war das nicht der Fall.

                          Zu guter Letzt musste ich noch ein zweites CRLF an den String anhängen und das wars...

                          Der Code sieht jetzt so aus. Ein Makro ist einer der nächsten Schritte...

                          Code:
                          YamahaRXV779_Port = 80u16
                          YamahaRXV779_IP= xxx.xxx.xxx.xxx //Die IP vom Yamaha Receiver
                          WebRadioVar=AUS
                          MultimediaAusVar=AUS
                          
                          CRLF = $  $
                          if systemstart() then {
                              stringset(CRLF, 0x0d, 0u16);
                              stringset(CRLF, 0x0a, 1u16);
                          } endif
                          
                          CR = $ $
                          if systemstart() then {
                              stringset(CR, 0x0d, 0u16);
                          } endif
                          
                          LF = $ $
                          if systemstart() then {
                              stringset(LF, 0x0a, 0u16);
                          } endif
                          
                          Yamaha779on = $GET /YamahaExtendedControl/v1/main/setPower?power=on HTTP/1.1$ + CRLF + CRLF
                          
                          if pbutton(WebRadioID, MultimediaPageID)==1 then WebRadioVar=EIN endif
                          if (WebRadioVar) then connecttcp(YamahaRXV779_Port,YamahaRXV779_IP) endif
                          if (after (WebRadioVar,1000u64)) then {
                          sendtcparray (YamahaRXV779_Port,YamahaRXV779_IP, Yamaha779on, size(Yamaha779on) );
                          closetcp(YamahaRXV779_Port,YamahaRXV779_IP);
                          WebRadioVar = AUS;
                          }endif

                          Danke und Sorry für die unnötige Arbeit mit CRLF
                          Zuletzt geändert von knxTest; 16.12.2017, 14:14.

                          Kommentar


                            #14
                            Sorry, ich hatte hier https://knx-user-forum.de/forum/supp...31#post1169131 eben geantwortet. Windows brauchst Du für nconf nicht...
                            offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
                            Enertex Produkte kaufen

                            Kommentar

                            Lädt...
                            X