-
Gesamte Inhalte
12 -
Benutzer seit
-
Letzter Besuch
Posts erstellt von alexSch
-
-
Liebe Community, liebes Tinkerforge-Team,
im Layout des Raspberry Pi Hat ist zu sehen, dass Pin 32 (GPIO 12) des RPi mit Pin 18 (P0.7 IO) des XMC 1100 verbunden ist (siehe https://github.com/Tinkerforge/hat-brick/blob/master/hardware/hat-schematic.pdf). Welche Funktion hat diese Verbindung und was hat es mit der Bezeichnung RASP-GP auf sich?
Vielen Dank für Eure hilfreichen Tipps im Voraus
Alex
-
Hallo zusammen,
heute habe ich das Tinkerforge NPM-Paket (nodeJS) in meiner Software von Version 2.1.31 auf 2.1.32 aktualisiert. Leider kommt es nun während der Callback-Konfiguration zu folgender Fehlermeldung
"ERROR: ReferenceError: callbackFormats is not defined"
Dies tritt nach kurzem Test mit folgenden Bricklets auf:
- Outdoor Weather
- Temperature 2.0
Die beiden Scripts, die die Konfiguration bei mir übernehmen, sind unten angefügt.
Nach Rollback zu Version 2.1.31 läuft alles wieder problemfrei. In der Online-Dokumentation der API habe ich keine Änderung gefunden. Habe ich da eine wichtige Änderung bei der Callback-Konfiguration verpasst?
Viele Grüße
Sebastian Alexander Schäfer
Temperature 2.0
const DEBUG_configCallbacksTempV2_1 = false; const DEBUG_configCallbacksTempV2_2 = false; var configCallbacksTempV2 = function(item) { DEBUG_configCallbacksTempV2_1 && console.log('configCallbacksTempV2() started for ' + item.UID + ' ...'); const interval = 1 * 60 * 1000; // every 1 min, 60 s/min, 1000 ms/s completeJSON.session.bricklets.wiredTemp.UID = item.UID; // Save bricklet UID to completeJSON.session var t = new Tinkerforge.BrickletTemperatureV2(item.UID, ipcon); // Configure Bricklet t.setStatusLEDConfig(0); t.setHeaterConfiguration(0); t.setTemperatureCallbackConfiguration(interval, false, "x", -100 * 30, +100 * 50); // Handle Callbacks t.on(Tinkerforge.BrickletTemperatureV2.CALLBACK_TEMPERATURE, function (temp) { DEBUG_configCallbacksTempV2_2 && console.log('Receiving CALLBACK_TEMPERATURE by BrickletTemperatureV2.'); completeJSON.session.bricklets.wiredTemp.act = getToFixed(temp / 100, 1); // Only launch control loop if wired sensor was chosen in config if (completeJSON.config.webApp.userSettings.temp.sensor == 'wired') { ctlHeating(completeJSON.session.temp.mode); }; DEBUG_configCallbacksTempV2_2 && console.log('BrickletTemperatureV2.CALLBACK_TEMPERATURE: ' + temp/100 + ' °C'); // logAddRecordEvent('Wired Temp ' + item.UID + ' ausgelesen'); }); DEBUG_configCallbacksTempV2_2 && console.log('Wired temperature sensor callback initiated: ' + t.DEVICE_DISPLAY_NAME + '.'); }; if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') { // console.log('Working server side. Exposing function through module.exports') module.exports = configCallbacksTempV2; } else { // console.log('Working client side. Exposing function through window.*') window.configCallbacksTempV2 = configCallbacksTempV2; };
Outdoor Weather
const DEBUG_configCallbacksOutdoorWeather_1 = true; const DEBUG_configCallbacksOutdoorWeather_2 = true; var configCallbacksOutdoorWeather = function(item) { DEBUG_configCallbacksOutdoorWeather_1 && console.log('configCallbacksOutdoorWeather() started for ' + item.UID + ' ...'); completeJSON.session.bricklets.wirelessTemp.UID = item.UID; // Save bricklet UID to completeJSON.session var ow = new Tinkerforge.BrickletOutdoorWeather(item.UID, ipcon); // Create device object // Configure Bricklet ow.setStatusLEDConfig(0) ow.setSensorCallbackConfiguration(true); // What do do if callbacks arrive ow.on(Tinkerforge.BrickletOutdoorWeather.CALLBACK_SENSOR_DATA, function (identifier, temperature, humidity, lastChange) { DEBUG_configCallbacksOutdoorWeather_2 && console.log('Receiving CALLBACK_SENSOR_DATA by BrickletOutdoorWeather.') // Store current settings to completeJSON.session, whenever there's a callback //completeJSON.session.temp.set = parseInt(document.getElementById("slider1").value) // Check if lastChange is less than 5 s old if (lastChange < 10) { DEBUG_configCallbacksOutdoorWeather_2 && console.log('BrickletOutdoorWeather sent callback too early. Tossing data this time!') } else { completeJSON.session.bricklets.wirelessTemp.act = getToFixed(temperature / 10, 1); completeJSON.session.bricklets.wirelessTemp.hum = getToFixed(humidity, 0); // Only launch control loop sensor if wired sensor was chosen in config if (completeJSON.config.webApp.userSettings.temp.sensor == 'wireless') { ctlHeating(completeJSON.session.temp.mode); }; DEBUG_configCallbacksOutdoorWeather_2 && console.log('BrickletOutdoorWeather.CALLBACK_SENSOR_DATA: ' + temperature/10 + ' °C'); // logAddRecordEvent('Sensor ' + identifier + '@' + item.UID + ' ausgelesen'); }; } ); // DEBUG_configCallbacksOutdoorWeather_2 && console.log('Wireless temperature sensor callback initiated: ' + ow.DEVICE_DISPLAY_NAME + '.'); }; if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') { // console.log('Working server side. Exposing function through module.exports') module.exports = configCallbacksOutdoorWeather; } else { // console.log('Working client side. Exposing function through window.*') window.configCallbacksOutdoorWeather = configCallbacksOutdoorWeather; }
-
Ich bin auch sehr an Alternativen interessiert. Meine Probleme mit dem TH-6148 sind:
- Absolute Temperaturabweichung (ca. + 1 °C gegenüber Referenzmessgeräten)
- Bevorzuge eine kleinere Bauform
- Ich benötige keine eingebautes Display
- Hohe Trägheit der Messungen (Delta T ca. 1 K/min > Vermute, das liegt am Gehäuse und der Belüftung des Sensors)
- Recht hoher Preis für meinen Anwendungsfall
Gibt es einen spezifizierten Substandard des Outdoor Weather Bricklet, der kompatible alternative Sensoren aufzeigt?
Alex
-
@photron Vielen Dank für die schnelle Hilfe. Die Aktivierung des Dienstes in der bricks config war die Lösung! Port 4280 habe ich nur auf gut Glück getestet.
-
Gerade habe ich begonnen, mein Projekt vom RED Brick auf einen Raspberry Pi 3B mit HAT Brick umzuziehen. Leider krankt das Vorhaben direkt zu Beginn:
- Installationsanleitung https://www.tinkerforge.com/de/doc/Hardware/Bricks/HAT_Brick.html befolgt
- Zugriff auf HAT Brick erfolgreich mittels Brick Viewer im WLAN getestet. Mac mit brickv greift über IP und PORT auf Raspberry Pi zu und erlaubt Auslesen und Steuern des HAT Bricks und angeschlossener Bricklets.
- "Print Voltage (HTML)" und "Enumerate (HTML)" Beispiele für Java Script per Apache auf dem Raspberry Pi gehostet und gestartet
- Beim Zugriff vom Raspberry Pit via "localhost" meldet die Chromium-Konsole beim Port 4223 "WebSocket connection to 'ws://localhost:4223/' failed: Connection closed before receiving handshake response" - tinkerforge.js:57196. Das Textfenster zeigt "Error: 13".
- Beim Zugriff vom Raspberry Pit via "localhost" meldet die Chromium-Konsole beim Standard-Port 4280 "WebSocket connection to 'ws://localhost:4280/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED" - tinkerforge.js:57196. Das Textfenster zeigt "Error: 13".
- Beim Zugriff auf die gleichen Testseiten vom Mac via WLAN erscheint in der Browser-Konsole von Safari zwar keine Fehlermeldung, aber Das Textfenster zeigt auch "Error: 13".
Hat jemand einen Rat, ob ich bei meiner Apache- oder wegsacket Konfiguration etwas anpassen muss?
VERSIONEN
- Raspbian 10 buster
- Tinkerforge.js 2.1.25
- Apache 2.4.38
-
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 }) };
-
... Der RED Brick kann die WIFI Extension leider nicht verwenden, ...
Gibt es denn Pläne, das mit zukünftigen Images für den RED brick zu ändern? Oder wird es neue Hardware-Versionen der Wifi-Extension oder des RED bricks geben, die das ermöglichen?
-
Hey capacious, hey Tinkerforge team. ONE UP for this request. I would also love to see this capability soon. Would love to use the exact same setup: RED brick stack with WIFI extension 2.0 + 3(4)G dongle via RED brick USB port.
-
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
-
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
-
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
Compiling issues for hat-brick with PlatformIO and CLI
in Allgemeine Diskussionen
Geschrieben · bearbeitet von alexSch
We are trying to combine out of the box Tinkerforge bricks/bricklets with custom build bricklets (own specific PCBs with same architecture as Tinkerforge co-processor bricklets). Trying to replicate the Tinkerforge build environment with unmodified firmware code as a start, we ran into some road blocks.
Setup
What we have done already
A) Trying to build from the command line, only using make
B) Trying to build the official Tinkerforge firmware for the brick-hat with PlatformIO
Anyone to help with A) or B)?
Best regards
Alex