Erste Versuche mit LoRa (ohne WAN) und Node 2 Node Verbindungen

Im April hatte ich mich auf eins von der Fa. Thomas Krenn ausgelobten Developer Kits für IoT-Entwicklungen beworben. Diese Kits setzen sich zusammen aus jeweils zwei Boards mit ESP32-Mikrocontroller, LoRa-Modul, OLED-Display und WiFi-, Bluetooth- und Micro-USB-Interface sowie die passenden USB-Anschlusskabel. Weiterhin ist auch ein BME280 Sensor zum Messen von Temperatur, Luftdruck und Luftfeuchtigkeit dabei. Bei den 2 Microcontrollern handelt es sich um die bekannten Heltec Lora32 V2 Controller.

Wie sich herausstellen sollte, hatte ich diesmal Glück. Anfang Mai klingelte der Briefträger und überreichte mir eins dieser Kits. Vielen Dank dafür an dieser Stelle an die Firma Thomas Krenn. Ich habe mich sehr darüber gefreut.

TK_Box.jpg

Praktisch, dass Thomas Krenn auf ihrer Website auch eine Schritt-für-Schritt-Anleitung zur Installation und Programmierung mittels Arduino-IDE veröffentlicht hat. Selbst fertig vorbereitete Sketche sind dort verfügbar, jeweils einer für Transceiver und einer für den Receiver. Somit war es klar, dass ich gleich mal die Arduino IDE geladen und die Sketche auf die Heltec V2 Controller gespielt habe.

Beide Sketche funktionieren auf Anhieb. Der Transceiver liest den BME280 Sensor aus, zeigt die gemessenen Werte auf dem Display an und sendet sie in einem String per LoRa an den Receiver. Danach fällt der Transceiver in einen zweiminütigen Tiefschlaf.

Auf dem Receiver wird der String ausgepackt und auf dem Display angezeigt.

Bis zu diesem Punkt brauchte ich nicht eine Zeile Code schreiben. Es war alles zum Test vorbereitet.

Schnell kam bei mir aber der Wunsch auf, noch weitere Transceiver Microcontroller im neuen Haus zu verteilen, um einen Überblick über die Restfeuchte aus der Bauphase des Hauses zu bekommen. Natürlich sollten die Messwerte der einzelnen im Haus verteilten Sensoren auch in die bestehende NodeRED, Influx-DB und Grafana Umgebung aufgenommen werden.

Gesagt, getan.

Dafür schaute ich mir die Sketche etwas genauer an und merkte, dass es nur ein paar Erweiterungen bedurfte, damit der Receiver auch mehr als einen Transceiver erkennen und verarbeiten konnte.

Auf der sendenen Transceiver-Seite musste nur eine kleine Ergänzung (String „Wohnzimmer“) im LoRa Message-String aufgenommen werden, damit der empfangene Transceiver erkennen kann, wer die Daten geschickt hat.

Serial.print("Sending Complete Data: ");
  LoRaMessage = String(temperature) + "/" + String(humidity) + "/" + String(pressure) + "/" + String("Wohnzimmer");
  Serial.println(LoRaMessage);

Auf der empfangenen Receiver-Seite waren die Änderungen/Ergänzungen am Code schon etwas umfangreicher.

Dort musste das Script zuerst einmal um WiFI- und MQTT Fähigkeiten erweitert werden. Dann war auch noch eine Routine für das Erkennen des sendenden Nodes und eine Routine für die MQTT Client.Publish Befehle zu schreiben.


  // Hier wird der passende Raum-Bezeichner aus der Variable "feld4" (Location) ermittelt und dann der ganze MQTT-Aufruf zusammengesetzt

  String temp_PreFix1 = "sensors/BME280/Temperatur/";
  String ort1 = feld4;
  String myString1 = temp_PreFix1 + ort1;
  const char * msg1 = myString1.c_str ();

  String temp_PreFix2 = "sensors/BME280/Luftfeuchte/";
  String ort2 = feld4;
  String myString2 = temp_PreFix2 + ort2;
  const char * msg2 = myString2.c_str ();

  String temp_PreFix3 = "sensors/BME280/MBar/";
  String ort3 = feld4;
  String myString3 = temp_PreFix3 + ort3;
  const char * msg3 = myString3.c_str ();

  String temp_PreFix4 = "sensors/BME280/Ort/";
  String ort4 = feld4;
  String myString4 = temp_PreFix4 + ort4;
  const char * msg4 = myString4.c_str ();

  String temp_PreFix5 = "sensors/BME280/Quality/";
  String ort5 = feld4;
  String myString5 = temp_PreFix5 + ort5;
  const char * msg5 = myString5.c_str ();


  connectToMQTT();

  client.publish (msg1, String(feld1).c_str());
  client.publish (msg2, String(feld2).c_str());
  client.publish (msg3, String(feld3).c_str());
  client.publish (msg4, String(feld4).c_str());
  client.publish (msg5, String(rxquality).c_str());
  
}

Mit diesen Änderungen ist der Receiver Controller in der Lage, den jeweils sendenden Transceiver eindeutig zu erkennen und die übermittelt bekommenen Messwerte in die geweils zuständigen MQTT Topics zu versenden.

Diese hier beschriebene LoRa Umgebung läuft hier bei mir jetzt seit mehreren Tagen quasi fehlerfrei. Ab und an resettet der Receiver kurz (um diesen Fehler habe ich mich noch nicht gekümmert), ist dann aber nach ganz kurzer Zeit wieder zum Empfang von gesendeten LoRa Paketen bereit.

GIS-Daten in einem geographischen Informationssystem (GIS) darstellen

Die vor ein paar Tagen veröffentlichte Windkraftanlagen-Datei vom SH OpenData Portal (WKA-OpenData.csv) habe ich mal zum Anlaß genommen, mir auf meinem Rechner ein geographisches Informationssystem (GIS) zu installieren, welches für die Anzeige der GIS Daten erforderlich ist. Mein ausgewähltes Programm heißt QGIS und ist natürlich Open-Source.

Gesagt, getan. Die aktuelle OSX-Version 3.8.1 ist schnell von der Website https://qgis.org/de/site/ heruntergeladen und installiert.

„GIS-Daten in einem geographischen Informationssystem (GIS) darstellen“ weiterlesen

Smarte LoRaWAN Umweltstation in Arnis

Schon längere Zeit bin ich mit der Idee schwanger gegangen, im Garten in Arnis an der Schlei eine Umwelt- und Wetterstation zu errichten. Es wurde geplant und teilweise wieder verworfen, bis das Konzept am Ende rund war. Anfang des Jahres war es endlich soweit. Ich begann, mein Projekt umzusetzen.

Die Basis der Umweltstation sind 4 gebrauchte Paletten, die hochkant gegeneinander gestellt wurden. Oben und unten mit stabilen Winkeln versehen, werden sie die nächsten Jahre als stabile Basis für die Station und das eingebaute Hochbeet ihren letzten Dienst verrichten.

Hier ist das Hochbeet an den Seiten bereits mit Blumen bepflanzt. Oben im Gemüsebereich wachsen die Radienschen, die Wurzeln, der Schnittlauch und der Kohlrabi.
„Smarte LoRaWAN Umweltstation in Arnis“ weiterlesen