Installation des Feinstaubsensors SDS011!


#1

Hallo liebe Community!
Meine Sensebox ist installiert und ich bekomme alle relevanten Daten auf die openSenseMap.https://opensensemap.org/explore/5b473a485dc1ec001b534fdf

Jetzt möchte ich die SenseBox mit dem Feinstaubsensor SDS011 erweitern, aufgebaut habe ich es schon, aber ich habe Probleme den Programmcode vom Feinstaubsensor in das Script einzufügen. Leider habe ich den Feinstaubsensor nicht gleich bei der Erstinstallation hinzugefügt.

Wenn ich auf der “openSenseMap” mich in meinem Profil einlogge, habe ich doch unter DASCHBOARD →EDITIEREN →ERWEITERUNGEN, die Möglichkeit den Feinstaubsensor anzuklicken und daraufhin abzuspeichern.
Leider passiert nicht mehr und der Feinstaubsensor wird nicht in das SKRIPT übernommen, oder es wird auch nicht angezeigt, welchen Feinstaubsensor ich installiere könnte. Bei der Erstinstallation waren ja mehrere Kategorien auswählbar für den Feinstaubsensor.

Wie erweitere ich jetzt, bei einer bestehenden SenseboxHome, das Modul Feinstaubsensor?

In diesem link wird ja (ganz unten) noch angegeben wie ich den Programmcode nachträglich hinzufüge: https://sensebox.github.io/books-v2/home/komponenten/sensoren/feinstaub.html

Aber leider bekomme ich beim hochladen des Scripts in Arduino IDE eine Fehlermeldung:
exit status 1
expected ‘,’ or ‘;’ before ‘float’

Mir ist auch bewusst, dass für den Feinstaubsensor Port 1 und Port 2 gibt: UART/Serial.

Viele Grüße
Faris Hammad


#2

Hallo @Faris_Hammad,

bei der neuen senseBox:home mit MCU gibt es das Konzept von Erweiterungen zur Zeit nicht mehr. Deshalb ist die Feinstauberweiterung im Dashboard ausgegraut und kann nicht mehr ausgewählt werden.

Es gibt folgende Möglichkeiten:

  1. Du löscht deine alte Station und registrierst eine neue senseBox und wählst dort direkt den SDS011 mit aus. (Dabei gehen natürlich die bis jetzt gesammelten Messwerte verloren)
  2. Du erstellst eine neue senseBox mit dem Feinstaubsensor und bekommst dann direkt den korrekten Sketch zugeschickt. Editierst dort deine WiFi oder Ethernet Einstellungen und tauscht die SensorIDs aus. (Dürfte die einfachste Variante sein [kein Datenverlust und wenig Programmieraufwand])
  3. [Schwierigste Variante]
    Du wählst Editieren im Dashboard für deine Station aus und wechselst dort in den Reiter Sensoren. Dort legst du 2 neue Sensoren an (PM2.5 und PM10). Dadurch bekommst du 2 neue SensorIDs. Und da musst du folgende Schritte durchführen:
1. Definiere den UART_PORT direkt nach den Wifi Credentials
// Number of serial port the SDS011 is connected to. SerialPort kann Serial1 oder Serial2 sein.
#define SDS_UART_PORT (SerialPort)
2. Erhöhe die Variable NUM_SENSORS auf 7
static const uint8_t NUM_SENSORS = 7;
3. Definiere IDs in deinem Sketch unter //SensorIds wie folgt:
// PM10
const char PM10SENSOR_ID[] PROGMEM = "SensorID_PM2.5";
// PM2.5
const char PM25SENSOR_ID[] PROGMEM = "SensorID_PM10;
4. SDS Library einfügen
#include <SDS011-select-serial.h>
5. Sensorinstanz hinzufügen unter //Sensor Instances
SDS011 SDS(SDS_UART_PORT);
6. In `setup()` den SerialPort starten.
SDS_UART_PORT.begin(9600);
7. Im `loop()` das Auslesen des Sensors hinzufügen, bevor die Funktion `submitValues()` aufgerufen wird.
uint8_t attempt = 0;
float pm10, pm25;
while (attempt < 5) {
  bool error = SDS.read(&pm25, &pm10);
  if (!error) {
    addMeasurement(PM10SENSOR_ID, pm10);
    addMeasurement(PM25SENSOR_ID, pm25);
    break;
  }
  attempt++;
}

Das wäre der händische Weg, den Feinstaubsensor einzubinden. Ich würde zu Option 2 tendieren.

In der Anleitung in den Books hast du einen Fehler entdeckt :slight_smile: Es wurde ein ; hinter dem letzten delay() im setup() vergessen. Ich gebe das weiter und wir werden es korrigieren und auch die Einbindung in einen Sketch nochmal überarbeiten.

Grüße,
Matthias


#3

Ich danke Dir Matthias!

Punkt 1 und 2 sind ja relativ einfach und ich werde Punkt 2 demnächst für die Integration des Feinstaubsensors anwenden.

Aus Neugierde habe ich aber eben gerade Punkt 3 angewandt, weil wir ja so am bestern lernen.
Den Sketch (mit deinen Modifikationen in Bezug auf den Feinstaubsensor) konnte ich hochladen auf Arduino IDE und auf die MCU der SenseBox übertragen. So sieht der Sketch aus (natürlich habe ich mein WiFI Password gelöscht):

Leider passierte nichts auf der SenseBoxMap. Keine Übertragung fand statt von den schon bereits integrierten Sensoren und auch nicht vom Feinstaubsensor. Auch wurde der Feinstaubsensor nicht als Kategorie (zum Beispiel Temperatur) abgebildet: PM10 und PM2.5.
Bedacht habe ich, dass der Feinstaubsensor im UART/Serial 1 ist und so auch im Skatch angegeben.

Woran könnte das liegen?

Gruss
Faris Hammad


#4

Hallo @Faris_Hammad,

ich habe den Sketch gerade kurz überflogen und folgendes ist mir aufgefallen:
Für den Feinstaubsensor sind keine korrekten IDs hinterlegt.

// PM10
const char PM10SENSOR_ID[] PROGMEM = “SensorID_PM2.5”;
// PM2.5
const char PM25SENSOR_ID[] PROGMEM = “SensorID_PM10”;

In dem Fall können die Daten nicht gespeichert werden, weil die API die IDs nicht kennt oder eben ein ungültiges Format haben.

Dort müssten auch 24-stellige IDs im Format der anderen Sensor IDs eingetragen werden.
Die IDs kannst du dir generieren lassen, wenn du neue Sensoren zu deiner Station hinzufügst.

Grüsse,
Matthias


#5

Danke @matthias!
Schöne Grüße
Faris