Enviar una sola instrucción a cada nodo de una malla Contiki 6LoWPAN detrás de nuestro router de borde
Traducido del English por IA ·
Soy el jefe de planta, así que disculpen el vocabulario. Hace dos años, nuestro contratista instaló 30 nodos de temperatura inalámbricos en las cámaras frigoríficas. Funcionan con Contiki-NG sobre una malla 6LoWPAN, y una caja que ejecuta el router de borde está en el cuarto eléctrico. Esa misma caja también envía las lecturas a Hermetry como pasarela, y cada nodo aparece como su propio dispositivo hijo. Esa parte ha funcionado a la perfección.Lo que quiero ahora: cuando el equipo de QA inicie una prueba de validación, cada nodo debe pasar de un muestreo de 5-minute a uno de 30-second, y volver después. Hoy el contratista entra por SSH y modifica cada nodo uno por uno, lo que lleva casi una hora. Le pedí que simplemente lo «enviara en broadcast», pero él dice que el multicast a través del router de borde no funciona en Contiki y que Hermetry tampoco puede enviar comandos a los hijos de todos modos.¿Tiene razón en los dos puntos? No necesito los detalles de la pila de radio. Necesito saber si debo pagarle por una solución o buscar otro enfoque.
Plant manager, so forgive the vocabulary. Our contractor put 30 wireless temperature nodes in the cold stores two years ago. They run Contiki-NG on a 6LoWPAN mesh, and a box running the border router sits in the electrical room. The same box also reports the readings to Hermetry as a gateway, each node shows up as its own child device. That part has been rock solid.
What I want now: when the QA team starts a validation run, every node should switch from 5-minute to 30-second sampling, and back afterwards. Today the contractor SSHs in and pokes each node one by one, which takes most of an hour. I asked him to «just broadcast it» and he said multicast through the border router doesn’t work in Contiki and that Hermetry can’t send to children anyway.
Is he right on both counts? I don’t need the details of the radio stack, I need to know whether to pay him for a fix or look for another approach.
Traducido del English por IA ·
Se equivoca con la parte de Hermetry. Hermetry puede enviar comandos y cambios de atributos compartidos a dispositivos detrás de una pasarela: la pasarela los recibe en v1/gw/rpc o v1/gw/attributes y debe aplicarlos, así que depende de si el software de pasarela del contratista gestiona esos topics. Un comando dirigido al propio dispositivo pasarela también funciona, de modo que la caja en su cuarto eléctrico puede recibir «iniciar muestreo de validación» desde un botón del panel o una regla y distribuirlo localmente. Eso es un comando en lugar de 30. La parte de radio es territorio de Eric.
He’s wrong about the Hermetry half. Hermetry can send commands and shared attribute changes to devices behind a gateway: the gateway gets them on v1/gw/rpc or v1/gw/attributes and has to apply them, so it depends on whether the contractor’s gateway software handles those topics. A command to the gateway device itself works too, so the box in your electrical room can get «start validation sampling» from a dashboard button or a rule and fan it out locally. That’s one command instead of 30. The radio half is Eric’s territory.
Traducido del English por IA ·
En la parte de radio tiene algo de razón. Contiki-NG sí tiene multicast IPv6 para redes RPL: dos motores, SMRF y MPL. Se activa en tiempo de compilación en el project-conf.h de los nodos y en el del border router:
/* every node and the border router */
#define UIP_MCAST6_CONF_ENGINE UIP_MCAST6_ENGINE_MPL
/* for SMRF instead you also need storing mode with multicast: */
/* #define UIP_MCAST6_CONF_ENGINE UIP_MCAST6_ENGINE_SMRF */
/* #define RPL_CONF_MOP RPL_MOP_STORING_MULTICAST */
Donde tiene razón es en que el rpl-border-router estándar no reenvía a la malla el multicast que llega desde la red externa. Por eso el multicast tiene que originarse en el propio border router: un pequeño proceso en esa máquina que, al recibir una orden de Hermetry, envía un datagrama MPL a un grupo al que se han unido los nodos. Esto implica volver a flashear los 30 nodos con multicast habilitado, lo que en una instalación de almacén frigorífico significa una visita a la planta.Sinceramente, para 30 nodos yo descartaría el multicast. Que el border router recorra las 30 direcciones y envíe unicast con reintentos. 30 paquetes pequeños en una malla no son nada, termina en segundos, y cada nodo confirma, así que sabes quién no lo recibió. Sin reflasheo.Luego, en Hermetry: añade un comando como sampling.set con un parámetro period_s en el perfil de la pasarela, respóndelo desde ese proceso cuando todos los nodos hayan confirmado, y pon dos botones en el panel de QA. Haz que los nodos informen su periodo actual como atributo de cliente para que QA pueda ver que se aplicó.
Partly right on the radio half. Contiki-NG does have IPv6 multicast for RPL networks: two engines, SMRF and MPL. You turn one on at build time in the nodes’ project-conf.h and in the border router’s:
/* every node and the border router */
#define UIP_MCAST6_CONF_ENGINE UIP_MCAST6_ENGINE_MPL
/* for SMRF instead you also need storing mode with multicast: */
/* #define UIP_MCAST6_CONF_ENGINE UIP_MCAST6_ENGINE_SMRF */
/* #define RPL_CONF_MOP RPL_MOP_STORING_MULTICAST */
Where he’s right is that the stock rpl-border-router does not forward multicast arriving from the outside network into the mesh. So the multicast has to originate on the border router itself: a small process on that box that, on a command from Hermetry, sends one MPL datagram to a group the nodes joined. It means reflashing all 30 nodes with multicast enabled, which on a cold store install is a site visit.
Honestly, for 30 nodes I’d skip multicast. Have the border router loop over the 30 addresses and send unicast with a retry. 30 small packets on a mesh is nothing, it finishes in seconds, and every node acks so you know who missed it. No reflash.
Then in Hermetry: add a command like sampling.set with a period_s parameter on the gateway’s profile, answer it from that process once all nodes acked, and put two buttons on the QA dashboard. Have the nodes report their current period as a client attribute so QA can see it took.
Traducido del English por IA ·
El contratista hizo el bucle unicast en dos días, sin visita a la planta. QA pulsa «Validation on», la pasarela responde 30/30 confirmados unos 8 segundos después, y el atributo sample_period de los nodos cambia a 30. Pasamos de una hora a un botón. Gracias a los dos, y ya dejé de decir «simplemente haz broadcast».
Contractor did the unicast loop in two days, no site visit. QA presses «Validation on», the gateway answers with 30/30 acked about 8 seconds later, and the nodes’ sample_period attribute flips to 30. Went from an hour to a button. Thanks both, and I’ve stopped saying «just broadcast it».
- Debes estar registrado para responder a este debate.
Únete a la conversación
Inicia sesión para preguntar y responder, dar me gusta a las publicaciones útiles y marcar la respuesta que resolvió tu problema. Cada aportación suma puntos y niveles.

