Jump to content

Sporadischer Fehler bei IPConnection


alexSch

Recommended Posts

Hallo liebe TinkerUnity,

 

in meinem Projekt setze ich die WiFi Extension. Diese wählt sich in das heimische WLAN ein. Meine WebApp im Browser (JavaScript) stellt nun aus dem gleichen WLAN eine IPConnection (ipcon) zum MasterBrick her. Ich setze noch keine Verschlüsselung/Handshake ein, sondern verbinde einfach mittels IP-Adresse und Port.

 

Das klappt nur leider nicht reproduzierbar. Sporadisch, aber gerne auch mal bei fünf Versuchen hintereinander ergibt liefert ipcon.connect() folgende Fehlermeldung:

 

WebSocket connection to 'ws://192.168.1.3:4280/' failed: Status line contains non-ASCII character

Übergeordnet wird dann Error Code 13 ausgelöst.

 

Ich kann den Fehler auf die Line 49756 innerhalb der tinkerforge.js zurückverfolgen. Den dortige Code hilft mir jedoch leider nicht weiter.

 

Weiß jemand Rat???

 

Viele Grüße

Alex

Link zu diesem Kommentar
Share on other sites

Das "Status line contains non-ASCII character" ist komisch, als würde die WIFI Extension 2.0 nicht richtig antworten. Wir versuchen dass hier mal nachzustellen.

 

Welchen Browser verwendest du?

 

Welche Version der JavaScript Bindings verwendest du?

 

Welche Firmware-Version läuft auf der WIFI Extension 2.0?

 

Tritt das Problem auch mit einem der Browser-Beispiele der JavaScript Bindings auf, oder nur in deiner WebApp?

Link zu diesem Kommentar
Share on other sites

Habe jetzt auf die JavaScript Bindings Version 2019-01-29: 2.1.22 (2617875) aktualisiert und werde es weiter beobachten. Da es offensichtlich an meiner App liegt, bin ich um jeden Hinweis dankbar, in welche Richtung ich Euer Beispiel (DualRelay) und meinen Code abgleichen sollte.

 

Viele Grüße und vielen Dank

Alex

Link zu diesem Kommentar
Share on other sites

Da ich deinen Code nicht kennen, kann ich dir da keinen Rat geben. Dazu müsstest du deinen Code mal vorzeigen.

 

Vielleicht können wir dann hier das Problem nachstellen und verstehen. Denn es sieht schon eher nach einem Problem in den JavaScript Bindings aus, das wir beheben wollen, wenn wir es denn nachstellen könnten.

Link zu diesem Kommentar
Share on other sites

  • 2 months later...

Hallo photron... Leider musste ich eine längere Pause im Projekt einlegen. Hier nun mein Code, der die IP connection aufbaut. Ich habe den Fehler inzwischen seltener, aber immer noch sporadisch. Ein Muster erkenne ich bislang nicht...

 

 
function initiateConnection() {
    return new Promise((resolve, reject) => {
        console.log('initiateConnection started ...');
        htmlProtocolDiagnosis.value += getHumTimeStamp() + ' Starting IP Connection @ ' + htmlMasterBrickHOST.value + ':' + htmlMasterBrickPORT.value + '\n';

        var host = configJSON.webApp.userSettings.IP
        var port = parseInt(configJSON.webApp.userSettings.port)
        var timeout = 3000

        if(ipcon !== undefined) {
            ipcon.disconnect();
            DEBUG_2 && console.log('ipcon disconnected before reestablishing connection')
        }

        ipcon = new Tinkerforge.IPConnection(); // Create IP connection

        // Connect to brickd
        ipcon.connect(host, port, 
          function(error) {
            console.log('Error during IP Connection ' + error);
            htmlProtocolDiagnosis.value += getHumTimeStamp() + ' Error ' + error + ' during IP connection '+ '\n';
            reject(new Error('Error during IP Connection ' + error));
          }
        ); 

        // Don't use device before ipcon is connected
        ipcon.on(Tinkerforge.IPConnection.CALLBACK_CONNECTED,
            function (connectReason) {
              
              // Trigger Enumerate
              ipcon.enumerate();  

              // Get Connection state
              console.log('Current ipcon status: ' + ipcon.getConnectionState());
              htmlProtocolDiagnosis.value += getHumTimeStamp() + ' IP Connection Status ' + ipcon.getConnectionState() + ' @ ' + htmlMasterBrickHOST.value + ':' + htmlMasterBrickPORT.value + '\n';

            }
        );

        // Register Enumerate Callback
        ipcon.on(Tinkerforge.IPConnection.CALLBACK_ENUMERATE,
            function(uid, connectedUid, position, hardwareVersion, firmwareVersion,
                     deviceIdentifier, enumerationType) {
              var enumerationTypeEvaluated = function() {
                if(enumerationType === Tinkerforge.IPConnection.ENUMERATION_TYPE_DISCONNECTED) {
                  return('');
                  }
                }
              var deviceIdentifierReadable = getReadableDeviceName(deviceIdentifier, position, uid) 

              var newDevice = 
                {"UID": uid, 
                "ConnectedUID": connectedUid, 
                "Position": position,
                "HardwareVersion": String(hardwareVersion).replace(/,/g, '.'),
                "FirmwareVersion": String(firmwareVersion).replace(/,/g, '.'),
                "DeviceIdentifier": deviceIdentifier,
                "DeviceIdentifierReadable": deviceIdentifierReadable}
                
                modules.push(newDevice);
              }
        );

        // Use devices enumeration results as indicator, if initiateConnection() was successful
        setTimeout( function() {
          if (modules.length >> 0) {
            DEBUG_2 && console.log('initiateConnection() successful')
            htmlProtocolDiagnosis.value += getHumTimeStamp() + ' Received Modules List from MasterBrick' + '\n';
            resolve();
          } else {
            DEBUG_2 && console.log('initiateConnection() not successful')
            htmlProtocolDiagnosis.value += getHumTimeStamp() + ' Did not receive Modules List from MasterBrick' + '\n';
            reject(new Error('Error during modules enumeration'));
          };
        }, timeout); // Give checker 1s time wait for enumeration callbacks to arrive
    })
};

Link zu diesem Kommentar
Share on other sites

  • 1 month later...

Ich kann an deinem Code so erstmal kein Problem finden.

 

Ich bin dem "Status line contains non-ASCII character" Fehler noch mal nachgegangen.

 

Der Aufbau einer WebSocket-Verbindung beginnt mit einem HTTP GET Request. Darin fragt Safari bei der WIFI Extension den Aufbau einer WebSocket Verbindung an. Darauf antwortet die WIFI Extension mit einem HTTP Response.

 

Der "Status line contains non-ASCII character" Fehler besagt jetzt, dass in der Statuszeile des HTTP Response der WIFI Extension ein ungültiges Zeichen wäre.

 

In der Statuszeile des HTTP Response steht immer dieser Text: HTTP/1.1 101 Switching Protocols

 

Ich habe mir den WIFI Extension Firmware Code angesehen und kann da kein offensichtliches Problem finden, dass erklären würde, warum da nicht immer "HTTP/1.1 101 Switching Protocols" übertragen werden sollte.

 

Ich habe das hier gerade nochmal getestet und mir auf Linux und macOS mit Wireshark die Kommunikation zwischen Browser und WIFI Extension angesehen. Das sieht aber alles exakt so aus wie es soll und funktioniert auch ohne Probleme.

 

Das hilfreichste wäre, wenn du die Kommunikation mit Wireshark aufzeichnen könntest während das Problem auftritt, damit wir sehen können welche kaputte Antwort da wirklich kommt, wenn das Problem auftritt.

Link zu diesem Kommentar
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gast
Reply to this topic...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...