اختبار مودم الراديو LoRa / LoRaWAN RN2483. الجزء الثاني ، LoRaWAN

وصف الجزء السابق كيفية توصيل أجهزة مودم RN2483 في وضع LoRa. الآن دعنا ننتقل إلى الجزء التالي الأكثر تعقيدًا - الاتصال بشبكة LoRaWAN.

ما هو لوروان؟



LoRaWAN هي شبكة "عالمية مشروطة" تتكون من الأجهزة الطرفية (العقد) التي ترسل البيانات إلى المحاور (البوابة). كل مركز لديه حق الوصول إلى الإنترنت ، ويرسل البيانات المستلمة إلى الخادم ، والذي بدوره يرسلها إلى العملاء الموقعين. الشبكة ، من ناحية ، هي "عالمية" ، لأن يمكن استقبال البيانات من قبل أي بوابة قريبة ، من ناحية أخرى ، فهي "عالمية مشروطة" ، لأنه لن يعمل بدون الإنترنت / إنترانت (على الرغم من أن لا أحد يزعج أن يكون لديه بوابة وخادم خاص به داخل المنظمة).

سيتم استخدام مودم RN2483 كـ "عقدة" ، وسيتم استخدام خدمة مجانية للاتصال . تابع تحت الخفض.

شبكة الأشياء


إن خدمة www.thethingsnetwork.org هي مجتمع مفتوح يمكن لمستخدميه إنشاء وتسجيل الأجهزة والمحاور وتجربة كيفية عمل كل شيء وما إلى ذلك. كما يقولون ، مجانا وبدون SMS. سوف نستخدمه للاختبار.

يمكن لأي شخص تسجيل كل من العقدة والبوابة على الشبكة. شبكة Things مجانية تمامًا ، حيث يشتري العديد من المتحمسين المعدات على نفقتهم الخاصة.
خريطة التغطية في وقت كتابة هذا التقرير هي كما يلي:



كما ترون ، فإن جزء التغطية باللغة الروسية يترك الكثير مما هو مرغوب فيه ، ولكنه لا يزال كذلك. هناك جانب إيجابي في ذلك - في لندن أو أمستردام لن تفاجئ أي شخص بمركز جديد ، ولكن في روسيا - هناك فرصة كبيرة لتكون الأول.

قم بتوصيل RN2483 بـ LoRaWAN


على عكس اتصال p2p البسيط ، كل شيء أكثر تعقيدًا في LoRaWAN - يتم تسجيل الأجهزة على الشبكة ، ويتم تشفير حركة المرور باستخدام مفاتيح مختلفة ، وما إلى ذلك. لأن الشبكة عامة وعامة ، قضايا حماية البيانات وثيقة الصلة هنا.

هناك نوعان من المصادقة في شبكة LoRaWAN:

- المصادقة "عبر الأثير" ( OTAA ، التنشيط عبر الأثير ). تسجل الأجهزة على الشبكة وتستقبل المفتاح الضروري للتشغيل.
- تفعيل ABP (التنشيط بالتخصيص ). تم تسجيل الإعدادات مسبقًا في الجهاز ، ولا يلزم المصادقة الإضافية. هذا الوضع أبسط ، ولكن هناك أيضًا ناقص - يتم إرسال البيانات ببساطة إلى الهواء ، ولا يوجد ضمان باستقبالها من قبل المحور.

مهم: تدعم العديد من محاور القناة الواحدة الرخيصة وضع ABP فقط ، لذلك قد لا تعمل الطريقة الأولى.

1. تسجيل الجهاز - OTAA


الخطوة الأولى هي الانتقال إلى staging.thethingsnetwork.org وتسجيل "تطبيق". دعوتها Raspberry Pi Home. عند تسجيل التطبيق ، يتلقى المستخدم المفتاح الأول ، وهو أمر مفيد في المستقبل.



بعد ذلك ، نرى علامة التبويب الأجهزة حيث يمكنك إضافة المودم (قد يكون هناك عدة). انقر فوق "تسجيل الجهاز" وحدد وضع OTAA. تظهر نافذة تحتاج فيها إلى إدخال معرّف الجهاز.


يمكن الحصول على هذا المعرف عن طريق إرسال الأمر sys get hweui إلى المودم. يتم إكمال هذا التسجيل ، كما وعد ، مجانًا وبدون رسائل نصية قصيرة.

من خلال فتح معلمات الجهاز ، يمكنك رؤية جميع المفاتيح ؛ يجب أن تكون مسجلة في البرنامج.



لتبسيط الكود ، استخدمت مكتبة python-loranode ، فيما يلي كود المصدر لإرسال البيانات. كما ترى ، يوجد في الكود 3 خطوط appkey و appeui و deveui ، والتي تستخدم للمصادقة.

كود المصدر
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)


في هذا المثال ، يتم إرسال الحزم التي تحتوي على الوقت الحالي (hhmm) إلى الخادم. هذا مناسب للتحكم في الحزمة التي تم استلامها.

2. تسجيل الجهاز - ABP


كل شيء أبسط هنا - نقوم بتسجيل الجهاز كـ ABP ، ونحصل على العديد من المفاتيح التي تحتاج إلى تسجيل في البرنامج.



يرسل المودم البيانات "كما هي" ، ليس هناك ما يضمن نجاح المصادقة ، لا.

لإرسال البيانات ، يجب عليك إدراج مفاتيح nwkskey ، appskey ، devaddr في التعليمات البرمجية. رمز المصدر معطى أدناه.

كود المصدر
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


الاختبار


الخطوة الأخيرة ، يبقى شيء واحد - أن تأخذ معك جهاز كمبيوتر محمول (أو Arduino أو Raspberry Pi) مع مودم وتذهب (اذهب ، تطير) إلى المكان الذي توجد فيه منطقة تغطية أقرب بوابة. وصلت إلى أقرب منطقة تغطية لمدة نصف ساعة بالترام ، لذا فإن العملية ليست طويلة ومكلفة.

في حالة استقبال البيانات بنجاح ، سيتم عرض الحزم على الخادم.



الخادم نفسه لا يفعل أي شيء مع البيانات ؛ يمكنك تكوين الكود الخاص بك على الخادم لمعالجة البيانات المستلمة. هذا المثال مجرد اختبار ، لا يتم عمل أي شيء مع البيانات ، في تطبيق حقيقي يمكن إضافتهم إلى قاعدة البيانات ، وإرسال الإشعارات ، وما إلى ذلك ، كل هذا يتوقف على المهمة.

لماذا هذا ضروري؟


من الناحية المثالية ، توفر شبكة LoRaWAN للمستخدم خدمة نقل بيانات جاهزة تعمل خارج الصندوق. تحتاج فقط إلى توصيل الجهاز وسيتم إرسال البيانات ومعالجتها من قبل أقرب مركز (بالطبع ، إذا كان المستخدم في منطقة تغطية الشبكة). نطاق التطبيق واسع للغاية ، من أجهزة الاستشعار لفتح الباب أو درجة الحرارة أو مستوى المياه في البلد ، إلى منارة GPS على حيوان أو نموذج لطائرة.

العديد من مقاطع الفيديو (باللغة الإنجليزية).

مقدمة عن LoRa Alliance:



مقدمة شبكة الأشياء:


ومع ذلك ، إذا تحدثنا عن The Things Network ، فهذه خدمة "هواة" ، بالطبع لا تضمن اتصالًا دائمًا. سواء كان هناك مزودون تجاريون LoRaWAN ، ما زلت لا أعرف.

ماذا لو لم تكن هناك تغطية؟


قد ينشأ سؤال معقول - ماذا تفعل إذا كان القطار يومين أو بضع ساعات بالطائرة إلى أقرب بوابة؟ هذا له ميزة إضافية - يمكنك أن تكون الأول. يمكنك إنشاء بوابتك الخاصة وتسجيلها على خادم Things Things ، ويختلف سعر المشكلة اعتمادًا على الوظائف - من> 1000EUR لمحاور متعددة القنوات "الخاصة" ، حتى 15 دولارًا للأجهزة محلية الصنع استنادًا إلى SX1276 و Raspberry Pi. هناك جدول مقارن لأجهزة التوجيه المختلفة ، أولئك الذين يرغبون في دراسته بمزيد من التفصيل.

سيتم النظر في الخيار الأخير في الجزء التالي.

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


All Articles