Ankündigung

Einklappen
Keine Ankündigung bisher.

SmartVisu verliert Verbindung bei "neuem" IPad

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    SmartVisu verliert Verbindung bei "neuem" IPad

    Hallo, ich hab bei mir im Flur das Visudisplay IPad Air gegen ein IPad Air 2 ausgetauscht.
    Der Austausch erfolgte eigentlich nur, da das IPad Air nun schon ein wenig in die Jahre gekommen wahr und doch schon recht langsam ist.

    Also „neues“ IPad in die Wand und jetzt läuft es mit der Geschwindigkeit deutlich besser.
    Jetzt gibt es aber das Problem, das die Visu anscheinend nach einer unbestimmten Zeit die Verbindung zum Server verliert und nicht selbstständig wieder aufbaut.
    Ich muss dann immer auf das Visusymbol oben rechts drücken zum Aktualisieren.

    Gibt es irgendeine Einstellung auf einem IPad was dafür verantwortlich sein kann?

    Hat sich evtl. schon mal jemand damit rumgeschlagen und eine Lösung dazu gefunden?

    Grüße, Marc

    #2
    Moin Marc,

    das ist vielleicht eine blöde Frage, aber ich stelle sie trotzdem: hast Du in der Konfiguration die "Reconnect"-Option eingeschaltet?

    Im Großen und Ganzen funktioniert der Reconnect bei meinen iPADs (iPAD 2 und iPAD Air 4) zuverlässig. Ich muss nur sehr selten einen Reload machen.

    Oft erscheint die eingestellte Reconnect-Zeit von 5 Sekunden zu lang. Seit v3.4.0 kannst Du die Reconnect-Zeit verkürzen, indem Du in der config.ini z.B.
    Code:
    reconnect_time = 2000
    für 2000 ms angibst. Ein Patch für v3.3.1 ist hier vorgestellt.

    In welcher Größenordnung bewegt sich ungefähr die "unbestimmte Zeit", nach der die Verbindung abbricht?

    Gruß
    Wolfram
    Zuletzt geändert von wvhn; 08.08.2024, 17:09.

    Kommentar


      #3
      Hallo Wolfram,
      die reconnect Option ist eingeschaltet.
      Das mit der Reconnect Time habe ich schon getestet ohne wirklichen Erfolg.
      Wann die Verbindung abbricht, kann ich schlecht sagen. Auf jeden Fall eine größere Zeitspanne. Ich würde jetzt mal sagen zwischen 2 und 8 Stunden.
      Und auch nicht immer die gleiche Zeit.
      Ich schalte das Display mit einem Elektromagneten aus und wieder ein. Ich denke, dass das IPad irgendwann die Verbindung kappt und es danach keinen reconnect mehr gibt.
      Das muss irgendwie aus Safari oder irgendwelchen Energieoptionen kommen, die in dem neuen IPad anders sind, denke ich..

      Tausche ich das IPad wieder gegen das alte aus, funktioniert der Reconnect wieder wie gewünscht.

      Grüße, Marc

      Kommentar


        #4
        Moin Marc schuma,

        Da shNG ein Ping-Kommando besitzt, habe ich mal gebastelt:
        der Treiber merkt sich jetzt den Zeitpunkt der letzten Antwort auf dem Websocket und hat eine ping-Funktion bekommen. Der Reconnect-Mechanismus ruft diese Funktion jetzt zusätzlich auf, sobald die letzte Antwort älter als 10 Minuten ist. Kommt keine Antwort, wird der Websocket neu initialisiert.
        Da ich zur Zeit kein funktionierendes shNG-System zum Testen habe, konnte ich dies nur auf dem Trockenen testen.

        Die angehängte Datei ersetzt die ./drivers/io_smarthomeng.js. Leider ist die ./lib/base/base.js zu groß, um sie hier anzuhängen. Anstelle der Zeilen 112 und 113 muss man folgendes einsetzen:
        Code:
                var autoReconnectIntervalId = window.setInterval(function () {
                    if (new Date() - io.socketStateTimestamp > 600000 && io.socketState != 'pinging')
                        io.ping();
                     if((io.socket != null && io.socket.readyState == 3) || io.socketState == 'offline') {​
        Es wäre klasse, wenn Du das mal testen könntest.

        Gruß
        Wolfram

        EDIT: Treiber gelöscht. Aktuelle Version weiter unten im Thread
        Zuletzt geändert von wvhn; 20.08.2024, 10:37.

        Kommentar


          #5
          Hallo Wolfram, vielen Dank für den Einsatz!
          Ich teste das morgen gleich aus...

          Grüße, Marc

          Kommentar


            #6
            Ok, habe ich jetzt doch noch schnell gemacht…
            mit den Änderungen hat die Visu keine Verbindung mehr. Es werden keine Daten mehr angezeigt. Nur noch Bindestriche.

            Grüße, Marc

            Kommentar


              #7
              Schade. Gibt es Fehlermeldungen in der Konsole, wenn Du die Visu auf dem PC laufen lässt?

              Gruß
              Wolfram

              Kommentar


                #8
                Sorry, ich hatte mal wieder nicht dran gedacht, dass meine aktuelle Version der develop branch ist. Du bist vermutlich mit dem Master v3.4.0 unterwegs. Die Versionen sind nicht kompatibel. Hab Dir also die Änderungen nochmal in den aktuellen Master-Stand eingearbeitet. Der Treiber ist anbei. Die Änderungen in der base.js passen.

                Gruß
                Wolfram

                EDIT: Treiber gelöscht. Aktuelle Version weiter unten im Thread
                Zuletzt geändert von wvhn; 20.08.2024, 10:38.

                Kommentar


                  #9
                  Guten Morgen Wolfram, jetzt läuft der Test.
                  Vielen Dank noch einmal.
                  Wenn ich heute Nachmittag nach Hause komme kann ich bestimmt schon was sagen…

                  Kommentar


                    #10
                    Hallo Wolfram, ich habe mir Deine Änderungen gerade mal angeschaut. Ich habe mich auch gerade daran gemacht einen websocket Server für einen esp32 zu bauen.
                    Und da sind mir ein paar parallelen aufgefallen....

                    Könnte man nicht einfach in "onerror" das so (settimeout) ergänzen?

                    Code:
                    io.socket.onerror = function (error) {
                                if(io.socketErrorNotification == null || !notify.exists(io.socketErrorNotification)) {
                                    var msgText = sv_lang.status_event_format.error.shngdriver_error + ' ' + error.data + '.';
                                    if (io.address != sv.config.driver.address) {
                                        msgText += sv_lang.status_event_format.error.shngdriver_hint;
                                    }
                                    io.socketErrorNotification = notify.message('error', 'Driver: smarthomeng', msgText);
                                }
                               setTimeout(function(){
                                    io.open();
                               }, 2000);
                            };​
                    So mache ich das in meinem esp32...

                    Grüße, Marc

                    Kommentar


                      #11
                      Moin Marc,

                      Einen Versuch ist das natürlich wert. Das Problem ist aber m.E., dass Dein iPad bereits im Tiefschlaf ist, wenn die Gegenstelle den Websocket schließt. Deshalb bekommt es den Fehler nicht mit. Sonst müsste ja das rote Dreieck oben rechts erscheinen. Beim Aufwachen ist io.socket noch existent und io.socket.readyState ist 1 anstelle von 3 („closing“). Deshalb spricht der Reconnect nicht an. Die neue Ping-Funktion soll diese Lücke schließen.

                      Über die iOS/iPad OS Versionen hat sich das Verhalten immer mal wieder geändert. Mit der aktuellen Version klappt der Reconnect immer, selbst wenn das iPad außer Haus war und die Visu-Seite noch offen ist.

                      Vielleicht für Deine Implementierung auch interessant:
                      Bis einschließlich v3.2.1 startete der Reconnect immer, sobald der Browser aktiviert wurde. Das führte zu vielen abgebrochenen Verbindungen und damit zu einer hohen Wahrscheinlichkeit für verlorene Error-Events. Seitdem der Reconnect nur noch durchgeführt wird, wenn gerade eine Visu-Seite angezeigt wird, hat sich die Zuverlässigkeit deutlich erhöht. Die Reconnect-Funktion ist Treiber-unabhängig in der base.js realisiert.

                      Gruß
                      Wolfram

                      Kommentar


                        #12
                        Kurzer Zwischenbericht….
                        ich hatte gestern noch ein, zwei Abbrüche. Seit gestern Abend bis heute Morgen aber alles gut. Mal gucken wie es heute Nachmittag aussieht…

                        Kommentar


                          #13
                          Moin Marc,

                          ich konnte nie herausfinden, wie schnell und unter welchen Bedingungen das iPad die Verbindung verlor. Die Zeiten schienen mir sehr unterschiedlich zu sein und man hat halt leider keine Debug-Möglichkeit auf dem Gerät, wenn es sich schlafen legt. Vorausgesetzt, der Ping-Mechanismus funktioniert, dann können Abbrüche zustande kommen, wenn das iPad vor Ablauf der 10 Minuten nach dem letzten erfolgreichen item update bereits die Verbindung verloren hat und aufgeweckt wird. Um das zu verifizieren würde es helfen, bei einem solchen Abbruch die 10 Minuten einfach mal abzuwarten und zu sehen, ob dann ein Verbindungsaufbau erfolgt.

                          Die Zeit kann man natürlich auch weiter herunter setzen.

                          Falls der Elektromagnet, mit dem Du das iPad ausschaltest, an ein shNG-item angebunden ist, kann man dessen update auch einfach dazu nutzen, io.socketStateTimestamp = 0 zu setzen, z.B. mit einem Script in basic.print.

                          Gruß
                          Wolfram
                          Zuletzt geändert von wvhn; 15.08.2024, 11:52.

                          Kommentar


                            #14
                            Moin Marc,

                            Du könntest zum Test mal folgenden Code in die visu.js im Ordner Deiner Seiten aufnehmen:
                            Code:
                            $(document).on('visibilitychange', function(event,ui) {
                                if(document.visibilityState == 'hidden')
                                    notify.message('warning', 'Visibility', 'Screen switched to hidden');
                                if(document.visibilityState == 'visible')
                                    notify.message('info', 'Visibility', 'Screen switched to visible');
                            });
                            und dann mal verfolgen, welche Events beim Aus- und wieder Anschalten zuverlässig ausgelöst werden. Ein gelbes Dreieck oben rechts zeigt den Übergang der Visu von "sichtbar" nach "versteckt" an. Ein grünes Dreieck den Wechsel zurück. Normalerweise müssten immer beide Meldungen erscheinen. Wenn das mit dem iPad sicher funktioniert, können wir einen der Wechsel dazu nutzen, entweder den Zeitstempel für das letze item update auf 0 zu setzen, um beim nächsten Reconnect ein ping zu erzwingen, oder direkt ein ping auzulösen.

                            Gruß
                            Wolfram

                            Kommentar


                              #15
                              Hallo Wolfram, das mache ich gleich heute Abend.

                              Gestern Nachmittag, als ich nach Hause kam (16:00), war die Verbindung wieder unterbrochen. Ich hab das dann noch bis abends (22:00) so stehen lassen. Es gab aber keinen Reconnect. Dann aktualisiert und bis heute Morgen wieder alles gut.
                              Ich wollte heute noch mal die Zeit runtersetzen auf 5 Minuten. Aber erstmal schauen wie es aussieht, wenn ich nach Hause komme.

                              Der Magnet ist einem Item zugeordnet. Das mit dem Script in Basic.print habe ich aber nicht verstanden. Wo müsste das Basic.print dann stehen? Index.html?

                              Grüße, Marc

                              Kommentar

                              Lädt...
                              X