LoRaWAN Relais / Universalboard

sparsames batteriebetriebenes LoRaWAN Relais mit bistabilen Relais / universell nutzbar

technische Daten / Details

  • Long Range Wide Area Network (LoRaWAN) ein Low-Power-Wireless-Netzprotokoll mit einer Reichweite von bis zu 20 Km
  • OTAA Join-Verfahren (Over-The-Air-Activation) 
  • Strombedarf < 6µA (Batterielaufzeit bis zu 10 Jahre)
  • Spannungsversorgung 18650 Akku vom Typ LiFePo4 oder LiPo
  • bistabiles Relais
  • automatische Spannungsmessung des Akkus
  • freier I2C Bus, digitale und analoge Eingänge
  • 64 freie Lötpunkte für eigene Ideen im Raster von 1,27 mm
  • ATMEL ATMEGA328P CPU mit ISP Anschluss und kompletter Arduino IDE Unterstützung (Arduino Pro oder Pro Mini mit 3,3 Volt 8 MHz einstellen)

Nach dem ich bei meinem LoRaWAN Regenmesser einen äußerst geringen Energiebedarf (Energiebedarf < 0,018mWh) und eine damit echt lange Batterielaufzeit erreichen konnte, kam die Idee für weitere batteriegetriebene LoRaWAN Anwendungen auf. Schon längere Zeit wollte ich Schaltvorgänge per Internet ausführen ohne dazu extra Kabel verlegen zu müssen oder weitere dauerhaft ruhestromfressende WLAN Geräte zu verwenden.
Die hier vorgestellte Schaltung mit dem kompakten SMD Layout ist eine gute Plattform für eigene universelle LoRaWAN Geräte. Es gibt einige frei nutzbare digitale und analog Ports und auch eine I2C Busanschluss für Erweiterungen. Auch ein kleiner freier Leiterplattenbereich mit nutzbaren Lötpunkten ist für gelötete Ideen gedacht. Will man kein Relais verwenden, dann kann man auch diesen Teil der Leiterplatte entfernen.
Mit zwei weiteren Verbesserungen der Software (ab Stand 17.04.2023) liegt nun der Ruhestromverbrauch unter 6 µA. Der LiFePo4 Akku mit 1900 mA könnte das LoRaWAN Modul mehr als 10 Jahre versorgen. 

In einer ersten Anwendung werde ich meine Vaillant Heizungs-Therme gezielt aus der Ferne ein- / ausschalten. Da ich keine Lust habe die vorhandene komplexe Steuerung anzupassen, werde ich nur die Leitungen zum Aussenfühler für meine Steueraufgaben verwenden. Der Außenfühler ist ein NTC Widerstand, der Widerstandswert wird also bei größerer Temperatur kleiner. Um der Heizung vorgaukeln, dass die Außentemperatur hoch und ein Heizen nicht notwendig ist, schalte ich einen Widerstand gezielt aus der Ferne per Relais parallel. Ohne Widerstand = normale Heizfunktion mit parallelen Widerstand = Heizung ist aus.
Der NTC hat bei 5-6 °C einen Widerstandswert von 1,472 KOhm. Bei 20 °C beträgt er nur noch 1,099 KOhm. Ich werde mit einem Widerstandswert von 470 Ohm erste Tests machen.

Die Schaltung vom LoRaWAN Relais nutzt ein bistabiles Relais. Dieser Typ von Relais benötig nur einen kurzen Stromimpuls um entweder ein- oder ausgeschaltet zu sein. Übliche monostabile Relais benötigen einen nicht unerheblichen Strom um eingeschalten zu bleiben. Zwar ist es erheblich aufwändiger solche Relais in Schaltungen zu verwenden, doch der energetische Nutzen überwiegt bei batteriebetrieben Geräten immer. Schon bei Regenmesser musste ich viel Zeit aufbringen um das benötigte Lora Radio Node V1.0 aufzutreiben. Aus diesem Grund habe ich selbst eine passende Leiterplatte mit Batteriehalter (für LiPo oder besser noch LiFePo4 Akkus) entwickelt, die alle Bauteile der Relaissteuerung enthält und noch viel Platz für eigene Ideen hat.

Die Software nutzt die LoRaWAN Geräteklasse Class A. Nach jedem Senden gibt es kleines Zeitfenster um eventuell vorhandene Datenpakete zu empfangen. Diese zu empfangenden Datenpakete sind a) der gewünschte Relaisschaltzustand oder b) die Zeitspanne wann wieder gesendet/empfangen werden soll. Als Zeitspanne zwischen einzelnen Sendevorgängen sind 1 bis 180 Minuten möglich. Hat man als Sendeintervall z.B. eine Stunde gewählt kommen nicht nur die Daten im Stundenintervall vom LoRaWAN Knoten, sondern dieser reagiert auch auf gesendete Schaltbefehle nicht eher. Will man in der kommenden Zeit Schaltvorgänge ausführen, dann könnte man eine Zeitlang die Sendeintervallzeit verringern, um damit Reaktionszeit zu erhöhen. Wer damit leben kann, dass in den kommenden 3 Stunden der Schaltvorgang ausgeführt wird, kann auch die energiesparendste Einstellung mit einem Sendeintervall aller 180 Minuten beibehalten.

Beim Senden eines einzelnen Bytes wird bei 0 das Relais ausgeschaltet und bei jedem anderen Wert 0x01-0xFF eingeschaltet.

Beim Senden eines Doppelbyte enthält das erste Byte den gewünschte Relaisschaltfunktion (0x00 = aus oder 0x01 =  ein) und im zweiten Byte den Sendeintervall als Hexzahl. Das Senden von 0x01 0x10 würde als künftige Sendeintervalle die Zeit von 16 Minuten (0x10) einrichten und das Relais mit der 0x01 einschalten. ACHTUNG ! Es gibt keine kürzeren Sendintervalle als 1 Minute und keine längeren als 180 Minuten. Das Senden von 0x00 0xFF würde also nur den Sendeintervall auf 180 Minuten einrichten und das Relais abschalten.

Bei jedem Sendeintervall werden 6 Byte übertragen. Die 6 Byte werden momentan wie folgt genutzt.

  1. Byte – 0x00 (Relais ist aus) oder 0x01 (Relais ist an)
  2. Byte – 0x01…0xB4 (Sendeintervall in Minuten 1-180 Minuten)
  3. Byte – MSB Spannung des Akkus (0x03 = 3.xxx Volt)
  4. Byte – erste Nachkommastelle Spannung (0x07 = x.7xx Volt)
  5. Byte – zweite Nachkommastelle Spannung (0x04 = x.x4x Volt)
  6. Byte – LSB oder dritte Nachkommastelle Spannung (0x09 = x.xx9 Volt)

Die simple Spannungsausgabe über die letzten 4 Byte habe ich gewählt, weil ich schnell und ohne erst rumzurechnen die Spannung des Akkus ablesen wollte.

Download der Schaltung als PDF (41 KB)
Download Layout / Bestückung oben als PDF (26 KB)
Download Layout / Bestückung unten als PDF (10 KB)
Download Datenblatt Relais HFD2-L5V als PDF (250 KB) in der Schaltung wird ein HFD2-L2 mit 5 Volt Spulenspannung verwendet
Download druckbares 3D Gehäuse STL-File als ZIP Datei (78KB)

Die notwendige Software (weiter unten)  lora_ttn-otaa_relais.c kannst Du für die Verwendung der Arduino IDE einfach in lora_ttn-otaa_relais.ino umbenennen.

Im folgenden Bild sind die sechs Empfangsbytes zu sehen. Von links nach rechts (Relais ist aus, Sendeintervall 1 Minute, Akkuspannung 3.261 Volt).

In diesen beiden Bildern schalte ich das Relais einmal ein und einmal aus.

..hier sende ich den Befehl Relais = ein und Sendeintervall auf 30 Minuten stellen 0x1Eh (30 Minuten)

In den Zeile 70, 74 und 78 unbedingt die eignen APPEUI DEVEUI ind APPKEY’s hinterlegen.

Über diesen Link direkt zum  Github Projekt.