Archivo de la categoría: Formación Node-RED

Ejercicios Finales Node-RED

Ejercicio 1

Hacer un CSV con los datos de temperatura, memoria y CPU que manda vuestra Raspberry PI y guardar en un fichero llamado raspberrypi.csv. Añadir también el campo timestamp al fichero csv.

Para ello tomar los datos publicados en MQTT, ordenarlos y prepararlos para que los pase a un nodo join y los ponga en este orden: timestamp,CPU,Memory,Temperature 

Para que los ordene de forma automática el nodo join debemos hacer uso de la propiedad parts como hace el nodo split usando:

  • parts.index – para el orden de los elementos del grupo a unir
  • parts.id – para indicar que es el mismo grupo
  • parts.count – para indicar el nº de mensajes del grupo

También crear un flujo con un nodo inject que cree el fichero con la cabecera: “timestamp,CPU,Memory,Temperature” y que además al hacerlo vacíe el fichero existente.

Crear otro flujo con un nodo inject que lee con “file in” el contenido del fichero y lo mande a la pantalla de debug.

Luego con un botón del dashboard hacer la parte de inicializar el fichero (que aparezca una notificación del dashboard para confirmar que se desea inicializar) y con otro botón del dashboard un flujo que lea el fichero y lo mande al nodo chart del dashboard y hacer las gráficas.

Opcionalmente, hacer un tercer botón que mande por email el fichero csv, como fichero adjunto.

Opcionalmente, hacer un flujo que lea los datos del fichero llamado raspberrypi.csv y obtener los datos de media, máxima y mínima de la temperatura, memoria y CPU y mostrar en el dashboard en un nodo texto.

Opcionalmente, hacer un flujo que agrupe los datos en grupos de 100 y sacar los datos de media, máxima y mínima cada 100 valores y guardar en otro fichero llamado raspberrypi_agrupados.csv con los campos: timestamp,CPU_AVG,CPU_MAX,CPU_MIN,Memory_AVG,Memory_MAX,Memory_MIN,Temperature_AVG,Temperature_MAX,Temperature_MIN

Mandar datos al nodo chart: https://github.com/node-red/node-red-dashboard/blob/master/Charts.md 

Código: https://github.com/aprendiendonodered/ejercicio10

Ejercicio 2 – Seguridad

Poner un pin para encender los Reles, de forma que si no hay pin no se puede encender desde el dashboard. Simular una cerradura de forma que al poner el pin correcto se abre y luego a los 5 segundos se cierra.

Mostar en el dashboard el estado de la cerradura.

Crear un tab nuevo en el dashboard llamado pin de seguridad

Basarse en el flujo:

Hacer el flujo como un subflow.

Dashboard

Flujo

Subflow

Código:

Ejercicio 3 – Email y SMS

Hacer un formulario en el dashboard para mandar un correo electrónico y otro para mandar un SMS usando el servicio de Twilio: https://www.twilio.com/

Dashboard

Flujo

Código: https://github.com/jecrespo/Curso-Node-RED/blob/master/04-Ejercicio%20Final/Ejercicio_4/Ejercicio_4.json

Luego usar esta configuración para enviar un correo y un SMS cuando se pulse el botón de la Raspberry Pi y el relé del nodo remoto 14 esté encendido, viéndolo en un dashboard.

Ejercicio 4 – Predicción de Lluvia con datos AEMET

Hacer un panel de control que muestre la predicción de lluvia de los próximos 7 días de una ciudad usando los datos de AEMET y su API.

Solución: https://github.com/aprendiendonodered/AEMET_Prediccion_Dias

Además mostrar la predicción de temperatura de los próximos 5 días usado el nodo de open weather map https://flows.nodered.org/node/node-red-node-openweathermap 

Por último publicar todos los datos por MQTT con el topic: “educantabria/nodo00/santander/predicción/[lluvia/santander]/{dia}/{hora}”

Topics publicados:

  • casa/santander/prediccion/lluvia/{dia} – Publica la predicción de lluvia de santander obtenida de AEMET
  • casa/santander/prediccion/temperatura/{dia}/{hora} – Publica la predicción de temperatura de santander obtenida de Open Weather

JSONata para Node-RED

JSONata es un lenguaje de consulta y transformación de objetos JSON

Las estructuras de datos son uno de los elementos más importantes de cualquier lenguaje de programación. Nos permite estructurar los datos de manera consistente y realizar operaciones que requieren algunos patrones. Sin un patrón, es difícil para cualquier desarrollador encontrar una forma eficiente de extraer o manipular los datos. JSON es un formato muy conocido que la mayoría de nosotros usamos todos los días. Al trabajar con él, hay operaciones que hacemos habitualmente, como consultar, filtrar, ordenar, agrupar y otras.

JSONata es un lenguaje ligero de consulta y transformación para datos JSON. Inspirado en la semántica de ‘location path’ de XPath 3.1, permite expresar consultas sofisticadas en una notación compacta e intuitiva. Se proporciona un rico complemento de operadores y funciones incorporados para manipular y combinar datos extraídos, y los resultados de las consultas se pueden formatear en cualquier estructura de salida JSON utilizando un objeto JSON familiar y una sintaxis de array. Junto con la posibilidad de crear funciones definidas por el usuario, se pueden crear expresiones avanzadas para abordar cualquier tarea de transformación y consulta JSON.

Web: https://jsonata.org/

Documentación: http://docs.jsonata.org/overview.html

Más información:

Para admitir la extracción de valores de una estructura JSON, se define una sintaxis de ruta de ubicación. Al igual que XPath, esto seleccionará todos los valores posibles en el documento que coincidan con la ruta de ubicación especificada. Las dos construcciones estructurales de JSON son objetos y arrays.

Un objeto JSON es una matriz asociativa. La sintaxis de la ruta de ubicación para navegar en una estructura profundamente anidada de objetos JSON comprende los nombres de campo separados por un punto ‘.’ delimitadores. La expresión devuelve el valor JSON al que se hace referencia después de navegar al último paso en la ruta de ubicación. Si durante la navegación de la ruta de ubicación, no se encuentra un campo, la expresión no devuelve nada (representado por Javascript undefined). No se producen errores como resultado de datos no existentes en el documento de entrada.

Ejemplos en:

Los arrays JSON se utilizan cuando se requiere una colección ordenada de valores. Cada valor de la matriz está asociado con un índice (posición) en lugar de un nombre, por lo que para abordar valores individuales en una matriz, se requiere sintaxis adicional para especificar el índice. Esto se hace usando corchetes después del nombre de campo de la matriz. Si los corchetes contienen un número o una expresión que se evalúa como un número, entonces el número representa el índice del valor a seleccionar. Los índices tienen un desplazamiento cero, es decir, el primer valor de una matriz arr es arr [0]. Si el número no es un número entero, entonces se redondea a un número entero. Si la expresión entre corchetes no es numérica o es una expresión que no se evalúa como un número, entonces se trata como un predicado.

Los índices negativos cuentan desde el final de la matriz, por ejemplo, arr [-1] seleccionará el último valor, arr [-2] el penúltimo, etc. Si se especifica un índice que excede el tamaño de la matriz, entonces no se selecciona nada.

Si no se especifica ningún índice para una matriz (es decir, no hay corchetes después de la referencia del campo), se selecciona toda la matriz. Si la matriz contiene objetos y la ruta de ubicación selecciona campos dentro de estos objetos, se consultará cada objeto dentro de la matriz para su selección.

Ejemplos en:

Predicate Expressions

En cualquier paso de una ruta de ubicación, los elementos seleccionados se pueden filtrar utilizando un predicado – [expr] donde expr se evalúa como un valor booleano. Cada elemento de la selección se compara con la expresión, si se evalúa como verdadero, entonces el elemento se mantiene; si es falso, se elimina de la selección. La expresión se evalúa en relación con el elemento actual (contexto) que se está probando, por lo que si la expresión de predicado realiza la navegación, entonces es relativa a este elemento de contexto.

Ejemplos:

  • Account.Order.Product.[ProductID=858383]
  • Account.Order.Product[ProductID=858383].`Product Name`

Ejemplos en:

Comodines

Uso de * en lugar del nombre del campo para seleccionar todos los campos de un objeto.

El comodín descendiente ** en lugar de * atravesará todos los descendientes (comodín de varios niveles).

Al procesar el valor de retorno de una expresión JSONata, podría ser conveniente tener los resultados en un formato coherente, independientemente de cuántos valores coinciden, es decir, forzar a que devuelva un array de valores. La expresión se puede modificar para que devuelva un array incluso si solo se coincide con un valor único. Esto se hace agregando corchetes vacíos [] a un paso dentro de la ruta de ubicación.

Funciones y Expresiones

Strings

Las expresiones de ruta que apuntan a un valor de cadena (string) devolverán ese valor.

Los literales de strings también se pueden crear encerrando la secuencia de caracteres entre comillas. Se pueden utilizar comillas dobles » o comillas simples ‘, siempre que se utilice el mismo tipo de comillas para el inicio y el final del literal de cadena. Los caracteres de comillas simples se pueden incluir dentro de una cadena de comillas dobles y viceversa sin escapar. Caracteres dentro del string se puede escapar utilizando el mismo formato que las cadenas JSON.

Las cadenas se pueden combinar utilizando el operador de concatenación &. Este operador unirá las dos cadenas devueltas por las expresiones a cada lado. Este es el único operador que intentará forzar sus operandos al tipo esperado (cadena).

Numéricos

Los literales numéricos también se pueden crear utilizando la misma sintaxis que los números JSON. Los números se pueden combinar utilizando los operadores matemáticos habituales para producir un número resultante. Operadores admitidos:

  • + suma
  • – resta
  • * multiplicación
  • / división
  • % resto (módulo)

$number pasa a número el dato y poder operar en JSONata

Comparación

Se utiliza a menudo en predicados, para comparar dos valores. Devuelve un valor booleano verdadero o falso. Operadores admitidos:

  • = igual
  • ! = no es igual
  • < menor que
  • <= menor o igual que
  • > mayor que
  • > = mayor o igual que
  • in valor está contenido en una matriz

Booleanos

Se utiliza para combinar resultados booleanos, a menudo para admitir expresiones de predicado más sofisticadas. Operadores admitidos:

  • and
  • or

Ejemplo: $[data.age > 16 and data.age < 20]

Tenga en cuenta que not se admite como función, no como operador.

Ejemplos en:

Otras tareas que se pueden realizar:

  • Ordenar
  • Hacer funciones
  • Trabajar con fechas
  • Trabajar con strings
  • etc…

Ejercicios Básicos Node-RED

Primer Flujo en Node-RED

Vamos a probar un flujo muy simple. Lo que hará es mostrar un texto por el panel de debug. Arrastra un nodo inject de la categoría input y un nodo debug de la categoría output al flujo. Los tienes que conectar entre ellos arrastrando el punto de la parte derecha del nodo inject sobre el punto de la parte izquierda del nodo debug.

primer flujo node-red

A continuación vamos a editar el nodo inject. Si haces doble click sobre el nodo se abrirá un panel donde nos muestra diferentes parámetros. En este panel tienes que seleccionar del menú desplegable donde pone Payload, la opción que pone String.

En el campo de texto pon cualquier cosa como por ejemplo Hola mundo 🙂

Para guardar la aplicación sólo tienes que dar a Deploy que si te has dado cuenta, ha pasado de estar en un color gris oscuro a rojo.

deploy node-red

Una vez que lo hayas pulsado, volverá de nuevo al color gris oscuro. Esto quiere decir que ya tenemos guardados todos los cambios del flujo de Node-RED.

Para probar este primer flujo con Node-RED tenemos que abrir el panel de debug que está situado en la parte derecha. Luego, tienes que hacer click sobre la parte izquierda del nodo inject.

Esto hará que en el panel debug aparezca lo que hemos escrito en la configuración del nodo inject.

Como puedes ver, el mensaje se muestra en el panel debug.

Para saber que se ha hecho un deploy, se puede hacer que mande un correo cada vez que se reinicia Node-RED. Flujo:

[{"id":"67252650.d05f28","type":"e-mail","z":"45a71fc.1bebde","server":"smtp.gmail.com","port":"465","secure":true,"tls":true,"name":"micuenta@gmail.com","dname":"manda email alerta","x":410,"y":580,"wires":[]},{"id":"fc4c30da.caea3","type":"inject","z":"45a71fc.1bebde","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":true,"onceDelay":0.1,"topic":"Mi instancia Node-RED deployed","payload":"Mi instancia de Node-RED ha hecho un redeploy o se ha reiniciado.","payloadType":"str","x":210,"y":580,"wires":[["67252650.d05f28"]]}]

Más información: https://programarfacil.com/blog/raspberry-pi/introduccion-node-red-raspberry-pi/

Node-RED y MQTT con Wemos D1 Mini

Capturar los datos mandados por los nodos remotos por MQTT.

Sólo tienes que arrastrar el nodo mqtt que está en la categoría input al flujo.

sistema alarma node-red

Ahora hay que configurarlo. Aquí es donde vemos la potencia de Node-RED. Cuando utilizamos una tecnología, nos centramos en lo superficial. En el caso de MQTT lo único que tenemos que hacer es configurar el broker y el topic.

Al tratarse de un nodo de entrada, lo que hace es recibir los mensajes publicados en un topic es decir, se suscribe al topic. Haz doble click sobre el nodo para que abra el panel de configuración.

En el panel de configuración MQTT vamos a configurar primero el broker MQTT. Haz click en el lápiz que aparece en Server.

sistema alarma node-red

Esto abre un nuevo panel de configuración. Pon un nombre al broker MQTT por ejemplo RASPBERRY PI MOSQUITTO. En Server tienes que poner la IP donde está instalado el broker MQTT y el puerto que utiliza, normalmente es el 1883.

Esta sería la configuración mínima. No te olvides de hacer click en el botón Add.

sistema alarma node-red

Después de esta acción volverás al panel de configuración del nodo mqtt y automáticamente, habrá seleccionado el broker MQTT que acabamos de crear.

Por último, vamos a rellenar el campo de Topic. Debe ser el mismo que hemos puesto en Arduino o el ESP8266, /casa/puerta/alarma. Una vez lo tengas, haz click en Done.

sistema alarma node-red

Ahora sólo nos queda probarlo. Para ello vamos a utilizar el mismo nodo debug de la categoría output que hemos utilizado antes.

Arrástralo al flujo, conecta los dos nodos y haz click en el botón Deploy.

sistema alarma node-red

Para probar el sistema lo podemos hacer de dos formas. Desde una terminal de Raspberry Pi podemos publicar un mensaje en el topic o directamente conectando la placa y simulando que abren la puerta.

El resultado sería el siguiente.

sistema alarma node-red

Segundo Flujo

Obtener los datos de los terremotos en el mundo descargando un csv de una web pública.

Pasos:

  • Añade un nodo inject
  • Añade un nodo http request que consulte esta web: https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/significant_month.csv
  • Añade un nodo csv
  • Añade un node debug
  • Únelo todo
  • Añade un nodo switch de forma que saque aquellos datos cuyo valor de magnitud (​​msg.payload.mag) sea mayor o igual que 7
  • Añade un nodo change que ponga en msg.payload el valor PANIC!!!
  • Añade un nodo de debug que muestre el dato del nodo change

Código:

[{"id":"e36406f2.8ef798","type":"inject","z":"f03b57d5.e525f8","name":"","topic":"","payload":"","payloadType":"str","repeat":"300","crontab":"","once":false,"x":130,"y":900,"wires":[["c3c50023.3bbed"]]},{"id":"c3c50023.3bbed","type":"http request","z":"f03b57d5.e525f8","name":"Recent Quakes","method":"GET","url":"https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/significant_month.csv","tls":"","x":300,"y":900,"wires":[["8afc6cac.e0812"]]},{"id":"8afc6cac.e0812","type":"csv","z":"f03b57d5.e525f8","name":"","sep":",","hdrin":true,"hdrout":"","multi":"one","ret":"\\n","temp":"","x":470,"y":900,"wires":[["44779781.4190f8","6f0eb546.9e208c"]]},{"id":"44779781.4190f8","type":"debug","z":"f03b57d5.e525f8","name":"","active":true,"complete":false,"x":630,"y":900,"wires":[]},{"id":"6f0eb546.9e208c","type":"switch","z":"f03b57d5.e525f8","name":"","property":"payload.mag","propertyType":"msg","rules":[{"t":"gte","v":"7","vt":"num"}],"checkall":"true","outputs":1,"x":510,"y":960,"wires":[["d78d4aa8.8c8208"]]},{"id":"d78d4aa8.8c8208","type":"change","z":"f03b57d5.e525f8","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"PANIC!","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":650,"y":1020,"wires":[["72fddece.fac0d"]]},{"id":"72fddece.fac0d","type":"debug","z":"f03b57d5.e525f8","name":"","active":true,"complete":false,"x":750,"y":960,"wires":[]}]

Low Code Programming

Una plataforma de desarrollo de código bajo (Low Code Programming – LCDP) proporciona un entorno de desarrollo que se utiliza para crear software de aplicación a través de una interfaz gráfica de usuario en lugar de la programación informática tradicional codificada a mano. Una plataforma de codificación baja puede producir aplicaciones completamente operativas o requerir codificación adicional para situaciones específicas. Las plataformas de desarrollo de bajo código reducen la cantidad de codificación manual tradicional, lo que permite una entrega acelerada de aplicaciones comerciales. Un beneficio común es que una gama más amplia de personas puede contribuir al desarrollo de la aplicación, no solo aquellos con habilidades de codificación. Los LCDP también pueden reducir el costo inicial de configuración, capacitación, implementación y mantenimiento.

Wikipedia: https://en.wikipedia.org/wiki/Low-code_development_platform

En lugar de utilizar lenguajes de programación complejos, se puede emplear interfaces visuales con lógica básica y capacidades de arrastrar y soltar en una plataforma de desarrollo de código bajo. Los usuarios sin conocimientos avanzados de codificación o creación de software pueden utilizar estas técnicas intuitivas para crear software para varios propósitos, como crear aplicaciones móviles, automatización y comerciales.

Como son una alternativa rápida y sencilla al desarrollo de software convencional, estas plataformas han ganado popularidad. Un marco de bajo código puede ser utilizado por técnicos y «desarrolladores ciudadanos» (desarrollo no profesional) para crear aplicaciones de una amplia variedad para satisfacer las demandas de crecimiento del mercado, simplificar procesos y facilitar la transformación digital.

La necesidad de automatización de software y nuevas aplicaciones para procesos comerciales impone a los desarrolladores de software demandas para crear aplicaciones personalizadas en volumen, adaptándolas a las necesidades únicas de las organizaciones. Las plataformas de desarrollo de bajo código se han desarrollado y se desarrollan como un medio para permitir la creación y el uso rápidos de aplicaciones de trabajo que pueden abordar los procesos específicos y las necesidades de datos de la organización.

Low-code es una forma en que los desarrolladores pueden hacer más. Con low-code, pueden dedicar más tiempo a crear y construir y menos tiempo al trabajo repetitivo. Claro, es divertido aprender el último workframe de JavaScript caprichoso o jugar con un almacén de datos NoSQL de vanguardia, pero mientras pasa tiempo depurando código desconocido, su competidor tiene un MVP frente a los clientes.

Proceso de trabajo con Low-Code:

Existen muchas razones para usar el enfoque low code. Las principales ventajas de este método de desarrollo se pueden resumir de la siguiente manera:

  • Velocidad: puesto que el desarrollo low code no requiere apenas programación manual, los prototipos y las aplicaciones completas se desarrollan más rápidamente, lo cual también aumenta la eficiencia de los programadores profesionales, que pueden así centrar su atención en las funciones esenciales en lugar de tener que buscar fallos en el código.
  • Sencillez: la simplicidad de su uso permite a los usuarios familiarizarse rápidamente con el proceso sin necesidad de muchos conocimientos previos. El código fuente, que convencionalmente debe ser escrito a mano, se genera automáticamente mediante una ordenación intuitiva de elementos. Las modificaciones también pueden implementarse fácilmente a posteriori.
  • Reducción de costes: un efecto directamente relacionado con el ahorro de tiempo es la reducción de costes. Los elementos visuales de las plataformas low code pueden reutilizarse y no necesitan ser redactados de nuevo cada vez. Gracias a la simplicidad de la aplicación, los trabajadores no necesitan costosos cursos para familiarizarse con ella.
  • Flexibilidad: las herramientas flexibles permiten publicar las aplicaciones desarrolladas en el entorno que se desee. Además, el sencillo manejo de las low-code platforms les otorga una gran adaptabilidad. De este modo, los desarrolladores pueden reaccionar rápidamente ante cambios como, por ejemplo, nuevas exigencias del mercado.
  • Mayor calidad: puesto que el desarrollo low code también está pensado para programadores amateurs, ofrece la posibilidad de integrar en él conocimientos especializados de diferentes ámbitos. De esta manera, expertos de diferentes disciplinas pueden actuar como citizen developers (desarrolladores no profesionales) para ayudar a encontrar soluciones creativas, favoreciendo así la entrada de ideas externas y aumentando la calidad del producto final.

Las preocupaciones sobre la seguridad y el cumplimiento de la plataforma de desarrollo de bajo código están aumentando, especialmente para las aplicaciones que usan datos de los consumidores. Puede haber preocupaciones sobre la seguridad de las aplicaciones creadas con tanta rapidez y la posible falta de una gobernanza debida que lleve a problemas de cumplimiento. Sin embargo, las aplicaciones de código bajo también impulsan las innovaciones de seguridad. Teniendo en cuenta el desarrollo continuo de aplicaciones, resulta más fácil crear flujos de trabajo de datos seguros.

Low code programming para Data Scientist: https://medium.com/low-code-for-advanced-data-science/low-code-for-advanced-data-science-a-new-journal-8bebee7ed619 

Lista de Visual Programming Languages: https://en.wikipedia.org/wiki/Visual_programming_language 

Low Code de Microsoft: powerapps

Appian, otra herramienta Low Code:

Las aplicaciones de Low Code van a ser fundamentales en la transformación digital.

Low code está enfocado a aplicaciones empresariales, aplicaciones móvil, webs, automatización, flujo de trabajo, etc… Un ejemplo de Low Code también es wordpress.

Low code permite colaborar entre IT y negocio o IT y producción/industrial

Tipos de aplicaciones de Low code:

  • Canvas – interfaces de usuario para visualizar y poder insertar datos
  • Model/Data Driven – aplicaciones enfocadas a datos
  • Aplicaciones Portal – Para usuarios externos, lo anterior es interno

Informe de Low Code: 

Paradigmas de programación de bajo código:

Más información:

Low Code para IoT

Para obtener el mayor valor de las soluciones de IoT en el sector industrial (o, de hecho, en cualquier contexto), las empresas necesitan soluciones de desarrollo de software que les permitan crear aplicaciones personalizadas adaptadas a sus casos de uso únicos de IoT de forma rápida y eficiente.

Es hora de liberar a TI de todas las tareas de desarrollo mundanas y crear un clima de colaboración tecnológica. Mediante el uso de código bajo, otras unidades de negocio están facultadas para colaborar como socios iguales con el departamento de TI para crear soluciones e implementarlas rápidamente, creando resiliencia y flexibilidad. Los equipos pueden pivotar bajo demanda sin esperar a que el departamento de TI llegue a cada proyecto pequeño, y el departamento de TI puede supervisar los resultados, especialmente cuando estos programas se implementan en toda la empresa.

Low code devuelve la tecnología a su lugar: creando valor para la empresa. A medida que los fabricantes se adaptan a la necesidad de información en tiempo real e innovación rápida, el código bajo podría ofrecer el compromiso que necesitan entre desarrollo y seguridad.

Más información:

Low Code Development Platforms

En lugar de la programación informática convencional codificada a mano, un marco de desarrollo de código bajo ofrece un entorno de programación para crear aplicaciones de software a través de interfaces gráficas de usuario y configuración. Los marcos de creación de bajo código brindan a los clientes de TI la capacidad de incorporar bloques de construcción en flujos de trabajo y aplicaciones. Estos elementos básicos abstraen el código detrás de las acciones y las órdenes, lo que permite a TI crear interfaces y aplicaciones comerciales sin tener que codificarlas a mano.

Según la última estimación de Gartner, Inc., la industria global de tecnologías de desarrollo de código bajo tendrá un valor de 13.800 millones de dólares en 2021, un 22,6 por ciento más que en 2020. A pesar de las continuas campañas de gestión de costes, el auge de la producción remota durante la pandemia de COVID-19 continuará impulsando la adopción de códigos bajos. Se prevé que se expandirá el crecimiento del código bajo como fenómeno social y técnico general. Se prevé que las plataformas de aplicaciones de código bajo (LCAP) seguirán siendo la mayor parte del mercado de tecnología de desarrollo de código bajo en 2022. Por ejemplo, ya ha aumentado un 30% desde 2020 y generó $ 5,8 mil millones en 2021.

Tipos de Low Code Platforms según Forrester:

  • General Purpose
  • Request Handling
  • Process
  • Mobile First
  • Database

Lista de Low Code Development Platforms: https://en.wikipedia.org/wiki/List_of_low-code_development_platforms 

Ejemplos de Low Code Development Platforms:

No-Code Development Platform

No-Code Development Platform: https://en.wikipedia.org/wiki/No-code_development_platform 

La diferencia básica entre Low-Code y No-Code es que el código bajo se dirige a los desarrolladores. Estos sistemas requieren habilidades tecnológicas pero permiten a los codificadores expertos trabajar más rápidamente. Para los codificadores, cuanto más eficientes sean las herramientas para acelerar el progreso tecnológico, mejor.

Por otro lado, no-code se dirige a los usuarios comerciales porque estas plataformas no permiten a los usuarios editar el código manualmente mientras se enfocan en proporcionar la interfaz más segura y fácil de usar posible al extraer información técnica. Cuanto más intuitiva sea la interfaz de usuario, mejor será para los usuarios empresariales.

Dado que están diseñados para construir una amplia gama de soluciones técnicas, los sistemas de código bajo necesitan algo de codificación. La codificación también es una parte vital del proceso de construcción para garantizar que el creador tenga el poder que necesita. Las plataformas sin código, por otro lado, abstraen toda la información tecnológica. Hace que las plataformas sin código sean aún más baratas y fáciles de usar, aunque solo están disponibles para algunos casos de uso.

Más información: https://www.forbes.com/sites/forbescommunicationscouncil/2021/05/07/low-code-versus-no-code-and-the-future-of-application-development/?sh=1249df3e3568

Versiones Node-RED

Node red pasó a la versión 1.x en septiembre de 2019 con cambios notables, veamos los cambios introducidos en Node-RED a lo largo de sus versiones.

Versiones node-red: https://github.com/node-red/node-red/releases

Novedades Node-Red 0.20: https://programarfacil.com/blog/raspberry-pi/novedades-node-red-0-20/

Salto de la 0.x a la 1.x explica las diferencias:

Version 1.0 (30/09/2019): https://nodered.org/blog/2019/09/30/version-1-0-released

Vídeo versión 1.0: https://www.youtube.com/watch?v=nIVBZQi18fQ&feature=youtu.be 

Versión 1.1 (30/06/2020): https://nodered.org/blog/2020/06/30/version-1-1-released

Version 1.2 (15/10/2020): https://nodered.org/blog/2020/10/15/version-1-2-released

Vídeo versión 1.2: https://www.youtube.com/watch?v=rnM5sfb2qoY 

Planes de releases: https://nodered.org/blog/2020/07/01/release-plans 

Releases: https://nodered.org/about/releases/ 

Planes de futuro: https://nodered.org/blog/2020/10/13/future-plans 

Vídeo de los creadores de Node-RED hablando del estado de Node-RED: https://openjsf.org/blog/2020/05/13/nodered-ama-recap/ 

Beta version 1.3 Node-RED: https://discourse.nodered.org/t/node-red-1-3-0-beta-1-released/41960

  • change log: https://github.com/node-red/node-red/blob/15715a296862bf9603facd45bf1a7ef17623890b/CHANGELOG.md
  • Uso de módulos npm en funciones. Al establecer functionExternalModules en verdadero en el archivo de configuración, podrá configurar sus nodos de función con una lista de módulos adicionales.
  • Ahora es posible anidar referencias a las propiedades del mensaje en los nodos change y switch. Ejemplo: set flow.rooms[msg.topic] to the value of msg.payload
  • Node-RED Plugins framework
  • Ahora es posible empaquetar un subflujo como un módulo y publicarlo en npm para instalarlo en la paleta como cualquier otro nodo.
  • El cuadro de diálogo Exportar ahora muestra una lista estructurada de lo que está exportando. El JSON sin formato aún se puede ver en una segunda pestaña del cuadro de diálogo.
  • Con esta versión, si pulsa Mayús y hace clic en el lado izquierdo del nodo, seleccionaremos todos los nodos ascendentes. Si pulsa Mayús y hace clic en el lado derecho, seleccionaremos todos los nodos de corriente abajo. Shift-clic en el centro del nodo seleccionará todo el flujo como antes.
  • Los nodos MQTT ahora son compatibles con MQTTv5 y la gran mayoría de las nuevas funciones que presenta la versión 5.

Versión 1.3 (08/04/2021): https://nodered.org/blog/2021/04/08/version-1-3-released

  • Mejorada la selección de nodos. Más información: https://github.com/node-red/node-red/pull/2877 
  • Hay un nuevo ajuste disponible que gobierna lo que puede ser instalado en Node-RED: externalModules. Esto cubre dos cosas separadas: qué nuevos nodos pueden ser instalados a través del gestor de paletas, y qué módulos pueden ser cargados por el nodo Function. Más información: https://github.com/node-red/node-red/pull/2797 
  • Los nodos MQTT ahora soportan MQTTv5 y la gran mayoría de las nuevas características que introduce v5.

Planning Node-RED 2.0: https://discourse.nodered.org/t/planning-for-node-red-2-0/41918

Versión 2.0 (Beta): https://discourse.nodered.org/t/node-red-2-0-0-beta-1-released/46990

Versión 2.0 (20/07/2021): https://nodered.org/blog/2021/07/20/version-2-0-released 

Version 2.1 (21/10/2021): https://nodered.org/blog/2021/10/21/version-2-1-released 

Versión 2.2 (beta)

Versión 2.2 (27/01/2021): https://nodered.org/blog/2022/01/27/version-2-2-released

Versión 3.0 (beta)

Versión 4.0 de Node-RED está prevista para Abril de 2023