1
TAREA–60-AWS
2
var words = msg.payload;
msg.topic = "INSERT INTO sensor1 (sensor1_temp) VALUES (" + words + ")";
return msg;
var words = msg.payload;
msg.topic = "INSERT INTO sensor2 (sensor2_temp) VALUES (" + words + ")";
return msg;
{
"group": {
"hide": [
"Tab1_Group3",
"Tab1_Group4"
],
"show": [
"Tab1_Group1",
"Tab1_Group2"
]
3
}
}
4
#include <WiFi.h>
#include <PubSubClient.h>
#include <OneWire.h>
#include <DallasTemperature.h>
//*********************
//*** GLOBALES **
//*********************
#define ID_MQTT "ESP32_0" //identificador mqtt para la sesion
#define TOPICO_PUB1 "test/temp1" //tópico para temperatura que se publica en el Broker
#define TOPICO_PUB2 "test/temp2" //tópico para temperatura que se publica en el Broker
#define TOPICO_SUB1 "test/led1" //tópico al que se subscribe
#define TOPICO_SUB2 "test/led2" //tópico al que se subscribe
#define led1 22
#define led2 23
#define ONE_WIRE_BUS 19
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
unsigned int intervalo = 1000; //1 segundo
unsigned long valorActual = 0;
WiFiClient espClient; //se declara el objeto espClient de la clase WiFiClient
PubSubClient client(espClient); //se declara el objeto client de la clase PubSubClient
//***********************
//*** WIFI CONFIG **
//***********************
const char* SSID = "Flia_Agreda";
const char* PASSWORD = "777XonarGen";
//***********************
//*** MQTT CONFIG **
//***********************
const char* BROKER_MQTT = "192.168.1.111";
const int BROKER_PORT = 1883;
const char* mqttUser = "cbba";
const char* mqttPassword = "bolivia";
//*********************
//*** FUNCIONES **
//*********************
//Prototipos
void InitOutput();
void initSerial();
void initWiFi();
void initMQTT();
void reconectWiFi();
void mqtt_callback(char* topic, byte* payload, unsigned int length);
5
void VerificaConexWiFiyMQTT();
void InitOutput() {
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
}
void initSerial() {
Serial.begin(115200);
delay(100);
}
void initWiFi() {
reconectWiFi();
}
void initMQTT() {
client.setServer(BROKER_MQTT, BROKER_PORT); //IP y puerto del Broker
client.setCallback(mqtt_callback); //se ejecuta cada vez que se recibe un mensaje
}
//********************
//*** CALLBACK **
//********************
//esta función es llamada cuando llega información de uno de los tópicos subscritos
void mqtt_callback(char* topic, byte* payload, unsigned int length) {
//Si se publica en el TOPICO_SUB1
if(strcmp(topic,TOPICO_SUB1) == 0) {
String msg;
//obtiene la cadena del payload recibido
for(unsigned int i = 0; i < length; i++) {
char c = (char)payload[i];
msg += c;
}
//toma acción dependiendo de la cadena recibida:
if (msg.equals("on")) {
digitalWrite(led1, HIGH);
}
if (msg.equals("off")) {
digitalWrite(led1, LOW);
}
}
//Si se publica en el TOPICO_SUB2
if(strcmp(topic,TOPICO_SUB2) == 0) {
String msg;
//obtiene la cadena del payload recibido
6
for(unsigned int i = 0; i < length; i++) {
char c = (char)payload[i];
msg += c;
Serial.println(c);
}
//toma acción dependiendo de la cadena recibida:
if (msg.equals("on")) {
digitalWrite(led2, HIGH);
}
if (msg.equals("off")) {
digitalWrite(led2, LOW);
}
}
}
//************************
//*** CONEXIÓN MQTT **
//************************
void reconnectMQTT() {
while (!client.connected()) {
Serial.print("* Intentando conectar al Broker MQTT: ");
Serial.println(BROKER_MQTT);
if (client.connect(ID_MQTT, mqttUser, mqttPassword)) {
Serial.println("Conectado con éxito al Broker MQTT!");
client.subscribe(TOPICO_SUB1);
client.subscribe(TOPICO_SUB2);
}
else {
Serial.println("Falla al reconectar al Broker.");
Serial.println("Habra nueva tentativa de conexion en 2s");
delay(2000);
}
}
}
//************************
//*** CONEXIÓN WIFI **
//************************
void reconectWiFi() {
if (WiFi.status() == WL_CONNECTED)
return;
WiFi.begin(SSID, PASSWORD); //se conecta a la red WiFi
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println();
Serial.print("Conectado con éxito a la red WiFi ");
Serial.print(SSID);
7
Serial.println("IP obtenido: ");
Serial.println(WiFi.localIP());
}
void VerificaConexWiFiyMQTT() {
reconectWiFi(); //si se pierde la conexión con la red WiFi, se reinicia
if (!client.connected())
reconnectMQTT(); //si se pierde la conexión con el Broker, se reinicia
}
//*********************
//*** PUBLICACIÓN **
//*********************
void EnviaTempMQTT() {
if(millis() - valorActual >= intervalo) {
valorActual = millis();
sensors.requestTemperatures();
float celsius1 = sensors.getTempCByIndex(0);
Serial.println(sensors.getTempCByIndex(0),1); //1 decimal
char tempstring1 [4];
dtostrf(celsius1,4, 1, tempstring1); //convierte float a char
client.publish(TOPICO_PUB1, tempstring1); //envía char
float celsius2 = sensors.getTempCByIndex(1);
Serial.println(sensors.getTempCByIndex(1),1); //1 decimal
char tempstring2 [4];
dtostrf(celsius2,4, 1, tempstring2); //convierte float a char
client.publish(TOPICO_PUB2, tempstring2); //envía char
}
}
void setup() {
initSerial();
InitOutput();
initWiFi();
initMQTT();
}
void loop() {
VerificaConexWiFiyMQTT();
EnviaTempMQTT();
client.loop();
}
8
ESTRUCTURA DE LAS TABLAS sensor1 y sensor2
9
CORREGIDO:
NODO FUNCTION INSERTA DATOS DE TEMPERATURA:
// Convertir a número y preparar para MySQL
msg.topic = "INSERT INTO sensor1 (sensor1_temp) VALUES (?)";
msg.payload = [parseFloat(msg.payload)];
return msg;
NODO FUNCTION, CONVIERTE A FLOAT
// Convertir la temperatura de string a número
msg.payload = parseFloat(msg.payload);
return msg;
10
#include <Arduino.h>
#include <WiFi.h>
#include <PubSubClient.h>
#include <OneWire.h>
#include <DallasTemperature.h>
//*********************
//*** GLOBALES **
//*********************
#define ID_MQTT "ESP32_0" //identificador mqtt para la sesion
#define TOPICO_PUB1 "test/temp1" //tópico para temperatura que se publica en el Broker
#define TOPICO_PUB2 "test/temp2" //tópico para temperatura que se publica en el Broker
#define TOPICO_SUB1 "test/led1" //tópico al que se subscribe
#define TOPICO_SUB2 "test/led2" //tópico al que se subscribe
#define led1 22
#define led2 23
#define ONE_WIRE_BUS 19
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
unsigned int intervalo = 1000; //1 segundo
unsigned long valorActual = 0;
WiFiClient espClient; //se declara el objeto espClient de la clase WiFiClient
PubSubClient client(espClient); //se declara el objeto client de la clase PubSubClient
//***********************
//*** WIFI CONFIG **
//***********************
const char* SSID = "Flia_Agreda";
const char* PASSWORD = "777XonarGen";
//***********************
//*** MQTT CONFIG **
//***********************
const char* BROKER_MQTT = "192.168.1.111";
const int BROKER_PORT = 1883;
const char* mqttUser = "cbba";
const char* mqttPassword = "bolivia";
//*********************
//*** FUNCIONES **
//*********************
//Prototipos
void InitOutput();
void initSerial();
void initWiFi();
void initMQTT();
void reconectWiFi();
void mqtt_callback(char* topic, byte* payload, unsigned int length);
void VerificaConexWiFiyMQTT();
void InitOutput() {
11
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
}
void initSerial() {
Serial.begin(115200);
delay(10);
}
void initWiFi() {
reconectWiFi();
}
void initMQTT() {
client.setServer(BROKER_MQTT, BROKER_PORT); //IP y puerto del Broker
client.setCallback(mqtt_callback); //se ejecuta cada vez que se recibe un
mensaje
}
//********************
//*** CALLBACK **
//********************
//esta función es llamada cuando llega información de uno de los tópicos subscritos
void mqtt_callback(char* topic, byte* payload, unsigned int length) {
//Si se publica en el TOPICO_SUB1
if(strcmp(topic,TOPICO_SUB1) == 0) {
String msg;
//obtiene la cadena del payload recibido
for(unsigned int i = 0; i < length; i++) {
char c = (char)payload[i];
msg += c;
}
//toma acción dependiendo de la cadena recibida:
if (msg.equals("on")) {
digitalWrite(led1, HIGH);
}
if (msg.equals("off")) {
digitalWrite(led1, LOW);
}
}
//Si se publica en el TOPICO_SUB2
if(strcmp(topic,TOPICO_SUB2) == 0) {
String msg;
//obtiene la cadena del payload recibido
for(unsigned int i = 0; i < length; i++) {
char c = (char)payload[i];
msg += c;
Serial.println(c);
}
//toma acción dependiendo de la cadena recibida:
if (msg.equals("on")) {
12
digitalWrite(led2, HIGH);
}
if (msg.equals("off")) {
digitalWrite(led2, LOW);
}
}
}
//************************
//*** CONEXIÓN MQTT **
//************************
void reconnectMQTT() {
while (!client.connected()) {
Serial.print("* Intentando conectar al Broker MQTT: ");
Serial.println(BROKER_MQTT);
if (client.connect(ID_MQTT, mqttUser, mqttPassword)) {
Serial.println("Conectado con éxito al Broker MQTT!");
client.subscribe(TOPICO_SUB1);
client.subscribe(TOPICO_SUB2);
}
else {
Serial.println("Falla al reconectar al Broker.");
Serial.println("Habra nueva tentativa de conexion en 2s");
delay(2000);
}
}
}
//************************
//*** CONEXIÓN WIFI **
//************************
void reconectWiFi() {
if (WiFi.status() == WL_CONNECTED)
return;
WiFi.begin(SSID, PASSWORD); //se conecta a la red WiFi
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println();
Serial.print("Conectado con éxito a la red WiFi ");
Serial.print(SSID);
Serial.println("IP obtenido: ");
Serial.println(WiFi.localIP());
}
void VerificaConexWiFiyMQTT() {
reconectWiFi(); //si se pierde la conexión con la red WiFi, se reinicia
if (!client.connected())
reconnectMQTT(); //si se pierde la conexión con el Broker, se reinicia
}
//*********************
//*** PUBLICACIÓN **
13
//*********************
void EnviaTempMQTT() {
if(millis() - valorActual >= intervalo) {
valorActual = millis();
sensors.requestTemperatures();
float celsius1 = sensors.getTempCByIndex(0);
Serial.println(sensors.getTempCByIndex(0),1); //1 decimal
char tempstring1 [4];
dtostrf(celsius1,4, 1, tempstring1); //convierte float a char
client.publish(TOPICO_PUB1, tempstring1); //envía char
float celsius2 = sensors.getTempCByIndex(1);
Serial.println(sensors.getTempCByIndex(1),1); //1 decimal
char tempstring2 [4];
dtostrf(celsius2,4, 1, tempstring2); //convierte float a char
client.publish(TOPICO_PUB2, tempstring2); //envía char
}
}
void setup() {
initSerial();
InitOutput();
initWiFi();
initMQTT();
}
void loop() {
VerificaConexWiFiyMQTT();
EnviaTempMQTT();
client.loop();
}
14
CON BASE DE DATOS
[{"id":"1e77296dd9bc3612","type":"tab","label":"Flow
1","disabled":false,"info":"","env":[]},{"id":"4db02958c8d428b7","type":"ui_button","z":"1e77296dd9bc3612","name":"","group":"e39b3665410175df","order":1,"width":"6","h
eight":"1","passthru":false,"label":"button","tooltip":"","color":"","bgcolor":"","className":"","icon":"","payload":"{\"group\":{\"hide\":[\"Tab1_Group3\",\"Tab1_Group
4\"],\"show\":[\"Tab1_Group1\",\"Tab1_Group2\"]}}","payloadType":"json","topic":"topic","topicType":"msg","x":110,"y":80,"wires":[["adcc93f56fe05493"]]},{"id":"c3db0efc
d5acbd0a","type":"ui_gauge","z":"1e77296dd9bc3612","name":"","group":"9e85f323071c5cf4","order":0,"width":"12","height":"5","gtype":"gage","title":"gauge","label":"unit
s","format":"{{value}}","min":0,"max":"40","colors":["#00b500","#e6e600","#ca3838"],"seg1":"","seg2":"","diff":false,"className":"","x":630,"y":100,"wires":[]},{"id":"c
c21dc87e7118585","type":"ui_button","z":"1e77296dd9bc3612","name":"","group":"e39b3665410175df","order":2,"width":"6","height":"1","passthru":false,"label":"button","to
oltip":"","color":"","bgcolor":"","className":"","icon":"","payload":"{\"group\":{\"hide\":[\"Tab1_Group2\",\"Tab1_Group4\"],\"show\":[\"Tab1_Group1\",\"Tab1_Group3\"]}
}","payloadType":"json","topic":"topic","topicType":"msg","x":110,"y":140,"wires":[["adcc93f56fe05493"]]},{"id":"f8fe90a275f18d39","type":"ui_button","z":"1e77296dd9bc3
612","name":"","group":"e39b3665410175df","order":3,"width":"6","height":"1","passthru":false,"label":"button","tooltip":"","color":"","bgcolor":"","className":"","icon
":"","payload":"{\"group\":{\"hide\":[\"Tab1_Group2\",\"Tab1_Group3\"],\"show\":[\"Tab1_Group1\",\"Tab1_Group4\"]}}","payloadType":"json","topic":"topic","topicType":"m
sg","x":110,"y":200,"wires":[["adcc93f56fe05493"]]},{"id":"0112deb027c68ba6","type":"ui_button","z":"1e77296dd9bc3612","name":"","group":"e39b3665410175df","order":4,"w
idth":"6","height":"1","passthru":false,"label":"button","tooltip":"","color":"","bgcolor":"","className":"","icon":"","payload":"{\"group\":{\"hide\":[],\"show\":[\"Ta
b1_Group1\",\"Tab1_Group2\",\"Tab1_Group3\",\"Tab1_Group4\"]}}","payloadType":"json","topic":"topic","topicType":"msg","x":110,"y":260,"wires":[["adcc93f56fe05493"]]},{
"id":"a2152ec7d2e28fdc","type":"ui_gauge","z":"1e77296dd9bc3612","name":"","group":"9e85f323071c5cf4","order":1,"width":"12","height":"5","gtype":"gage","title":"gauge"
,"label":"units","format":"{{value}}","min":0,"max":"40","colors":["#00b500","#e6e600","#ca3838"],"seg1":"","seg2":"","className":"","x":630,"y":300,"wires":[]},{"id":"
4f40d7103dadb98e","type":"ui_chart","z":"1e77296dd9bc3612","name":"","group":"b14acf243b7787e1","order":0,"width":"12","height":"5","label":"chart","chartType":"line","
legend":"false","xformat":"HH:mm:ss","interpolate":"linear","nodata":"","dot":false,"ymin":"0","ymax":"40","removeOlder":"10","removeOlderPoints":"","removeOlderUnit":"
60","cutout":0,"useOneColor":false,"useUTC":false,"colors":["#1f77b4","#aec7e8","#ff7f0e","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5"],"outputs":1,"useD
ifferentColor":false,"className":"","x":630,"y":40,"wires":[[]]},{"id":"36507ce8003eb15f","type":"ui_chart","z":"1e77296dd9bc3612","name":"","group":"b14acf243b7787e1",
"order":1,"width":"12","height":"5","label":"chart","chartType":"line","legend":"false","xformat":"HH:mm:ss","interpolate":"linear","nodata":"","dot":false,"ymin":"0","
ymax":"40","removeOlder":"10","removeOlderPoints":"","removeOlderUnit":"60","cutout":0,"useOneColor":false,"useUTC":false,"colors":["#1f77b4","#aec7e8","#ff7f0e","#2ca0
2c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5"],"outputs":1,"useDifferentColor":false,"className":"","x":630,"y":240,"wires":[[]]},{"id":"53a007633722ae95","type
":"ui_switch","z":"1e77296dd9bc3612","name":"","label":"switch","tooltip":"","group":"e7c70dccc549918a","order":1,"width":"12","height":"1","passthru":true,"decouple":"
false","topic":"topic","topicType":"msg","style":"","onvalue":"on","onvalueType":"str","onicon":"","oncolor":"","offvalue":"off","offvalueType":"str","officon":"","offc
olor":"","animate":false,"className":"","x":110,"y":380,"wires":[["109396b989f1f6ae"]]},{"id":"bd69650c6efc74d6","type":"ui_switch","z":"1e77296dd9bc3612","name":"","la
bel":"switch","tooltip":"","group":"e7c70dccc549918a","order":2,"width":"12","height":"1","passthru":true,"decouple":"false","topic":"topic","topicType":"msg","style":"
","onvalue":"on","onvalueType":"str","onicon":"","oncolor":"","offvalue":"off","offvalueType":"str","officon":"","offcolor":"","animate":false,"className":"","x":110,"y
":460,"wires":[["a7b914e249bf394e"]]},{"id":"adcc93f56fe05493","type":"ui_ui_control","z":"1e77296dd9bc3612","name":"","events":"all","x":300,"y":180,"wires":[[]]},{"id
":"4c8dafc8e1d7d197","type":"mqtt in","z":"1e77296dd9bc3612","name":"","topic":"test/temp1","qos":"0","datatype":"auto-
detect","broker":"0b9dcb1b95351f05","nl":false,"rap":true,"rh":0,"inputs":0,"x":280,"y":100,"wires":[["878c8c084c1dbdd5"]]},{"id":"6d4f854f9c8aaac5","type":"mqtt
in","z":"1e77296dd9bc3612","name":"","topic":"test/temp2","qos":"0","datatype":"auto-
detect","broker":"12ca87efd15ad811","nl":false,"rap":true,"rh":0,"inputs":0,"x":280,"y":300,"wires":[["18645229a753c223"]]},{"id":"109396b989f1f6ae","type":"mqtt
out","z":"1e77296dd9bc3612","name":"","topic":"test/led1","qos":"0","retain":"","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"65faea3
dcd04c4ca","x":300,"y":380,"wires":[]},{"id":"a7b914e249bf394e","type":"mqtt
out","z":"1e77296dd9bc3612","name":"","topic":"test/led2","qos":"0","retain":"","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"c2a1c18
0461b2966","x":300,"y":460,"wires":[]},{"id":"e18b1b285435f0d5","type":"function","z":"1e77296dd9bc3612","name":"function 1","func":"//var words =
msg.payload;\n//msg.topic = \"INSERT INTO sensor1 (sensor1_temp) VALUES (\" + words + \")\";\n//return msg;\n\nmsg.topic = \"INSERT INTO sensor1 (sensor1_temp) VALUES
(?)\";\nmsg.payload = [msg.payload];\nreturn
msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":860,"y":160,"wires":[["d48de7d8be542659"]]},{"id":"dde79dcd8441df69","type":"functi
on","z":"1e77296dd9bc3612","name":"function 2","func":"//var words = msg.payload;\n//msg.topic = \"INSERT INTO sensor2 (sensor2_temp) VALUES (\" + words +
\")\";\n//return msg;\n\nmsg.topic = \"INSERT INTO sensor2 (sensor2_temp) VALUES (?)\";\nmsg.payload = [msg.payload];\nreturn
msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":860,"y":360,"wires":[["2f1595a7717e2f2f"]]},{"id":"878c8c084c1dbdd5","type":"functi
on","z":"1e77296dd9bc3612","name":"function 3","func":"// Convertir la temperatura de string a número\nmsg.payload = parseFloat(msg.payload);\nreturn
msg;","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":460,"y":100,"wires":[["4f40d7103dadb98e","c3db0efcd5acbd0a","bb7aa06719e50826"]]},{"
id":"18645229a753c223","type":"function","z":"1e77296dd9bc3612","name":"function 4","func":"// Convertir la temperatura de string a número\nmsg.payload =
parseFloat(msg.payload);\nreturn
msg;","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":460,"y":300,"wires":[["36507ce8003eb15f","a2152ec7d2e28fdc","ea796dcc2efa62ac"]]},{"
id":"d48de7d8be542659","type":"mysql","z":"1e77296dd9bc3612","mydb":"18b9563de16286de","name":"","x":1020,"y":160,"wires":[[]]},{"id":"2f1595a7717e2f2f","type":"mysql",
"z":"1e77296dd9bc3612","mydb":"18b9563de16286de","name":"","x":1020,"y":360,"wires":[[]]},{"id":"bb7aa06719e50826","type":"delay","z":"1e77296dd9bc3612","name":"","paus
eType":"rate","timeout":"60","timeoutUnits":"seconds","rate":"1","nbRateUnits":"60","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","dro
p":true,"allowrate":false,"outputs":1,"x":660,"y":160,"wires":[["e18b1b285435f0d5"]]},{"id":"ea796dcc2efa62ac","type":"delay","z":"1e77296dd9bc3612","name":"","pauseTyp
e":"rate","timeout":"60","timeoutUnits":"seconds","rate":"1","nbRateUnits":"60","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":t
rue,"allowrate":false,"outputs":1,"x":660,"y":360,"wires":[["dde79dcd8441df69"]]},{"id":"e39b3665410175df","type":"ui_group","name":"Group1","tab":"c63b25cc9623c3c9","o
rder":1,"disp":true,"width":"24","collapse":false,"className":""},{"id":"9e85f323071c5cf4","type":"ui_group","name":"Group2","tab":"c63b25cc9623c3c9","order":2,"disp":t
rue,"width":"24","collapse":false,"className":""},{"id":"b14acf243b7787e1","type":"ui_group","name":"Group3","tab":"c63b25cc9623c3c9","order":3,"disp":true,"width":"24"
,"collapse":false,"className":""},{"id":"e7c70dccc549918a","type":"ui_group","name":"Group4","tab":"c63b25cc9623c3c9","order":4,"disp":true,"width":"24","collapse":fals
e,"className":""},{"id":"0b9dcb1b95351f05","type":"mqtt-
broker","name":"","broker":"localhost","port":1883,"clientid":"","autoConnect":true,"usetls":false,"protocolVersion":4,"keepalive":60,"cleansession":true,"autoUnsubscri
be":true,"birthTopic":"","birthQos":"0","birthRetain":"false","birthPayload":"","birthMsg":{},"closeTopic":"","closeQos":"0","closeRetain":"false","closePayload":"","cl
oseMsg":{},"willTopic":"","willQos":"0","willRetain":"false","willPayload":"","willMsg":{},"userProps":"","sessionExpiry":""},{"id":"12ca87efd15ad811","type":"mqtt-
broker","name":"","broker":"localhost","port":"1883","clientid":"","autoConnect":true,"usetls":false,"protocolVersion":"4","keepalive":"60","cleansession":true,"autoUns
ubscribe":true,"birthTopic":"","birthQos":"0","birthPayload":"","birthMsg":{},"closeTopic":"","closeQos":"0","closePayload":"","closeMsg":{},"willTopic":"","willQos":"0
","willPayload":"","willMsg":{},"userProps":"","sessionExpiry":""},{"id":"65faea3dcd04c4ca","type":"mqtt-
broker","name":"","broker":"localhost","port":1883,"clientid":"","autoConnect":true,"usetls":false,"protocolVersion":4,"keepalive":60,"cleansession":true,"autoUnsubscri
be":true,"birthTopic":"","birthQos":"0","birthRetain":"false","birthPayload":"","birthMsg":{},"closeTopic":"","closeQos":"0","closeRetain":"false","closePayload":"","cl
oseMsg":{},"willTopic":"","willQos":"0","willRetain":"false","willPayload":"","willMsg":{},"userProps":"","sessionExpiry":""},{"id":"c2a1c180461b2966","type":"mqtt-
broker","name":"","broker":"localhost","port":1883,"clientid":"","autoConnect":true,"usetls":false,"protocolVersion":4,"keepalive":60,"cleansession":true,"autoUnsubscri
be":true,"birthTopic":"","birthQos":"0","birthRetain":"false","birthPayload":"","birthMsg":{},"closeTopic":"","closeQos":"0","closeRetain":"false","closePayload":"","cl
oseMsg":{},"willTopic":"","willQos":"0","willRetain":"false","willPayload":"","willMsg":{},"userProps":"","sessionExpiry":""},{"id":"18b9563de16286de","type":"MySQLdata
base","name":"","host":"127.0.0.1","port":"3306","db":"alfa_db","tz":"","charset":"UTF8"},{"id":"c63b25cc9623c3c9","type":"ui_tab","name":"Tab1","icon":"dashboard","ord
er":1,"disabled":false,"hidden":false}]