Spravovaný síťový server
Síťový server LoRaWAN pro EMBER (ChirpStack nebo The Things Stack) můžete provozovat na vlastní infrastruktuře (viz ChirpStack a The Things Stack), nebo ho jako spravovanou službu provozuje HARDWARIO. Tato stránka popisuje spravovanou službu. Kromě spravovaného síťového serveru může HARDWARIO volitelně dodat také SIM kartu s konektivitou pro páteřní připojení LTE a bezpečný vzdálený přístup přes OpenVPN.
Ke spravované službě potřebujete alespoň jedno zařízení EMBER Hotspot.
Ve službě dostanete vlastní instanci ChirpStack a Node-RED, obě dostupné přes webové rozhraní pro správu.
Přístup zabezpečuje protokol HTTPS/TLSv1.3. Uživatelskou identitu ve spravované službě vytvoří tým HARDWARIO při zřízení služby.
Ke správě služby nepotřebujete v počítači ani v mobilu žádný zvláštní software. Stačí aktuální webový prohlížeč.
Webová správa
Webová správa zpřístupňuje aplikace ChirpStack a Node-RED přes službu Teleport.
Uživatelský účet vytvoří tým podpory HARDWARIO.
Přihlašovací URL webové správy: https://<customer identifier>-<service index>.ember.hardwario.cloud/
Místo <customer identifier> zadejte identifikátor, který vám přidělila společnost HARDWARIO (obvykle název firmy).
K vícefaktorovému ověření potřebujete jednu z těchto metod:
-
Google Authenticator nebo kompatibilní aplikaci na mobilu
-
FIDO2: USB klíč pro univerzální druhý faktor (U2F) (např. Security Key Series)
-
FIDO2: univerzální druhý faktor (U2F) bez hesla (např. YubiKey Bio Series)
Níže uvedené služby otevřete přes položku nabídky Applications. Označují je tyto zkratky:
-
cs: aplikace ChirpStack -
nr: aplikace Node-RED
Službu otevřete tlačítkem LAUNCH.
Server LoRaWAN ChirpStack
Služba Teleport vás přesměruje na tuto adresu URL:
https://ember-<customer identifier>-<service index>-cs.tp.hardwario.com/
Výchozí přihlašovací údaje:
-
Uživatelské jméno:
admin -
Heslo:
admin
Měnit je nemusíte, protože vaši identitu už ověřilo přihlášení do webového rozhraní Teleport.
Brány LoRaWAN
Seznam všech zařízení EMBER Hotspot s hodnotou Last seen a přehledem aktivity.
Aplikace LoRaWAN
V této sekci určíte, jak se data ze zařízení LoRaWAN předávají do aplikací LoRaWAN (může jít o vaše vlastní koncové body).
Každá aplikace obsahuje seznam zařízení LoRaWAN (např. CHESTER).
U každého zařízení CHESTER můžete zkontrolovat jeho aktivitu v síti LoRaWAN.
Každé zařízení CHESTER musí být zaregistrované v sekci Application.
Doporučujeme metodu ABP (Activation By Personalization). U ní zadáte (nebo vygenerujete) tyto parametry:
-
Device EUI: označované také jako
DevEUI -
Network session key: označovaný také jako
NwkSKey -
Application session key: označovaný také jako
AppSKey
V ChirpStack se metoda ABP použije, pokud v profilu zařízení nezaškrtnete Device supports OTAA.
Z bezpečnostních důvodů je metoda ABP vhodná pro zařízení LoRaWAN, u kterých se neočekávají restarty.
Aplikace Node-RED
Služba Teleport vás přesměruje na tuto adresu URL:
https://ember-<customer identifier>-<service index>-nr.tp.hardwario.com/
Data ze serveru LoRaWAN do Node-RED předává Mosquitto (server MQTT). Spravovaná služba ho provozuje na adrese localhost:1883.
Data uplinků se publikují do tohoto topicu:
application/+/device/+/event/up
Flow pro zpracování dat v Node-RED začíná zprávou MQTT.
V Node-RED se k výše uvedenému topicu přihlaste uzlem mqtt client.
Po přijetí zprávy MQTT je třeba payload dekódovat podle firmwaru, který zařízení LoRaWAN (např. CHESTER) používá.
Payload lze dekódovat přímo v ChirpStack, doporučujeme to ale udělat až v Node-RED. Tam máte k dispozici plnohodnotnou knihovnu Node.js pro parsování binárních bufferů a robustnější interpret jazyka JavaScript s pokročilými nástroji pro ladění.
Níže je příklad funkce pro Node-RED (v jazyce JavaScript), která dekóduje payload v kódování Base64, jak ho ChirpStack posílá ve zprávě MQTT:
Zobrazit dekódovací funkci pro Node-RED
if (msg.payload.applicationName !== 'ember-application-chester-clime') {
return null;
}
if (typeof msg.payload.data === 'string') {
msg.payload.data = decode(Buffer.from(msg.payload.data, 'base64'));
}
return msg;
function decode(buffer) {
let data = {};
let offset = 0;
let header = buffer.readUInt8(0);
offset += 1;
if ((header & 0x01) !== 0) {
data.voltage_rest = buffer.readUInt16LE(offset);
offset += 2;
data.voltage_load = buffer.readUInt16LE(offset);
offset += 2;
data.current_load = buffer.readUInt8(offset);
offset += 1;
if (data.voltage_rest === 0xffff) {
data.voltage_rest = null;
} else {
data.voltage_rest = data.voltage_rest / 1000;
}
if (data.voltage_load === 0xffff) {
data.voltage_load = null;
} else {
data.voltage_load = data.voltage_load / 1000;
}
if (data.current_load === 0xff) {
data.current_load = null;
}
}
if ((header & 0x02) !== 0) {
data.orientation = buffer.readUInt8(offset);
offset += 1;
if (data.orientation === 0xff) {
data.orientation = null;
}
}
if ((header & 0x04) !== 0) {
data.therm_temperature = buffer.readInt16LE(offset);
offset += 2;
if (data.therm_temperature === 0x7fff) {
data.therm_temperature = null;
} else {
data.therm_temperature = data.therm_temperature / 100;
}
}
if ((header & 0x10) !== 0) {
data.hygro_temperature = buffer.readInt16LE(offset);
offset += 2;
data.hygro_humidity = buffer.readUInt8(offset);
offset += 1;
if (data.hygro_temperature === 0x7fff) {
data.hygro_temperature = null;
} else {
data.hygro_temperature = data.hygro_temperature / 100;
}
if (data.hygro_humidity === 0xff) {
data.hygro_humidity = null;
} else {
data.hygro_humidity = data.hygro_humidity / 2;
}
}
if ((header & 0x20) !== 0) {
data.w1_thermometers = [];
let count = buffer.readUInt8(offset);
offset += 1;
for (let i = 0; i < count; i++) {
let t = buffer.readInt16LE(offset);
offset += 2;
if (t === 0x7fff) {
t = null;
} else {
t = t / 100;
}
data.w1_thermometers.push(t);
}
}
if ((header & 0x40) !== 0) {
data.rtd_thermometers = [];
let count = buffer.readUInt8(offset);
offset += 1;
for (let i = 0; i < count; i++) {
let t = buffer.readInt16LE(offset);
offset += 2;
if (t === 0x7fff) {
t = null;
} else {
t = t / 100;
}
data.rtd_thermometers.push(t);
}
}
return data;
}
Dekódovaná data můžete dále zpracovávat, například je převést na skalární hodnoty nebo k nim přidat atributy. Posledním krokem flow by mělo být doručení dat přes některý běžný konektor, např. požadavkem HTTPS.
Flow můžete ladit a hledat v něm chyby pomocí uzlu debug a zobrazení konzole v Node-RED.
Příklady integrace
Data můžete přes internet předat ke zpracování do libovolné služby, například k vizualizaci, k uložení nebo k integraci s podnikovými aplikacemi.
Běžné příklady integrace:
-
REST API
-
Služby pro streamování dat:
-
Azure Event Hub
-
Azure IoT Hub
-
AWS IoT Core
-
...
-
-
Microsoft Power BI
-
Ubidots