Get it on Google Play
Tu partner Freelance para tus proyectos IT

Desarrollo de plugins para Node-RED

07-01-2021
Node-RED

Node-RED

Como a partir del primer vídeo dedicado a esta plataforma(Node-RED) salieron un montón de consultorías distintas he decidido devolver un poco a la comunidad en forma de formación.

Para los que no la tengáis en mente, además de visitar el primer vídeo aquí, recordar que es una plataforma que nos permite hacer programación basada en flujos y también está dentro del grupo de plataformas denominadas ‘low code'(Porque permite desarrollar cosas con poco código). Muy usada en proyectos IoT y de extracción de datos en entornos como routers y dispositivos de red, material eléctrico, etc.

Vamos a ver lo que hemos hecho en el vídeo:

Arrancar contenedor Docker con Node-RED

Aunque en el anterior vídeo lo instalamos desde cero(From scratch) en esta ocasión se ha optado por usar un contenedor Docker mapeando la carpeta local ‘/home/albert/nodedata’ con la carpeta del contenedor ‘/data'(Que es donde se guardan los datos de Node-RED en esta imagen):

sudo docker run --name nodered -v /home/albert/nodedata:/data nodered/node-red

Creación de nuestro primer plugin de Node-RED

Para crear nuestro primer plugin creamos una carpeta dentro de la carpeta ‘node_modules’ en la carpeta de datos de Node-RED. En nuestro caso a la carpeta le hemos llamado ‘mi-plugin'(Se le puede llamar como quiera).

Dentro de esta carpeta crearemos tres ficheros. El primero de los cuales el clásico ‘package.json’ típico de cualquier aplicación NodeJS con el nombre y una pequeño configuración para Node-RED:

{
    "name" : "mi-plugin",
    "node-red" : {
        "nodes": {
            "mi-plugin": "mi-plugin.js"
        }
    }
}

Después de hemos configurado el fichero principal de nuestro plugin ‘mi-plugin.js’ :

module.exports = function(RED) {

    function MiPlugin(config) {
        RED.nodes.createNode(this,config);
        var node = this;

	console.log("Inicializando plugin.");

        node.on('input', function(msg) {
            msg.payload = msg.payload={ "msg": "Este es mi mensaje." };

	    console.log("Llamada a mi plugin.");

            node.send(msg);
        });

       node.on('close', function() {
	    console.log("cerrando plugin.");
	});

    }

    RED.nodes.registerType("mi-plugin",MiPlugin);
}

Y finalmente el último fichero en formato HTML donde tenemos tres partes muy diferenciadas: configuración de nuestro plugin a nivel JS frontend, configuración de los parámetros del plugin(En este caso solo el nombre) y un pequeño apartado de ayuda:

<script type="text/javascript">
    RED.nodes.registerType('mi-plugin',{
        category: 'function',
        color: '#a6bbcf',
        defaults: {
            name: {value:""}
        },
        inputs:1,
        outputs:1,
        icon: "file.png",
        label: function() {
            return this.name||"mi-plugin";
        }
    });
</script>

<script type="text/html" data-template-name="mi-plugin">
    <div class="form-row">
        <label for="node-input-name"><i class="fa fa-tag"></i> Name</label>
        <input type="text" id="node-input-name" placeholder="Name">
    </div>
</script>

<script type="text/html" data-help-name="mi-plugin">
    <p>Aquí mi primer plugin.</p>
</script>
Si te ha servido, por favor comparte
 

Leave a Reply