Verbindung zur OpenSenseMap via WiFi


#1

Hey zusammen,

ich habe heute - entsprechend des Tutorials (https://sensebox.github.io/books-v2/edu/de/projekte/Umweltstation/datenupload.html) - versucht, die Sensordaten meiner senseBox:edu auf die openSenseMap zu laden. Leider funktioniert das aber nicht, es scheitert schon bei OpenSenseMap osem("senseBox ID (natürlich steht hier die richtige ID ;-)", b);

Hier mein ganzer Code. Ziel des Codes: Die Messwerte der Sensoren via WiFi hochladen.

#include "SenseBoxMCU.h"
Bee* b = new Bee();
OpenSenseMap osem("senseBox-ID", b);

// Sensoren
HDC1080 hdc;
BMP280 bmp;
TSL45315 tsl;
VEML6070 veml;

const unsigned int postingInterval = 60000;

void setup() {
  
  Serial.begin(9600);
  Serial.print("[INFO] Starte Verbindung mit WiFi...");
  
  b -> connectToWifi("SSID (natürlich steht hier die richtige SSID)", "Passwort");
  delay(1000);

  Serial.print("[INFO] Verbindung mit WiFi hergestellt.");
  delay(1000);
  Serial.print("[INFO] Starte Sensoren...");
  
  // Sensoren starzen
  hdc.begin();
  bmp.begin();
  tsl.begin();
  veml.begin();

  delay(1000);
  Serial.print("[INFO] Sensoren gestartet.");
  delay(1000);
  
}

void loop() {

  // Sensordaten hochladen

  // Temperatur
  osem.uploadMeasurement(hdc.getTemperature(), "Sensor-ID (steht hier)");

  // Luftfeuchte
  osem.uploadMeasurement(hdc.getHumidity(), "Sensor-ID");

  // Luftdruck
  osem.uploadMeasurement(bmp.getPressure(), "Sensor-ID");

  // Beleuchtungsstärke
  osem.uploadMeasurement(tsl.getIlluminance(), "Sensor-ID");

  // UV-Itensität
  osem.uploadMeasures(veml.getUvIntensity(), "Sensor-ID");

  // UV-Index
  osem.uploadMeasures(getUVI(veml.getUvIntensity()), "Sensor-ID");
  
  sleep(postingInterval);

}

void sleep(unsigned long ms) {            // ms: duration
  unsigned long start = millis();         // start: timestamp
  for (;;) {
unsigned long now = millis();         // now: timestamp
unsigned long elapsed = now - start;  // elapsed: duration
if (elapsed >= ms)                    // comparing durations: OK
  return;
  }
}

float getUVI(int uv) {
  float refVal = 0.4; // Referenzwert: 0,01 W/m^2 ist äquivalent zu 0.4 als UV-Index
  float uvi = refVal * (uv * 5.625) / 1000;
  return uvi;
}

Was habe ich falsch gemacht?

Viele Grüße
Philipp


#2

Hallo @Philipp,

wir haben im letzten Monat zusätzlich zur openSenseMap eine zweite Instanz unter https://workshop.opensensemap.org gehostet. (https://sensebox.de/blog/2020-03-06-new-blockly-release)

Daher wurde die Funktion geringfügig geändert aus:
OpenSenseMap osem("senseBox-ID", b);
wird:
OpenSenseMap osem("senseBox-ID", b, "ingress.opensensemap.org");

ingress.opensensemap.org wird für https://opensensemap.org und ingress.workshop.opensensemap.org wird für https://opensensemap.org verwendet.

Wenn du hier noch die Funktionen anpasst solltest du mit dem neuesten Boardsupport-Package V1.3.2 den Code kompilieren können.

  // UV-Itensität
  osem.uploadMeasures(veml.getUvIntensity(), "Sensor-ID");

Beste Grüße
Mario


#3

Das hat’s gelöst. Danke!