domingo, 24 de julio de 2016

Flujo ejecutando un comando con Node Red

Ahora que hemos hecho dos ejemplos con Node Red, vamos a interactuar un poco más con Raspberry. Vamos a ejecutar un comando del sistema operativo: vcgencmd

La documentación de vcgencmd, la puedes encontrar en la siguiente URL: http://www.elinux.org/RPI_vcgencmd_usage

El ejemplo que realizaremos, es para obtener la temperatura de Raspberry PI y necesitaremos los siguientes nodos para realizar nuestro ejemplo:
  • Inject: para realizar una llamada al flujo
  • Exec: para ejecutar el comando del sistema operativo
  • Debug: para ver la salida
  • Function: para formatear la salida del comando, realizaremos la salida con forma JSON
 Acomoda los nodos de la siguiente forma y después los configuratemos:


Nos enfocaremos a trajabar en exec y function. Primero configura exec de la siguiente forma:


Después en el nodo function ingresa el siguiente código:
msg.payload={'d':{'temp':Number(msg.payload.substring(5,9))}}; //Estoy extrayendo de la salida de exec el valor de la temperatura y formateandolo como un número.  También estoy reescribiendo el payload.
return msg; //Regreso el objeto msg

Despliega el flujo y ejecuta una vez tú flujo. Debes ver algo similar a esto:

En la pestaña debug observarás que aparece la temperatura formateada y sin formatear.

Una de las grandes ventajas de NodeRed es que puedes compartir flujos hechos por otras personas. Estos se almacenan en formato JSON y es sólo texto. Te comparto, el código de este flujo para que lo puedas probas de inmediato:

[{"id":"edd483c9.2ac008","type":"inject","z":"1e1664fa.ed931b","name":"","topic":"","payload":"","payloadType":"str","repeat":"","crontab":"","once":false,"x":153,"y":132.2900161743164,"wires":[["802fc074.76b12"]]},{"id":"d2cebc8a.13cb48","type":"function","z":"1e1664fa.ed931b","name":"","func":"//var vcgencmd = require('vcgencmd');\n//console.log(vcgencmd.mesureTemp());\n\nmsg.payload={'d':{'temp':Number(msg.payload.substring(5,9))}};\nreturn msg;","outputs":1,"noerr":0,"x":545.8499755859375,"y":110.72000885009766,"wires":[["b3771139.ec696"]]},{"id":"802fc074.76b12","type":"exec","z":"1e1664fa.ed931b","command":"vcgencmd","addpay":true,"append":"measure_temp","useSpawn":"","name":"","x":323,"y":133.22000885009766,"wires":[["d2cebc8a.13cb48","ba54f64b.f6067"],[],[]]},{"id":"b3771139.ec696","type":"debug","z":"1e1664fa.ed931b","name":"","active":true,"console":"true","complete":"payload","x":714,"y":109.00000762939453,"wires":[]},{"id":"ba54f64b.f6067","type":"debug","z":"1e1664fa.ed931b","name":"","active":true,"console":"false","complete":"false","x":568,"y":207,"wires":[]}]

Dentro de node red, crea un flujo nuevo y en el menú selecciona importar desde el clipboard y pegas el código anterior.

Listo!!!! Ya tienes un flulo de Node Red que ejecuta un comando del sistema operativo y lo formatea


1 comentario: