-
Notifications
You must be signed in to change notification settings - Fork 12
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Keine Kommunikation mehr mit Fritzbox nach Wechsel von raspberry pi 4 zu Docker #377
Comments
Der Adapter kommuniziert direkt mit der IP der FB, die im config angegeben wurde. Hab da keine Erfahrung mit Docker unter Win11, aber wenn die Dockerinstallation keine eigene IP im Heimnetz hat, sondern eine interne, dann könnte das ggf. etwas sein, wonach man suchen kann. Unabhängig davon, könnte ich noch irgendwie den Fall abfangen, damit der Adapter nicht abstürzt. Das ändert aber nichts an der Tatsache, daß die Kommunikation nicht läuft. |
Ich habe einmal Wireshark angeschmissen und das ganze aufgezeichnet. HTTP-Request:
HTTP-Response:
Hilft das weiter? |
so weit runter in den Netzwerkverkehr hab ich mich noch nicht bewegt. Folgendes wäre ne Idee:
Bin gespannt was im FB-log steht |
Ich hab noch einiges getestet gestern Nacht. Im Logfile von der FB finde ich gar nichts, liegt auch daran, dass mit dem ersten Aufruf nach meinem Verständnis nach noch keine Credentials ausgetauscht werden. Mit dem Aufruf (vom Browser) sieht man dass hier nur der letzte Login zurück kommt und man eine Session-ID bekommt. Die anderen Vorschläge hatte/habe ich alle getestet. Ich habe nun aber einmal den Verkehr auf dem RasPi mitgeschnitten und verglichen. HTTP-Request vom RasPi:
mit der HTTP-Response an den RasPi:
Der einzige Unterschied beim Request ist hier, dass aus dem Docker heraus der User-Agent: Go-http-client/1.1 geschickt wird und beim RasPi nicht. Ich will nicht ausschließen dass dieser User-Agent von der Fritzbox blockiert wird? Weiß hier jemand mehr? Und kann man den User-Agent in der benützen Lib irgendwie ändern? Nachtrag:Ich habe einmal nach den User-Agent gesucht und der wird wohl von Google für deren Robots verwendet. Aus meiner Sicht macht es seitens FB schon Sinn den zu blocken wenn die FB aus dem Internet erreichbar ist. Ob nun aber auch auf dem internen Interface Sinn macht lass ich mal so stehen, aber ein paar Suchen haben ergeben dass dieser spezielle User-Agent wohl öfters Probleme macht. Ich werde heute Abend noch ein paar mehr Tests machen wenn ich wieder zu Hause bin. Ich versuche dann herausfinden wie ich das zum Testen ggf. patchen kann. |
mal eine kurze Zwischenmeldung, ich verwende in der library den nativen http aus nodej, also nichts außergewöhnliches |
meinst du node.js? Also auf dem RasPi habe ich es geschafft in irgendeiner Datei (hab nur nach LOGIN_SID_ROUTE gesucht) das wie folgt zu ändern:
Danach wurde der user-agent im Request angepasst. Ich kämpfe aktuell damit im Docker die Datei ebenso zu patchen, da aber dort kein vi und keingarnichts installiert ist, gestalltet sich das Ganze sehr schwierig... |
ja, nodejs was du auch noch probieren könntest ist ein connection test in der library dort gibt es ein fritz.py und fritz.js beides kann man mit den parametern http://IP user pw aufrufen, um die Verbindung zu testen |
Sollte im fritzdect-aha-nodejs/lib/fritz_ahaapi.js gewesen sein |
Okay. Ich habe das mit dem Patchen des User-Agents im Docker geschafft und musste feststellen, dass das nicht das Problem ist. RasPi: Docker: Bei dem Docker hat das "http://192.168.1.1" überhaupt nichts zu suchen. Und ich habe keine Ahnung woher das kommt. Zur Info: |
yepp, das sieht komisch aus. |
hab grad gesehen, das aber keine Auswirkung auf den vollen Aufruf hat, man hätte vermiten können, daß hier 2mal die IP auftaucht, wenn es Teil des Pfades wäre.
Full request ist in beiden Fällen gleich, löst da wireshark anders auf? Ich bin eher wieder an der 503-Forbidden Antwort die die FB loslässt, gibt es parallel zur Dockerinstanz noch andere Instanzen oder Adapter oder Apps die gleichzeitig mit der FB kommunizieren? Wundert mich, daß hier nicht die FB etwas mitloggt. |
Ich habe zum Testen eben einen eigenen Java-HTTP-Client gebaut und konnte das Problem nun final eingrenzen:
HTTP/1.1 503 Service Unavailable\r\n lasse ich den http-Kladderadatsch weg und schicke nur /login_sid.lua?version=2 HTTP/1.1\r\n, kommt die richtige Antwort. Wie finde ich heraus welche nodejs lib Datei für den HTTP-Request in dem Docker verwendet wird? |
was meinst du? also der Aufruf an die FB ist http://192.168.1.1/login_sid.lua?version=2, dies verpackt das http-Paket in die Telegrammstruktur. http://192.168.1.1/http://192.168.1.1/login_sid.lua?version=2 wäre da falsch, weil die IP nochmal Teil des Pfades ist. |
Was ich gemacht habe ist ein Lowlevel Client der den HTTP-Request als puren Header-String zur FB schickt. Mehr macht ein HTTP-Client ja nicht, er bastelt ja primär auch nur den Header zusammen ;-)
Wenn ich das so mache bekomme ich eben die identische 503-Fehlermeldung wie aktuell bei dir.
Meine Frage nach der nodejs-lib bezog sich auf die Frage wo normalerweise die lib liegt. Ich habe einmal nach der Datei node.js, http.js und request.js gesucht und einen ganzen Zoo von Dateien gefunden in den unterschiedlichsten Ordnern. Ich versuche die Lib zu finden und mir dort die Stelle rauszusuchen wo das Ganze zusammengebaut und an den Server verschickt wird. Du machst ja in deinem Code nichts anderes als dass du die ganzen Infos für den Header an den request übergibst und der baut dass dann im Hintergrund für dich irgendwie zusammen und schickt es ab. Und diese Stelle versuche ich zu analysieren. Da ich keinen Debugger habe hilft nur code-reading :-) PS: Ich bin mal mit der fritzdect Version wieder auf 2.2.6 gegangen welche die letztgültige im iobroker repository ist und auf dem gleichen Stand zu sein wie der RasPi. |
also im code mach eine request auf die native http Bibliothek. |
So langsam habe ich das Gefühl, dass der Docker ausgehende HTTP-Pakete manipuliert! Ich habe ein JS gemacht welches exakt den gleichen Inhalt wie mein Java Programm gestern an die FB verschickt, nämlich HTTP-Rohdaten . Das Script:
Kannst du das Script mal aus deinem iobroker heraus starten und gucken ob du die erwartete Antwort bekommst oder auch das hier: |
hab den JS Adapter in iobroker installiert und deinen code laufen lassen
Edit: Vergaß zu erwähnen, daß das die erwartete Antwort ist, unabhängig das es schon Status 200 ist. |
Vielen Dank, sieht aus wie gewollt. |
Hallo zusammen, ich hatte bis eben das gleiche Problem. Iobroker läuft unter Windows (Docker Desktop + WSL, jeweils aktuelle Version). Auf einem anderen PC mit gleicher Konfiguration hatte ich das Problem nicht. Ich kann mir nicht erklären warum, aber damit läuft es. |
Ich hab das Thema mal ins Docker-Forum getragen, wenn ich dort eine Lösung finde lass ich es euch hier wissen. |
Danke |
Hallo,
ich habe den Fritz Dect Adapter 2.2.6 auf einen raspberry pi 4 erfolgreich installiert und mit der Fritzbox verbunden.
Da die RPi zu schwach wurde habe ich die komplette Installation in ein Docker Contrainer unter Windows 11 umgezogen.
Seit dem läuft der Fritz Dect Adapter nicht mehr. Zu Testzwecken habe ich den Raspi gestartet und dort klappt alles sofort. Ich kann also ausschließen, dass die Credentials falsch sind, bzw dass der Benutzer unzureichend in der Fritzbox eingerichtet ist.
Infos:
Fritzbox 6591 mit FritzOS 07.29
Auf dem RasPi erfolgreich mit 2.2.6 installiert und Geräte abgerufen
Extra Benutzer (der auf dem RasPi immer noch läuft)
Docker läuft unter Windows 11 (alle anderen Adapter laufen ohne Probleme)
Adapter Versionen 2.2.0, 2.2.6 und 2.3.0 in dem Docker getestet.
Alle Firewalls sind aus
Wenn ich in den Instance-Einstellungen das ganze von http auf https stelle, hört er nach "fritzdect user USER: iobroker" wieder auf.
Gibt es noch Tips was ich machen könnte? Benutzt der Adapter irgendwelche IP-Multicasts, Broadcasts oder sonst eine Unicast Kommunikation die von der Fritzbox initieriert wird? (mir gehen echt die Ideen aus)
Ein Screenshot der Logfiles im Anhang.
The text was updated successfully, but these errors were encountered: