Menguji modem radio LoRa / LoRaWAN RN2483. Bagian 2, LoRaWAN

Bagian sebelumnya menjelaskan cara menghubungkan modem RN2483 dalam mode LoRa. Sekarang mari kita beralih ke bagian selanjutnya yang lebih kompleks - menghubungkan ke jaringan LoRaWAN.

Apa itu LoRaWAN?



LoRaWAN adalah jaringan "kondisional global" yang terdiri dari perangkat akhir (node) yang mengirim data ke hub (gateway). Setiap hub memiliki akses ke Internet, dan mengirimkan data yang diterima ke server, yang pada gilirannya mengirimkannya ke pelanggan yang ditandatangani. Jaringan, di satu sisi, adalah "global", karena data dapat diterima oleh gateway terdekat, di sisi lain, "global bersyarat", karena itu tidak akan berfungsi tanpa Internet / intranet (meskipun tidak ada yang mengganggu memiliki gateway dan server sendiri di dalam organisasi).

Modem RN2483 akan digunakan sebagai "simpul", layanan gratis akan digunakan untuk terhubung . Berlanjut di bawah potongan.

Jaringan Benda


Layanan www.thethingsnetwork.org adalah komunitas terbuka yang penggunanya dapat membuat, mendaftarkan perangkat dan hub, bereksperimen dengan cara kerjanya, dll. Seperti yang mereka katakan, gratis dan tanpa SMS. Kami akan menggunakannya untuk pengujian.

Siapa pun dapat mendaftarkan node dan gateway di jaringan. The Things Network sepenuhnya gratis, banyak penggemar yang membeli peralatan dengan biaya sendiri.
Peta cakupan pada saat penulisan adalah sebagai berikut:



Seperti yang Anda lihat, segmen cakupan berbahasa Rusia menyisakan banyak hal yang diinginkan, tetapi tetap saja demikian. Ada sisi positifnya - di London atau Amsterdam Anda tidak akan mengejutkan siapa pun dengan konsentrator baru, tetapi di Rusia - ada peluang besar untuk menjadi yang pertama.

Hubungkan RN2483 ke LoRaWAN


Tidak seperti koneksi p2p sederhana, semuanya jauh lebih rumit di LoRaWAN - perangkat terdaftar di jaringan, lalu lintas dienkripsi dengan berbagai kunci, dan sebagainya. Karena jaringan publik dan publik, masalah perlindungan data sangat relevan di sini.

Ada 2 jenis otentikasi dalam jaringan LoRaWAN:

- Otentikasi "over the air" ( OTAA , Over-the-Air Activation). Perangkat mendaftar di jaringan dan menerima kunci yang diperlukan untuk operasi.
- Aktivasi ABP (Aktivasi oleh Personalisasi). Pengaturan sudah terdaftar di perangkat, otentikasi tambahan tidak diperlukan. Mode ini lebih sederhana, tetapi ada juga minus - data hanya dikirim ke udara, tidak ada jaminan bahwa itu diterima oleh hub.

Itu penting: Banyak hub saluran tunggal murah hanya mendukung mode ABP, jadi metode pertama mungkin tidak berfungsi.

1. Pendaftaran Perangkat - OTAA


Langkah pertama adalah pergi ke staging.thethingsnetwork.org dan mendaftarkan "aplikasi". Saya menyebutnya Raspberry Pi Home. Saat mendaftarkan aplikasi, pengguna menerima kunci pertama, yang berguna di masa depan.



Selanjutnya, kita melihat tab Perangkat di mana Anda dapat menambahkan modem kami (mungkin ada beberapa). Klik "daftar perangkat" dan pilih mode OTAA. Sebuah jendela muncul di mana Anda harus memasukkan pengenal perangkat.


Identifier ini dapat diperoleh dengan mengirimkan perintah get swe hweui ke modem. Pendaftaran ini selesai, seperti yang dijanjikan, gratis dan tanpa SMS.

Dengan membuka parameter perangkat, Anda dapat melihat semua kunci, mereka harus terdaftar dalam program.



Untuk menyederhanakan kode, saya menggunakan pustaka python-loranode , kode sumber untuk mengirim data diberikan di bawah ini. Seperti yang Anda lihat, dalam kode ada 3 baris appkey, appeui, dan deveui, yang digunakan untuk otentikasi.

Kode sumber
from loranode import RN2483Controller
from commands import *
import time

# LoRaController OTAA based join and message test
if __name__ == "__main__":
    set_debug_level(Level.DEBUG)
    
    port = "COM3"
    appkey = "58FF3007CAED02xxxxxxxxxxxxxxxxxxxx"
    appeui = "70B3D57Exxxxxxxxxxxxxx"
    deveui = "0004A30xxxxxxxxxxx"

    # Test controller
    lc = RN2483Controller(port)
    if lc.test():
        printd("[+] Connected to LoRa RN2483 device", Level.INFO)
        lc.serial_sr(CMD_GET_VERSION)
        lc.serial_sr(CMD_GET_HWEUI)
        lc.get_freq()
    else:
        printd(clr(Color.YELLOW, "[-] Failed to get version from LoRa device"), Level.WARNING)

    lc.set_pwr(15)
    lc.set_adr(False)
    lc.serial_sr(CMD_SET_SF, "sf7") # sf12, sf7

    # Join and send a message
    if lc.join_otaa(appkey, appeui, deveui):
        printd("[+] Connected to gateway", Level.INFO)
        
        # Data-1
        printd("[+] Sending packet #1", Level.INFO)
        timeStr = time.strftime("%H%M", time.gmtime())
        if lc.send(timeStr, ack=False):
            printd(clr(Color.GREEN, "[+] Send-1 succeeded"), Level.CRITICAL)
        else:
            printd(clr(Color.RED, "[+] Send-1 failed"), Level.CRITICAL)
        time.sleep(15)

        # Data-2
        printd("[+] Sending packet #2", Level.INFO)
        timeStr = time.strftime("%H%M", time.gmtime())
        if lc.send(timeStr, ack=False):
          printd(clr(Color.GREEN, "[+] Send-2 succeeded"), Level.CRITICAL)
        else:
          printd(clr(Color.RED, "[+] Send-2 failed"), Level.CRITICAL)
        time.sleep(15)

        del lc
        exit()

    del lc
    printd(clr(Color.RED, "[-] Test failed"), Level.CRITICAL)


Dalam contoh ini, paket yang berisi waktu saat ini (hhmm) dikirim ke server. Ini nyaman untuk mengontrol paket mana yang diterima.

2. Pendaftaran Perangkat - ABP


Semuanya lebih sederhana di sini - kami mendaftarkan perangkat sebagai ABP, dan kami mendapatkan beberapa kunci yang perlu didaftarkan dalam program.



Modem mengirim data "sebagaimana adanya", tidak ada jaminan bahwa otentikasi berhasil, tidak.

Untuk mengirim data, Anda harus memasukkan tombol nwkskey, appskey, devaddr ke dalam kode. Kode sumber diberikan di bawah ini.

Kode sumber
from loranode import RN2483Controller
import platform
from commands import *
import time

# LoRaController ABP based join and ACK test
if __name__ == "__main__":
    set_debug_level(Level.DEBUG)

    port = "COM3"
    nwkskey = "58AA52E96035Axxxxxxxxxxxxxxxxxxxx"
    appskey = "381B1C9206E9BE9xxxxxxxxxxxxxxxxxxx"
    devaddr = "B639xxxx"
    
    lc = None
    
    try:
      # Test controller
      lc = RN2483Controller(port)
      if lc.test():
        printd("[+] Connected to LoRa RN2483 device", Level.INFO)

        lc.serial_sr(CMD_GET_VERSION)
        lc.serial_sr(CMD_GET_HWEUI)
        lc.get_freq()
      else:
        printd(clr(Color.YELLOW, "[-] Failed to get version from LoRa device"), Level.WARNING)

    except Exception, e:
      print "Error: " + str(e)

    if lc is None:
      printd(Color.YELLOW, "Error: cannot connect to device")
      exit()

    lc.set_adr(False)
    lc.set_pwr(15)
    lc.serial_sr(CMD_MAC_PAUSE)
    lc.serial_sr(CMD_SET_SF, "sf12") # sf12, sf7
    lc.serial_sr(CMD_MAC_RESUME)

    # Join and send a message
    if lc.join_abp(nwkskey, appskey, devaddr):
        printd("[+] Connected to gateway", Level.INFO)
        
        # Data-1
        printd("[+] Sending packet #1", Level.INFO)
        timeStr = time.strftime("%H%M", time.gmtime())
        if lc.send(timeStr, ack=False):
          printd(clr(Color.GREEN, "[+] Send-1 succeeded"), Level.CRITICAL)
        else:
          printd(clr(Color.RED, "[+] Send-1 failed"), Level.CRITICAL)
        time.sleep(15)

        # Data-2
        printd("[+] Sending packet #2", Level.INFO)
        timeStr = time.strftime("%H%M", time.gmtime())
        if lc.send(timeStr, ack=False):
          printd(clr(Color.GREEN, "[+] Send-2 succeeded"), Level.CRITICAL)
        else:
          printd(clr(Color.RED, "[+] Send-2 failed"), Level.CRITICAL)
        time.sleep(15)

        del lc
        exit()

    printd(clr(Color.RED, "[-] Test failed"), Level.CRITICAL)
    del lc


Pengujian


Langkah terakhir, satu hal yang tersisa - membawa laptop (atau Arduino atau Raspberry Pi) dengan modem bersama Anda dan pergi (pergi, terbang) ke tempat di mana area jangkauan gerbang terdekat berada. Saya sampai di area jangkauan terdekat selama sekitar setengah jam dengan trem, jadi prosesnya tidak begitu lama dan mahal.

Dalam hal penerimaan data yang berhasil, paket akan ditampilkan di server.



Server itu sendiri tidak melakukan apa pun dengan data, Anda dapat mengkonfigurasi kode Anda sendiri di server untuk memproses data yang diterima. Contoh ini hanyalah tes, tidak ada yang dilakukan dengan data, dalam aplikasi nyata mereka dapat ditambahkan ke database, mengirim pemberitahuan, dll., Semuanya tergantung pada tugas.

Mengapa ini perlu?


Idealnya, jaringan LoRaWAN menyediakan pengguna dengan layanan transmisi data yang siap pakai yang berfungsi di luar kotak. Anda hanya perlu menghubungkan perangkat dan data akan dikirim dan diproses oleh hub terdekat (tentu saja, jika pengguna berada di area jangkauan jaringan). Lingkup aplikasinya cukup luas, mulai dari sensor untuk membuka pintu, suhu atau ketinggian air di negara itu, hingga suar GPS pada hewan atau model pesawat terbang.

Beberapa video (dalam bahasa Inggris).

Aliansi Pengenalan LoRa:



Pendahuluan Jaringan Hal:


Namun, jika kita berbicara tentang The Things Network, maka ini adalah layanan "amatir", tentu saja tidak menjamin koneksi permanen. Apakah ada penyedia komersial LoRaWAN, saya masih belum tahu.

Bagaimana jika tidak ada cakupan?


Sebuah pertanyaan yang masuk akal mungkin muncul - apa yang harus dilakukan jika beberapa hari dengan kereta api atau beberapa jam dengan pesawat ke gerbang terdekat? Ini memiliki nilai tambah tersendiri - Anda bisa menjadi yang pertama. Anda dapat membuat gateway sendiri dan mendaftarkannya di server The Things Network, harga pertanyaan bervariasi tergantung pada fungsionalitas - dari> 1000EUR untuk hub multi-saluran "eksklusif", hingga $ 15 untuk perangkat buatan sendiri berdasarkan SX1276 dan Raspberry Pi. Berikut adalah tabel perbandingan router yang berbeda, siapa pun dapat mempelajarinya secara lebih rinci.

Opsi terakhir akan dipertimbangkan di bagian selanjutnya.

Source: https://habr.com/ru/post/id398247/


All Articles