---
title: "¿Cómo usar librería Node-RED para interactuar con Onesait Platform?"
canonical: "https://onesaitplatform-es.refined.site/space/DOC/2215908627/%C2%BFC%C3%B3mo%20usar%20librer%C3%ADa%20Node-RED%20para%20interactuar%20con%20Onesait%20Platform%3F"
format: markdown
---
> Macro (toc)

# Introducción

En la actualidad, Node-RED es una herramienta de programación muy popular que permite a los desarrolladores crear programas de forma visual. Desde una paleta muy amplia de nodos, los desarrolladores pueden crear flujos al conectar unos con otros. Los desarrolladores también pueden crear sus propios nodos para satisfacer sus necesidades y después compartirlos con la comunidad a través de NPM. Desarrollar pruebas de concepto usando un motor de flujo como Node-RED es fácil y rápido.

onesait Platform ya proporciona un motor de flujo dentro de su Panel de Control, con una conexión directa a los datos almacenados en la plataforma. Esta página presenta la librería cliente para interactuar con la Plataforma onesait desde una instancia Node-RED ejecutada en un dispositivo cliente (otro sistema, una Raspberry Pi ...)

# Descripción de los nodos

![image](media://24425558-65ec-4996-af51-5122c63ba6a8)

El paquete del cliente tiene seis nodos de usuario con diferentes operaciones sobre la plataforma, más un nodo de configuración que se ocupa de los detalles de la conexión. Describamos cada nodo en detalle:

- 
  - **onesait-platform-insert**: este nodo inserta datos en una ontología. Se requieren los siguientes parámetros:
    - *Ontology*: nombre de la ontología. Para crear una ontología, por favor ve a [https://lab.onesaitplatform.com/controlpanel/ontologies/list](https://lab.onesaitplatform.com/controlpanel/ontologies/list)
    - *Instance*: una instancia JSON válida para la ontología seleccionada.
  - **onesait-platform-delete**: este nodo borra los datos de una ontología de acuerdo con una consulta, o por identificador de RTDB (base de datos en tiempo real). Se requieren los siguientes parámetros:
    - *Ontology*: nombre de la ontología. Para crear una ontología, por favor ve a [https://lab.onesaitplatform.com/controlpanel/ontologies/list](https://lab.onesaitplatform.com/controlpanel/ontologies/list)
    - *Delete Type*: el tipo puede ser por consulta o por identificador.
    - *Query/Id*: consulta o identificador (dependiendo del tipo elegido) que se quiere eliminar.
    - *Query Type*: SQL o NATIVE (MongoDB para el despliegue de CloudLab).
  - **onesait-platform-query**: este nodo ejecuta una consulta sobre una ontología. Se requieren los siguientes parámetros:
    - *Ontology*: nombre de la ontología. Para crear una ontología, por favor ve a [https://lab.onesaitplatform.com/controlpanel/ontologies/list](https://lab.onesaitplatform.com/controlpanel/ontologies/list)
    - *Query*: consulta a ejecutar.
    - *Query Type*: SQL o NATIVE (MongoDB para el despliegue de CloudLab).
  - **onesait-platform-update**: este nodo actualiza los datos en una ontología. Se requieren los siguientes parámetros:
    - *Ontology*: nombre de la ontología. Para crear una ontología, por favor ve a [https://lab.onesaitplatform.com/controlpanel/ontologies/list](https://lab.onesaitplatform.com/controlpanel/ontologies/list)
    - *Update Type*: el tipo puede ser por consulta o por identificador.
    - *Id*: identificador de la instancia a actualizar.
    - *Query*: consulta cuyo resultado se actualizará.
    - *Query Type*: SQL o NATIVE (MongoDB para el despliegue de CloudLab).
  - **onesait-platform-leave**: este nodo cierra la sesión actual con la plataforma.
  - **onesait-platform-subscribe**: este nodo se suscribe a cualquier interacción con la ontología seleccionada. Se requieren los siguientes parámetros:
    - *Ontology*: nombre de la ontología. Para crear una ontología, por favor ve a [https://lab.onesaitplatform.com/controlpanel/ontologies/list](https://lab.onesaitplatform.com/controlpanel/ontologies/list)
    - *Query Type*: SQL o NATIVE (MongoDB para el despliegue de CloudLab).
  - **onesait-platform-connection-config**: los nodos de configuración tienen un alcance global por defecto. Esto significa que el estado será compartido entre los flujos. Este nodo representa una conexión compartida con un sistema remoto. En ese caso, el nodo config es responsable de crear la conexión (MQTT) y ponerla a disposición de los nodos que utilizan el nodo config. También es posible conectarse a la plataforma a través de una interfaz REST. Los siguientes parámetros son necesarios para definir la conexión:
    - <span style="color: #555555">*IoTClient*</span><span style="color: #555555">: nombre del cliente digital.</span>
    - <span style="color: #555555">*Instance*</span><span style="color: #555555">: nombre que le damos a la instancia del cliente.</span>
    - <span style="color: #555555">*Token*</span><span style="color: #555555">: token generado para el cliente digital.</span>
    - <span style="color: #555555">*Renovate session every*</span><span style="color: #555555">: cantidad de minutos tras la cual se renueva la sesión. Por defecto 5 minutos.</span>
    - <span style="color: #555555">*Protocol*</span><span style="color: #555555">: protocolo usado en la comunicación con plataforma. Podemos elegir entre REST y MQTT. En cada caso, tendremos que definir los siguientes parámetros de conexión.</span>
      - <span style="color: #555555">*MQTT*</span><span style="color: #555555">:</span>
        - <span style="color: #555555">*IP*</span><span style="color: #555555">: IP del servidor de plataforma.</span>
        - <span style="color: #555555">*Port*</span><span style="color: #555555">: puerto de la conexión MQTT contra plataforma.</span>
        - <span style="color: #555555">*Enable SSL/TLS security:*</span><span style="color: #555555"> podemos activar el check box para indicar que la conexión se realiza sobre SSL/TLS. No es obligatorio.</span>
        - <span style="color: #555555">*Certificate*</span><span style="color: #555555">: en el caso de activar el check anterior, se tiene que especificar el certificado para la conexión.</span>
      - <span style="color: #555555">*REST*</span><span style="color: #555555">:</span>
        - <span style="color: #555555">*Endpoint*</span><span style="color: #555555">: dirección del servidor donde está alojada la plataforma. Si se indica https como protocolo, se gestiona la conexión por SSL/TLS de manera transparente.</span>
        - <span style="color: #555555">*Enable SSL/TLS security*</span><span style="color: #555555">: podemos activar el check box para añadir parámetros extra sobre la conexión SSL/TLS. No es obligatorio.</span>

  


# Proceso de instalación

Primero tienes que instalar Node.js desde [la página oficial de Node.js](https://nodejs.org/en/). Una vez instalado, puedes probar su configuración abriendo un símbolo del sistema y ejecutando estos comandos: 

- **node --version**
- **npm --version**

En este momento, Node.js debería estar instalado y las versiones deberían aparecer en la línea de comandos. El siguiente paso es instalar Node-RED. Para ello, ejecuta este comando:

- **npm install -g --unsafe-perm node-red**

Cuando termines, deberías poder ejecutar Node-RED ejecutando el comando node-red en el prompt que elijas. Esta versión ya tiene muchos de los nodos utilizables que puedes probar en [http://localhost:1880](http://localhost:1880)

El último paso es instalar el cliente Node-RED de la onesait Platform para ejecutar este comando:

- **npm install node-red-contrib-onesait-platform**

También puedes instalar los nodos clientes desde la interfaz web de Node-RED desde los comandos a la derecha, menu→Manage palette, y después buscar onesait:

![image](media://7af3e2d4-aeb4-488d-9622-8418c9941b39)

Al final, es necesario reiniciar Node-RED, y entonces los nodos onesait deberían aparecer como parte de tu paleta.

  


# Usando los nodos del ejemplo

Hay un flujo de ejemplo disponible en línea para acelerar tu curva de aprendizaje en el uso esta librería cliente. Está disponible en  [https://flows.nodered.org/flow/989c8da7c08465f132882f24740c835f](https://flows.nodered.org/flow/989c8da7c08465f132882f24740c835f) 

Una vez importado, tu flujo debe ser parecido a esto:

![image](media://599b8be9-d9ae-4c88-987f-863476d95774)

Puede parecer un poco desordenado, pero es un simple flujo para mostrar todas las capacidades de los nodos. Este ejemplo está listo para usar, ya que tiene credenciales válidas de un usuario de demostración creado para este ejemplo en nuestra instancia de CloudLab. Vamos a sumergirnos en los diversos bloques y explicarlos en detalle:

## CONNECTION-CONFIG

Para el nodo de configuración de la conexión, está embebido en el resto de los nodos como la propiedad de configuración del servidor. Aquí se pueden ver los valores de uno de los nodos del ejemplo, usando una interfaz REST para comunicarse con la plataforma.

![image](media://cd7edff8-847b-4ef5-9557-fe43824b563f)

## QUERY

![image](media://f1b43ce9-1f73-46f6-81f9-0bf310f0a51c)

Estas dos ramas están realizando una consulta (QUERY) bajo demanda sobre los datos de la onesait Platform. Todos nuestros nodos tienen la opción de introducir las variables del nodo manualmente o usando un mensaje de entrada.

Centrémonos en la primera rama, usando el sistema del mensaje de entrada. Este nodo requiere que algunos campos estén presentes en el mensaje entrante, como se presenta en la descripción de los nodos. Por lo tanto, el nodo Parse tiene este aspecto:

![image](media://ad338341-ae2d-45e2-baba-72ea7e07ed7f)

Al hacer clic en el nodo Timestamp, Node-RED dispara la consulta definida dentro del nodo Parse, y entonces el nodo Debug muestra el resultado de la operación de consulta. La salida es un array de objetos JSON con las instancias de la ontología que coinciden con el criterio de la consulta.

![image](media://571dd409-918f-4bbe-b931-f54c66084243)

## INSERT y DELETE

![image](media://f585535d-9277-43f7-be82-6361429c6472)

Este bloque combina dos nodos, Insert y Delete:

- Para Insertar una instancia a la plataforma, el patrón es similar al utilizado en el ejemplo de la Consulta. Esta vez, en vez de una consulta, es necesario pasar la instancia que se va a insertar en la plataforma (msg.payload), y la ontología de destino (msg.ontology):

![image](media://9e7e8f1f-2d1c-4b6b-849e-334c8c75f011)

- La salida de una inserción es el identificador de la base de datos asignado a la instancia en la base de datos:

  


- Hay dos formas de borrar una instancia en la plataforma:
  - Por identificador: de esta manera se borra sólo el documento seleccionado bajo el ID de entrada. Este comportamiento se simula en la rama superior de este bloque. Primero, hay una inserción con un ID asociado devuelto, y después un borrado de ese ID. La salida del nodo Delete es el número de registros borrados en la base de datos. La salida de la primera rama debe tener este aspecto:

![image](media://08cb07d8-1602-453c-ac93-a9bf75195b9f)

- 
  - Por consulta: Esta opción elimina los registros que coinciden con una consulta de entrada. La tercera rama de este bloque realiza esta eliminación por consulta:

> Macro (inline-media-image)

> Macro (inline-media-image)



  


## UPDATE

![image](media://a6116815-6a7d-42c8-87bf-3e2b27f32e33)

El nodo de actualización (Update) es muy similar al nodo Delete ya que es posible, una vez más, realizar la operación por identificador o por consulta:

- Por identificador: configuración similar a la utilizada por el nodo Delete. El msg de entrada contiene el ID a eliminar (msg.id), la instancia nueva y completa que actualizará la anterior (msg.query) y la ontología (msg.ontology). La salida tiene ahora este aspecto:

> Macro (inline-media-image)

> Macro (inline-media-image)



- Por Consulta: también es posible actualizar los registros que coinciden con una consulta de entrada. El nodo UpdateByQuery contiene la consulta de actualización (msg.query) y el tipo de consulta (msg.queryType). La salida indica al usuario cuántos registros se actualizaron.

![image](media://9ae7bf58-6b46-4f92-90b0-70668bed8ed8)

![image](media://a9c6955b-72cb-4d83-8cc7-04a96d35ac57)

## SUBSCRIBE

![image](media://9bddd520-1019-4f02-bd7a-164d1575ea5d)

La opción de suscripción funciona sólo con la conexión MQTT, así que debes configurar esta característica en tu nodo servidor (connection-config). El flujo es fácil: el mensaje de entrada debe contener la ontología a la que el usuario se suscribirá. Después de activar el comando, la plataforma devuelve un identificador de suscripción y las suscripciones actuales a la ontología. A partir de entonces, notificará al usuario de cualquier operación sobre la ontología, mientras la suscripción siga viva, con un SSAPBodyIndicationMessage.

> Macro (inline-media-image)

> Macro (inline-media-image)



## LEAVE

![image](media://c09b7952-48aa-41f6-953e-46dba7dff00d)

Este flujo simplemente cierra la sesión actual y borra la sessionKey del usuario.

![image](media://4b47cf27-7ee8-414f-8e00-5e22091d26bb)