Javascript 如何将信息从MQTT节点发送到MYSQL数据库?
我试图从MQTT节点接收数据,然后将其放入MYSQL数据库。据我所知,我需要使用Javascript来实现这一点,但是我找不到任何这样的例子。有没有人曾经这样做过,谁能帮上忙?这特别是关于如何用Javascript编写脚本,将信息从MQTT代理发送到节点红色的MYSQL数据库。作为答案提出的问题并不是专门针对Node Red的,也没有回答我关于使用Javascript作为实现目标的方法的问题。这个问题的答案是使用Node red,但对于如何使用它没有任何帮助。您可以使用任何语言将消息从MQTT发送到MySQL数据库(或任何其他数据库) 例如,您可以创建一个单独的python服务,该服务使用Paho MQTT客户机并订阅所有主题,并在收到消息时将该数据添加到数据库中 下面是Python中代码的外观:Javascript 如何将信息从MQTT节点发送到MYSQL数据库?,javascript,mysql,mqtt,node-red,Javascript,Mysql,Mqtt,Node Red,我试图从MQTT节点接收数据,然后将其放入MYSQL数据库。据我所知,我需要使用Javascript来实现这一点,但是我找不到任何这样的例子。有没有人曾经这样做过,谁能帮上忙?这特别是关于如何用Javascript编写脚本,将信息从MQTT代理发送到节点红色的MYSQL数据库。作为答案提出的问题并不是专门针对Node Red的,也没有回答我关于使用Javascript作为实现目标的方法的问题。这个问题的答案是使用Node red,但对于如何使用它没有任何帮助。您可以使用任何语言将消息从MQTT发
def on_message(client, userdata, msg):
topic = msg.topic
payload = msg.payload
# run mysql query using library like MySQLdb
# https://www.tutorialspoint.com/python/python_database_access.htm
topic = '#" #subscribe to all topics
client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.subscribe(topic)
client.connect(mqttserver)
client.loop_forever()
是的,您可以使用任何语言将负载从MQTT发送到MYSQL。 基本上,您可以做的是设置一个小节点,它将订阅所有传入的负载,并将其转储到MYSQL数据库中 以下是JS脚本:-
var mqtt = require('mqtt'); //https://www.npmjs.com/package/mqtt
var Topic = '#'; //subscribe to all topics
var Broker_URL = 'mqtt://MQTT_BROKER_URL';
var Database_URL = 'Database_URL';
var options = {
clientId: 'MyMQTT',
port: 1883,
keepalive : 60
};
var client = mqtt.connect(Broker_URL, options);
client.on('connect', mqtt_connect);
client.on('reconnect', mqtt_reconnect);
client.on('message', mqtt_messsageReceived);
client.on('close', mqtt_close);
function mqtt_connect() {
console.log("Connecting MQTT");
client.subscribe(Topic, mqtt_subscribe);
};
function mqtt_subscribe(err, granted) {
console.log("Subscribed to " + Topic);
if (err) {console.log(err);}
};
function mqtt_reconnect(err) {
console.log("Reconnect MQTT");
if (err) {console.log(err);}
client = mqtt.connect(Broker_URL, options);
};
function after_publish() {
//do nothing
};
//receive a message from MQTT broker
function mqtt_messsageReceived(topic, message, packet) {
var message_str = message.toString(); //convert byte array to string
console.log("message to string", message_str);
message_str = message_str.replace(/\n$/, ''); //remove new line
//message_str = message_str.toString().split("|");
console.log("message to params array",message_str);
//payload syntax: clientID,topic,message
if (message_str.length == 0) {
console.log("Invalid payload");
} else {
insert_message(topic, message_str, packet);
//console.log(message_arr);
}
};
function mqtt_close() {
//console.log("Close MQTT");
};
////////////////////////////////////////////////////
///////////////////// MYSQL ////////////////////////
////////////////////////////////////////////////////
var mysql = require('mysql'); //https://www.npmjs.com/package/mysql
//Create Connection
var connection = mysql.createConnection({
host: Database_URL,
user: "newuser", //DB Username
password: "mypassword", //DB Password
database: "mydb" //DB Name
});
connection.connect(function(err) {
if (err) throw err;
//console.log("Database Connected!");
});
//insert a row into the tbl_messages table
function insert_message(topic, message_str, packet) {
var message_arr = extract_string(message_str); //split a string into an array
var clientID= message_arr[0];
var message = message_arr[1];
var date= new Date();
var sql = "INSERT INTO ?? (??,??,??,??) VALUES (?,?,?,?)";
var params = ['tbl_messages', 'clientID', 'topic', 'message','date', clientID, topic, message, date];
sql = mysql.format(sql, params);
connection.query(sql, function (error, results) {
if (error) throw error;
console.log("Message added: " + message_str);
});
};
//split a string into an array of substrings
function extract_string(message_str) {
var message_arr = message_str.split(","); //convert to array
return message_arr;
};
//count number of delimiters in a string
var delimiter = ",";
function countInstances(message_str) {
var substrings = message_str.split(delimiter);
return substrings.length - 1;
};
参考:-
可能的副本需要显示您已经尝试过的内容。OP特别要求使用NodeJS/Node RED not Python这基本上是一个仅链接的答案,一旦链接断开,该答案将变得无用。请编辑以在答案中包含代码的有用部分。