Wi-Fi nie sięga do końca ogrodu. Zigbee potrzebuje łańcucha urządzeń zasilanych z sieci, żeby dotrzeć do szopy, a przy furtce czy beczce na deszczówkę nie ma gniazdka. Tu przydaje się LoRaWAN: czujnik na baterie wysyła kilka bajtów z odległości setek metrów, a nawet kilometrów, i działa latami na dwóch ogniwach. Nie zastąpi jednak domowej sieci, a ograniczenia są surowe. Poniżej znajdziesz opis tego, do czego LoRaWAN się nadaje, zasady obowiązujące w Europie i sposób na przesłanie danych z pierwszego czujnika do własnego brokera MQTT.
Czym jest LoRaWAN, a czym nie jest
LoRa to modulacja radiowa, a LoRaWAN to protokół sieciowy zbudowany na niej. W Europie korzysta z pasma EU868, w okolicach 868 MHz. System LoRaWAN składa się z trzech części:
- Urządzenia końcowe: czujniki, przyciski, liczniki. Nadają krótkie pakiety.
- Bramki: odbiorniki, które zbierają pakiety od każdego urządzenia w zasięgu i przekazują je przez internet. Bramka nie odszyfrowuje danych i nie jest parowana z konkretnymi urządzeniami.
- Serwer sieciowy: sprawdza pakiety, usuwa duplikaty, odszyfrowuje je i przekazuje do aplikacji. The Things Network (TTN) udostępnia bezpłatny serwer społecznościowy, a ChirpStack to otwarty serwer, który uruchomisz u siebie.
LoRaWAN służy do przesyłania drobnych odczytów: temperatury w szklarni, wilgotności gleby, poziomu wody, informacji o otwarciu skrzynki na listy czy liczby impulsów z wodomierza. Obraz, dźwięk, pobieranie oprogramowania i natychmiastowe przełączanie to zadania dla innych technologii.
Ograniczenia, z którymi trzeba się liczyć
Czas nadawania i współczynnik wypełnienia
Przepisy europejskie (ETSI EN 300 220-2) ograniczają, jaką część czasu urządzenie może nadawać w każdym podpaśmie. Dla większości kanałów LoRaWAN w EU868 limit wynosi 1%. W dokumentacji TTN wymieniono między innymi podpasma: 863-865 MHz z limitem 0,1%, 865-868 MHz z limitem 1%, 868-868,6 MHz z limitem 1% oraz 869,4-869,65 MHz z limitem 10%. Te same zasady obowiązują bramki, co ma znaczenie dla wiadomości wysyłanych do urządzenia.
Czas nadawania zależy od współczynnika rozpraszania (ang. spreading factor, od SF7 do SF12). Wyższe wartości dają większy zasięg i umożliwiają odbiór słabszego sygnału (według dokumentacji TTN czułość wynosi -123 dBm przy SF7 i -137 dBm przy SF12 dla szerokości kanału 125 kHz), ale każdy kolejny stopień mniej więcej o połowę zmniejsza przepływność. Ze standardowego wzoru na czas nadawania LoRa, tego samego, którego używa kalkulator TTN, wynika, że 10-bajtowy odczyt (23 bajty w eterze razem z nagłówkiem LoRaWAN) zajmuje około:
| Współczynnik rozpraszania | Czas nadawania | Minimalna przerwa przy limicie 1% |
|---|---|---|
| SF7 | ok. 62 ms | ok. 6 s |
| SF9 | ok. 206 ms | ok. 21 s |
| SF10 | ok. 371 ms | ok. 37 s |
| SF12 | ok. 1,48 s | ok. 2,5 min |
Zasady uczciwego korzystania z TTN
W publicznej sieci The Things Network obowiązuje dodatkowa reguła, niezależna od przepisów: każde urządzenie ma do dyspozycji 30 sekund nadawania w górę na dobę i 10 wiadomości w dół dziennie. Przy powyższych liczbach daje to około 480 krótkich wiadomości na dobę przy SF7, ale tylko około 20 przy SF12. Czujnik daleko od bramki, który wysyła odczyt co 5 minut, po prostu się nie zmieści. W prywatnej sieci (na przykład na własnym ChirpStacku) zasady TTN nie obowiązują, ale prawny limit wypełnienia nadal tak.
Klasy urządzeń
W specyfikacji opisano trzy klasy. Każde urządzenie obsługuje klasę A: nadaje, kiedy ma coś do wysłania, a potem otwiera dwa krótkie okna odbioru. Wiadomość do urządzenia da się dostarczyć tylko tuż po tym, jak ono samo coś wyśle. Dzięki temu urządzenia klasy A pracują latami na bateriach, ale polecenie „zamknij zawór teraz” może czekać do następnego odczytu. Klasa B dodaje zaplanowane okna odbioru synchronizowane sygnałami nawigacyjnymi z bramek. Klasa C nasłuchuje niemal bez przerwy, więc reaguje szybko, ale zwykle wymaga zasilania sieciowego. W domu spotkasz głównie czujniki klasy A, więc traktuj LoRaWAN jako łącze do przesyłania odczytów z okazjonalną zmianą ustawień.
Kiedy to się opłaca w domu
Dobre zastosowania:
- Działka, ogród na końcu długiej posesji, domek letniskowy albo garaż w zespole garaży, gdzie nie ma Wi-Fi.
- Wodomierz lub deszczomierz w studzience, gdzie sygnał 2,4 GHz szybko zanika.
- Urządzenia na baterie, przy których wymiana ogniw raz na kilka lat to maksimum tego, na co masz ochotę.
Słabe zastosowania:
- Wszystko w domu, co już obsługuje Zigbee, Thread lub Bluetooth.
- Oświetlenie, gniazdka i wszystko, co musi zareagować w ciągu sekundy.
- Czujniki wysyłające odczyty co kilka sekund.
Krok 1: sprawdź zasięg albo zaplanuj bramkę
Okolica może już być w zasięgu bramek społecznościowych. Na TTN Mapper (ttnmapper.org) widać, gdzie odebrano sygnał rzeczywistych urządzeń. Nie opieraj jednak niczego ważnego na cudzej bramce, bo może zniknąć bez uprzedzenia. Małą bramkę wewnętrzną, taką jak The Things Indoor Gateway, podłączasz bezpośrednio do gniazdka, a z siecią łączy się przez Wi-Fi. Ustawiona przy oknie od strony ogrodu zwykle obejmuje znacznie większy obszar niż jakiekolwiek urządzenie 2,4 GHz w domu. Własną bramkę zarejestruj w konsoli TTN, żeby służyła też sąsiadom.
Krok 2: zarejestruj urządzenie w The Things Stack
TTN działa na platformie The Things Stack. W konsoli (dla Europy jest to klaster eu1):
- Utwórz aplikację (Application). Grupuje urządzenia i przechowuje integracje.
- Kliknij Register end device. Jeśli urządzenie jest w repozytorium LoRaWAN Device Repository, wybierz markę i model, a konsola sama uzupełni plan częstotliwości i wersję LoRaWAN. W przeciwnym razie wybierz Europe 863-870 MHz (SF9 for RX2 - recommended) i wersję podaną w karcie katalogowej urządzenia.
- Wpisz JoinEUI, DevEUI i AppKey z naklejki lub dokumentacji urządzenia. Wybierz aktywację OTAA (over-the-air activation), w której klucze sesji są odnawiane przy każdym dołączeniu do sieci.
- Włącz urządzenie i obserwuj zakładkę Live data. Udane dołączenie i pierwszy pakiet z danymi oznaczają, że część radiowa działa.
Krok 3: odkoduj dane
Urządzenia wysyłają surowe bajty. Formater danych (payload formatter) zamienia je na czytelne pola. Jeśli urządzenie pochodzi z repozytorium, formater zwykle jest już ustawiony. Jeśli nie, napisz funkcję decodeUplink() w JavaScripcie. Oto najprostszy przykład dla czujnika, który wysyła temperaturę jako 16-bitową liczbę ze znakiem w setnych częściach stopnia, a po niej wilgotność w procentach:
function decodeUplink(input) {
var b = input.bytes;
var raw = (b[0] << 8) | b[1];
if (raw & 0x8000) raw -= 0x10000;
return {
data: {
temperature: raw / 100,
humidity: b[2]
}
};
}
W konsoli jest pole testowe, w które wkleisz dane szesnastkowe i sprawdzisz wynik przed zapisaniem. Układ bajtów powyżej to tylko przykład. Korzystaj z formatu opisanego w dokumentacji czujnika.
Krok 4: przekaż dane do swojego brokera MQTT
The Things Stack ma wbudowany serwer MQTT. W aplikacji przejdź do Integrations > MQTT, wygeneruj klucz API i od razu go skopiuj, bo później nie będzie już widoczny. W The Things Network nazwa użytkownika ma postać id-aplikacji@ttn, a odczyty trafiają do tematu:
v3/id-aplikacji@ttn/devices/<id-urządzenia>/up
Szybki test:
mosquitto_sub -h eu1.cloud.thethings.network -p 8883 --capath /etc/ssl/certs \
-u 'garden-sensors@ttn' -P 'NNSXS.XXXXXXXX...' \
-t 'v3/garden-sensors@ttn/devices/+/up' -v
Każda wiadomość to dokument JSON. Odkodowane pola znajdziesz w uplink_message.decoded_payload, obok danych radiowych, takich jak RSSI i SNR dla każdej bramki. Serwer obsługuje wyłącznie MQTT 3.1.1 i QoS 0.
Dane możesz odbierać bezpośrednio w Node-RED albo w swojej platformie automatyki. Możesz też zestawić most między tematami TTN a lokalnym Mosquitto, żeby wszystko przechodziło przez jeden broker. Konfiguracja mostu w Mosquitto wygląda tak:
connection ttn
address eu1.cloud.thethings.network:8883
bridge_capath /etc/ssl/certs
remote_username garden-sensors@ttn
remote_password NNSXS.XXXXXXXX...
topic v3/garden-sensors@ttn/devices/+/up in 0 ttn/ ""
Fragment in 0 ttn/ "" pobiera zdalne tematy z QoS 0 i umieszcza je lokalnie pod przedrostkiem ttn/.
Najczęstsze błędy
- Zbyt częste wysyłanie odczytów. Najpierw policz czas nadawania. Dla większości czujników zewnętrznych odczyt co 15 minut to dobry punkt wyjścia.
- Testy tuż przy bramce. Urządzenie położone obok bramki może przesterować jej odbiornik. Zachowaj co najmniej kilka metrów odstępu.
- Oczekiwanie szybkiej reakcji na polecenia. Wiadomość do urządzenia klasy A czeka na jego następny odczyt.
- Zły plan częstotliwości. Urządzenie kupione na amerykańskie pasmo 915 MHz nie zadziała w EU868. Przed zakupem sprawdź region.
- Traktowanie TTN jak usługi z gwarancją. Sieć społecznościowa nie gwarantuje dostępności. Przy ważnych zastosowaniach postaw własną bramkę i rozważ własny serwer sieciowy.