LoRaWAN

Riferimento del driver LoRaWAN - il server di rete Basics Station integrato, i certificati dei gateway, le registrazioni di sensore e di concentratore, e l'indirizzamento del payload.

Visualizza come Markdown

Il driver LoRaWAN fa di Ganter Lab un piccolo server di rete LoRaWAN. La direzione del rapporto è rovesciata rispetto alla maggior parte dei driver: la stazione non va a cercare un sensore, è il gateway a collegarsi a Ganter Lab, e i sensori consegnano le loro letture come uplink attraverso quel gateway. Ganter Lab incorpora un server di rete che parla il protocollo LoRa Basics Station di Semtech, quindi qualunque gateway con firmware Basics Station può usare questa stazione come proprio LNS.

Il server integrato parte quando il primo dispositivo LoRaWAN abilitato viene caricato nel connector in funzione, non all'avvio dell'applicazione, e si ferma quando l'ultimo viene rimosso o disabilitato: senza alcun sensore e alcun concentratore configurato, sulla porta non ascolta proprio nulla. Aggiungerne uno lo fa tornare, senza riavviare l'applicazione.

Ogni dispositivo sotto il driver è una di due registrazioni, scelta nel suo pannello:

  • Un sensore, identificato dal suo DevEUI e ammesso con la sua chiave applicativa. I suoi tag decodificano il payload dell'uplink.
  • Un concentratore radio (il gateway), identificato dal suo EUI della stazione e registrato in una regione radio scelta da un elenco. Non porta tag propri: la sua pagina tiene Aggiungi tag disattivato, con il motivo, finché il dispositivo non è registrato come sensore.

Registra il concentratore oltre ai sensori. Un concentratore Basics Station chiede la propria configurazione radio appena si collega e non ritrasmette proprio nulla finché non gli si risponde, quindi una stazione che non ha mai visto il suo EUI della stazione lascia senza valore ogni sensore che gli sta dietro mentre la connessione stessa sembra sana. La risposta viene costruita qui a partire dalla regione scelta; non c'è alcun testo di configurazione da incollare.

Preparare il gateway

È il gateway a chiamare questa stazione, tramite LoRa Basics Station, e di fabbrica non sa dove si trovi. La pagina di ogni dispositivo registrato come concentratore radio porta la scheda Preparare il gateway, con quello che va inserito nelle impostazioni Basics Station del gateway, scritto per questa stazione:

Che cosa configurare sul gateway Che cosa dà la scheda
Indirizzo dell'LNS (il tc.uri di Basics Station) wss://<indirizzo>:5001, prima con l'indirizzo dato dal nome di questa stazione (il « Nome di rete » della configurazione del server OPC UA integrato, o il nome del computer finché è vuoto), poi una volta per ogni indirizzo IPv4 che questa stazione ha su una rete, ciascuno con un pulsante di copia. Un gateway che verifica il nome del server, come fa Basics Station di default (TLS_SNI), ha bisogno dell'indirizzo dato dal nome; uno che non lo verifica accetta uno qualsiasi, e allora basta quello della sua rete.
EUI della stazione L'EUI della stazione del concentratore, con un pulsante di copia: l'identità con cui questo dispositivo registra il gateway. Ogni gateway è un dispositivo concentratore a sé. Finché è vuoto, la scheda dice di inserirlo nella scheda Connessione.
Certificato client (tc.crt, con la sua chiave in tc.key) TLS reciproco: il gateway presenta un certificato client che riporta il suo EUI della stazione nel nome comune o in un nome alternativo DNS (vedere Certificati).
Certificato del server di cui fidarsi (tc.trust) Il percorso completo di GanterLabConnector-<station>.pem, il certificato radice di questa stazione, con il pulsante Apri la cartella, che mostra il file in Esplora file di Windows. Il pulsante funziona nella finestra della stazione stessa; in un browser su un altro dispositivo resta in grigio e dice perché. Il file viene scritto al primo avvio del server di rete, e fino ad allora la scheda lo dice.

La scheda è aperta finché il gateway non si è collegato dall'apertura della stazione, e si richiude una volta collegato: resta nella pagina per la prossima volta che il gateway verrà configurato. Un gateway il cui certificato non è garantito da nessuna radice installata in Windows viene rifiutato alla prima connessione e attende in Accesso delle apparecchiature. Un gateway che parla solo il protocollo Semtech UDP packet forwarder non può collegarsi: gli serve un firmware Basics Station.

Il file è lo stesso per tutti i gateway di questa stazione, e non cambia quando cambiano il nome o gli indirizzi della stazione. Un gateway con le impostazioni predefinite di Basics Station accetta la stazione: nella sua configurazione non occorre disattivare nulla.

Ogni gateway che ha ricevuto un file da una versione precedente ha bisogno di questo, installato una volta come tc.trust. Al primo avvio di questa versione, una stazione i cui gateway possono avere un file precedente mostra sulla scheda un avviso, Il file di questa stazione è cambiato, solo in quell'esecuzione. L'avviso è un promemoria, non l'istruzione: installare il nuovo file una volta su ogni gateway di una stazione che aveva già gateway, che la scheda mostri l'avviso o no.

Server di rete e porte

Che cosa Valore
Protocollo LoRa Basics Station (WebSocket, JSON)
Ascolto Tutte le interfacce, porta TCP 5001, solo TLS
Indirizzo del gateway wss://<station-address>:5001
Endpoint di rilevamento La richiesta router-info di Basics Station viene servita sullo stesso ascolto
Connessione dati Indirizzata dall'EUI della stazione del gateway come ultima parte del percorso WebSocket

L'ascolto è sempre in TLS. Non esiste alcuna impostazione che spenga la cifratura: un ascolto in HTTP semplice viene rifiutato ovunque tranne che in loopback, che dalla rete di stabilimento è irraggiungibile ed esiste solo per le prove interne al processo.

Certificati

L'ammissione avviene con TLS reciproco: il server dimostra chi è con il proprio certificato, e ogni gateway deve dimostrare chi è con un certificato client.

Certificato del server. Il server di rete presenta un certificato firmato dalla radice propria di questa stazione, la stessa su cui si appoggia il sistema centrale OCPP. La radice viene creata una volta per profilo, al primo avvio di uno dei due server, e conservata nella cartella dati dell'applicazione:

  • GanterLabConnector.pfx, sotto ua\pki\own\private: la chiave privata, cifrata con una password casuale a sua volta protetta per utente Windows (DPAPI), così la coppia di file non si apre per nessuno se copiata altrove.
  • GanterLabConnector-<station>.pem, sotto ua\pki\station: il certificato radice pubblico. È il file che si installa sul gateway come tc.trust perché si fidi di questa stazione.

Il soggetto della radice è Ganter Lab Connector (<station>), dove <station> è il nome di rete nel giorno in cui è stata creata, e non scade. La sua metà pubblica si installa su ogni concentratore una volta, a mano, quindi una radice che scadesse metterebbe fuori uso l'intera rete di sensori nel giorno del suo anniversario, rifiutata al concentratore dove questa stazione non vede nulla, e costerebbe una visita a ogni concentratore per rimetterla in funzione. Non c'è alcun avviso di scadenza né comando di rinnovo, perché non c'è nulla da rinnovare; la scheda Certificato radice della stazione, nella pagina del driver, mostra la data che porta come sola lettura (Valido fino al), con il percorso completo del file pubblico e un pulsante Apri la cartella che lo mostra in Esplora file di Windows (nella finestra della stazione stessa; in un browser su un altro dispositivo il pulsante resta in grigio e dice perché).

Il certificato che il server di rete presenta sotto quella radice riporta il nome di rete della stazione (il « Nome di rete » della configurazione del server OPC UA integrato; il nome del computer finché è vuoto), localhost e ogni indirizzo IPv4 della stazione, perciò un gateway che verifica il nome del server lo accetta. Rinominare il computer, cambiare il nome di rete o cambiare gli indirizzi della stazione non sostituisce la radice: viene emesso di nuovo, da solo, soltanto il certificato sotto di essa, senza nulla da fare sui concentratori.

La radice viene creata di nuovo solo quando quella memorizzata non si può più aprire, per esempio perché è stata scritta da un altro account Windows. In quel caso, e al primo avvio di questa versione su una stazione che può aver già dato un file precedente ai concentratori, la pagina del driver dice, una volta, sotto I concentratori hanno bisogno del nuovo file di certificato, che a ogni concentratore va consegnato il nuovo GanterLabConnector-<station>.pem come tc.trust. Finché non lo si fa, non riescono a connettersi.

Certificato client del gateway. Ogni gateway deve presentare un certificato client durante l'handshake TLS; un handshake senza viene lasciato cadere prima che passi alcun dato. Il certificato deve:

  1. Essere attendibile in uno di due modi: costruisce una catena valida su questa macchina Windows, fino a una radice installata lì; oppure proprio questo certificato è stato approvato in Accesso delle apparecchiature sulla pagina di questo driver (più sotto). In entrambi i casi deve essere entro le sue date di validità. Un controllo fallito rifiuta la connessione, e il diario registra quale controllo è fallito.
  2. Portare l'EUI della stazione del gateway nel proprio common name di soggetto oppure in un nome alternativo di soggetto DNS. L'identificatore viene letto come valore, quindi AABBCCDDEEFF0011, AA-BB-CC-DD-EE-FF-00-11 e AA:BB:CC:DD:EE:FF:00:11 nominano tutti la stessa stazione.
  3. Nominare la stessa stazione che la connessione dati dichiara di essere: un certificato che nomina un gateway diverso da quello dell'indirizzo di connessione viene rifiutato.

Accesso delle apparecchiature

Un gateway il cui certificato non è garantito da nessuna radice installata in Windows, perché è autofirmato o emesso dall'autorità del produttore stesso, non ha bisogno che quella radice sia installata su questo computer. La sua prima connessione viene rifiutata, e il suo certificato attende in Accesso delle apparecchiature, in fondo alla pagina del driver LoRaWAN, la stessa scheda della pagina del driver OPC UA, fino a una decisione:

Gruppo Che cosa elenca Che cosa si può fare
In attesa di approvazione Ogni certificato rifiutato, sotto l'EUI della stazione che porta: la sua impronta SHA-256, l'ultimo tentativo e quanti tentativi, e i suoi dettagli (soggetto, emittente, nomi di dominio, date di validità). Approva ammette il certificato dalla prossima connessione del gateway. Blocca continua a rifiutarlo senza elencarlo di nuovo qui. Scarta tutti i certificati in attesa svuota l'elenco senza approvare né bloccare nulla.
Apparecchiature approvate I certificati approvati o importati, con chi ha deciso e quando. Ritira l'approvazione chiude la connessione del gateway e riporta il suo certificato nell'elenco. Importa certificato approva il certificato pubblico di un gateway prima della sua prima connessione.
Apparecchiature bloccate I certificati bloccati. Un certificato bloccato viene rifiutato anche se Windows lo considera attendibile. Sblocca riporta il certificato nell'elenco, senza approvarlo.

Ogni certificato viene approvato a sé, mai l'autorità che lo ha firmato: un secondo gateway dello stesso produttore attende quindi la propria approvazione. Confrontare l'impronta con quella indicata dal gateway prima di approvarlo. L'approvazione non cambia quale gateway sia il certificato: resta ammesso solo sotto l'EUI della stazione che porta, e solo entro le sue date di validità. Un certificato che Windows considera già attendibile viene ammesso come prima e non compare mai qui; nulla viene approvato automaticamente.

Le decisioni sono conservate nella cartella dei dati della stazione, in ua\pki\lorawan, e sopravvivono a un riavvio. I comandi vengono disegnati solo per un ruolo che può configurare il Connector, e agiscono solo nella finestra della stazione stessa: un browser su un altro dispositivo legge la scheda senza modificarla, e nessuno strumento di un agente approva un certificato. L'elenco tiene fino a 100 certificati in attesa di approvazione; quando è pieno, uno nuovo resta rifiutato ma non viene elencato, e la scheda lo dice.

Campi di connessione

Un dispositivo LoRaWAN non ha un host o una porta propri: un sensore si raggiunge attraverso qualunque concentratore porti il suo traffico radio, e un concentratore raggiunge questa stazione. Il pannello mostra prima il selettore della registrazione, poi i campi di cui quella registrazione ha bisogno.

Campo Che cos'è Formato Predefinito
Registrato come Quale delle due registrazioni è questo dispositivo: Sensore oppure Concentratore radio. Cambiarlo svuota il campo sottostante, perché una chiave applicativa e una regione non sono la stessa cosa. Sensore / Concentratore radio Sensore
DevEUI del sensore Il DevEUI del sensore, l'identità che presenta nella sua richiesta di ingresso in rete. 16 cifre esadecimali, nude (8899AABBCCDDEEFF), con i trattini (88-99-AA-BB-CC-DD-EE-FF) oppure con i due punti. vuoto
Chiave applicativa (sensore) La chiave applicativa OTAA del sensore (AppKey). Autentica l'ingresso in rete e ne deriva le chiavi di sessione. Esattamente 32 cifre esadecimali, senza separatori. vuoto
EUI della stazione (concentratore) L'EUI della stazione del concentratore, lo stesso identificatore che il suo certificato client deve portare e quello che mette nel proprio indirizzo di connessione. 16 cifre esadecimali, in una qualunque delle grafie qui sopra. vuoto
Regione radio (concentratore) Dove si trova il concentratore. Decide i canali, le velocità di trasmissione e le finestre di ricezione che questa stazione gli passa alla connessione. Si sceglie dall'elenco; non c'è testo libero. Europa 868 MHz, Stati Uniti 915 MHz, Australia 915 MHz, Asia 923 MHz, Cina 470 MHz (revisione 1), Cina 470 MHz (revisione 2) Europa 868 MHz
Tempo massimo senza trasmissione (sensore) I secondi per cui questo sensore può restare muto prima che i suoi valori memorizzati smettano di contare come letture. 0 disattiva la scadenza. Vedi qui sotto. 0 o più 3600

Un dispositivo il cui DevEUI (sensore) o EUI della stazione (concentratore) è ancora vuoto, come uno appena aggiunto, lo aspetta. La stazione non lo registra sul server di rete e non tenta alcuna connessione, la sua riga nell'albero e l'avviso in cima alla sua pagina dicono « DevEUI non ancora inserito » o « EUI della stazione non ancora inserito » invece di mostrare un errore, Riconnetti non ha nulla da riaprire, e il suo stato di salute resta Non ancora noto. Inserisci l'identificatore nella scheda Connessione e la stazione registra il dispositivo. Un dispositivo salvato con l'identificatore vuoto e chiamato con il suo EUI (sedici cifre esadecimali, senza separatori) non aspetta: si registra con il suo nome, come ha sempre fatto.

La chiave applicativa è un segreto e la stazione la tratta come tale. Il pannello la nasconde dietro i pallini, con una casella Mostra la password che la scopre mentre si controlla quello che è stato scritto; il database di configurazione la conserva protetta sotto l'account Windows che l'ha inserita; e non compare né nel diario né nell'indirizzo che il driver legge, il quale porta soltanto il DevEUI. Apri la stessa configurazione sotto un altro account Windows e la chiave non si apre con essa: il campo torna vuoto, dicendo "Non è leggibile su questo account Windows: si apre solo sulla macchina e sull'account Windows che l'hanno inserito. Reinserirlo qui.", e il sensore smette di entrare in rete finché non reinserisci la chiave. Una configurazione portata via in un backup la mantiene, perché il backup è sigillato con la password che gli dai.

L'ingresso in rete è solo OTAA: il sensore compie un ingresso via radio attraverso il concentratore, e il server di rete gli risponde usando l'AppKey configurata. Una richiesta di ingresso da un DevEUI che nessun dispositivo configurato porta viene rifiutata e registrata nel diario. L'attivazione per personalizzazione (ABP, con chiavi di sessione preimpostate) non è supportata. La sessione di un sensore appartiene a questa stazione, non al concentratore che ne ha inoltrato l'ingresso in rete: con più di un concentratore a portata, i suoi uplink arrivano attraverso quello che li sente, e un concentratore che cade o viene tolto non si porta via nessun sensore.

Disabilitare o eliminare un dispositivo lo toglie subito dal server di rete, senza aspettare un riavvio: la sua chiave lascia il registro, la sessione che teneva su questa stazione viene rilasciata, e il suo ingresso successivo viene rifiutato. Disabilitare o eliminare un concentratore chiude anche subito la sua connessione, e i sensori che inoltrava mantengono le loro sessioni.

Una registrazione che il server non accetta non viene fatta affatto: un DevEUI o un EUI della stazione che è inserito e non è di 16 cifre esadecimali, una chiave applicativa che manca o che non è di 32 cifre esadecimali, oppure una regione che questa stazione non sa configurare. Il dispositivo si legge come non connesso, la sua riga nell'albero e il testo rosso sotto l'intestazione della sua pagina nominano il campo rifiutato e ciò che deve contenere, e il diario tecnico conserva la stessa riga. Il server di rete non viene avviato per lui, e la stazione non ritenta la stessa registrazione: è la correzione del campo a riportare il dispositivo, e Riconnetti risponde con lo stesso rifiuto.

Lo stato di salute del concentratore

Un concentratore non porta tag, quindi nessuna lettura può dire se c'è. Il suo stato di salute, il punto sulla sua riga nell'albero e la colonna Stato di salute nella pagina del driver, è se il suo gateway è connesso a questa stazione:

Situazione Stato di salute
EUI della stazione ancora vuoto Non ancora noto: non è registrato nulla
Registrato, il gateway non ancora connesso (il suo certificato ancora in attesa di approvazione, per esempio) Non connesso
Il gateway connesso Connesso
Il gateway caduto: fermato, staccato o isolato dalla rete Non connesso, finché non si riconnette
Disabilitato Disabilitato

Per al massimo dieci secondi dopo che una modifica al concentratore viene salvata, o che il Connector si avvia, si legge Non ancora noto: registrarlo di nuovo chiude la connessione del gateway, e il gateway impiega un momento a riconnettersi. I sensori conservano il proprio stato di salute, dalle loro letture, qualunque sia quello del concentratore: con più di un concentratore a portata, quello che cade lascia gli altri a consegnare.

Che cosa viene inviato al concentratore

Quando un concentratore registrato termina il proprio handshake di versione, questa stazione risponde con la configurazione radio della sua regione: l'intervallo di frequenza, le velocità di trasmissione e quali di esse sono solo in discesa, e il piano di canali predefinito della regione. Se l'EUI della stazione non è registrato qui, non viene inviato nulla, e il diario dice quale stazione ha chiesto e che non è registrata. È questa la voce da cercare quando un concentratore si collega e nessun sensore dietro di lui riferisce mai un valore.

Non ci sono campi per l'intervallo di interrogazione. LoRaWAN funziona a spinta: è il sensore a decidere quando fa un uplink, il server conserva i payload decodificati più recenti per ogni dispositivo, e i valori dei tag si aggiornano da quella cache su un ciclo fisso di un secondo.

Un sensore che non ha ancora fatto un uplink non ha quindi alcuna lettura, non una lettura fallita. I tag restano vuoti, il dispositivo riferisce che non è stato osservato nulla invece di andare non connesso, e nel diario non viene registrato alcun fallimento: aspettare il primo uplink è il protocollo che funziona. Un indirizzo che non risolve nulla dentro un payload che il sensore ha invece inviato è un'altra cosa, e viene riferito per la lettura fallita che è.

Quando un sensore ammutolisce

Poiché nulla interroga un sensore, il payload che ha inviato per ultimo resta in quella cache finché non ne invia un altro. Lasciato a sé, un sensore la cui batteria si è esaurita continuerebbe a pubblicare lo stesso numero come lettura buona per tutto il tempo in cui la stazione gira, alimentando grafici, storici e allarmi con un valore che ha smesso di essere vero.

Ogni sensore porta quindi un tempo massimo senza trasmissione, in secondi, nel proprio pannello. Il valore predefinito è 3600 secondi, un'ora, che copre con margine la cadenza da dieci a trenta minuti di un sensore comune; un sensore che riferisce più di rado alza il proprio. Superata quella scadenza:

  • I suoi tag smettono di portare un valore e pubblicano cattiva qualità, invece di ripetere l'ultimo uplink.
  • Il pannello del dispositivo dice quando il sensore ha trasmesso l'ultima volta, così si vede da quanto tempo è muto.

Mettere il campo a 0 disattiva la scadenza per quel sensore: il suo ultimo uplink continua a valere come buono a tempo indeterminato. Nient'altro cambia, e nessun payload memorizzato viene scartato.

Indirizzamento dei tag

Un tag LoRaWAN indirizza byte dentro il payload decodificato dell'uplink. Non c'è alcun indirizzo a testo libero; la scheda Sorgente offre campi tipizzati in due modi, commutati dalla casella di spunta Indirizza per canale/tipo Cayenne LPP:

Campo Che cosa fa Valori Predefinito
Indirizza per canale/tipo Cayenne LPP Disattivo: il campo del canale è un semplice scostamento in byte. Attivo: il payload viene esaminato in cerca di una coppia canale/tipo Cayenne LPP. attivo / disattivo disattivo
Canale / scostamento nel payload Modo scostamento: lo scostamento in byte, in base 0, da cui il valore comincia. Modo LPP: il numero di canale LPP da cercare. 0 o più 0
Codice di tipo LPP Solo nel modo LPP: il byte di tipo di dato Cayenne LPP che segue il byte del canale (per esempio 103 per la temperatura). I byte del valore vengono letti subito dopo la coppia canale/tipo corrispondente, e quando corrispondono più payload vince il più recente. 0 o più 0
Lunghezza di lettura (byte, vuoto = automatico) Quanti byte del payload compongono il valore. Vuoto la ricava dal tipo di dato: 1 per Boolean e Byte, 2 per Int16, 4 per Int32 e Float, 16 per String. 1 o più, oppure vuoto vuoto
Maschera di bit (esadecimale, vuoto = nessuna) Una maschera esadecimale messa in AND sui byte grezzi prima di ogni altra cosa (per esempio 0x0FFF per far cadere i bit di stato). Il prefisso 0x è facoltativo e una maschera di lunghezza dispari viene riempita a sinistra. La maschera deve coprire esattamente tanti byte quanti ne legge la lunghezza di lettura, altrimenti la lettura va in errore. testo esadecimale oppure vuoto vuoto
Byte più significativo per primo (MSB first, big-endian) Dichiara che il payload porta il valore in big-endian; i byte letti vengono rovesciati prima della conversione. Qui non c'è alcuna casella per l'ordine delle parole: un payload di lunghezza arbitraria non ha parole a 16 bit da scambiare. attivo / disattivo disattivo
Moltiplicatore (vuoto = nessuno) Un fattore lato bus applicato dal server di rete subito dopo la decodifica, prima che il valore entri nella catena di conversione propria del tag. Vale solo per i tipi numerici. Uno 0 viene rifiutato dove viene scritto (« Un moltiplicatore pari a 0 azzererebbe ogni lettura. »), perché riferirebbe ogni lettura del tag come 0 con qualità buona. qualunque numero diverso da 0, oppure vuoto vuoto

L'ordine delle operazioni a ogni lettura è: prendere i byte indirizzati → applicare la maschera di bit → rovesciare se il byte più significativo viene per primo → convertire nel tipo di dato del tag → applicare il moltiplicatore (tipi numerici).

Esempi, per un sensore il cui payload di 11 byte porta una temperatura Int16 big-endian allo scostamento 2:

  • Modo scostamento: canale/scostamento 2, lunghezza di lettura 2, byte più significativo per primo attivo.
  • Modo LPP, stesso sensore che parla Cayenne LPP sul canale 1 con il tipo 103: spunta la casella LPP, canale 1, codice di tipo 103, lunghezza di lettura 2.

Tipi di dato supportati

Tipo Byte letti (automatico) Come vengono interpretati i byte
Boolean 1 Zero è false, qualunque altra cosa true
Byte 1 Byte senza segno
Int16 2 Intero con segno a 16 bit
Int32 4 Intero con segno a 32 bit
Float 4 IEEE 754 a precisione singola
String 16 Testo UTF-8 della lunghezza di lettura

Scritture e rilevamento

I tag LoRaWAN sono di sola lettura: i valori arrivano solo dagli uplink dei sensori, il campo dell'accesso non offre alcuna scelta scrivibile, e il runtime rifiuta una scrittura invece di fingere che sia riuscita. I downlink esistono nel protocollo come traffico di rete (accettazioni di ingresso, comandi MAC), mai come scritture di valore su un tag.

Il driver non ha alcuna scansione di rilevamento. Aggiungi a mano il concentratore con il suo EUI della stazione e la sua regione, e ogni sensore a mano con il suo DevEUI e la sua AppKey; il flusso generale per aggiungere un dispositivo è descritto nella pagina Connector.