LoRa¶
Te doen
- lora radio
- lorawan netwerk
- TheThingsNetwork
LoRa radio¶
- instelbaar: bereik vs. bitrate (SF, modulatiemethode) (en vermogen?)
- 868MHz, vrij band met beperkingen (1% of soms 0,1%)
- spread-spectrum technologie; gebruikt van “chirps” om interferentie en andere verstoringen te verminderen
- eventueel zonder LoRaWan netwerk te gebruiken, als radio voor pakket-communicatie.
LoRa hardware¶
- Hope RFM95-module (op basis van SX1276)
- Adafruit RFM95-module:
- Adafruit Feather - e.g., M0 LoRa:
- Arduino MK1300 WAN (LoRa) - op basis van Murata CMWX1ZZABZ Lo-Ra module
- Arduino mini pro met RFM95:
- PyCom - LoPy (https://pycom.io)
LoRaWan software¶
- LMIC (voor Arduino IDE; werkt o.a. met Arduino UNO, mini; ESP8266; Feather M0?)
- https://github.com/matthijskooijman/arduino-lmic
- voor RFM95 e.d. (SX1276-module)
- Arduino library
- https://www.arduino.cc/en/Reference/MKRWAN
- NB: de Arduino MKR 1300 gebruikt een LoRa-module waarin de LoRa-software geïntegreerd is. Deze zorgt er o.a. voor dat aan de 868Mhz- en LoRa-eisen voldaan wordt.
TheThingsNetwork¶
- https://www.thethingsnetwork.org
- documentatie: https://www.thethingsnetwork.org/docs/
- projecten, tutorials: https://www.thethingsnetwork.org/labs/
- forum: https://www.thethingsnetwork.org/forum/
Application¶
Bij het aanmaken van een TTN-toepassing kies je hiervoor een unieke naam (AppID
).
Deze naam wordt onder meer gebruikt in de IoT-knopen en in de externe interfaces (mqtt e.d.).
Devices¶
IoT-knopen (devices) zijn onderdeel van een toepassing (application).
Bij het aanmaken van een IoT-knoop (register) als onderdeel van een toepassing (application) kies je hiervoor een unieke naam. Deze naam wordt onder meer gebruikt in de IoT-knopen en in de externe interfaces (mqtt e.d.). De naam van een device kun je later niet meer veranderen.
Je moet ook een unieke device-EUI kiezen (8 bytes).
(Waarvoor wordt deze EUI gebruikt?). App-EUI en device-EUI worden gebruikt als MAC-adressen (als ik het goed begrijp). Deze adressering is van belang bij een “join” van het netwerk. Daarna krijgt een device een dynamisch 32-bits adres (ik neem aan dat dit uniek is voor het netwerk). (Is dit regio-gebonden? gebonden aan de gateways? je wilt niet in de adres-problemen komen met grote aantallen knopen…)
Je moet ook opgeven op welke manier het device (de IoT-knoop) zich aanmeldt bij het netwerk. Hiervoor zijn er twee mogelijkheden:
- OTAA (Over the air activation)
- ABP (Activation by personalization)
Daarnaast zijn er nog de volgende gegevens bij een device:
- device address (for OTAA: assigned during activation; for ABP: )
- (te vergelijken met een dynamisch IP-adres?)
- network session key (for OTAA: assigned during activation; for ABP: )
- deze wordt gedeeld met het netwerk, en o.a. gebruikt voor het controleren van de integriteit van een pakket. Dit voorkomt tampering van pakketten.
- app session key (for OTAA: assigned during activation; for ABP: )
- voor end-to-end encryptie van de payload tussen de IoT-knoop en de TTN-application. Voor het netwerk daartussen (o.a. de gateway) is deze payload niet leesbaar.
==> Welke rol spelen deze? o.a. m.b.t. de security? versleuteling?
Frame counters:
- voorkomen van replay attack;
- NB: bij een reset van een IoT-knoop met ABP begint de knoop weer bij 0 te tellen; dit wordt door het netwerk beschouwd als een potentiële replay; pas bij een nieuwe framecounter-waarde worden de berichten geaccepteerd. Dit betekent dat je bij een reset van een IoT-knoop (hardware) met ABP, ook in de application de framecounter weer moet resetten. (Je kunt de framecounter-check ook uitschakelen: in een experimentele situatie is security niet altijd belangrijk.)
Configureren IoT-knoop¶
De gegevens van de TTN-application en van het device gebruik je voor het configureren van de eigenlijke IoT-knoop. In de (arduino)-software moet je de volgende waarden instellen (in het geval van OTAA-activatie).
Zie: https://www.thethingsnetwork.org/labs/story/creating-a-ttn-node, “Using Activation by Personalization (ABP)”.
In het geval van ABP (activation by personinalization) moet je de volgende gegevens in de Arduino-code invoeren:
- Device address
- Network-session-key
- App-session-key
(In dit geval zie je geen Join-berichten verschijnen: de data-berichten verschijnen - of niet…)
Integratie met een eigen toepassing¶
- via mqtt (en JSON)
- Dit interface is beschreven in: https://www.thethingsnetwork.org/docs/applications/mqtt/quick-start.html
- via http
(De structuur van een topic is: <app-id>/devices/<dev-id>/up
etc.; de id-s zijn unieke namen.)
Alternatief: http integration (“push based…”)
Opmerkingen¶
Soms worden er LoRa-gateways aangeboden rond de 100 Euro; dit zijn geen echte multi-channel gateways, maar “uitgebreide LoRa-knopen”. Gebruik van dergelijke gateways beperkt de LoRa-dekking voor andere LoRa-netwerken in de buurt.