LoRaWAN-Workshop

Taster-Node

Der Taster-Node überträgt den  Zustand bzw. die Änderung eines Tasters bzw. Schalters in LoRaWAN-Pakete.

Der Taster wird an den GPIO-Pin 36 angeschlossen. Ein 10k-Widerstand dient als Pulldown-Widerstand der dafür sorgt das bei geöffnetem Taster der Eingangs-Pin auf definiertem Pegel hängt. 

Für einen Test dieser Schaltung gibt es eine Anleitung und ein Testpogramm.

Der Taster-Node kann z.B. für verschiedene Zwecke eingesetzt werden:

  • Türüberwachung z.B. mit einem Reed-Kontakt
  • als "Klingelknopf"
  • ...

Es wird das Schliessen und das Öffnen des Kontakts getrennt übertragen und kann entsprechend unterschiedlich auf dem Applikationsserver ausgewertet werden. 

Der Quellcode für den Taster-Node findet man in unserem Github-Repo unter 

LoRaWAN_Button_1

Nach dem Herunterladen muss man die DevEUI und den AppKey entsprechend anpassen. 

Dazu muss man den Node zuerst im TTN anlegen und die EUI bzw. den Key dort generieren und in diese in den eigenen Quellcode einfügen. 

Dies erfolgt so wie schon bei dem ersten einfachen LoRaWAN-Node:

LoRaWAN-Node einrichten

Wir legen dazu eine neue Application an. Dann wird über "Add end device" der neue Taster-Node eingerichtet. 

Den passenden Payload-Formatter findet man im Arduino-Quellcoden ganz unten. Diesen muss man noch in das Feld für den Uploink-Payload-Formatter kopieren. 

Dies erfolgt in der selben Weise wie schon beim ersten einfachen LoRaWAN-Node:

Payload-Formatter

Wenn alles korrekt eingerichtet ist wird sich der neue Node im TTN-Netz anmelden ( "join" ). Dies wird auf dem Display mit "Join läuft" und "Join erfolgreich" angezeigt. 

Danach befindet sich der Node im Arbeitsmodus.  Er prüft zyklisch den Zustand des Tasters bzw. Schalters ab. Wenn der Taster betätigt wird erfolgt eine Aussendung. In der Payload wird der Zustand des Taster mit 0 bzw. 1 und die Information dass die Aussendung aufgrund einer Tasterbetätigung erfolgt übertragen. 

Der Node meldet sich regelmässig mit einem Datenpaket um dem Applikationsserver mitzuteilen das er noch "lebt". Die Zeitabstände können im Quellcode eingestellt werden. 

Auf dem Display werden folgende Informationen angezeigt:

  • Payload,  1 Byte   ( Bild ist dezent veraltet )
  • Taster-Zustand:  0 ( = offen ) bzw. 1 ( = geschlossen )
  • Zeit bis zur nächsten geplanten Aussendung ( "Herzschlag" )
  • Status der letzten Aussendung

Payload-Format:

Es wird ein Byte übertragen. Darin sind zwei Informationen in den zwei Nibbles gespeichert:

1. Nibble:   Taster-Kontakt   "button"

  0 = offen

  1 = geschlossen

2. Nibble:    Trigger-Info   0 oder 1   "buttonTrigger"

Es gibt zwei Arten von Aussendungen. Über die Trigger-Info können diese zwei Arten unterschieden werden:

  0 = geplant  "Herzschlag" 

  1 = bei Betätigung des Tasters bzw. Schalters

Beispiele:

00 Kontakt offen "Herzschlag"
10 Kontakt geschlossen "Herzschlag"
01 Kontakt wurde soeben geöffnet Trigger
11 Kontakt wurde soeben geschlossen Trigger

 

Um jetzt die zwei Bit als zwei 4-bit-Binärzahlen in ein Byte zu packen benötigt man im Quellcode eine kleine "Bitpfriemelei":

1. Schritt:

   mydata[ 0 ] = buttonState << 4;

hier wird das Bit des Kontakts um vier stellen nach links geschoben:

  0000 0001

ergibt:

  0001 0000

Damit ist der Status des Kontakts im höherwertigen Nibble abgelegt. 

Das Bit für den Trigger ( = Kontakt wurde betätigt ) wird hier dann direkt in das niederwertige Nibble geschrieben:

  mydata[ 0 ] = mydata[ 0 ] | 0x01;

Dies erfogt mit einer Oder-Verknüpfung:

   0001 0000 

   0000 0001

= 0001 0001

Damit sind zwei Informationen in einem Byte kodiert. Dieses Byte muss dann im Payload-Formatter wieder zerlegt werden. 

Weiterleitung ( Integration )

Es ist sinnvoll für diesen Node eine neue eigene Weiterleitung (Webhook) einzurichten. 

Dies erfolgt wie bei den anderen Nodes:

Integration (Weiterleitung)

Es sollte aber beim "call" eine neuer Parameter eingetragen werden. Damit kann man dann auf dem Webserver seine Nodes besser unterscheiden. 

Base URL => https://www.p37.de

Uplink Message => Enabled => LoRaWAN/ttn/ttn3.php?call=XXXXXX-Taster

Beispiel: ?call=DL8MA-Taster

 

...

powered by webEdition CMS