Ich habe mit Bockly ein Programm geschrieben, das 9 Sensor-Werte auf die OSeM schreibt. Das funktioniert auch weitgehend. Leider kommen nur 6-7 Werte auf der Map an. Die 2-3 Werte, die zuletzt hochgeladen werden fehlen regelmäßig in der OSeM. Am Code bzw. den Parametern in Blockly scheint es nicht zu liegen, da ein Vertauschen der Reihenfolge der Werte nur das Problem auf die erneut letzten Werte verschiebt.
eine maximale Anzahl von Sensoren git es nicht auf der openSenseMap.
Aber es gibt eine Erklärung für deine Beobachtung:
Die openSenseMap API hat ein ratelimit. Das ratelimit ist dazu da, den Traffic zu begrenzen.
Das bedeutet folgendes: du darfst von deiner IP Adresse in einer bestimmten Zeit nur eine bestimmte Anzahl an Requests an die API der openSenseMap schicken.
Der Block zum Hochladen von Messungen in Blockly, schickt jedoch jede Messung einzelnd und nicht als ein Gesamtpaket (1x Request mit mehreren Messungen). Aus diesem Grund kommen nur 6-7 Messungen von deiner Station an.
Ich habe das Problem für mich vorerst gelöst, indem ich den einen Block mit 10 Werten in zwei mit 5 Werten aufgeteilt habe und diese dann abwechselnd jede Minute abschicke.
du hättest auch unvorsichtig schon früher fragen können . Ich habe nämlich nur ein paar Sachen ausprobiert aber es noch nicht weiter verfolgt, sorry. Ich setzte es mir nochmal auf die ToDo Liste.
ich bin dran und fast fertig. Es gibt noch ein paar Kleinigkeiten, die behoben werden müssen. Die Messwerte werden nun gesammelt innerhalb eines Requestes gesendet. So kann man dann zumindest alle 10s ein Paket mit Messwerten senden.
Das ganze hat sich noch ein wenig gezogen, weil wir zusätzlich eine zweite Instanz der openSenseMap für Workshops und Testzwecken veröffentlichen wollen, die komplett ohne Ratelimit funktioniert, allerdings nicht für das permanente Speichern der Daten gedacht ist. Die Datenbank wird sich dann wahrscheinlich alle 24h zurücksetzen.
schau mal hier ist nun eine Beta Version mit den neuen Blöcken online! Vielleicht hast du Lust zu testen und uns eine Rückmeldung zu geben ob alles funktioniert.
die Übertragung in einem Request scheint zu funktionieren.
der Block GPS-Module führt mit den Values time, date und speed zu einem Error: “… was not declared in this scope”. Die anderen Values liefern keinen Error.
grundsätzlich funktioniert die Übertragung in einem Request in meinem Beta-Test. Allerdings bricht die WiFi-Verbindung jetzt nach wenigen Stunden oder sogar wenigen Minuten ab und baut sich leider dann nicht mehr auf. Nach Neustart der Sensebox beginnt das Spiel von vorne. Ich hatte das früher auch schon aber eher nach mehreren Tagen, jetzt kommt der Abbruch viel schneller.
Das merkwürdige “not declared”-Problem mit dem GPS-Modul scheint (?) etwas mit Groß-/Klein-Schreibung zu tun zu haben. Ich habe dieses Problem allerdings nun auch mit meinen älteren Blockly-Sketches, die schon mal funktionierten. Merkwürdig.
zu 2. Ich bin nicht auf der Höhe der Zeit, was das Programmieren angeht, aber wenn ich mir den Screenshot anschaue, dann ahne ich, warum es mit speed, date und time Probleme gibt. Die werden doch im im Source Code garnicht richtig umgesetzt, oder? Fehlt da nicht ein „item = gps.getSpeed()“ oder so?
Am Problem der openSenseMap sind wir dran. Ich habe seit gestern eine Box hier am laufen, die an workshop.opensensemap.org sendet und dort ist alles okay. Wir vermuten, dass es an der API der “normalen” openSenseMap liegt.
Nachdem ich regelmäßig Probleme mit dem in Blockly geschriebenen Code hatte (vor allem häufige Abbrüche der WiFi-Verbindung), habe ich nun mal die Sensebox nur über die Arduino-App programmiert und zwar unter Verwendung von senseBoxIO.h statt der SenseBoxMCU.h.
Seit dem läuft die SenseBox problemlos durch (zumindest gibt es bislang keine Probleme mehr mit der WiFi-Verbindnung).
In dem Sketch für die senseBox:home ist eine automatische Überprüfung ob eine Verbindung hergestellt werden kann. Falls der Test fehlschlägt wird das System neugestartet und auch die Wlan Verbindung wird neu aufgebaut. Ich werde mal versuchen den Test auch in den Blockly Code zu integrieren.