Diferència entre revisions de la pàgina «MQTTS y NodeRED»
m |
|||
(Hi ha 23 revisions intermèdies del mateix usuari que no es mostren) | |||
Línia 31: | Línia 31: | ||
[https://binefa.cat/training/upcSchool/20200523/42mqtts.nodered.txt Flujo de NodeRED para la gestión de la MAC como variable de flujo] | [https://binefa.cat/training/upcSchool/20200523/42mqtts.nodered.txt 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 == | == JavaScript encastado en HTML == | ||
Línia 38: | Línia 48: | ||
[http://www.electronics.cat/mac_IoT-02/ Enlace con la herramienta de gestión de MAC via web]. [https://binefa.cat/training/upcSchool/20200523/mac_IoT-02.zip Código de la herramienta de gestión de MAC via web] | [http://www.electronics.cat/mac_IoT-02/ Enlace con la herramienta de gestión de MAC via web]. [https://binefa.cat/training/upcSchool/20200523/mac_IoT-02.zip Código de la herramienta de gestión de MAC via web] | ||
+ | = Flujo de NodeRED = | ||
+ | == Subscripción a temas (''topics'') dinámicos == | ||
+ | |||
+ | [[Image:44mqts.png|center|Subscripción MQTT]] | ||
+ | |||
+ | [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]] | ||
+ | |||
+ | 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]] | ||
+ | |||
+ | 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 == | ||
+ | |||
+ | [[Image:45mqts.png|center|Subscripción y publicación MQTT]] | ||
+ | |||
+ | [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 (''topic'' queda vacío). El campo ''topic'' del nodo anterior indica el tema: | ||
+ | |||
+ | [[Image:48mqts.png|center|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; |
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;