-
Notifications
You must be signed in to change notification settings - Fork 4
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
Workaround to keep Fritzbox Callmonitor alive for a longer time #3
Comments
Fuer die Nachwelt dokumentiert, IN KURZ: ein (TCP) Socket kann als TCP-keep-alive konfiguriert werden, von Haus aus ist er das aber NIE und laeuft nach ca. 2 Stunden ins Leere (Default-Wert fuer einige Systeme sind 7200 Sekunden +x). Ich habe versucht eine kleine Abhandlung (in engl.) hier zu schreiben, mit Loesungen fuer Java, PHP und Python: https://github.com/bufemc/a1-fritzbox#fritzboxs-call-monitor-socket-at-port-1012-and-tcp-keep-alive Die Loesung fuer PHP muesste also sein: Zusaetzlich koennte man natuerlich noch schauen ob der Socket nicht doch geclosed wurde, und falls, dann neu aufbauen. |
…now refreshed regularly, extended logging, integrative testing with option -t, edited README.md
fixed with v2.2 |
UPDATE: Dies war eine fruehe Loesung, die m.E. "Bessere" findet sich erst im naechsten Kommentar.
Beim bisherigen Ansatz den $fbSocket vorher einmalig aufzusetzen, und dann in der Loop nur noch mittels fgets($fbSocket); davon zu lesen gibt es - wie schon per email berichtet - das Problem, dass nach einiger Zeit (zB nach 2 Stunden), scheinbar selbst dann wenn Anrufe eingehen, "irgendwie" nicht mehr gesendet wird, was zu parsen waere, statt dessen geraet er immer in den else-Zweig.
Nach Lesen einiger Kommentare im Netz, die ebenso das Problem hatten dass sie nach einiger Zeit nichts mehr vom CallMonitor lesen konnten, und daher einfach die Verbindung neu aufsetzten, habe ich auf Verdacht das Gleiche adaptiert, grob:
Und das scheint dem abzuhelfen. Natuerlich kann man sich streiten wie oft man sich neu verbindet, hier ist es irgendwas ueber jede 80 Sekunden, wenn man das sleep oder timeout bedenkt. Ich stelle das einfach mal als proof of concept ein, ohne PR - koennte aber gerne auch einen solchen erstellen ;-) Man muesste halt wissen/eruieren nach welcher ungefaehren Zeit dieses Problem auftritt. BTW, hatte ich auch Deinen bisherigen Ansatz (Socket nur einmal aufsetzen) versucht mit dem extra Flag STREAM_CLIENT_PERSISTENT, aber das half leider nicht.
PS: die andere Issue dass neue Eintraege nicht ins Telefonbuch eingefuegt werden koennen ("manchmal"), habe ich eine extra Issue erstellt.
Quellen:
https://forum.fhem.de/index.php?topic=41195.0
https://forum.fhem.de/index.php?topic=86590.0
https://community.home-assistant.io/t/fritzbox-callmonitor-loosing-connection/57789/3
The text was updated successfully, but these errors were encountered: