Diferència entre revisions de la pàgina «MQTTS y NodeRED»
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]] |
Revisió de 17:55, 21 maig 2020
Contingut
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!
Código en Snap! para la placa IoT-02
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
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
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):
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.
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
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:
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;