NEWS
Datenupload nach openSenseMap
-
Hallo,
hier mal mein (erstes) Script, um Daten bei openSenseMap.org hochzuladen.
Wer Außentemperatur, Luftfeuchte, Niederschlag und andere Werte im iobroker als Datenpunkte hat, kann diese mit dem Script bei openSenseMap hochladen.
Man benötigt einen Account bei openSenseMap und muss darin eine senseBox registrieren. Dabei definiert man welche Werte erfasst werden sollen (Temp,Luftfeuchte,…).
Im Dashboard unter Script kann man die SENSEBOX_ID und die IDs der Sensoren auslesen.
Im Script muss folgendes ergänzt werden:
SENSEBOX_ID
ARRAY_ID
Array_Objects
Das Scriptbeispiel ist hat hier vier Sensoren.
// Upload data to opensensemap // https://opensensemap.org/ var http = require('http'); var server = "ingress.opensensemap.org"; // senseBox ID // hier aendern!! var SENSEBOX_ID = "SENSEBOX_ID"; // Array of Sensor_IDs // hier aendern!! var ARRAY_ID = [ "Sensor_ID1" , "Sensor_ID2" , "Sensor_ID3" , "Sensor_ID4" ]; // Array of Dataobjects // hier aendern!! var Array_Objects = [ "javascript.0.Messdaten.xxxxx1" , "javascript.0.Messdaten.xxxxx2" , "javascript.0.Messdaten.xxxxx3" , "javascript.0.Messdaten.xxxxx4" ]; var optionsTemplate = { host: server, port: 80, path: null, method: 'POST', headers: { 'Content-Type': 'application/json;charset=UTF-8', 'Connection': 'close' } }; function httpPost(options) { log('INFO: OpenSenseMap Start' , 'info'); var dataTemplate = ""; for (i = 0; i < ARRAY_ID.length; i++) { optionsTemplate.path = "/boxes/" + SENSEBOX_ID + "/" + ARRAY_ID[i] ; dataTemplate = '{ "value": ' + getState(Array_Objects[i]).val + ' }'; log('path: ' + optionsTemplate.path , 'info'); log('data: ' + dataTemplate , 'info'); httpSaveData(options, dataTemplate ); } } function httpSaveData(options, data ) { options.headers['Content-Length'] = data.length; var req = http.request(options, function(res) { log('http Status: ' + res.statusCode); log('HEADERS: ' + JSON.stringify(res.headers), (res.statusCode != 201 ? 'warn' : 'info')); var bodyChunks = []; res.on('data', function(chunk) { bodyChunks.push(chunk); }).on('end', function() { var body = Buffer.concat(bodyChunks); log('body: ' + body); }); }); req.on('error', function(e) { log('ERROR: ' + e.message, 'warn'); }); req.write( data ) ; req.end(); } // Alle 5 Minuten schedule("*/5 * * * *", function(){ httpPost(optionsTemplate)}); //httpPost(optionsTemplate );
Gruß
Harry[/i][/i] -
@hfhausen:
Hallo,danke für deinen Beitrag. Das scheint, als wäre deine Beschreibung genau das was ich gesucht habe. Ich habe meine Wetterstation endlich stabil in Betrieb genommen, die Sensoren bei openSenseMap registriert und möchte die Daten nun dort auch bereitstellen.
Ich bin bzgl. Linux und Skripten leider nicht ganz so fit und benötige an der Stelle etwas Starthilfe. Ich habe in der Vergangenheit (bei der Skriptprogrammierung) des öfteren meinen Raspi überhitzt durch Endlosschelifen mit Max-Geschwindigkeit, d.h. ich bin ein gebranntes Kind was Programmierung auf dem Live-System angeht.
Folgende Schwierigkeiten habe ich mit deinem Beitrag:- Schreibe ich alle deine Zeilen in ein Skript zusammen (natürlich müsste ich noch die ein oder andere Zeile auf meine Sensoren anpassen)?
- Wird das alles in ein Javascript gepackt und ganz normal gestartet?
- Hat das Skript eine kontinuierliche Ausführung und falls ja, in welcher Zyklenzeit wird der Upload ausgeführt?
Vorab, schonmal besten Dank für deine Unterstützung.
-
Das Script lief sehr gut. Habe es immer genutz...
Die Verbindung muss allerdings nun angepasst werden. -> SSl?Kann sich das noch jemand vornehmen... oder gibt es schon eine andere Lösung?
vielen dank....
-
@fabian82 sagte in Datenupload nach openSenseMap:
Schreibe ich alle deine Zeilen in ein Skript zusammen (natürlich müsste ich noch die ein oder andere Zeile auf meine Sensoren anpassen)?
Ja, kopieren, einfügen, anpassen.
Wird das alles in ein Javascript gepackt und ganz normal gestartet?
Ja
Hat das Skript eine kontinuierliche Ausführung und falls ja, in welcher Zyklenzeit wird der Upload ausgeführt?
Ja, ist ganz unten im Script zu finden.
// Alle 5 Minuten
schedule("*/5 * * * *", function(){ httpPost(optionsTemplate)});
//httpPost(optionsTemplate );
-
ja, soweit so gut...
Folgender Fehler tritt auf
09:45:00.225 warn javascript.0 (1102) script.js.common.Wetter.openSenseMap_Kopieren: HEADERS: {"content-length":"94","content-type":"application/json; charset=utf-8","date":"Mon, 17 May 2021 07:45:00 GMT","deprecation-warning":"If your client supports TLS, please use https://ingress.opensensemap.org","connection":"close"}Kann sich das jemand ansehen ?
-
@m-behr sagte in Datenupload nach openSenseMap:
Kann sich das jemand ansehen ?
vielleicht kann @SBorg helfen?
In seinem Wetterstationen-Script läuft auch OSM. Das funktioniert perfekt. -
Das sind gleich zwei Probleme.
@m-behr sagte in Datenupload nach openSenseMap:
..."deprecation-warning":"If your client supports TLS...
Im Skript wird noch "request" benutzt, dass ist deprecated und wird von JavaSkript/node (zukünftig) nicht mehr unterstützt. Man müsste es also bspw. auf axios und HTTPS umstellen.