Serial-USB-Bridge / Treiberproblem RS232 - USB Adapter mit FTDI Chip

Einklappen
X
 
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge
  • Loxster
    Dumb Home'r
    • 08.10.2023
    • 22

    #1

    Serial-USB-Bridge / Treiberproblem RS232 - USB Adapter mit FTDI Chip

    Moin moin aus dem Norden,


    dies ist mein zweiter Beitrag hier im Forum. Ich finde es super, dass es das Forum gibt, und ich hoffe sehr, dass mir hier vielleicht jemand mit meinem (vielleicht ja ganz banalen) Problem weiterhelfen kann. Meine Linuxkenntnisse sind leider mittelprächtig, weshalb ich mich auch schon durch hunderte Forenbeiträge durchgewühlt und etliche Dinge ausprobiert habe.


    Zuerst zu meinem Vorhaben:
    Ich würde gern meinen etwas älteren AV-Receiver (Yamaha RX-V3800), der im Nachbarraum des Wohnzimmers steht, über die Loxone steuern, aber auch ein Feedback über den Status des Gerätes bekommen (deshalb scheidet ein IR-Extender aus). Der AV-Receiver unterstützt definitiv kein UDP, oder Befehle per HTTP, TCP/IP etc. In Frage kommt somit ausschließlich die Steuerung per RS232-Schnittstelle.

    Setup:
    Ich nutze den Miniserver Compact, ivm. Loxberry 3 auf Dietpi Bullseye mit Raspberry Pi 4 im Argon One, M.2 Sata SSD (sofern dies überhaupt eine Rolle spielt).
    Um die Verbindung zwischen Raspi 4 und dem AV-Receiver herzustellen, habe ich mir einen FT232R UART USB mit FTDI-Chip gekauft und an einen der USB 2.0 - Anschlüsse des Raspis geklemmt (Vendor ID = 0x0403, Product ID = 6001). (Den Adapter habe ich erfolgreich auf einem Windows-Rechner getestet. Per Serialmonitor ließ sich der AV-Receiver ansteuern, bzw. lesen.)
    Ich installierte das Serial-USB-Bridge Plugin, kopierte den angegebenen Pfad des USB-Adapters gem. Anleitung in USB-1, speicherte, startete neu, und erstellte entsprechende virtuelle Ausgänge in der Lox Config mit IP-Adresse:Port(USB-1) und dem entsprechenden Befehl. -leider keine Reaktion am AV-Receiver. Ich habe wirklich alles nach Anleitung gemacht.


    Die erste Schwierigkeit, die sich für mich ergeben hat, war es, die Befehle im korrekten Format in die Loxone einzutragen. Zum Einschalten wartet der Receiver beispielsweise auf den Befehl '07A1D', zum Ausschalten entsprechend '07A1E'. Es wird allerdings auch ein "STX", bzw. "ETX" erwartet. Wie müsste dann der Befehl entsprechend aussehen? Ich habe da einige Kombinationen ausprobiert, z.B. "USB-1=/0x0207A1D/0x03\r", oder auch '...\0x0207A1D\0x03\r' etc. etc., Methode "GET" oder "PUT"...

    Zum Testen ging ich auch über den UDP-Monitor, in dem mir ja wahrscheinlich UDP-Signale angezeigt werden müssten, sofern ich denn Eingaben direkt am Gerät tätige, oder? Dies ist jedenfalls leider nicht der Fall.

    Letzteres ließ mich darauf schließen, dass irgendetwas mit dem Gerätetreiber nicht in Ordnung sein müsste. Standardmäßig wird ja der ftdi_sio zugeordnet. Weiß jemand, ob es hierbei Probleme gibt? Falls ja, wie lässt es sich ändern? Ich habe bereits versucht, nach Anleitung den originalen FTDI Treiber zu installieren (1.4.27 ARMv8 hard-float). Grundsätzlich durchläuft der Raspi die Installation problemlos, allerdings "springt" er dann beim Reboot immer wieder auf den ftdi_sio Treiber zurück. Jegliche Übermittlungsversuche verblieben bislang erfolglos.

    1. Was mache ich falsch, bzw. hat jemand vielleicht Erfahrungen mit einem ähnlichen Setup? Muss ich den FTDI-Treiber von der FTDI-Seite installieren?
    2. kennt sich jemand mit der Formatierung der Befehle (STX/ETX) in ??UTF-8?? aus?


    Ich bin schon jetzt mega dankbar für hilfreiche Tipps.
    Vielen Grüße
    Robert

    Achja, vielen Dank für das Plugin Johannes Humer :-) Ich hoffe wirklich sehr, ich kriege es zum laufen.
  • Noschvie
    LoxBus Spammer
    • 24.09.2018
    • 471

    #2
    Würde das zumindest im ersten Schritt unabhängig vom MS versuchen zu implementieren. Zum Beispiel mit einem ESP32 oder ähnlichem mit einer seriellen Schnittstelle, ohne USB dazwischen. Ein solches Setup erleichtert das Debuggen, Baudrate richtig einstellen, Command senden und schauen was zurück kommt. Mit Tasmota sind etliche solcher Anbindungen implementiert.
    mein Ansatz: MS -> MQTT -> Tasmota-> RS232 -> Receiver und wieder „zurück“

    Kommentar

    • Loxster
      Dumb Home'r
      • 08.10.2023
      • 22

      #3
      Guten Morgen Noschvie, und vielen lieben Dank für die schnelle Antwort.

      Ich habe ja bereits erfolgreich mit demselben Schnittstelleadapter den AV-Receiver per Windows-Laptop mit USB Schnittstelle und Serialmonitor gesteuert. Für das Protokoll und Baudrate (9600) etc... habe ich ein Dokument gefunden, das die Schnittstelle des RX-V3300 beschreibt. Dies passt auch zu meinem RX-V3800. Ich konnte Befehle erteilen und bekam auch Antworten.

      Nun ist nur mein Problem, dass ich offenbar denselben Adapter nicht am Raspi, bzw Loxberry zum laufen bekomme.

      Einstellungen und Protokoll sind ja soweit bekannt 🙂
      ich muss nur irgendwie die Codierung in die UDP Befehle übertragen.

      Viele Grüße
      Robert
      Zuletzt geändert von Loxster; 14.11.2023, 10:46.

      Kommentar

      • Loxster
        Dumb Home'r
        • 08.10.2023
        • 22

        #4
        Hi Noschvie,

        vielen Dank für Deinen Rat. Ich habe mir einen Waveshare LAN-RS232 Modul mit Poe geholt und hielt es für eine gute Alternative. Ich bin leider kläglich gescheitert. Die Dokumentation war unterirdisch und die Software teilweise auf chinesisch. Also wieder weg damit, nun widme ich mich wieder dem Plugin.

        Da mir nach der Schnittstellenbeschreibung von Yamaha grundsätzlich alle Parameter bekannt sind (Baudrate 9600 etc...) und ich das ja mit dem Schnittstelleadapter, den ich am Loxberry nutzen möchte, schon erfolgreich mit einem Windows PC getestet habe, würde ich mich trotzdem gerne mal wieder dem eigentlichen Setup widmen. Das muss doch irgendwie funktionieren.

        Kannst Du mir irgendwie helfen? Wie finde ich heraus, ob die UDP Befehle auch an die Schnittstelle gesendet werden? Wie finde ich heraus, ob das Plugin ordnungsgemäß arbeitet? Und wie wandle ich die Hex-codes (STX/ETX) in die UDP Befehlskette bei Lox Config um? Ich habe gefühlt hunderte Tabellen studiert. Es wäre echt blöd, wenn's am Ende an einem falsch gesetzten "", bzw. "/" liegt. Ich habe aber das Gefühl, die Befehle kommen aus irgendeinem Grund gar nicht erst beim Adapter an. Vielleicht muss ich auch einfach einen ganz anderen Port-Bereich wählen?!?

        Vielleicht könntest Du bzw. irgendjemand hier im Forum, der Erfahrung mit dem Steuern eines AV-Receivers per USB-Serial-Bridge hat, mir auf die Sprünge helfen, mein Problem zu lösen.

        Viele Grüße
        Robert

        Kommentar

        • Noschvie
          LoxBus Spammer
          • 24.09.2018
          • 471

          #5
          Hallo Robert
          habe leider keine Erfahrung mit dem USB-Serial-Bridge Plugin. Vielleicht meldet sich Johannes Humer...
          Welches "LAN-RS232 Modul mit Poe" hattest du probiert, das weiße oder das schwarze?

          Kommentar

          • Loxster
            Dumb Home'r
            • 08.10.2023
            • 22

            #6
            Hi Noschvie,
            das schwarze, da das neben POE auch noch RS485 unterstützt. Ich hoffe, dass Johannes Humer sich mal meldet. Er könnte mir bestimmt weiterhelfen. Das wäre toll. 😐

            Viele Grüße
            Robert

            Kommentar


            • Noschvie
              Noschvie kommentierte
              Kommentar bearbeiten
              Das RS485 ist für Modbus notwendig, du müsstest das RS232 verwenden. Aber das ist nun eh hinfällig.
          • Labmaster
            Lox Guru
            • 20.01.2017
            • 2571

            #7
            STX 07A1E ETX + Return
            entspricht in Bytes zerlegt (hex Darstellung) :
            0x02
            0x00
            0x7a
            0x1e
            0x03
            0x0d ( hex Wert von \r )

            Das muss dann laut Loxone Virtueller Ausgangs Spezifikation umgesetzt werden, hierbei wird das "0x" entfernt und ein "\x" statt dessen vorangestellt

            Klicke auf die Grafik für eine vergrößerte Ansicht  Name: virtualout1.jpg Ansichten: 0 Größe: 45,5 KB ID: 411350

            Das dann hintereinander gereiht ergibt dann:
            \x02\x00\x7a\x1d\x03\r

            Wenn als prefix USB-1= eingetragen ist, dann würde ich mal denken, das somit als GET im Virtuellen Ausgang von Loxone dann folgendes stehen müsste:

            USB-1=\x02\x00\x7a\x1d\x03\r

            Ob das \r (alias 0x0d) am Ende wirklich benötigt wird, sei mal dahin gestellt. Man könnte das auch mal ohne das probieren.

            IP und port vom Loxberry müssen natürlich stimmen.
            Ich kenne das Plugin selbst nicht, aber man könnte sicher mal im Logfile des Plugins nachsehen ob das was zum debuggen drin steht.

            Und aufpassen "/" ist nicht gleich "\", bei der Angabe der hex Werte wird ein "\" benötigt
            Zuletzt geändert von Labmaster; 20.11.2023, 07:45.

            Kommentar


            • Loxster
              Loxster kommentierte
              Kommentar bearbeiten
              Hi Labmaster,

              ich habe mich (vorerst) damit abgefunden, dass ich zwei Loxberrys (v3 + v2) betreiben muss, damit das Plugin läuft. Was ich allerdings noch immer nicht hinbekomme, ist der Empfang von Reports, gesendet vom AV-Receiver. Ich habe im Plugin die gleichen Daten eingetragen, wie im UDP Eingang der Loxone:
              Im Plugin die IP des Miniservers und Port 9998 für die Befehlserkennung. Als Präfix habe ich "USB-1=YAMAHA\r" eingetragen (wie in der Anleitung beschrieben).
              Im UDP Eingang habe ich die IP des Loxberry v2 eingetragen, mit dem Port 9998. Für die Befehlserkennung dann "USB-1=YAMAHA=\v" (bzw. auch "\w" ). Ich habe sogar die Eingänge "_NB", wie in der Anleitung beschrieben, benannt. Es sollten eigentlich Reports wie "STX4026??ETX" für die aktuelle Lautstärke kommen. Dass der Receiver diese sendet, habe ich mit demselben Schnittstellenadapter ja bereits vor Wochen an meinem Laptop per Serialmonitor festgestellt.
              Mit meinem Setup über das Loxberry (v2), und Dank Deiner Hilfe, kann ich ja inzwischen Befehle an den Receiver senden, auf die er folgerichtig reagiert. Über den UDP Monitor der Lox Config bekomme ich allerdings vom Receiver keine Antwort über Port 9998. Vielleicht habe ich auch etwas falsch eingestellt.

              Hast Du, bzw jemand sonst, eine Idee, was ich ggf falsch mache?

              Viele Grüße
              Robert
          • Loxster
            Dumb Home'r
            • 08.10.2023
            • 22

            #8
            Guten Morgen :-)

            Eure Beiträge helfen mir sehr weiter, vielen Dank.

            Noschvie: Das kombinierte ETH - RS232/RS485/RS422 Modul habe ich genommen, damit ich maximale Flexibilität habe, falls ich das mit dem Plugin doch irgendwann mal hinbekomme. Dann habe ich ein Modul, mit dem ich vielleicht auch mal was mit Modbus machen könnte. Ich habe natürlich nur die RS232-Schnittstelle des Moduls benutzt. Da das ganze Modul (aus meiner Sicht) etwas komplex ist, dafür aber mit einer schlecht übersetzten App gesteuert werden soll (SSCOM, teilweise auf chinesisch), habe ich es dann sein lassen und probiere es doch nochmal mit dem Plugin.

            Labmaster: Deine Hilfe mit dem Sting, diesen so aufzuschlüsseln; auf diese Kombination bin ich noch nicht gekommen. Dein Ansatz ergibt aber mehr Sinn, als meiner ;-)
            Macht es vielleicht Sinn, noch die einzelnen Ziffern nach Hex aufzulösen? 07A1D entspräche dann \x02\x30\x37\x41\x31\x44\x03\r - oder denkst Du, "7a" und "1d" sind bereits Hex?

            Ich bin nicht sicher, ob ich von Johannes Humer noch Support bekomme. Er hat im Januar '22 das Plugin geschrieben und war im Februar '22 das letzte Mal online. Ich denke, ich werde es auf eigene Faust hinbekommen müssen. Ihr helft mir aber schon sehr weiter. Gestern Abend habe ich mir mal das Installationsprotokoll angesehen (siehe Anhang), und dabei ist mir aufgefallen, dass ein paar Packages nicht installiert werden konnten. Ich denke, dass das ganze Plugin entsprechend gar nicht läuft. Kompatibilitätsprobleme mit Loxberry 3, bzw. Python? Ich habe mal versucht, die Packages, wie folgt nachzuinstallieren:

            sudo apt-get update
            sudo pip install pyserial
            sudo pip3 install pyserial
            sudo apt-get install minicom
            sudo apt-get install libstring-escape-perl​

            Danach habe ich gecheckt, ob die Pakete nun installiert sind (siehe Screenshot #2). Dies scheint Erfolg gehabt zu haben. Ob das Plugin mit diesen dann richtig umgeht, kann ich natürlich nicht bestätigen.


            Viele Grüße und vielen Dank für Eure Unterstützung.
            Angehängte Dateien

            Kommentar

            • Labmaster
              Lox Guru
              • 20.01.2017
              • 2571

              #9
              Zitat von Loxster

              Labmaster: Deine Hilfe mit dem Sting, diesen so aufzuschlüsseln; auf diese Kombination bin ich noch nicht gekommen. Dein Ansatz ergibt aber mehr Sinn, als meiner ;-)
              Macht es vielleicht Sinn, noch die einzelnen Ziffern nach Hex aufzulösen? 07A1D entspräche dann \x02\x30\x37\x41\x31\x44\x03\r - oder denkst Du, "7a" und "1d" sind bereits Hex?
              ...
              Keine Ahnung, ich kenne den Receiver und seine Ansteuerung ja nicht. (habe nur aus der Post Beschreibung oben versucht zu erklären wie das mit den Hex Werte bei Loxone funktioniert)
              Falls aber die Werte als Char Codes (Strings) benötigt werden, müsste man das natürlich anders codieren.

              z.b.
              \x0207A1D\x03\r

              also 0x02 als hex, dann der String, dann wieder 0x03 und halt am Ende gegebenenfalls noch \r (0x0d) , aber wie schon erwähnt könnte hier \r auch unnötig sein.

              Insofern warst du da oben in deinem Post ( \0x0207A1D\0x03\r') schon nahe dran, hättest nur die "0" vor den "" weglassen müssen.

              Aber Achtung,
              als String könnte die Groß/Kleinschreibung wichtig sein, eventuell müsste es auch \x0207a1d\x03\r sein (je nachdem wie der Receiver das erwartet, würde da aber eher von der Großschreibung ausgehen)

              Kommentar

              • Loxster
                Dumb Home'r
                • 08.10.2023
                • 22

                #10
                Zitat von Labmaster

                Keine Ahnung, ich kenne den Receiver und seine Ansteuerung ja nicht. (habe nur aus der Post Beschreibung oben versucht zu erklären wie das mit den Hex Werte bei Loxone funktioniert)
                Falls aber die Werte als Char Codes (Strings) benötigt werden, müsste man das natürlich anders codieren.

                z.b.
                \x0207A1D\x03\r

                also 0x02 als hex, dann der String, dann wieder 0x03 und halt am Ende gegebenenfalls noch \r (0x0d) , aber wie schon erwähnt könnte hier \r auch unnötig sein.

                Insofern warst du da oben in deinem Post ( \0x0207A1D\0x03\r') schon nahe dran, hättest nur die "0" vor den "" weglassen müssen.

                Aber Achtung,
                als String könnte die Groß/Kleinschreibung wichtig sein, eventuell müsste es auch \x0207a1d\x03\r sein (je nachdem wie der Receiver das erwartet, würde da aber eher von der Großschreibung ausgehen)
                Ich hänge mal das Protokoll des Receivers als PDF an. Es ist zwar das des RX-V3300, passt aber auch für den RX-V3800. Aber offenbar sind wir auf dem richtigen Weg. :-)

                Vielen Dank für die Mühen
                Angehängte Dateien

                Kommentar

                • Labmaster
                  Lox Guru
                  • 20.01.2017
                  • 2571

                  #11
                  Aus dem Sceenshot kann man leider so gut wie keine Info zur Codierung der Befehle ableiten.

                  Die beiden Vorschlägen oben nun schon mal ausprobiert ?

                  Kommentar

                  • Loxster
                    Dumb Home'r
                    • 08.10.2023
                    • 22

                    #12
                    Labmaster,

                    ja, habe ich. Echt prima, es funktioniert. Vielen Dank noch einmal für Deinen Support.
                    Ich muss noch einmal etwas weiter ausholen: Das Nachinstallieren der Pakete hat leider keinen Erfolg gebracht.
                    Da aber das Plugin ja scheinbar auf der Version 2 mal funktioniert haben muss, habe ich mal meinen alten, defekt geglaubten Raspi 3B+ herausgekramt und Loxberry 2.2.2 drauf installiert;
                    dann das Plugin Serial-USB Bridge draufgeladen, und sie da: der Receiver reagiert!!! AWESOME!!!
                    Ergo: das Plugin ist einfach nicht mit der Loxberry V3 kompatibel. Ich würde das Plugin ja anpassen, wenn ich wüsste, wie. Leider bin ich da nicht so sehr bewandert, wie Ihr.
                    Jetzt muss ich leider zwei Loxberrys laufen lassen, damit ich meinen Yamaha RX-V3800 steuern kann. Ist nicht ganz das gelbe vom Ei, aber immerhin funktioniert's.

                    Nun noch einmal zur Codierung der Befehle. Das rot eingekringelte sollte die Zusammensetzung des Befehls darstellen. Für "Power On" würde dies bedeuten: 07A1D; inklusive STX/ETX wäre das also STX07A1DETX, oder eben "\x0207A1D\x03\r"; Du hattest also den richtigen Riecher. Danke, danke, danke :-)

                    Jetzt werde ich also alle gewünschten Befehle als UDP-Befehle anlegen und mich an das Auslesen der Statusmeldungen des Receivers heranwagen. Vielleicht klappt dies ja über den UDP-Monitor?!?

                    In der Hoffnung, dass Johannes Humer vielleicht doch mal ein Update auf Loxberry V3 schreibt, nutzte ich dann erstmal zwei Raspis.


                    Ich wünsche Euch einen schönen Abend und bedanke mich nochmals 1000x.

                    Viele Grüße
                    Robert

                    Kommentar

                    • Labmaster
                      Lox Guru
                      • 20.01.2017
                      • 2571

                      #13
                      Kannst du mal auf dem RaspberryPi in der Console dmesg ausführen und die Ausgabe hier posten ?
                      (Der FTDI Adapter sollte natürlich dabei eingesteckt sein , am besten damit schon eingesteckt gebootet worden sein)

                      Kommentar

                      • Loxster
                        Dumb Home'r
                        • 08.10.2023
                        • 22

                        #14
                        Hi Labmaster,

                        ich habe mal dmesg (komplett) auf beiden Loxberry Systemen ausgeführt.
                        Natürlich habe ich dafür den FTDI Adapter schon vor dem Booten eingesteckt.
                        Das Setup des Plugins habe ich auf beiden Systemen genau gleich vorgenommen.
                        Wie gesagt: mein Eindruck ist, dass die Installationsroutine des Plugins beim Loxberry V3 nicht fehlerfrei ausgeführt wird. Daher wird der Fehler kommen.
                        Manuell bekomme ich es nicht hin.
                        Angehängte Dateien

                        Kommentar

                        • Labmaster
                          Lox Guru
                          • 20.01.2017
                          • 2571

                          #15
                          Ok, zumindest ist der FTDI FT232R Chip des USB Konverters auch im LB3 System eingebunden und verfügbar.

                          Das Plugin sollte eine Log File ausgeben können, dass könntest du auch mal posten.

                          Kommentar

                          Lädt...