MQTTS y NodeRED

De binefa.com
Salta a la navegació Salta a la cerca

Temas (topics)[modifica]

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[modifica]

Snap![modifica]

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[modifica]

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[modifica]

Subscripción a temas (topics) dinámicos[modifica]

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[modifica]

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;