{"id":208,"date":"2020-10-05T16:23:11","date_gmt":"2020-10-05T15:23:11","guid":{"rendered":"http:\/\/blog.uclm.es\/felixvillanueva\/?p=208"},"modified":"2020-10-05T16:23:11","modified_gmt":"2020-10-05T15:23:11","slug":"instalar-el-modulo-lorawan-en-ns3","status":"publish","type":"post","link":"https:\/\/blog.uclm.es\/felixvillanueva\/2020\/10\/05\/instalar-el-modulo-lorawan-en-ns3\/","title":{"rendered":"Instalar el m\u00f3dulo LoRaWAN en NS3"},"content":{"rendered":"<p>[Adaptado a la versi\u00f3n 3.36 con cmake]<\/p>\n<p><a href=\"https:\/\/lora-alliance.org\/\">LoRaWAN<\/a> es una tecnolog\u00eda especialmente dise\u00f1ada para IoT en dispositivos alimentados por bater\u00edas, con necesidades de comunicaci\u00f3n bidireccional y un ancho de banda limitado (entre 0.3kbps y 50kbps). La topolog\u00eda por excelencia es la de estrella, con la pasarela en el centro de la estrella (que conecta la red LoRaWAN a una red IP convencional).<\/p>\n<p>Existen tres clases de dispositivos en LoRaWAN (clase A, B, C) asociados a tres funcionalidades muy concretas. La clase A est\u00e1 asociado a un dispositivo final que peri\u00f3dicamente o bajo requerimientos de la aplicaci\u00f3n, manda la informaci\u00f3n a la pasarela y espera una ventana de tiempo por si hubiera alg\u00fan tipo de necesidad de comunicaci\u00f3n en el sentido pasarela-&gt;dispositivo. Este esquema permite dormir el dispositivo de clase A entre transmisiones y obliga a guardar todas las comunicaciones en el sentido pasarela-&gt; dispositivos y esperar a que se produzca una comunicaci\u00f3n en el sentido dispositivo -&gt; pasarela.<\/p>\n<p>La clase B se sincroniza con la red y habilita un periodo de escucha de forma peri\u00f3dica (ventana m\u00e1xima de 128 segundos) por si hubiera un mensaje hacia el dispositivo. De esta forma se puede hacer determinista cuanto tiempo tarda en recibir un mensaje de la red enviado por la pasarela. No obstante este despertar peri\u00f3dico consume bater\u00eda y los hace menos eficiente que la clase A desde el punto de vista del consumo energ\u00e9tico.<\/p>\n<p>Finalmente, la clase C est\u00e1 siempre escuchando por lo que cualquier transmisi\u00f3n desde la red (pasarela) es inmediatamente recibido a menos que el propio dispositivo est\u00e9 transmitiendo. Se pueden intercambiar los modos de funcionamiento entre la clase A y la clase C si necesitamos, por ejemplo, enviar una actualizaci\u00f3n de firmware a trav\u00e9s de la interfaz inal\u00e1mbrica.<br \/>\nEn NS3 hay varias implementaciones de un m\u00f3dulo de NS3 para simular la tecnolog\u00eda LoRaWAN. El mas estable est\u00e1 disponible en la App Store de NS3.<br \/>\nLa instalaci\u00f3n es sencilla, pasa por bajarse el c\u00f3digo en el directorio src de la instalaci\u00f3n NS3 con git clone y la direcci\u00f3n https:\/\/github.com\/signetlabdei\/lorawan, y volver a configurar y compilar todo:<br \/>\n<code><br \/>\n$ns-allinone-3.36\/ns-3.36\/src$ git clone https:\/\/github.com\/signetlabdei\/lorawan<br \/>\n<\/code><code>Clonando en 'lorawan'...<br \/>\nremote: Enumerating objects: 37, done.<br \/>\n..<br \/>\n..<br \/>\nResolviendo deltas: 100% (906\/906), listo.<\/code><br \/>\nA continuaci\u00f3n, en el directorio principal, la configuraci\u00f3n y compilaci\u00f3n habitual, habilitando los test y los ejemplos:<br \/>\n<code><br \/>\n$ns-allinone-3.36\/ns-3.36\/$.\/ns3 configure --enable-test --enable-examples<br \/>\n..<br \/>\n..<\/code><br \/>\na la hora de construir, fijarnos que el m\u00f3dulo lorawan aparece en los m\u00f3dulos compilados:<br \/>\n<code><br \/>\n$\/ns-allinone-3.36\/ns-3.36$ .\/ns3 build<\/code><\/p>\n<p>Para comprobar que todo ha ido bien, podemos ejecutar sus test espec\u00edficos del m\u00f3dulo:<br \/>\n<code><br \/>\n$\/ns-allinone-3.36\/ns-3.36$.\/test.py -s lorawan<br \/>\n.....<br \/>\n[1\/1] PASS: TestSuite lorawan<br \/>\n1 of 1 tests passed (1 passed, 0 skipped, 0 failed, 0 crashed, 0 valgrind errors)<br \/>\n<\/code><br \/>\ny el ejemplo b\u00e1sico:<br \/>\n<code><br \/>\n\/ns-allinone-3.36\/ns-3.36$ .\/ns3 run simple-network-example<br \/>\nSimpleLorawanNetworkExample:main(): Creating the channel...<br \/>\n+0.000000000s -1 SimpleLorawanNetworkExample:main(): Setting up helpers...<br \/>\n+0.000000000s -1 LoraPhyHelper:LoraPhyHelper(0x7fff858a3a70)<br \/>\n+0.000000000s -1 SimpleLorawanNetworkExample:main(): Creating the end device...<br \/>\n+0.000000000s -1 LoraPhyHelper:SetDeviceType(0x7fff858a3a70, 1)<br \/>\n+0.000000000s -1 LorawanMacHelper:SetDeviceType(0x7fff858a3aa0, 1)<br \/>\n+0.000000000s -1 LoraHelper:Install()<br \/>\n+0.000000000s -1 LoraPhyHelper:Create(0x7fff858a3a70, 0, 0x5617411f0970)<br \/>\n+0.000000000s -1 LoraInterferenceHelper:LoraInterferenceHelper(0x5617411f0bf8)<br \/>\n+0.000000000s -1 LoraInterferenceHelper:SetCollisionMatrix(): Setting the GOURSAUD collision matrix<br \/>\n+0.000000000s -1 LoraPhy:SetChannel(0x5617411f0bc0, 0x5617411f0090)<br \/>\n+0.000000000s -1 LoraPhy:SetDevice(0x5617411f0bc0, 0x5617411f0970)<br \/>\n+0.000000000s -1 LoraHelper:Install(): Done creating the PHY<br \/>\n....<br \/>\n<\/code><\/p>\n<p>Tambi\u00e9n hay un ejemplo de energ\u00eda, que genera un archivo de texto battery-level.txt que guarda el nivel de bater\u00eda para un dispositivo de clase A, a lo largo de una simulaci\u00f3n:<br \/>\n<code><br \/>\n\/ns-allinone-3.36\/ns-3.36$ .\/ns3 run energy-model-example<br \/>\n+0.000000000s -1 Assign IP Addresses.<br \/>\n0.000574667s Current remaining energy = 0.0995293J<br \/>\n0.000574667s Total energy consumed by radio = 0.000470652J<br \/>\n0.000714667s Current remaining energy = 0.0994147J<br \/>\n0.000714667s Total energy consumed by radio = 0.000585312J<br \/>\n0.000762667s Current remaining energy = 0.0993754J<br \/>\n0.000762667s Total energy consumed by radio = 0.000624624J<br \/>\n0.00287467s Current remaining energy = 0.0973922J<br \/>\n0.00287467s Total energy consumed by radio = 0.00260779J<br \/>\n.....<br \/>\n<\/code><br \/>\nEn futuras entradas, utilizaremos esta tecnolog\u00eda para ir creando una serie de escenarios de IoT con los que poder estudiar aspectos concretos.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>[Adaptado a la versi\u00f3n 3.36 con cmake] LoRaWAN es una tecnolog\u00eda especialmente dise\u00f1ada para IoT en dispositivos alimentados por bater\u00edas, con necesidades de comunicaci\u00f3n bidireccional y un ancho de banda limitado (entre 0.3kbps y 50kbps). La topolog\u00eda por excelencia es &hellip; <a href=\"https:\/\/blog.uclm.es\/felixvillanueva\/2020\/10\/05\/instalar-el-modulo-lorawan-en-ns3\/\">Sigue leyendo <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":182,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,5,6],"tags":[24,26,29],"class_list":["post-208","post","type-post","status-publish","format-standard","hentry","category-ns3","category-simulacion","category-tutorial","tag-instalacion","tag-iot","tag-lorawan"],"_links":{"self":[{"href":"https:\/\/blog.uclm.es\/felixvillanueva\/wp-json\/wp\/v2\/posts\/208","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.uclm.es\/felixvillanueva\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.uclm.es\/felixvillanueva\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.uclm.es\/felixvillanueva\/wp-json\/wp\/v2\/users\/182"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.uclm.es\/felixvillanueva\/wp-json\/wp\/v2\/comments?post=208"}],"version-history":[{"count":0,"href":"https:\/\/blog.uclm.es\/felixvillanueva\/wp-json\/wp\/v2\/posts\/208\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.uclm.es\/felixvillanueva\/wp-json\/wp\/v2\/media?parent=208"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.uclm.es\/felixvillanueva\/wp-json\/wp\/v2\/categories?post=208"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.uclm.es\/felixvillanueva\/wp-json\/wp\/v2\/tags?post=208"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}