alexSch Posted February 19, 2019 at 07:37 PM Posted February 19, 2019 at 07:37 PM 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 Quote
photron Posted February 20, 2019 at 10:01 AM Posted February 20, 2019 at 10:01 AM 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? Quote
photron Posted February 20, 2019 at 10:04 AM Posted February 20, 2019 at 10:04 AM Wenn du nicht die aktuellste Version der JavaScript Bindings oder der WIFI Extension 2.0 Firmware verwendest, hilft es dann, wenn du beides updatest? Quote
alexSch Posted February 20, 2019 at 10:23 PM Author Posted February 20, 2019 at 10:23 PM Hallo photron, hier in Kürze die Antworten auf Deine Fragen zu meinem Setup: Browser: Safari MacOS Version 12.0.2 (14606.3.4) und Safari iOS 12.1.1 JavaScript Bindings: 2.1.21 Firmware WiFi Extension: 2.1.3 Beispiel Script DualRelay: Lief bei 10/10 Versuchen einwandfrei Quote
alexSch Posted February 20, 2019 at 10:54 PM Author Posted February 20, 2019 at 10:54 PM 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 Quote
photron Posted February 21, 2019 at 05:11 PM Posted February 21, 2019 at 05:11 PM 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. Quote
alexSch Posted May 6, 2019 at 09:40 PM Author Posted May 6, 2019 at 09:40 PM 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 }) }; Quote
photron Posted July 3, 2019 at 01:56 PM Posted July 3, 2019 at 01:56 PM 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. Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.