Ankündigung

Einklappen
Keine Ankündigung bisher.

io_fhem.js und php8 gibt Fehler aus!

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

    io_fhem.js und php8 gibt Fehler aus!

    Hallo,

    bei dem Update auf V3.2 bei meinem System mit php8 bekomme ich folgende Fehlermeldung:
    Code:
    Uncaught DOMException: Failed to construct 'WebSocket': The URL 'ws://undefined:undefined/ws/' is invalid.
    at Object.open (http://mycloud/smartVISU/driver/io_fhem.js:294:19)
    at Object.init (http://mycloud/smartVISU/driver/io_fhem.js:97:8)
    at http://mycloud/smartVISU/index.php:89:5
    Es werden dann auch keine Werte mehr angezeigt!

    Auf dem Testsystem mit php7.3 funktioniert es Problemlos.

    Gruß

    Johann

    #2
    Hallo Johann,

    In den Treibern werden die Adresse und die Ports nicht mehr als Parameter aus der index.html übergeben, sondern in der ./lib/base/base.php in die Javascript-Variablen sv.config.driver.address und sv.config.driver.port geschrieben. Wenn Du diese in der Browser-Konsole aufrufst, müsstest Du auf Deinem PHP7.3-System die in der Konfiguration eingestellten Werte sehen, während auf Deinem PHP8-System für beide Variablen "undefined" ausgegeben werden müsste. Ist das so?

    Ich teste hier mit PHP7.3 und PHP8, ohne dass dieses Problem aufgetreten wäre. Vielleicht verschluckt sich Deine PHP-Version an dem "\r\n" in Zeile 213. Alternativ kannst Du auch PHP_EOL nutzen. Dann lautet die Zeile:
    Code:
    echo substr($key, 7) . ": '$value',".PHP_EOL;
    Das habe ich auf die Schnelle mit PHP8.0.3 getestet.

    Gruß
    Wolfram

    Kommentar


      #3
      Hallo Wolfram,

      jup, auf php7.3
      Code:
      [io.fhem]: init (address=blabla port=blabla)
      auf php8.0.14
      Code:
      'WebSocket': The URL 'ws://undefined:undefined/ws/' is invalid.
      Die Änderung in der ./lib/base/base.php hat nicht funktioniert.
      Ich habe dann versucht die Werte in der Konfiguration falsch einzugeben und danach wieder die richtigen Werte, hat auch nichts gebracht!
      Auch mit "\r\n" das gleiche Ergebnis!

      Gruß
      Johann

      Kommentar


        #4
        Dann lass mal in der ./lib/base/base.php das PHP_EOL auch weg, also
        Code:
        echo substr($key, 7) . ": '$value',";
        Den Zeilenumbruch macht man im JavaScript, um den Code übersichtlich zu gestalten. Hier in der Schleife ist er überflüssig und kann eher zu Unverträglichkeiten führen. Die wenigen Fälle, wo sich jemand genau an der Stelle den Sourcecode im Browser ausgeben lassen will, vernachlässigen wir mal.

        Was Du dann noch machen kannst, ist an den php-Tags in den Zeilen 210 und 216 zu "spielen". Manche PHP-Implementierungen sind da empfindlich. Also zum Beispiel das <?php unmittelbar mit nur einem Leerzeichen vor das "foreach" setzen und das ?> mit einem Leerzeichen hinter die Klammer in Zeile 215. Hier scheint es keine klaren Regeln zu geben, oder ich habe sie noch nicht gefunden / verstanden.

        FIndet sich denn kein Fehler im Error-Log von PHP bzw. dem Webserver? Hierzu kannst du manuell in die config.ini ein
        Code:
        debug = "1"
        eintragen.

        Gruß
        Wolfram

        Kommentar


          #5
          Habe alle Kombinationen getestet, leider ohne Veränderung!

          Code:
          debug = "1"
          habe ich eingefügt. Keine Fehlermeldung in den Apache2-logs!
          Ein phplog habe ich bei mir nirgends gefunden, muss ich da was installieren damit es geschrieben wird?

          Gruß
          Johann

          Kommentar


            #6
            Hm...
            Einen Versuch könntest Du noch mit Zeile 213 machen. Wenn das den Fehler behebt, hat Dein php-Interpreter definitiv einen Bug:
            Code:
            echo substr($key, 7) . ": '". $value . "',";
            Wenn das auch nicht hilft, dann lass Dir bitte nochmal in der Konsole das ganze Array "sv.config" ausgeben und schau, ob bei "sv.config.driver.name" "fhem" angezeigt wird. Wenn ja, sollte als letzter Notnagel folgendes gehen. Zeile 210-216 ersetzen durch:
            Code:
            				address: '<?php echo config_driver_address ?>',
            				port: '<?php echo config_driver_port ?>'
            Das ist ziemlich viel try & error, aber ich kann den Fehler "leider" in meinen Testumgebungen nicht nachstellen.

            Gruß
            Wolfram

            Kommentar


              #7
              So, jetzt wird es lustig!!!
              Ich habe die ganze Zeit Edge zum Testen verwendet! Jetzt habe ich es mal Firefox aufgerufen und da hat alles funktioniert!
              Die original Version von ./lib/base/base.php funktioniert im Firefox und auf Android!

              Hier noch das sv.config aus dem Edge
              Code:
              [LIST=1][*]sv.config: Object[LIST=1][*]driver:[LIST=1][*]address: "fhempi"[*]autoreconnect: "1"[*]name: "fhem"[*]password: ""[*]port: "2121"[*]realtime: "1"[*]ssl: ""[*]tlsport: ""[*]username: ""[*][[Prototype]]: Object[/LIST][*]icon0: "icons/sw/"[*]icon1: "icons/bl/"[*]svHostname: ""[*]version: "3.2.0"[*][[Prototype]]: Object[/LIST][/LIST]
              da sind die Daten korrekt enthalten!

              Was nun?

              Mein Hauptbrowser ist Firefox, zum Testen habe ich Edge verwendet! Werde jetzt bei mir die Test's nur noch mit FireFox machen!
              Kann es sein, das Edge noch nicht mit php8 umgehen kann?

              Gruß
              Johann

              PS Nachtrag:
              Bei den Test's habe ich auch festgestellt, das bei F5 oder Seitenaktualisieren kurz eine Fehler aufblitz.
              Fehler : Connection to the fhem server lost!

              Beobachter
              Forums-Einsteiger
              Zuletzt geändert von Beobachter; 12.01.2022, 18:43.

              Kommentar


                #8
                IMHO nutzt Edge die gleiche Engine wie Chrome, Opera, Brave & Co. Nur Firefox nutzt wohl noch seinen eigenen Renderer.
                Als um das zu testen solltest Du einen anderen Browser auch mal einen Versuch gönnen.

                Kommentar


                  #9
                  Habe jetzt noch Chrome installiert und da läuft es auch ohne Probleme!
                  Mehr Browser möchte ich mir nicht Installieren.
                  Bei meinen Tablet's läuft ein Kiosk-Browser auch ohne Problem und
                  Handy mit Chrom auch Fehlerfrei!

                  Also für mich ist es, auf meinen Systemen, eindeutig Edge!

                  Kommentar


                    #10
                    Gestern hat mein PC mit Windows 10 die Update KB5009543 KB5008876 installiert, jetzt funktioniert auch Edge wieder! 😟😟😟

                    Soll ich für den Connection Fehler ein neues Thema aufmachen?

                    Gruß
                    Johann

                    Kommentar


                      #11
                      Nein. Der "Connection Fehler" ist kein Fehler. Bei Reload machen die Browser den Websocket zu. Deswegen geht die Verbindung kurzzeitig verloren und wird neu aufgebaut, sobald die Seite neu geladen ist.

                      Gruß
                      Wolfram

                      Können wir den Thread hier auf "gelöst" setzen? So richtig klar ist die Ursache ja nicht geworden.

                      Kommentar


                        #12
                        Gerne, mach ich das oder du?
                        Wenn es ich machen soll, wo finde ich den Menüpunkt?

                        Gruß
                        Johann

                        Kommentar


                          #13
                          Einige Browser machen dabei den Websocket sogar brutal zu. Sie schicken kein Close an den Server, was z.B. in SmartHomeNG als unerwarteter Verbindungsabbruch signalisiert wird.
                          Viele Grüße
                          Martin

                          There is no cloud. It's only someone else's computer.

                          Kommentar

                          Lädt...
                          X