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.
Das The Things Network (TTN) ist eine offene communitybasierte Initiative zur Errichtung eines energiesparenden Weitbereichs-Netzwerks für das Internet der Dinge.
ioBroker ist eine freie, in JavaScript entwickelte Softwarelösung, die Komponenten zur Gebäudeautomatisierung von den verschiedensten Anbietern hersteller- und protokollneutral in einer Plattform miteinander verbindet. Es ist 2014 aus dem Projekt CCU.IO hervorgegangen.
Es werden zahlreiche sogenannte Adapter zur Verfügung gestellt, um verschiedenste Heimautomatisierungssysteme zu unterstützen.
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.
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.
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…
Software
Arduino
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.
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.
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.
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