Autor Thema: Reconnect und fehlende Aktualisierung  (Gelesen 1288 mal)

Offline Thorsten Pferdekaemper

  • Developer
  • Hero Member
  • ****
  • Beiträge: 6018
  • Finger weg von der fhem.cfg
Reconnect und fehlende Aktualisierung
« 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
RasPi
Heizkessel-Steuerung per Arduino und HTTPMOD
und einen Haufen Homematic (Wired)

Offline Thorsten Pferdekaemper

  • Developer
  • Hero Member
  • ****
  • Beiträge: 6018
  • Finger weg von der fhem.cfg
Antw:Reconnect und fehlende Aktualisierung
« Antwort #1 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
RasPi
Heizkessel-Steuerung per Arduino und HTTPMOD
und einen Haufen Homematic (Wired)

Offline ToM_ToM

  • Sr. Member
  • ****
  • Beiträge: 966
    • ThomasZFoto
Antw:Reconnect und fehlende Aktualisierung
« Antwort #2 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

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
Hardware: BananaPi, Busmaster CUL, SanDisk 16GB Ultra SD, 16 GB USB-Stick | Software: Armbian, FHEM 5.8

Online PatrickR

  • Developer
  • Sr. Member
  • ****
  • Beiträge: 774
Antw:Reconnect und fehlende Aktualisierung
« Antwort #3 am: 05 September 2019, 21:47:25 »
Hi!

Ich hatte das beschriebene Problem auf meinem iPhone.

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
« Letzte Änderung: 05 September 2019, 21:50:57 von PatrickR »
lepresenced - Tracking von Bluetooth-LE-Tags (Gigaset G-Tag) mittels PRESENCE

"Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning." - Rich Cook

Offline Thorsten Pferdekaemper

  • Developer
  • Hero Member
  • ****
  • Beiträge: 6018
  • Finger weg von der fhem.cfg
Antw:Reconnect und fehlende Aktualisierung
« Antwort #4 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
RasPi
Heizkessel-Steuerung per Arduino und HTTPMOD
und einen Haufen Homematic (Wired)

 

decade-submarginal