.titleBar { margin-bottom: 5px!important; }

Project: AVM WLAN Repeater unter Linux nutzbar machen

Dieses Thema im Forum "FRITZ!Box Fon WLAN: Diskussion zum Funknetzwerk" wurde erstellt von prodigy7, 31 Jan. 2009.

  1. prodigy7

    prodigy7 Mitglied

    Registriert seit:
    28 Mai 2005
    Beiträge:
    732
    Zustimmungen:
    1
    Punkte für Erfolge:
    16
    Hallo zusammen,

    ich habe vor, den AVM WLAN Repeater irgendwie unter Linux nutzbar zu machen, so das man von dort aus auch Audio abspielen kann und es auf dem Repeater anhören kann.

    Die Steuerung soweit mit uPNP sollte jetzt das geringere Problem sein - ich hab hier mal etwas mit Perl + uPNP rumprobiert es war recht easy, das Gerät zu finden und anzusprechen.
    Code:
    <?xml version="1.0"?>                                                                                                                                                               
    <root xmlns="urn:schemas-upnp-org:device-1-0">                                                                                                                                      
    <specVersion>                                                                                                                                                                       
    <major>1</major>                                                                                                                                                                    
    <minor>0</minor>                                                                                                                                                                    
    </specVersion>                                                                                                                                                                      
    <device>                                                                                                                                                                            
    <deviceType>urn:schemas-upnp-org:device:aura:1</deviceType>                                                                                                                         
    <friendlyName>AVM Audiobruecke</friendlyName>                                                                                                                                       
    <manufacturer>AVM Berlin</manufacturer>                                                                                                                                             
    <manufacturerURL>http://www.avm.de</manufacturerURL>                                                                                                                                
    <modelDescription>AVM Audiobruecke</modelDescription>                                                                                                                               
    <modelName>FRITZ! WLAN Repeater N/G (UI)</modelName>                                                                                                                                
    <modelNumber>0.9.3</modelNumber>                                                                                                                                                    
    <modelURL>http://www.avm.de</modelURL>                                                                                                                                              
    <UDN>uuid:22617c0d-cb0f-4fb9-a31f-001F3FD43DB3</UDN>                                                                                                                                
    <serviceList>                                                                                                                                                                       
    <service>                                                                                                                                                                           
    <serviceType>urn:schemas-any-com:service:aura:1</serviceType>                                                                                                                       
    <serviceId>urn:any-com:serviceId:aura</serviceId>                                                                                                                                   
    <controlURL>/upnp/control/aura</controlURL>                                                                                                                                         
    <eventSubURL>/upnp/control/aura</eventSubURL>                                                                                                                                       
    <SCPDURL>/aura-scpd.xml</SCPDURL>                                                                                                                                                   
    </service>                                                                                                                                                                          
    </serviceList>                                                                                                                                                                      
    <presentationURL>http://fritz.repeater</presentationURL>                                                                                                                            
    </device>                                                                                                                                                                           
    </root>
    Wo ich jetzt etwas hänge und zugegeben auch (noch) nicht so die Erfahrungen haben, ist wie ich das Protokoll auseinander gepflügt bekomme. Soweit - wie auch schon aus dem XML oben ersichtlich, läuft die ganze Kommunikation via AURA (AVM USB Remote Architecture) ab.

    Hat irgend jemand von euch schonmal Erkenntnisse zu diesem Protokoll gesammelt? Wäre die Frage, ob man das ganze Protokoll soweit erst mal implementieren muss, so das man "automatisch" auch gleich den USB Fernanschluss implementieren kann oder ob man das soweit eingeschränkt nutzen kann, das es für die Audiofunktionalität reicht.

    Mit Wireshark habe ich mir soweit die Kommunikation auch schonmal angesehen - mir fehlt aber ehrlich gesagt ein Anhaltspunkt, wo ich anfangen kann. Sofern mir da jemand helfen kann, würde ich also nicht Nein sagen ;-)
     
  2. bodega

    bodega Aktives Mitglied

    Registriert seit:
    6 Juni 2006
    Beiträge:
    1,980
    Zustimmungen:
    1
    Punkte für Erfolge:
    0
    Ort:
    NRW
    Hi,

    soweit ich gelesen habe, wurde schon usbip für die FB umgesetzt (Server-Seitig).
    Mit den entsprechenden Client-Treibern soll dann wohl eine Verbindung zur FB unter Linux aufgebaut werden können.

    Leider fehlen mir momentan die Erfahrungswerte zum USB-Fernanschluss, würde aber sagen, dass die Signale auch hier einfach nur durchgereicht werden.

    usbip scheint ein guter Einstieg zu sein und könnte mit entsprechenden Änderungen an das AVM-Protokoll angepasst werden.
     
  3. prodigy7

    prodigy7 Mitglied

    Registriert seit:
    28 Mai 2005
    Beiträge:
    732
    Zustimmungen:
    1
    Punkte für Erfolge:
    16
    Wie genau hast du den damals das CAPI Zeug debugged um rauszubekommen, wie du die Kommunikation nachbauen musst?
     
  4. bodega

    bodega Aktives Mitglied

    Registriert seit:
    6 Juni 2006
    Beiträge:
    1,980
    Zustimmungen:
    1
    Punkte für Erfolge:
    0
    Ort:
    NRW
    Ich hatte mir den Netzwerkverkehr der capi2032.dll angeschaut und hab zunächst nur Initialisierungsbefehle verschickt, wie CAPI_REGISTER(), mit unterschiedlichen Parametern. Hab dann die einzelnen Aufrufe verglichen und die Funktionen nachgebildet.

    Bei den PUT/GET Messages war dann auch schnell klar, das die eigentlichen CAPI-Nachrichten (roh) verschickt werden. Der Aufbau des Headers war ähnlich, wie die der Initialisierungsroutinen. Der Wehavemorefun Artikel hat ebenfalls sehr geholfen, obwohl das Protokoll nur grob angeschnitten wurde. Die ganzen Fallstricke muss man selbst rausfinden und da hilft nur ein Netzwerk-Sniffer.

    Beim USB ist es wahrscheinlich noch eine Stufe schwieriger, da Teile des Codes auch im Kernel ausgeführt werden müssen. Etwas Hintergrundwissen, wie ein USB-Adapter funktioniert, wäre auch nicht ganz unwichtig (und da begebe ich mich ebenfalls auf Neuland).
     
  5. prodigy7

    prodigy7 Mitglied

    Registriert seit:
    28 Mai 2005
    Beiträge:
    732
    Zustimmungen:
    1
    Punkte für Erfolge:
    16
    Mühsam ernährt sich das Eichhörnchen ;-)

    Ich habe jetzt mal den ganzen Netzwerkverkehr detailiert gewälzt und für mich sieht es derzeit so aus, als ob die Kommunikation auf 2 Wegen funktioniert:

    Weg 1: Der Steuerkanal (Port 49000) - via uPNP wird alles möglich gesteuert. Es wird abgefragt, welche Geräte vorhanden sind, es wird initiiert, das Geräte "verbunden" bzw. "disconnected" werden. Scheinbar ist es so, das man prinzipiell erst mal Informationen ohne beschränkungen abfragen darf - wenn man dann aber Aktionen auslösen möchte, wird via Digest authentication, Benutzer fbox und dem Fritz!Box Kennwort, sofern vorhanden, eine Authentifizierung durchgeführt und dann darf man.

    Weg 2: Der AURA Port (Port 2066) - hierüber werden dann die ganzen (USB) Daten geschleusst, die dann irgendwie dazu führen, dass das System USB Devices vorgegauckelt bekommt. Im Endeffekt, wenn ein Device verbunden ist, sieht man via Sniffer im Datenfeld die ganzen Daten "vorbeihuschen", wie Sie zB auf einem USB-Stick abgelegt sind. So hab ich in den Paketen dann die Seriennummer meines Sticks wie auch zB den Bootsektor sehen können.

    Der WLAN Repeater wird scheinbar (so ganz sicher bin ich mir noch nicht) als USB Audio Device angemeldet. Wenn man im Endeffekt also irgendwie die USB Geschichte unter Linux zum laufen kriegt, könnte man wahrscheinlich den USB Audio Treiber aus dem Kernel verwenden und glücklich werden.

    In meinem jugendlichen Leichtsinn würde ich mal behaupten, das man die eigentliche Steuerung recht einfach implementieren könnte - nur wie man dann die USB-Geschichte für Linux verwertbar abbildet, da habe ich noch keine Idee.

    Edit: Mir ist übrigens aufgefallen, dass der USB Treiber wohl einen Bug haben muss - gibt man alle möglichen Devices an der FB frei, wird der Repeater nicht mehr als Audio Device angezeigt. War mir nur noch nicht ganz klar, ob die FB einen ungültiges Device Array zurückliefert oder ob die Software es nicht korrekt auswertet. Der Server liefert zumindest an ein paar Stellen einen Error zurück.
     
  6. prodigy7

    prodigy7 Mitglied

    Registriert seit:
    28 Mai 2005
    Beiträge:
    732
    Zustimmungen:
    1
    Punkte für Erfolge:
    16
    Für die, die es interessiert .... bin mal wieder etwas weitergekommen.

    Also das ganze läuft so ab, dass man via uPNP eine Anfrage rausschickt - daraufhin meldet sich die Box und zeigt, was sie alles anbietet. Wenn man sich dann das entsprechende "device" (in unserem Fall "urn:schemas-upnp-org:device:aura:1" rauspickt, kann man nachfragen, welche Services im Detail angeboten werden. Hierbei bekommt man dann eine Rückantwort und zwar den ServiceType "urn:schemas-any-com:service:aura:1". Zudem erhält man Informationen, wo man eine detailierte Servicebeschreibung erhält und wo man wie was "reinkippen" muss um Aktionen auszulösen bzw. Events gemeldet zu bekommen. Das wäre dann das hier:
    Code:
    SCPDURL = /aura-scpd.xml
    controlURL = /upnp/control/aura
    eventSubURL = /upnp/control/aura
    postURL = http://192.168.100.254:49000/upnp/control/aura
    Wenn man nun das angegebene XML-File herunterlädt und reinguckt, sieht man im prinzip die Beschreibung eines Webservices: Es werden Aufrufe definiert, was diese an Parameter erwarten bzw. was zurück geliefert wird. Sieht dann ins lesbare umgewandelt so aus:
    Code:
    name = GetVersion
    input =
    output = NewServerVersion, NewProtocolVersion,
    
    name = GetListInfo
    input =
    output = NewNumber
    
    name = GetDeviceByIndex
    input = NewIndex,
    output = NewDeviceHandle, NewName, NewHardwareId, NewSerialNumber, NewTopologyId, NewClass, NewManufacturer, NewStatus, NewClientIP,
    
    name = GetDeviceByHandle
    input = NewDeviceHandle,
    output = NewName, NewHardwareId, NewSerialNumber, NewTopologyId, NewClass, NewManufacturer, NewStatus, NewClientIP,
    
    name = ConnectDevice
    input = NewDeviceHandle
    output =
    
    name = DisconnectDevice
    input = NewDeviceHandle
    output =
    Anbei hänge ich mal mein Perl-Skript, mit dem ich rumgespielt und mit dem ich die Infos verwertbar rausgeholt habe. Im nächsten Schritt möchte ich nun schaun, inwieweit die Webservice-Beschreibungen vllt. direkt mit SOAP-Funktionen verwendet werden können und werde mal versuchen, der Box ein paar Befehle reinzukippen.
    Im Endeffekt erscheint es mir momentan recht einfach (eigentlich nur Fleißarbeit), einen Controldaemon zu schreiben, mit dem man veranlassen kann, das z.B. USB-Geräte "connected" werden.
    Was problematisch wird: Der Softwareteil, der dafür sorgt, dass der Binärdatenstrom irgendwie im System als USB-Controller abgebildet wird. Wenn hier jemand langeweile hat und sich mit sowas auskennt -> Ruhig melden ;-)
     

    Anhänge:

  7. prodigy7

    prodigy7 Mitglied

    Registriert seit:
    28 Mai 2005
    Beiträge:
    732
    Zustimmungen:
    1
    Punkte für Erfolge:
    16
  8. bodega

    bodega Aktives Mitglied

    Registriert seit:
    6 Juni 2006
    Beiträge:
    1,980
    Zustimmungen:
    1
    Punkte für Erfolge:
    0
    Ort:
    NRW
    Also neue Erkenntnis:

    Die USB-Daten über den AURA-Port (2066) bestehen aus 9 Zeichen Head + X Zeichen USB-Daten (in Rohform).

    Die ersten beiden Bytes sind die Länge der zu empfangenen, bzw. zu sendenen Nachricht. Dann folgen 2 Bytes, die nicht näher bekannt sind (wahrscheinlich CONTROL_TRANSFER, BULK_TRANSFER oder ein SETUP PACKET in Kurzform??).

    Danach folgen 4 Bytes für die Device ID und noch ein weiters, ebenfalls unbekanntes Byte.

    Da kein Probe möglich ist (man bekommt kein Event vom Betriebssystem, sondern verbindet sich über TCP), sind die ersten Nachrichten vom Aura Port mit der DEVICE ID 0xffff (65535) versehen. Nach ein paar Nachrichten ändert sich diese zu Device ID X und es erfolgt ein fast ähnlicher Datenaustausch.
     
  9. prodigy7

    prodigy7 Mitglied

    Registriert seit:
    28 Mai 2005
    Beiträge:
    732
    Zustimmungen:
    1
    Punkte für Erfolge:
    16
    Eventuell habe ich noch einen brauchbaren Ansatzpunkt gefunden: http://www.usb-server.com/downloads.html

    Müsste man mal schaun, wie dort der Datenverkehr abgewickelt wird - ob ggf. das Ändern des Ports reichen würde, um einen großteil des Zeugs zu "recyclen" für unsere Zwecke.
     
  10. Malphas

    Malphas Neuer User

    Registriert seit:
    22 Sep. 2006
    Beiträge:
    15
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Hallo prodigy7,

    bist Du schon weitergekommen ? Habe mir den Repeater gekauft. Das mit der Audioausgabe gefällt mir. Da ich aber hauptsächlich Ubuntu nutze wäre es schön wenn es hierfür eine Lösung geben würde. Im Netz habe ich bis jetzt auch nichts finden können.

    Gruß
    Mario
     
  11. prodigy7

    prodigy7 Mitglied

    Registriert seit:
    28 Mai 2005
    Beiträge:
    732
    Zustimmungen:
    1
    Punkte für Erfolge:
    16
    Nein, mir fehlt die Zeit momentan.
     
  12. Saslo

    Saslo Neuer User

    Registriert seit:
    4 Mai 2010
    Beiträge:
    3
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Hi prodigy7,
    hattest du in den letzten 9 Monaten mal etwas Zeit?
    Das Projekt ist wirklich sehr interessant!
     
  13. prodigy7

    prodigy7 Mitglied

    Registriert seit:
    28 Mai 2005
    Beiträge:
    732
    Zustimmungen:
    1
    Punkte für Erfolge:
    16
    Hallo Saslo,

    meine "Untersuchungsergebnisse" findest du in FritzBoxNET wieder. Kam nicht wirklich mehr in letzter Zeit dazu, etwas zu machen und tendenziell habe ich auch zukünftig nicht so wirklich viel Zeit dafür.