{"id":193,"date":"2010-05-13T23:25:53","date_gmt":"2010-05-13T22:25:53","guid":{"rendered":"http:\/\/www.zigbe.net\/?p=193"},"modified":"2010-05-13T23:25:53","modified_gmt":"2010-05-13T22:25:53","slug":"zigbee-entendiendo-la-api","status":"publish","type":"post","link":"https:\/\/blog.whatsbee.net\/?p=193","title":{"rendered":"Zigbee: Entendiendo el stack"},"content":{"rendered":"<p style=\"text-align: justify;\">Una de las cosas que\u00a0al principio me pareci\u00f3 m\u00e1s\u00a0complicada del mundo Zigbee es ver que est\u00e1 pasando\u00a0dentro de\u00a0la red. Un d\u00eda te llegan los m\u00f3dulos, los alimentas y ves que la red se forma porque hay unos leds que parpadean. Supones que todos est\u00e1n hablando con el coordinador, incluso (con los m\u00f3dulos de DIGI) puedes enchufarlos a un adaptador y ver en que PAN Id est\u00e1n trabajando y alguna \u00abcosita\u00bb m\u00e1s.\u00a0<\/p>\n<p style=\"text-align: justify;\">Al cabo de los d\u00edas por error conectas otro coordinador, enciendes, apagas\u00a0motes y despu\u00e9s de un rato ya no sabes quien habla con quien, hay motes que se han \u00abenganchado\u00bb a uno, otros que dorm\u00edan, otros que estaban\u00a0apagados&#8230;..\u00a0<\/p>\n<p style=\"text-align: justify;\">Cuando te aclaras un poco decides que un \u00abmote\u00bb tiene que hablar en base a unos est\u00e1ndares con el coordinador, puestos a pedir \u00bfporqu\u00e9 no montar las cosas de forma que sean interoperables con otras marcas?, empiezas a mirar cientos de hojas con especificaciones del HW, stacks de SW, tablas con la descripci\u00f3n de cada bit de los paquetes, Clusters, End Points,\u00a0Buffff\u00a0<\/p>\n<p style=\"text-align: justify;\">Desde mi ignorancia llego a la conclusi\u00f3n de que al final lo importante es hacer llegar un paquete concreto, con un formato adecuado al dato que quieras enviar al coordinador, parece f\u00e1cil, incluso escribi\u00e9ndolo casi a\u00a0 mano sin utilizar ning\u00fan stack de SW y escuchar para recibir el ACK que nos confirmar\u00e1 que el paquete ha llegado. Parece que lo tienes resuelto, pero empieza un segundo problema, en el lado del coordinador necesitas hacer algo con el paquete, por alg\u00fan lado tienes que empezar a desarrollar y he escogido el lado del \u00abmote\u00bb, el coordinador por si mismo solo recoge el paquete y env\u00eda el ACK pero eso no es visible.\u00a0<\/p>\n<p style=\"text-align: justify;\">\u00a0A estas alturas ya soy capaz de ver que lo que tengo que enviar es un paquete de la ZCL (Zigbee Cluster Library) con un FrameId 0x011, incluso puedo verlo si conecto un emulador de terminal en la UART del coordinador, eso s\u00ed, en modo ascii, con un formato que no es interpretable por un ser humano, el delimitador de\u00a0inicio del paquete es una tilde (\u02dc), ya veo algo.\u00a0 Incluso algunos emuladores de terminal permiten ver\u00a0lo que les llega en Hexadecimal, ya se parece un poco m\u00e1s a algo. Hay paquetes que no salen por la UART y otros que si, echo a faltar los de las capas m\u00e1s bajas, me pregunto \u00absi se ha formado la red los nodos han tenido que hablar \u00bfporqu\u00e9 no salen los paquetes por la UART?\u00bb\u00a0<\/p>\n<p style=\"text-align: justify;\">Despu\u00e9s de leer un poco m\u00e1s he llegado a una conclusi\u00f3n (es puramente intuitiva, estar\u00e9 encantado de recibir mensajes diciendo que me he equivocado y cual es la\u00a0informaci\u00f3n correcta)&#8230;.\u00a0<\/p>\n<p style=\"text-align: justify;\">Como era de esperar el stack es una pila (en el\u00a0sentido m\u00e1s estricto de apilamiento)\u00a0de SW, en la parte m\u00e1s baja del gr\u00e1fico est\u00e1 el mundo f\u00edsico (en este caso el medio de transmisi\u00f3n que es el aire), en la parte m\u00e1s alta el mundo l\u00f3gico, la aplicaci\u00f3n..\u00a0<\/p>\n<div id=\"attachment_194\" style=\"width: 650px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/blog.whatsbee.net\/wp-content\/uploads\/2010\/05\/OpenMAC.png\"><img aria-describedby=\"caption-attachment-194\" loading=\"lazy\" class=\"size-full wp-image-194\" title=\"OpenMAC\" src=\"http:\/\/blog.whatsbee.net\/wp-content\/uploads\/2010\/05\/OpenMAC.png\" alt=\"\" width=\"640\" height=\"470\" srcset=\"https:\/\/blog.whatsbee.net\/wp-content\/uploads\/2010\/05\/OpenMAC.png 640w, https:\/\/blog.whatsbee.net\/wp-content\/uploads\/2010\/05\/OpenMAC-300x220.png 300w\" sizes=\"(max-width: 640px) 100vw, 640px\" \/><\/a><p id=\"caption-attachment-194\" class=\"wp-caption-text\">Stack de Meshnetics<\/p><\/div>\n<p>\u00a0<\/p>\n<p style=\"text-align: justify;\">\u00a0Empezando por abajo tenemos dos capas en azul, la f\u00edsica y la de acceso al medio (MAC), estas dos capas est\u00e1n definidas por la especificaci\u00f3n 802.15.4 y se las gestiona el HW solito.\u00a0 Ya sab\u00e9is&#8230; que si antes de enviar una se\u00f1al al aire voy a escuchar para asegurarme de que no hay nadie m\u00e1s hablando, que si escucho y no hay nadie m\u00e1s pero cuando me pongo a hablar hab\u00eda otro haci\u00e9ndolo dejo de hablar y lo intento m\u00e1s tarde, etc. Todo est\u00e1 definido por el IEEE, no hay\u00a0muchas vueltas que dar.\u00a0<\/p>\n<p style=\"text-align: justify;\">\u00a0Justo encima est\u00e1 la capa de red (NWK), con la capa f\u00edsica ya hemos sido capaces de recibir paquetes, comprobar que se han le\u00eddo bien, etc. La capa de red es la que se va a responsabilizar de hacer las funciones principales de red, el routing, el descubrimiento de las rutas, el manejo de los broadcast en la red, el reenv\u00edo de datos y, por supuesto, de pasar a las capas superiores los paquetes con los datos de nuestros sensores. En definitiva, la m\u00e1s complicada.\u00a0<\/p>\n<p style=\"text-align: justify;\">Encima de la capa de red est\u00e1 la capa de aplicaci\u00f3n (el recuadro amarillo del fondo con su subcapas delante). A la capa de aplicaci\u00f3n llegan todos los paquetes \u00abinteresantes\u00bb y es la que se encarga del resto. \u00bfOs record\u00e1is que mencionaba m\u00e1s arriba que echaba a faltar paquetes? pues son todos los de las capas inferiores, ahora tiene todo el sentido del mundo a la UART solo llegan los paquetes que llegan a la capa de aplicaci\u00f3n, ojo!!!! aqu\u00ed estoy hablando de los m\u00f3dulos de DIGI.\u00a0<\/p>\n<p style=\"text-align: justify;\">Recordemos que nuestro objetivo era ver que pasaba en la red de una forma interpretable por seres humanos \u00bfc\u00f3mo lo resolvemos?&#8230;. La soluci\u00f3n en el pr\u00f3ximo art\u00edculo.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Una de las cosas que\u00a0al principio me pareci\u00f3 m\u00e1s\u00a0complicada del mundo Zigbee es ver que est\u00e1 pasando\u00a0dentro de\u00a0la red. Un d\u00eda te llegan los m\u00f3dulos, los alimentas y ves que la red se forma porque hay unos leds que parpadean.&hellip; <br \/><a class=\"read-more-button\" href=\"https:\/\/blog.whatsbee.net\/?p=193\">Leer m\u00e1s<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"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":[15,23,11],"tags":[27,34,132,178],"_links":{"self":[{"href":"https:\/\/blog.whatsbee.net\/index.php?rest_route=\/wp\/v2\/posts\/193"}],"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=193"}],"version-history":[{"count":0,"href":"https:\/\/blog.whatsbee.net\/index.php?rest_route=\/wp\/v2\/posts\/193\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.whatsbee.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=193"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.whatsbee.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=193"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.whatsbee.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=193"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}