Cum verificăm acoperirea LoRaWAN TTN

Rețelele radio Long Range (LoRaWAN) permit dezvoltarea de rețele de senzori și de dispozitive IoT pe distanțe de ordinul kilometrilor cu un consum extrem de redus din puntul de vedere al dispozitivelor IoT. Rețelele publice LoRaWAN precum TTN permit utilizarea acestei tehnologii fără a avea grija infrastructurii (a sistemelor gateway ce fac legătura între rețeaua radio și Internet). Totuși, o problemă supărătoarea este dată de încercarea de a răspunde la întrebarea dacă locația unde dorim să poziționăm dispozitivul IoT propriu se află sau nu în acorperirea rețelei TTN (se află sau nu în aria de acoperire a unui gateway public TTN).

La prima vedere răspunsul la această întrebare se poate baza pe harta sistemelor gateway înregistrate pe platforma TTN de către utilizatori. În secțiunea COMMUNITIES a platformei selectăm zona sau orașul unde ne aflăm și putem vedea sistemele gateway din apropierea locului în care ne aflăm și aria aproximativă de acoperire (mai jos putem vedea acest lucru pentru municipiul București, jaloanele roșii indică sisteme gateway inactive):

2

Această metodă de evaluare a zonelor de acoperire nu oferă nici un fel de garanție. Aria de acoperire este estimată iar faptul că un gateway este activ nu semnifică altceva decât faptul că există legătură între acesta și platforma TTN (conexiune Internet) – un gateway activ poate foarte bine să aibă componenta LoRa inactivă. Un alt aspect ce poate conduce la o evaluare greșită este faptul că nu toți utilizatorii își fac publică locația dispozitivelor gateway sau, și mai problematic, introduc coordonate greșite.

O altă variantă de verificare este platforma TTN Mapper ce conține o hartă de acoperire a sistemelor gateway TTN bazată pe măsurători realizate de utilizatori. Această hartă este un mult mai bun punct de plecare în evaluarea unei locații în care puteți poziționa un sistem IoT LoRaWAN dar nici această metodă nu poate indica o acoperire provenită de la un gateway a căror coordonate au fost indicate greșit.

3

Cea mai bună soluție este să realizăm chiar noi măsurătoarea pentru locația dorită. Acest lucru se poate face utilizând un sistem emițător LoRa echipat cu un dispozitiv GPS (de exemplu o placă Seeeduino LoRaWAN with GPS, a se vedea și materialul „Using Seeeduino LoRaWAN with GPS and Loriot.io”) sau, și mai simplu, orice emițător LoRa și un telefon mobil Android.

Nu contează tipul emițătorului LoRa utilizat și nici natura mesajelor trimise către platforma TTN, contează doar ca emițătorul să fie înregistrat în cadrul platformei TTN. Se poate utiliza o placă Arduino Uno și un shield Dragino LoRa (a se vedea materialul „Cum să realizăm un sistem IoT LoRaWAN”) sau putem utiliza o placă LoPy LoRa (a se vedea materialul „LoRa meets ESP32”). Următorul pas, după punerea în funcțiune a nodului emițător TTN, este instalarea aplicației TTN Mapper pe telefonul mobil. La prima pornire a aplicației se va solicita asocierea cu nodul TTN utilizat. Această metodă pleacă de la premisa că nodul TTN și telefonul mobil pe care avem instalată aplicația TTN Mapper se află în aceiași locație. În cazul în care nodul TTN este mobil se poate evalua o zonă mai largă nu doar o locație anume. În momentul în care un pachet LoRa este primit de platforma TTN și provine de la nodul asociat aplicației, aplicația utilizează GPS-ul telefonului mobil pentru a indica platfomei TTN Mapper sistemele gateway ce au recepționat respectivul pachet, puterea semnalului pentru fiecare sistem gateway în parte și coordonatele punctului de unde a fost emis pachetul. Făcând un experiment bazat pe această metodă am obținut următoarele informații din aplicația TTN Mapper într-o locație din București (hartă de mai jos).

4

Experimentul a indicat că locația se află în acoperirea a două sisteme gateway TTN. Unul dintre ele se afla în imediata apropiere și era cunoscut dar cel de al doilea a reprezentat o surpriză fiind poziționat în Ciad.

5

Bineînțeles, este vorba de o eroare de introducere a coordonatelor de către proprietar (cel mai probabil o inversare a latitudinii și longitudinii). Chiar dacă distanța de comunicație în cazul LoRaWAN poate atinge zeci de kilometri nu ne putem aștepta la comunicații la mii de kilometri (e greu de crezut că LRX-BUX-76E5 Palatul telefoanelor se află în Ciad).

6

Astfel, putem vedea că un test de acoperire poate indica prezența unui sistem gateway în aria de acoperire a căruia ne aflăm și pe care nu aveam altfel cum să-l „descoperim”.

Cum să realizăm un gateway LoRaWAN

Acoperirea rețelelor LoRaWAN la noi în țară este destul de scăzută (atât a rețelelor comerciale cât și a rețelei TTN). Din acest motiv, pentru a testa un sistem IoT LoRaWAN (ca cel descris în „Cum să realiză un sistem IoT LoRaWAN”) uneori este necesară realizarea unui sistem gateway LoRaWAN propriu. Sistemele profesionale de acest tip sunt destul de scumpe reprezentând o variantă de lux, a se vedea studiul comparativ a celor de la LorIoT.

O altă variantă este construirea unui sistem gateway propriu utilizând o placă de dezvoltare de genul Raspberry Pi. Problema în acest caz este generată de complexitatea modulației radio LoRa – sistemele gateway fiind sisteme care ascultă frecvențe radio multiple simultan (sunt denumite și concentratoare). Din acest motiv un modul radio LoRa obișnuit nu poate echipa un sistem gateway LoRaWAN fiind necesar un modul de tip concetrator, de exemplu: iC880A – LoRaWAN Concentrator 868MHz – modul cel mai adesea folosit în sisteme gateway LoRaWAN bazate pe Raspberry Pi.

2

Pentru mai multe detalii despre cum puteți construi un sistem gateway LoRaWAN bazat pe un modul de tip concentrator puteți consulta și materialele:

Chiar dacă prețul unui modul concentrator este mai mic decât a unui gateway profesional construirea unui astfel de sistem implică totuși un buget destul de mare.

Singura alternativă, accesibilă ca buget, este realizarea unui sistem gateway LoRaWAN de tipul One Channel (sau Single Channel). Adică vom un utiliza un modul radio LoRa obișnuit împreună cu o placă de tipul Raspberry Pi pentru realizarea unui sistem gateway. Dezavantajul unui astfel de gateway este faptul că ascultă pe o singură frecvență radio neputând comunica simultan cu mai multe sisteme IoT LoRaWAN. Acest tip de sisteme sunt considerate sisteme de tip ”forwarder” (Single Channel Forwarder) neavând o funcționalitate gateway LoRaWAN completă. Totuși, un astfel de sistem poate fi utilizat în locații izolate (fără acoperire LoRaWAN) pentru a testa comunicația LoRaWAN. Rețeaua TTN permite accesul acestor sisteme în rețea dar nu încurajează și nu asigură suport pentru ele fiind considerate compatibile dar neconforme cu specificațiile LoRaWAN.

Pentru implementare vom utiliza o placă de dezvoltare Raspberry Pi 3 și un hat LoRa/GPS. Testele au fost realizate sub Raspbian 9 (stretch) Lite, kernel 4.9.41-v7+.

Placa Raspberry Pi trebuie să aibă protocolul SPI activat (cu ajutorul utilitarului raspi-config) și pachetul wiringpi instalat.

$sudo raspi-config

4

$sudo apt-get update

$sudo apt-get install wiringpi

Pentru a implementa funcționalitatea de redirecționare a comunicației LoRa către platforma TTN vom utiliza software-ul single_chan_pkt_fwd.

$ wget https://github.com/tftelkamp/single_chan_pkt_fwd/archive/master.zip

$ unzip master.zip

$ cd single_chan_pkt_fwd-master

$ nano main.cpp

În fișierul main.cpp vom personaliza următoarele linii:

int ssPin = 6;

int dio0  = 7;

int RST   = 0;

sf_t sf = SF7;

uint32_t  freq = 868100000;

// opțional, dacă dorim să declarăm

// poziția și altitudinea sistemului

float lat=…;

float lon=…;

int   alt=…;

static char platform[24] = “Single Channel Gateway”;

static char email[40] = “…”;

static char description[64] = “…”;

#define SERVER1 “52.169.76.203”

#define PORT 1700

Salvăm (CTRL+O, CTRL+X), compilăm programul și îl lansăm în execuție:

$ make

$ sudo ./single_chan_pkt_fwd

5

Următorul pas necesită înregistrarea sistemului gateway în cadrul platformei TTN. În momentul înregistrării sistemului gateway este foarte important să bifăm opțiunea ”I’m using the legacy packet forwarder” (nu se poate modifica ulterior) și să copiem Gateway ID din consola ssh în consola de înregistrare.

6

După terminare înregistrării vom putea observa în consola TTN conexiunea dintre sistem și platforma TTN (Gateway Overview):

7

Pentru a face ca programul single_chan_pkt_fwd să ruleze automat la repornirea sistemului de operare adăugăm următoarea linie în fișierul /etc/rc.local (înainte de linia cu exit 0):

sudo /home/pi/single_chan_pkt_fwd-master/single_chan_pkt_fwd &

presupunând că am salvat și realizat compilarea în directorul utilizatorului pi.

Pentru mai multe informații legate de realizarea unui gateway LoRaWAN TTN Single Channel se pot consulta și următoarele materiale:

Cum să realizăm un sistem IoT LoRaWAN

În cadrul proiectului ”LoRa meets Robofun IoT” am văzut cum putem realiza un sistem IoT utilizând comunicația radio LoRa. Utilizând module radio LoRa putem transmite date la mare distanță dar pentru implementarea unui sistem IoT este necesară implementarea atât a modulului de achiziție (sau acționare) cât și a sistemului de tip gateway ce face legătura cu rețeaua Internet și cu serviciile cloud IoT. Specificațiile LoRaWAN permit implementare unor rețele radio LoRa standardizate astfel încât sistemele gateway să permită conectarea dispozitivelor IoT după un set de reguli larg acceptate. Realizarea unui sistem IoT LoRaWAN presupune realizare unui sistem de achiziție / acționare care respectă acest set de reguli și se conectează la o infrastructură de gateway-uri deja existentă (nu mai este nevoie să realizăm și să operăm sistemul gateway). Există mai multe rețele de gateway-uri LoRaWAN dar în cadrul acestui proiect vom arăta cum putem realiza un sistem ce folosește rețeaua TTN (The Things Network). Accesul în rețeaua TTN este gratuit deoarece se bazează pe gateway-uri particulare partajate între utilizatorii rețelei. Tot ce trebuie să faceți este să verificați dacă vă aflați în aria de acoperire a unui sistem gateway TTN.

Pentru sistemul IoT vom utiliza o placă de dezvoltare Arduino Uno și un shield Dragino LoRa echipat cu un modul radio LoRa în frecvență de 868MHz. Pentru partea de achiziție vom exemplifica măsurarea temperaturii utilizând un senzor brick conectat la pinul analogic A0 al plăcii de dezvoltare.

3

Pentru implementarea comunicației LoRaWAN vom utiliza biblioteca Arduino-LMIC. Testele au fost realizate utilizând Arduino IDE 1.8.3 și versiunea 1.5.0+arduino-1 a bibliotecii. Programul pleacă de la exemplul ttn-abp al bibliotecii în care vom efectua o serie de mici modificări. În primul rând trebuie să înregistrăm sistemul pe platforma TTN pentru a obține datele de autentificare în rețea:

static const PROGMEM u1_t NWKSKEY[16] = { … };

static const u1_t PROGMEM APPSKEY[16] = { … };

static const u4_t DEVADDR = … ;

Înregistrarea presupune crearea unui cont de utilizator, definirea unei aplicații (Applications) și, în cadrul aplicației, definirea unui dispozitiv (Device). În secțiunea se setări (Settings) a noului dispozitiv trebuie aleasă metoda ABP de activare și debifată opțiunea Frame Counter Checks. Tot în cadrul acestei secțiuni se regăsesc datele de autentificare în rețeua TTN. Pentru mai multe detalii legate de definirea aplicației și dispozitivului în rețeua TTN se poate consulta și materialul „LoRaWAN IoT with Arduino Uno, Dragino v1.3 & TheThingsNetwork”.

4

Tot în secțiunea de inițializare a exemplului se va șterge declarația mesajului mydata (se va defini din nou în program sub o altă formă) și se va modifica intervalul de postare a mesajelor (postarea la 1 minut este destul de agresivă pentru politica de utilizare a rețelei TTN).

const unsigned TX_INTERVAL = 3600;

Shield-ul Dragino LoRa necesită următoarea modificare în structura de definire a pinilor utilizați:

const lmic_pinmap lmic_pins = {

    .nss = 10,

    .rxtx = LMIC_UNUSED_PIN,

    .rst = 9,

    .dio = {2, 6, 7},

};

Ultima modificare adusă exemplului ttn-abp este rescrierea procedurii do_send pentru a trasmite valoare achiziționată de la brick-ul de temperatură în locul mesajului text predefinit. După cum se poate observa se va transmite valoarea returnată de funcția analogRead, prelucrarea numerică pentru a obține valoarea temperaturii se va face în sistemul cloud TTN.

void do_send(osjob_t* j){

    static uint8_t mydata[2];

    int reading = analogRead(A0);

    mydata[0] = highByte(reading);

    mydata[1] = lowByte(reading);

    if (LMIC.opmode & OP_TXRXPEND) {

        Serial.println(F(“OP_TXRXPEND, not sending”));

    } else {

        LMIC_setTxData2(1, mydata, sizeof(mydata), 0);

        Serial.println(F(“Packet queued”));

    }

}

După punerea în funcțiune a sistemului, și dacă vă aflați în aria de acoperire a unui gateway TTN, în consola TTN vor începe să apară valorile transmise de acesta (secțiunea Application Data). După cum se poate observa datele transmise sunt sub forma unui șir de valori în hexazecimal (2 octeți – 16 biți).

5

Pentru a transforma datele primite într-o formă mai ușor de înțeles se va scrie o funcție de decodare (în secțiunea Payload Formats / decoder). Această funcție va avea și rolul de a calcula temperatura echivalentă valorii achiziționate. După implementarea acestei funcții vom putea vedea în secțiunea de Application Data valoarea efectivă a temperaturii.

function Decoder(bytes, port) {

  var decoded = (((((bytes[0]<<8)|bytes[1])*5.0)/1024.0)-0.5)*100;

  return { value:decoded };

}

6

Atenție!!! Platforma TTN nu este o platformă IoT – nu stochează datele preluate de la sistemele LoRaWAN. Datele se pot observa în consolă doar dacă sunt transmise atunci când consola este deschisă. Platforma TTN permite în schimb transmiterea datelor primite prin rețeaua LoRaWAN către alte platforme online inclusiv platforme IoT. În secțiunea Integrations se pot defini diverse mecanisme automate de redirectare a datelor către sisteme precum Cayenne, OpenSensors sau IFTTT. Vom explica în cele ce urmează cum putem transmite datele către serviciul IFTTT care ne va trimite apoi valoarea temperaturii prin email. Bineînțeles, multitudinea de opțiuni oferite de platforma IFTTT permite redirectarea datelor către un serviciu IoT, postarea pe o rețea de socializare sau interacțiunea directă cu alte dispozitive IoT.

Definirea mecanismului automat de trimitere a datelor către serviciului IFTTT presupune adăugarea unui integrator de tipul IFTTT Maker (add integration / secțiunea Integrations). Conexiunea între cele două servicii (TTN și IFTTT) se realizează pe baza Event Name (trebuie să fie identic cu numele declanșatorului IFTTT) și Key (cheie de autentificare oferită de obiectul IFTTT Webhooks).

7

În cadrul platformei IFTTT se va realiza o regulă ce va avea declanșator serviciul Webhooks (Event Name trebuie să fie identic cu cel definit în platforma TTN) și ca efect transmiterea unui email.

8

La fiecare valoare a temperaturii transmisă de sistemul nostru vom primi un email de forma:

9

Pentru mai multe variante de realizare a unui sistem IoT LoRaWAN se pot consulta și următoarele materiale: