En esta entrada vamos a ver de forma sencilla como interceptar los paquetes de usuario con node red.

Es una tarea realmente sencilla y util, pues podemos usarlos para enviar comando por infrarrojos por ejemplo ente otras muchas tareas.

Antes de nada una consideración… .existen situaciones en las que los paquetes no necesitan ser entregados a ninguna central , solo a node red, para hacer esto utilice el atributo grupo del paquete estableciendo el valor a cero… eso indica que solo se entrega solo a node red, con otro valor se entregara tanto a node red como a las centrales de destino.

Visto esto vamos al turrón, lo primero que vamos a hacer es configurar una tarea como esta en node red.

Su configuración es básica… conectamos una galleta entrada mqtt con el topic:

User Packet

Y enviamos su valor a la ventana debug para ver los valores recibidos.. enviamos el paquete de usuario y veremos una entrada en payload tipo buffer de datos y los datos del mismo, vea la imagen anterior para ver esto.

Esto nos sirve para analizar los datos y poder programar las tareas… una vez tengamos esto claro vamos a configurar lo siguiente.

Vamos a explicar las galletas una por una.

La primera galleta corresponde a un nodo de entrada mqtt, este conectado al topic User Packet, el resultado lo enviamos a un nodo función para analizar los datos.

La segunda galleta es un nodo función , esta recibe los datos del topic y los analiza para hacer mas sencillo el automatizar tareas. el código de esta función podemos usar este como ejemplo.

Veamos ahora el codigo de esta con mas calma.

var b0=msg.payload[0];//byte numero 0 =80

var b1=msg.payload[1];//byte numero 1 =65

var b2=msg.payload[2];//byte numero 2 =50

var b3=msg.payload[3];//byte numero 3 = 4


//Podemos añadir todos los bytes que necesitemos

//Mediante comparacion ponemos en payload

//Un valor entero para utilizar de forma sencilla 

//en la siguiente galleta


if ((b0==80)&&(b1==65)&&(b2==50)&&(b3==4)){

    msg.payload=1;

}

else if ((b0==80)&&(b1==65)&&(b2==54)&&(b3==5)){

    msg.payload=2;
}

El funcionamiento es sencillo… analizamos el valor de los bytes de entrada, primero los guardamos en las variables b0, b1 …

Después de esto mediante el uso de una condición if analizamos el valor y cargamos un valor en msg.payload mas fácil de interpretar… en este caso damos un valor entero… 0 , 1 …. después de esto ya podemos ir a la siguiente galleta.

La tercera galleta corresponde con switch, como hemos comentado a esta le llegara un valor numérico entero… por lo que podemos añadir todas las salida que necesitemos, vea esta imagen como ejemplo.

Desde este momento tenemos nuestros paquetes interceptados y una salida para cada de ellos… a partir de este momento el limite solo sera su imaginación para poder interactuar con otros nodos.