FHEM Forum

FHEM => Frontends => TabletUI => Thema gestartet von: Thorsten Pferdekaemper am 08 August 2019, 16:46:57

Titel: Reconnect und fehlende Aktualisierung
Beitrag von: Thorsten Pferdekaemper am 08 August 2019, 16:46:57
Hi,
ich (und andere, siehe hier https://forum.fhem.de/index.php/topic,97258.0.html und hier https://forum.fhem.de/index.php/topic,102567.0.html) habe immer noch Problemchen mit der korrekten Aktualisierung nach einiger "Wartezeit". Die Probleme treten insbesondere (oder nur?) auf dem Handy (und Tablet?) auf, nachdem sich das Gerät für einige Zeit (also mindestens ein paar Minuten) abgeschaltet hat. Dann muss man die Seite aktualisieren, um einen aktuellen Gerätestatus zu bekommen.
Nach ein paar Stunden Quälerei habe ich jetzt folgendes herausgefunden:
Irgendwann, während das Handy "schläft", bekomme ich vom Websocket ein "onclose" mit Code 1006, also "The connection was closed abnormally, e.g., without sending or receiving a Close control frame". Die Implementierung des "onclose" hat jedoch folgendes:

                if (event.target.url === ftui.poll.long.URL) {
                    ftui.restartLongPoll(reason);
                }

Dummerweise ist in event.target.url die URI "encodiert", aber nicht in ftui.poll.long.URL. Daher wird das restartLongPoll erstmal nicht aufgerufen. Z.B. haben bei mir die URLs folgenden Inhalt:

ftui.poll.long.URL:

ws://127.0.0.1:8083/fhem/?XHR=1&inform=type=status;filter=KitchenHeating,fan2,HM_21F923,HM_5593B0,lamp1,noActivity,KitchenShutter,somethingOpen,somethingClosed,test2,roomTest2,LightNO,LightSO,bytes,HM_21F923,HM_21F923,HM_21F923,HM_21F923,FileLog_HM_21F923,wetter,serverTime,ui,ui2,uilocal,onlyActivity,system,roomTest1,fancontrol,HM_21F923_Clima,fan1,hminfo,hmlan,tmpl,WetterGraphisch,Luftungnachlauf, desired-temp measured-temp STATE batteryPercent batteryLevel battery level lastConnection serverTime Activity ValvePosition controlMode state;since=1565271974782;fmt=JSON×tamp=1565271974800


event.target.url:

ws://127.0.0.1:8083/fhem/?XHR=1&inform=type=status;filter=KitchenHeating,fan2,HM_21F923,HM_5593B0,lamp1,noActivity,KitchenShutter,somethingOpen,somethingClosed,test2,roomTest2,LightNO,LightSO,bytes,HM_21F923,HM_21F923,HM_21F923,HM_21F923,FileLog_HM_21F923,wetter,serverTime,ui,ui2,uilocal,onlyActivity,system,roomTest1,fancontrol,HM_21F923_Clima,fan1,hminfo,hmlan,tmpl,WetterGraphisch,Luftungnachlauf,%20desired-temp%20measured-temp%20STATE%20batteryPercent%20batteryLevel%20battery%20level%20lastConnection%20serverTime%20Activity%20ValvePosition%20controlMode%20state;since=1565271974782;fmt=JSON×tamp=1565271974800


Daher wird der Restart nicht sofort gemacht, sondern erst, wenn das nächste Mal im healthCheck festgestellt wird, dass das letzte FHEM-Event schon "ewig" her ist. (...und das dauert dann bis zu einer Minute, wobei dieser Mechanismus anscheinend auch nicht immer so perfekt funktioniert. Ich habe aber noch nicht herausgefunden, was es da noch für ein Problem gibt.)

Ich habe bei mir das jetzt erst einmal so gelöst:

                if (event.target.url === encodeURI(ftui.poll.long.URL)) {
                    ftui.restartLongPoll(reason);
                }

Bisher hat jetzt die Aktualisierung nach einem "Aufwecken" des Telefons immer geklappt, aber ich habe noch nicht über eine ganze Nacht etc. getestet. Bei vorübergehendem Netzwerkverlust bzw. FHEM-Absturz funktioniert es auch.
(Bei onerror habe ich es bisher nicht geändert, da ich diesen Fall noch nicht hatte.)

Allerdings frage ich mich, warum man die Abfrage auf die URL überhaupt braucht. Wenn die Verbindung zu geht, dann ist ja eigentlich die URL auch egal. ...aber vermutlich gab es da mal einen Grund. Vielleicht wird damit eine ungewollte Rekursion verhindert, da das onclose wahrscheinlich auch durch das "close" in stopLongpoll ausgelöst wird. Vielleicht wäre da aber ein anderer Mechanismus schöner.

Gruß,
   Thorsten
Titel: Antw:Reconnect und fehlende Aktualisierung
Beitrag von: Thorsten Pferdekaemper am 14 August 2019, 13:40:07
Hi,
ich habe in FUIP jetzt auf den "alten" Longpoll-Mechanismus (longpoll_type = ajax) umgestellt und damit funktioniert es anscheinend besser. Falls jemand die Websocket-Version repariert, dann wäre es nett, hier mal Bescheid zu geben. Dann würde ich wieder auf Websocket umstellen.
Gruß,
   Thorsten
Titel: Antw:Reconnect und fehlende Aktualisierung
Beitrag von: ToM_ToM am 18 August 2019, 19:10:35
Hi Thorsten,

ich habe mir wegen der WebSocket-Abbrüche auch ein kleines Script gebaut. Schau mal hier:
https://forum.fhem.de/index.php/topic,48862.msg959727.html#msg959727 (https://forum.fhem.de/index.php/topic,48862.msg959727.html#msg959727)

Das funktioniert bei mir durchgängig. Auch wenn ich zwischendrin die FHEM-Hardware reboote, nimmt mein FTUI die Verbindung nach dem Neustart wieder auf.

VG, Thomas
Titel: Antw:Reconnect und fehlende Aktualisierung
Beitrag von: PatrickR am 05 September 2019, 21:47:25
Hi!

Ich hatte das beschriebene Problem auf meinem iPhone.

Zitat von: Thorsten Pferdekaemper am 08 August 2019, 16:46:57
Ich habe bei mir das jetzt erst einmal so gelöst:

                if (event.target.url === encodeURI(ftui.poll.long.URL)) {
                    ftui.restartLongPoll(reason);
                }


Der Fix hat bei mir tatsächlich das Problem behoben. Allerdings bekam ich immer(!) einen "Disconnected from FHEM" beim Wechseln von Unterseiten über Pagebuttons. Wenn nocache nicht gesetzt war, traten die Disconnects nur sporadisch auf.

Patrick
Titel: Antw:Reconnect und fehlende Aktualisierung
Beitrag von: Thorsten Pferdekaemper am 04 November 2019, 22:59:57
Hi,
falls hier jemand mit liest, der FUIP verwendet (oder es verwenden will): Ich glaube, dass ich diese Probleme dort gelöst habe. ...und wenn nicht, dann gibt es jetzt eine bessere Analysemöglichkeit.
Gruß,
   Thorsten