LoRa-Temperatursensor

Einen Temperatursensor ansteuern gehört zu den ersten Dingen, die man normalerweise mit einem Mikrocontroller macht. Allerdings meist mit USB als Stromversorgung.

In diesem Projekt wird der Temperatursensor allerdings mit Akku und Solarzelle versorgt und sendet die Messergebnisse mehrere Kilometer weit über LoRa (TTN). Die Daten werden dann in einen ioBroker gesammelt.

Informationen zu TTN und ioBroker

Der Temperatursensor soll auf einem Gartengrundstück angebracht werden und die Temperatur, die Luftfeuchte und den Luftdruck etwas abseits des Ortes messen. Für das TTN betreibe ich ein eigenes Gateway mit einem Raspberry Pi, ic880a und Außenantenne.

  1. Arduino Pro Mini (entfernte LED + Spannungsregler, siehe hier)
  2. RFM95W (868 MHz)
  3. BME280-Modul (ohne Spannungsregler) für Temperatur, Luftfeuchtigkeit und Luftdruck
  4. diverser Kleinkram (XT60 Stecker, Kabel, Gehäuse, etc.)

Wie sich im folgendem Diagramm zeigt hatte die Übertragung immer wieder Aussetzer. Je nach Sonneneinstrahlung wurde am Tag mehr oder weniger gesendet. Das ist natürlich nicht der Sinn des Wettersensors. Die Batterie sollte die komplette Nacht sicher überbrücken können.

Im Prinzip gibt es zwei Stellschrauben, um den Energieverbrauch zu reduzieren:

  • Häufigkeit der Datenübertragung
  • Sendedauer (ergibt sich aus dem Spreading Factor (SF))

Den benötigten SF kann man abschätzen, wenn man den SNR (Signal-Rausch-Verhältnis) hat. 1)

Spreading Factor Symbol/sec. SNR limit TOA (10-byte packet) Bit rate
7 976 -7,5 56 ms 5469 bps
8 488 -10,0 103 ms 3125 bps
9 244 -12,5 205 ms 1758 bps
10 122 -15,0 371 ms 977 bps
11 61 -17,5 741 ms 537 bps
12 30 -20,0 1483 ms 293 bps

Die beiden Parameter habe ich angepasst:

Parameter alt neu Energieverbrauch neu
Spreading Factor (SF) 12 9 13,8 %
Sendeintervall 3 min 6 min 50,0 %

Das Gesamt-Energieersparnis liegt also bei ca. 93 %. Der Energieverbrauch verhält sich proportional zur Sendedauer bzw. dem Sendeintervall.

Um die Daten für einen geeigneten SF zu bekommen, habe ich die Rohdaten vom TTN mitgeloggt (siehe auskommentierten Code im ioBroker-Script). Diese Daten musste ich dann noch vorverarbeiten. Dazu habe ich den Notepad++ verwendet und folgendes durchgeführt:

  • Kopfzeile der CSV entfernt
  • Ersetzen (im „Reguläre Ausdrücke“-Modus) - Suche ({"gtw_id"[^}]*}) ersetze durch \r\n$1\r\n
  • Ersetzen (im „Reguläre Ausdrücke“-Modus) - Suche ^.{1,5}$\r\n ersetze durch „leer“
  • Ersetzen (im „Reguläre Ausdrücke“-Modus) - Suche ^.{200,20000}$\r\n ersetze durch „leer“
  • Speichern als .json

Diese Datei habe ich dann mit Tableau analysiert (Orange ist mein Gateway). Und zur besseren Darstellung im Wiki nachgebaut.

Tableau-Export

Tag Rssi (AVG) Rssi (MAX) Rssi (MIN) Rssi (STDABW) Snr (AVG) Snr (MAX) Snr (MIN) Snr (STDABW)
11.10.2020 -74,0 -74,0 -74,0 0,00 7,7 8,2 7,2 0,71
12.10.2020 -75,0 -68,0 -79,0 1,82 7,9 9,8 5,8 0,87
13.10.2020 -77,4 -68,0 -101,0 5,75 7,8 10,5 5,8 0,57
14.10.2020 -78,0 -69,0 -101,0 5,84 7,6 10,0 5,0 0,69
15.10.2020 -80,2 -74,0 -101,0 6,01 7,9 9,0 7,0 0,43
17.10.2020 -78,6 -74,0 -83,0 2,75 7,5 9,0 5,8 0,84
18.10.2020 -71,9 -68,0 -83,0 3,05 7,8 9,5 6,0 0,85
19.10.2020 -69,3 -68,0 -71,0 0,90 8,1 9,2 7,0 0,39
20.10.2020 -93,0 -61,0 -117,0 21,51 1,0 10,0 -13,2 7,58
21.10.2020 -115,3 -100,0 -119,0 1,45 -5,2 -1,2 -14,0 2,25
22.10.2020 -115,1 -101,0 -119,0 1,86 -3,9 -0,2 -12,5 2,24
23.10.2020 -115,4 -99,0 -119,0 1,63 -4,9 1,0 -12,2 3,32
24.10.2020 -111,2 -91,0 -119,0 3,45 2,6 6,2 -8,5 2,85
25.10.2020 -109,4 -103,0 -121,0 3,16 4,5 7,2 -7,0 1,22
26.10.2020 -114,0 -97,0 -121,0 4,50 3,7 4,5 0,5 0,59
27.10.2020 -110,5 -89,0 -119,0 2,69 3,7 6,2 -1,5 1,11
28.10.2020 -111,4 -96,0 -123,0 3,41 3,2 6,2 -1,8 1,56
29.10.2020 -111,2 -94,0 -119,0 3,76 2,7 7,0 -8,8 2,86
30.10.2020 -112,5 -96,0 -118,0 2,63 2,2 5,8 -7,5 1,82
31.10.2020 -111,9 -91,0 -115,0 2,48 2,9 5,0 -3,0 1,27
01.11.2020 -105,5 -89,0 -114,0 3,69 5,3 7,0 0,5 1,24
02.11.2020 -109,7 -104,0 -121,0 2,77 4,6 7,0 -3,2 1,05
03.11.2020 -116,1 -112,0 -120,0 1,91 -0,9 4,8 -11,8 3,24
04.11.2020 -112,0 -108,0 -114,0 1,25 3,1 5,0 -4,5 1,05
05.11.2020 -112,9 -93,0 -119,0 2,23 1,9 4,2 -11,0 1,95
06.11.2020 -109,8 -90,0 -114,0 2,32 3,8 5,0 -6,2 1,28
07.11.2020 -110,0 -103,0 -113,0 1,75 3,9 4,8 0,8 0,60

Was sich hier zeigt ist, dass sich der Standortwechsel des Sensors vom Haus auf das Gartengrundstück sowohl im RSSI als auch im SNR deutlich bemerkbar gemacht haben. Der Tausch der Indoor-Antenne gegen die Outdoor-Antenne hat aber im SNR wieder einiges gut gemacht.

Da der schlechteste SNR im aktuellen Aufbau bei -11,8 liegt habe ich mich für SF9 entschieden, da dort die Grenze bei ca. -12,5 liegt. Was aufgrund des SNR-Ranges recht stabil sein sollte.

Des Weiteren habe ich auch noch die Solarzelle in einem anderen Winkel montiert. Damit sollte nun also die Schaltung, ohne Unterbrechung auch über die Winter-Monate kommen…

Die Software auf dem Arduino ist auf konsequentes Stromsparen ausgelegt. So wird werden die Module nur bei Bedarf eingeschaltet und der Arduino legt sich lange Zeit schlafen.

Verwendete Librarys:

  • LowPower
  • Adafruit BME280
  • TinyLora

ttn_temp.ino

Der Dekoder, welcher auf der TTN-Konsole hinterlegt werden kann. Damit können die Bytes dekodiert und wieder in eine Dezimalzahl überführt werden.

Der „Format Selector“ habe ich definiert, um im selben „Sensornetz“ eine Unterscheidung treffen zu können, wie der jeweilige Sensor dekodiert werden soll, falls es noch welche gibt, die andere Werte zurückliefern.

ttn_payload_decoder


MQTT-Adapter Einstellung Seite 1


MQTT-Adapter Einstellung Seite 2

Die Umsetzung in ioBroker-Variablen erfolgt über ein JavaScript-Script. Dieses konvertiert die Werte passend zum ioBroker. Auskommentiert ist noch eine Möglichkeit die rohen JSON-Pakete vom TTN zum entsprechenden Sensor mitzuloggen.

ttn_decode


Arduino und Sensor im Gehäuse
Mit XT60-Steckverbinder


Modifizierte Solarzelle;
Abgriff der Akkuspannung und
entferntes LED-Kabel


Solarzelle mit Temperatursensor
outdoor montiert


Solarzelle mit Temperatursensor
optimierte Montage


Selbstbau TTN Gateway mit Raspberry Pi Zero
und iC880A, noch ohne Außenantenne


Anzeige in Lovelace-Interface


Test-Dashboard mit Grafana
mit Influx-DB-Daten
→ Vergleich Sensor Garage zu Gartengrundstück

Gehäuse

Download

Deckel

Download



1) LoRa Spreading Factors, Symbol Rate, SNR limit, TOA and Bit Rate. „Module-level Health Monitoring of Solar PV Plants using LoRa Wireless Sensor Networks“ von Arnold Johan Rix


Diese Website verwendet Cookies. Durch die Nutzung der Website stimmen Sie dem Speichern von Cookies auf Ihrem Computer zu. Außerdem bestätigen Sie, dass Sie unsere Datenschutzbestimmungen gelesen und verstanden haben. Wenn Sie nicht einverstanden sind, verlassen Sie die Website.Weitere Information