{"id":7800,"date":"2018-06-12T23:26:56","date_gmt":"2018-06-12T22:26:56","guid":{"rendered":"http:\/\/blog.whatsbee.net\/?p=7800"},"modified":"2018-06-12T23:26:56","modified_gmt":"2018-06-12T22:26:56","slug":"decimosegundo-paso-volvemos-con-lora","status":"publish","type":"post","link":"https:\/\/blog.whatsbee.net\/?p=7800","title":{"rendered":"Decimosegundo paso: Volvemos con Lora"},"content":{"rendered":"<p>Tal como os dec\u00eda en los primeros art\u00edculos este era un proyecto de dos semanas, pero ya llevo seis.\u00a0 Durante esta serie de art\u00edculos os he ido resumiendo las dificultades y las soluciones que he encontrado (las que tienen que ver con el proyecto, claro!!), la parte de Lora no ha estado exenta, es m\u00e1s ha concentrado una buena parte de las dificultades.<\/p>\n<p>Como en el resto de art\u00edculos har\u00e9 una lista de dificultades encontradas y soluciones despu\u00e9s de la investigaci\u00f3n en cada caso.\u00a0Hay muchas horas de trabajo para entrar en el detalle de dada una, pero espero que sirva como orientaci\u00f3n a las personas que tengan problemas parecidos.<\/p>\n<p>En general poner a funcionar un RFM95W comunicando con la red de <a href=\"http:\/\/www.thethingsnetwork.org\/\">The things Network<\/a>\u00a0siguiendo los numerosos ejemplos de c\u00f3digo que hay en la web es relativamente sencillo. Un poco m\u00e1s complicado con ESP8266 que con Arduino y bastante m\u00e1s complicado cuando vas un poco escaso de GPIOS, aunque ese es un problema que ya tratamos en el art\u00edculo\u00a0<a href=\"http:\/\/blog.whatsbee.net\/?p=7766\">Sexto paso: pines, pines y m\u00e1s pines<\/a>.<\/p>\n<p>El problema viene cuando intentas hacerlo en bajo consumo. Con la librer\u00eda LMIC si comunicas en el modo OTAA lo primero que intenta es hacer un\u00a0join a la red. Despu\u00e9s pones el micro en deep-sleep y cuando vuelves a enviar tiene que hacer otro join. En una red que tiene muy imitado el duty cycle por la normativa ETSI y en\u00a0un dispositivo en el que el consumo es importante eso no es una opci\u00f3n. Ese ha sido uno de los problemas m\u00e1s importantes \u00bfla soluci\u00f3n? las claves de red y de aplicaci\u00f3n se pueden derivar de la respuesta del join, una vez derivadas solo hay que almacenarlas en la memoria RTC Ram y reutilizarlas para cada envio sin la necesidad de hacer el Join.<\/p>\n<p>El siguiente problema es que el protocolo tiene unos contadores de paquetes ascendentes y descendentes para evitar ataques de suplantaci\u00f3n. La red descarta autom\u00e1ticamente los paquetes con el contador en valores m\u00e1s bajos que el \u00faltimo enviado, al volver del modo sleep el contador de paquetes est\u00e1 a cero. \u00bfla soluci\u00f3n? almacenar antes del deep sleep el valor del contador y recargarlo en el momento en el que el dispositivo vuelva a despertar.<\/p>\n<p>Aunque posiblemente ninguno de\u00a0estos dos problemas existan si no se apaga la radio (no lo se porque mi enfoque ha sido diferente) , al ponerla en sleep lo que si que se pierde es la referencia de tiempos de LMIC, al perder la referencia de tiempos el dispositivo podr\u00eda incumplir las especificaciones de duty cycle de ETSI para ese rango de frecuencias. Para evitar que esto pueda suceder antes de dormir el nodo hay que mirar cual es el proximo airtime disponible, descontar el tiempo que ha estado encendido y el tiempo que lo vamos a tener en sleep y recuperarlo de nuevo al inicio para evitar que se puedan enviar paquetes en el tiempo de prohibici\u00f3n.<\/p>\n<p>Para finalizar (y esto es solo un resumen de algunas de las dificultades m\u00e1s importantes) los paquetes de downlink (de la red al dispositivo) se env\u00edan al dispositivo en unas ventanas que se abren despu\u00e9s de los paquetes de uplink, las imprecisiones en el reloj del dispositivo provocan que algunos paquetes se pierdan. En la librer\u00eda se puede configurar un par\u00e1metro para definir el porcentaje de error del reloj, esto ampliar\u00e1 las ventanas, pero tambi\u00e9n ampliar\u00e1 el tiempo y por lo tanto el consumo. La soluci\u00f3n en este caso ha sido ampliar las ventanas solo cuando se esperen paquetes de downlink.<\/p>\n<p>Seguimos&#8230;.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Tal como os dec\u00eda en los primeros art\u00edculos este era un proyecto de dos semanas, pero ya llevo seis.\u00a0 Durante esta serie de art\u00edculos os he ido resumiendo las dificultades y las soluciones que he encontrado (las que tienen que&hellip; <br \/><a class=\"read-more-button\" href=\"https:\/\/blog.whatsbee.net\/?p=7800\">Leer m\u00e1s<\/a><\/p>\n","protected":false},"author":1,"featured_media":7801,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_bbp_topic_count":0,"_bbp_reply_count":0,"_bbp_total_topic_count":0,"_bbp_total_reply_count":0,"_bbp_voice_count":0,"_bbp_anonymous_reply_count":0,"_bbp_topic_count_hidden":0,"_bbp_reply_count_hidden":0,"_bbp_forum_subforum_count":0},"categories":[208,2],"tags":[],"_links":{"self":[{"href":"https:\/\/blog.whatsbee.net\/index.php?rest_route=\/wp\/v2\/posts\/7800"}],"collection":[{"href":"https:\/\/blog.whatsbee.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.whatsbee.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.whatsbee.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.whatsbee.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=7800"}],"version-history":[{"count":1,"href":"https:\/\/blog.whatsbee.net\/index.php?rest_route=\/wp\/v2\/posts\/7800\/revisions"}],"predecessor-version":[{"id":7802,"href":"https:\/\/blog.whatsbee.net\/index.php?rest_route=\/wp\/v2\/posts\/7800\/revisions\/7802"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.whatsbee.net\/index.php?rest_route=\/wp\/v2\/media\/7801"}],"wp:attachment":[{"href":"https:\/\/blog.whatsbee.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=7800"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.whatsbee.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=7800"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.whatsbee.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=7800"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}