Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将信息从MQTT节点发送到MYSQL数据库?_Javascript_Mysql_Mqtt_Node Red - Fatal编程技术网

Javascript 如何将信息从MQTT节点发送到MYSQL数据库?

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发

我试图从MQTT节点接收数据,然后将其放入MYSQL数据库。据我所知,我需要使用Javascript来实现这一点,但是我找不到任何这样的例子。有没有人曾经这样做过,谁能帮上忙?这特别是关于如何用Javascript编写脚本,将信息从MQTT代理发送到节点红色的MYSQL数据库。作为答案提出的问题并不是专门针对Node Red的,也没有回答我关于使用Javascript作为实现目标的方法的问题。这个问题的答案是使用Node red,但对于如何使用它没有任何帮助。

您可以使用任何语言将消息从MQTT发送到MySQL数据库(或任何其他数据库)

例如,您可以创建一个单独的python服务,该服务使用Paho MQTT客户机并订阅所有主题,并在收到消息时将该数据添加到数据库中

下面是Python中代码的外观:

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这基本上是一个仅链接的答案,一旦链接断开,该答案将变得无用。请编辑以在答案中包含代码的有用部分。