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
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:
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:
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:
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
...