Archivo de la categoría: Debug

Debug Node-RED

El nodo debug puede ver las propiedades del mensaje enviando el mensaje al nodo de depuración.

La barra lateral de depuración muestra los mensajes que se pasan a los nodos de depuración dentro del flujo, así como ciertos mensajes de registro del tiempo de ejecución.

Junto a cada mensaje, la barra lateral de depuración incluye información sobre la hora a la que se recibió el mensaje y qué nodo de depuración lo envió. Al hacer clic en la identificación del nodo de origen, se revelará ese nodo dentro del espacio de trabajo.

El botón en el nodo se puede utilizar para habilitar o deshabilitar su salida. Se recomienda deshabilitar o eliminar los nodos de depuración que no se estén utilizando.

El nodo también se puede configurar para enviar todos los mensajes al registro de tiempo de ejecución o para enviar mensajes cortos (32 caracteres) al texto de estado en el nodo de depuración.

El nodo de depuración puede establecer su estado independientemente de lo que pase a la barra lateral de depuración. Útil si desea depurar un resumen más corto del estado, mientras muestra información más completa en la barra lateral donde hay más espacio. Para ello debe activarse en la configuración del nodo mostrar su estado.

Los mensaje de debug de la barra lateral se pueden borrar y filtrar por:

  • Todos los nodos
  • Flujo/pestaña actual
  • Nodos seleccionados.

De forma predeterminada, la barra lateral debug muestra todos los mensajes que se le pasan. Esto se puede filtrar haciendo clic en el botón para abrir el panel de opciones de filtro.

La barra lateral de depuración solo puede mostrar los 100 mensajes más recientes. Si la barra lateral muestra actualmente una lista filtrada de mensajes, los mensajes ocultos aún cuentan para el límite de 100. Si un flujo tiene nodos de depuración ruidosos, en lugar de filtrarlos desde la barra lateral, puede ser mejor desactivarlos haciendo clic en su botón en el espacio de trabajo.

El botón en el pie de página de la barra lateral se puede utilizar para abrir una ventana separada del navegador que contiene la barra lateral Depurar.

Existen una serie de acciones en bloque sobre los nodos de debug. Pueden verse en Action List (Ctrl/Cmd-Shift-P or View -> Action List) y asignar atajos de teclado a ellos:

  • core:activate-selected-debug-nodes
  • core:activate-all-debug-nodes
  • core:activate-all-flow-debug-nodes
  • core:deactivate-selected-debug-nodes
  • core:deactivate-all-debug-nodes
  • core:deactivate-all-flow-debug-nodes

Nodo para ver el payload que pasa: https://flows.nodered.org/node/node-red-show-value 

Más información:

Logging en Node-RED

Para ver los logs de node red:

  • node-red-log command (se se ha instalado con el script)
  • sudo journalctl -f -u nodered -o cat

Logging en Node-RED: https://nodered.org/docs/user-guide/runtime/logging

Node-RED usa un logger que escribe su salida en la consola. También admite el uso de módulos de registro personalizados para permitir que la salida se envíe a otra parte.

El logger de la consola se puede configurar en la propiedad de logging en su archivo de configuración settings.js:

 // Configure the logging output
 logging: {
     // Console logging
     console: {
         level: "info",
         metrics: false,
         audit: false
     }
 } 

Hay 3 propiedades que se utilizan para configurar el comportamiento del logger:

  • level: Nivel de logging a registrar
  • metrics: Cuando se establece en true, el tiempo de ejecución de Node-RED genera información sobre la ejecución del flujo y el uso de la memoria.
  • audit: Cuando se establece en verdadero, se registran los eventos de acceso a la API HTTP de administrador. El evento incluye información adicional como el punto final al que se accede, la dirección IP y la marca de tiempo.

También se puede utilizar un módulo de logging personalizado. Por ejemplo, la salida de métricas puede enviarse a un sistema separado para monitorear el desempeño del sistema. Esto luego se puede mandar a un sistema de análisis de log externo como Kibana o Logstash

Más información: https://nodered.org/docs/user-guide/runtime/logging 

El log está completamente administrado por journald fuera de node-red. Si está ejecutando en un sistema Linux utilizando el archivo de servicio systemd para ejecutar node-red, la salida se envía a /var/log/syslog.

El log se puede ver con el comando: sudo journalctl -f -u nodered -o cat

Salida de log al inicializar Node-RED:

 Start Node-RED
 Once Node-RED has started, point a browser at http://127.0.0.1:1880
 On Pi Node-RED works better with the Firefox or Chrome browser
 Use   sudo systemctl enable nodered.service  to autostart Node-RED at every boot
 Use   sudo systemctl disable nodered.service to disable autostart on boot
 To find more nodes and example flows - go to http://flows.nodered.org
 21 Nov 11:04:58 - [info] 
 Welcome to Node-RED
 ===================
 21 Nov 11:04:58 - [info] Node-RED version: v1.2.5
 21 Nov 11:04:58 - [info] Node.js  version: v12.19.1
 21 Nov 11:04:58 - [info] Linux 4.18.0-193.28.1.el8_2.x86_64 x64 LE
 21 Nov 11:04:59 - [info] Loading palette nodes
 node-telegram-bot-api deprecated Automatic enabling of cancellation of promises is deprecated.
 In the future, you will have to enable it yourself.
 See https://github.com/yagop/node-telegram-bot-api/issues/319. internal/modules/cjs/loader.js:1015:30
 21 Nov 11:05:03 - [info] RedBot version: 0.19.7 (node-red-contrib-chatbot)
 21 Nov 11:05:09 - [info] Dashboard version 2.23.4 started at /ui
 21 Nov 11:05:09 - [info] Settings file  : /root/.node-red/settings.js
 21 Nov 11:05:09 - [info] Context store  : 'memoryOnly' [module=memory]
 21 Nov 11:05:09 - [info] Context store  : 'file' [module=localfilesystem]
 21 Nov 11:05:09 - [info] User directory : /user/.node-red
 21 Nov 11:05:09 - [info] Server now running at https://127.0.0.1:1880/
 21 Nov 11:05:09 - [info] Active project : Demo_Proyecto
 21 Nov 11:05:09 - [info] Flows file     : /user/.node-red/projects/Demo_Proyecto/flow.json
 21 Nov 11:05:09 - [info] Starting flows
 21 Nov 11:05:09 - [info] Started flows
 21 Nov 11:05:09 - [info] [mqtt-broker:2ac34a26.7bd096] Connected to broker: mqtt://localhost:1883 

Flow Debugger

Una de las características que se mejorará en las siguientes versiones de Node-RED es un depurador de flujo adecuado.

Node-RED proporciona el nodo de depuración para ayudar al desarrollador a comprender lo que sucede en su flujo. Son herramientas útiles, pero tienen sus límites. Solo puede depurar en los puntos en los que ha agregado un nodo al flujo. Cuando tiene un flujo que involucra múltiples ramas y eventos de tiempo, puede ser difícil ver cómo fluyen los mensajes en cada rama al mismo tiempo.

Flow Debugger permitirá al desarrollador establecer puntos de interrupción a lo largo de su flujo. Cuando un mensaje llega a un punto de interrupción, el tiempo de ejecución se pausará y los mensajes dejarán de fluir. Luego, el desarrollador puede inspeccionar el flujo en diferentes puntos para inspeccionar los mensajes que esperan ser entregados.

Cuando se ejecuta con el depurador habilitado, el usuario podrá visualizar el rendimiento de sus flujos, para ver dónde se está gastando el tiempo o si existen cuellos de botella que podrían optimizarse.

Debug con Arduino

Que es debugging: http://www.visualmicro.com/page/User-Guide.aspx?doc=Debugging-Explained.html

Como hemos visto podemos hacer debug con un HW externo adecuado para el microcontrolador y el puerto de debug correspondiente más una herramienta SW como Atmel Studio.

Generalmente con Arduino no disponemos de estas herramientas, pero podemos hacer debug usando el puerto serie y las directivas de preprocesamiento.

A la hora de hacer depuración de un sketch, tanto al desarrollarlo como cuando esté en producción y se detecten fallos, disponemos del puerto serie para que muestre datos de errores o datos de variables internas para la comprobación del funcionamiento interno que nos permite saber si todo va bien o que está fallando.

Es similar a cuando vemos a un técnico que conecta una consola a un equipo como una máquina climatizadora o en el taller cuando colocan la máquina de diagnóstico al coche para saber qué está pasando.

A la hora de realizar nuestro programa debemos establecer qué parámetros queremos tener monitorizados y sacarlos por el puerto serie para hacer el debug. Incluso podemos pensar en poner una pantalla LED que nos saque por un segundo puerto serie y nos sirva de pantalla de debug.

Un técnica para hacer debug es usar la directiva de preprocesamiento #define que permite asociar a una palabra un valor sin que ocupe espacio en memoria, lo que hace el compilador es sustituir esa palabra por el valor definido. Más información en: http://arduino.cc/en/pmwiki.php?n=Reference/Define

Además para mejorar la funcionalidad de #define tenemos otras directivas de preprocesamiento: #if y #endif que son directivas lógicas, es decir, no sólo no se ejecutan sino que ni se compilan. Las directivas de preprocesamiento nos permiten añadir o quitar código a nuestro antojo antes de compilar para tener una versión para debug o detección de errores y otra versión de producción.

Para hacer debug de nuestro sketch, usaremos Serial.print y sacaremos por el puerto serie para leer por consola aquellas variables o elementos que nos interese monitorizar y saber lo que está pasando con ellas en tiempo real.

Ejemplo:

 
#define DEBUG 0
void setup(){
  inicializa();
}
void loop(){
  compruebaTemperatura();
#if DEBUG
  imprimeVariablesDebug();
#endif
}

Ejercicio20: Hacer un programa sencillo que imprima cosas por puerto serie, la memoria libre, etc… y seleccionar que haga una cosas u otras en función de la directiva de preprocesamiento activada. Comprueba los tiempos de loop, el tamaño ocupado en la flash y el uso de memoria con las opciones DEBUG y VERBOSE y sin ellas.

Solución: https://github.com/jecrespo/Aprendiendo-Arduino/tree/master/Ejercicio20-Debug