Cami Can Calders, 8 2º-2ª | 08173 Sant Cugat del Valles info@bmotes.com 932504996

WhatsBee blog

Zigbee: Entendiendo el stack

Una de las cosas que al principio me pareció más complicada del mundo Zigbee es ver que está pasando dentro de la red. Un día te llegan los módulos, los alimentas y ves que la red se forma porque hay unos leds que parpadean. Supones que todos están hablando con el coordinador, incluso (con los módulos de DIGI) puedes enchufarlos a un adaptador y ver en que PAN Id están trabajando y alguna «cosita» más. 

Al cabo de los días por error conectas otro coordinador, enciendes, apagas motes y después de un rato ya no sabes quien habla con quien, hay motes que se han «enganchado» a uno, otros que dormían, otros que estaban apagados….. 

Cuando te aclaras un poco decides que un «mote» tiene que hablar en base a unos estándares con el coordinador, puestos a pedir ¿porqué 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ón de cada bit de los paquetes, Clusters, End Points, Buffff 

Desde mi ignorancia llego a la conclusión 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ácil, incluso escribiéndolo casi a  mano sin utilizar ningún stack de SW y escuchar para recibir el ACK que nos confirmará 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ún lado tienes que empezar a desarrollar y he escogido el lado del «mote», el coordinador por si mismo solo recoge el paquete y envía el ACK pero eso no es visible. 

 A 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í, en modo ascii, con un formato que no es interpretable por un ser humano, el delimitador de inicio del paquete es una tilde (˜), ya veo algo.  Incluso algunos emuladores de terminal permiten ver lo que les llega en Hexadecimal, ya se parece un poco más a algo. Hay paquetes que no salen por la UART y otros que si, echo a faltar los de las capas más bajas, me pregunto «si se ha formado la red los nodos han tenido que hablar ¿porqué no salen los paquetes por la UART?» 

Después de leer un poco más he llegado a una conclusión (es puramente intuitiva, estaré encantado de recibir mensajes diciendo que me he equivocado y cual es la información correcta)…. 

Como era de esperar el stack es una pila (en el sentido más estricto de apilamiento) de SW, en la parte más baja del gráfico está el mundo físico (en este caso el medio de transmisión que es el aire), en la parte más alta el mundo lógico, la aplicación.. 

Stack de Meshnetics

 

 Empezando por abajo tenemos dos capas en azul, la física y la de acceso al medio (MAC), estas dos capas están definidas por la especificación 802.15.4 y se las gestiona el HW solito.  Ya sabéis… que si antes de enviar una señal al aire voy a escuchar para asegurarme de que no hay nadie más hablando, que si escucho y no hay nadie más pero cuando me pongo a hablar había otro haciéndolo dejo de hablar y lo intento más tarde, etc. Todo está definido por el IEEE, no hay muchas vueltas que dar. 

 Justo encima está la capa de red (NWK), con la capa física ya hemos sido capaces de recibir paquetes, comprobar que se han leído 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ío de datos y, por supuesto, de pasar a las capas superiores los paquetes con los datos de nuestros sensores. En definitiva, la más complicada. 

Encima de la capa de red está la capa de aplicación (el recuadro amarillo del fondo con su subcapas delante). A la capa de aplicación llegan todos los paquetes «interesantes» y es la que se encarga del resto. ¿Os recordáis que mencionaba más 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ón, ojo!!!! aquí estoy hablando de los módulos de DIGI. 

Recordemos que nuestro objetivo era ver que pasaba en la red de una forma interpretable por seres humanos ¿cómo lo resolvemos?…. La solución en el próximo artículo.

Dejar un comentario