Diferència entre revisions de la pàgina «MQTTS y NodeRED»

De binefa.com
Salta a la navegació Salta a la cerca
 
(Hi ha 5 revisions intermèdies del mateix usuari que no es mostren)
Línia 54: Línia 54:
  
 
[https://binefa.cat/training/upcSchool/20200523/44mqtts.nodered.txt Flujo de NodeRED para la gestión subscripciones dinámicas]
 
[https://binefa.cat/training/upcSchool/20200523/44mqtts.nodered.txt Flujo de NodeRED para la gestión subscripciones dinámicas]
 +
 +
Como tema (''topic'') escribir '''#'''. La opción '''#''' se subscribe a '''todos''' los temas del ''broker''. Esto permite poder subscribirnos a temas dinámicos (cada MAC, diferente en cada dispositivo, es un campo raiz de un tema en esta implementación):
  
 
[[Image:46mqts.png|center|Edición del nodo de subscripción]]
 
[[Image:46mqts.png|center|Edición del nodo de subscripción]]
 +
 +
El broker MQTT usa el puerto 1883. El broker MQTT'''S''' usa el puerto 8883 y tiene que seleccionarse la casilla de selección (''checkbox'') en la opción ''Enable secure (SSL/TLS) connection''.
  
 
[[Image:47mqts.png|center|Edición del broker]]
 
[[Image:47mqts.png|center|Edición del broker]]
Línia 94: Línia 98:
 
[https://binefa.cat/training/upcSchool/20200523/45mqtts.nodered.txt Flujo de NodeRED para la gestión subscripciones y publicaciones dinámicas]
 
[https://binefa.cat/training/upcSchool/20200523/45mqtts.nodered.txt Flujo de NodeRED para la gestión subscripciones y publicaciones dinámicas]
  
Configuración del nodo de salida MQTT sin tema. El campo ''topic'' del nodo anterior indica el tema:
+
Configuración del nodo de salida MQTT sin tema (''topic'' queda vacío). El campo ''topic'' del nodo anterior indica el tema:
  
 
[[Image:48mqts.png|center|Edición del nodo de salida MQTT]]
 
[[Image:48mqts.png|center|Edición del nodo de salida MQTT]]
Línia 100: Línia 104:
 
Función '''TOPIC_LATCHING_RELAY -->''':
 
Función '''TOPIC_LATCHING_RELAY -->''':
  
  msg.topic = flow.get("TOPIC_LATCHING_RELAY")
+
  msg.'''topic''' = flow.get("TOPIC_LATCHING_RELAY")
 
  return msg;
 
  return msg;
  
Línia 107: Línia 111:
  
 
  msg.payload = "reqLDR"
 
  msg.payload = "reqLDR"
  msg.topic = flow.get("TOPIC_REQUEST_LDR")
+
  msg.'''topic''' = flow.get("TOPIC_REQUEST_LDR")
 
  return msg;
 
  return msg;
  
Línia 113: Línia 117:
 
Función '''TOPIC_LDR -->''':
 
Función '''TOPIC_LDR -->''':
  
  var topic = String(msg.topic)
+
  var topic = String(msg.'''topic''')
 
  var topic_LDR = flow.get("TOPIC_LDR")
 
  var topic_LDR = flow.get("TOPIC_LDR")
 
  if (topic === topic_LDR){
 
  if (topic === topic_LDR){
 
     msg.payload = "LDR: " + msg.payload
 
     msg.payload = "LDR: " + msg.payload
    return msg
+
    return msg
 
  }
 
  }
  
 
Función '''TOPIC_BIG_TEXT -->''':
 
Función '''TOPIC_BIG_TEXT -->''':
  msg.topic = flow.get("TOPIC_BIG_TEXT")
+
  msg.'''topic''' = flow.get("TOPIC_BIG_TEXT")
 
  return msg;
 
  return msg;

Revisió de 17:55, 21 maig 2020

Temas (topics)

Tal y como vimos en el dia anterior en Conexión entre la placa IoT-02 y Snap! mediante MQTT (recordar hacer la cancelación de subscripción después de recibir la MAC), podemos usar estos temas con el último firmware ( IoT-02_mqtts_09 en GitHub ):

#define TOPIC_REQUEST_MAC "/macReq"
#define TOPIC_MAC "/mac"
#define TOPIC_LED_W "/ledW"
#define TOPIC_LED_R "/ledR"
#define TOPIC_LED_Y "/ledY"
#define TOPIC_LED_G "/ledG"
#define TOPIC_LATCHING_RELAY "/latchingRelay"
#define TOPIC_BT_IO0 "/btIO0"
#define TOPIC_BT_I34 "/btI34"
#define TOPIC_BT_I35 "/btI35"
#define TOPIC_LATCHING_RELAY_STATE "/latchingRelayState"
#define TOPIC_REQUEST_LATCHING_RELAY_STATE "/latchingRelayStateReq"
#define TOPIC_REQUEST_LDR "/ldrReq"
#define TOPIC_LDR "/ldr"
#define TOPIC_REQUEST_T "/tempReq"
#define TOPIC_T "/temp"
#define TOPIC_SMALL_TEXT "/10pxTxt"
#define TOPIC_MEDIUM_TEXT "/16pxTxt"
#define TOPIC_BIG_TEXT "/24pxTxt"

Adquisición de la MAC

Snap!

Adquisición de la MAC con Snap!

Código en Snap! para la placa IoT-02

Gestión de la MAC como variable de flujo

Flujo de NodeRED para la gestión de la MAC como variable de flujo

Función --> MAC:

flow.set("MAC",msg.payload)
return msg;

Función MAC -->

var MAC = flow.get("MAC");
msg.payload = MAC;
return msg;

JavaScript encastado en HTML

Gestión de la MAC con JavaScript en HTML

Enlace con la herramienta de gestión de MAC via web. Código de la herramienta de gestión de MAC via web

Flujo de NodeRED

Subscripción a temas (topics) dinámicos

Subscripción MQTT

Flujo de NodeRED para la gestión subscripciones dinámicas

Como tema (topic) escribir #. La opción # se subscribe a todos los temas del broker. Esto permite poder subscribirnos a temas dinámicos (cada MAC, diferente en cada dispositivo, es un campo raiz de un tema en esta implementación):

Edición del nodo de subscripción

El broker MQTT usa el puerto 1883. El broker MQTTS usa el puerto 8883 y tiene que seleccionarse la casilla de selección (checkbox) en la opción Enable secure (SSL/TLS) connection.

Edición del broker

Función --> MAC + Topics:

flow.set("MAC",msg.payload)
flow.set("TOPIC_LATCHING_RELAY","/"+msg.payload + "/latchingRelay")
flow.set("TOPIC_BT_I35","/"+msg.payload + "/btI35")
flow.set("TOPIC_BT_I34","/"+msg.payload + "/btI34")
flow.set("TOPIC_BT_IO0","/"+msg.payload + "/btIO0")
msg.payload = flow.get("TOPIC_BT_IO0")
return msg;

Función if it is my MAC -->:

var MAC = flow.get("MAC");
var topic = String(msg.topic);
if (topic.indexOf(MAC) !== -1)
   return msg;

Función TOPIC_BT_I35 -->:

var MAC = flow.get("MAC");
var topic = String(msg.topic);
var topic_BT_I35 = flow.get("TOPIC_BT_I35");
if (topic === topic_BT_I35)
   return msg;

Función topic,payload:

return [{payload: msg.topic},msg];

Subscripción y publicación de temas (topics) dinámicos

Subscripción y publicación MQTT

Flujo de NodeRED para la gestión subscripciones y publicaciones dinámicas

Configuración del nodo de salida MQTT sin tema (topic queda vacío). El campo topic del nodo anterior indica el tema:

Edición del nodo de salida MQTT

Función TOPIC_LATCHING_RELAY -->:

msg.topic = flow.get("TOPIC_LATCHING_RELAY")
return msg;


Función TOPIC_REQUEST_LDR -->:

msg.payload = "reqLDR"
msg.topic = flow.get("TOPIC_REQUEST_LDR")
return msg;


Función TOPIC_LDR -->:

var topic = String(msg.topic)
var topic_LDR = flow.get("TOPIC_LDR")
if (topic === topic_LDR){
    msg.payload = "LDR: " + msg.payload
    return msg
}

Función TOPIC_BIG_TEXT -->:

msg.topic = flow.get("TOPIC_BIG_TEXT")
return msg;