Всем привет, мы снова встретились, я ваш друг Цюаньчжаньцзюнь.
Позвольте мне попробовать легендарный протокол MQTT, который наиболее подходит для IOT.
Установить
Хотя материалов для поиска много, большинство из них посвящено использованию MQTT. Хотя есть статьи о сборке серверов, мне кажется, что они не очень понятны. Большинство статей выбирают Mosquitto (возможно, потому, что его производит крупная компания Eclipse). производитель).
После поиска,Нашел мошку, написанную на Nodejs,Но Установить всегда не удается на Pi,Пролистайте проблемы,Нашел небольшую зависимость, написанную тем же автором,легкийaedes。npm install aedes --save//Минимальный пример
var aedes = require(‘aedes’)();
var server = require(‘net’).createServer(aedes.handle);
server.listen(8266);
Простой в использовании
Сохраните все подписки и отправки в базу данных sqlite3: //Nodejs
var aedes = require(‘aedes’)();
var colors = require(‘colors’);
var server = require(‘net’).createServer(aedes.handle);
var sqlite3 = require(‘sqlite3’).verbose();
var db = new sqlite3.Database(‘data.db’);
var port = 8266;
//Дополнительные события можно найти на Github: https://github.com/mcollina/aedes
aedes.on(‘publish’,function(packet,client) {
if (client) {
console.log(‘[ Publish ] CilentID:’.green,client.id,’ Qos:’.green,packet.qos,’ Data:[ ‘.green,String(packet.payload),’ ]’.green);
db.run(“INSERT INTO publish (date,client_id,topic,data) VALUES (datetime(‘now’),?,?,?);”,[client.id,packet.topic,String(packet.payload)]);
}
});
aedes.on(‘subscribe’, function (subscriptions, client) {
if (client) {
//подписки лень проходить (обычно одновременно бывает только одна)
db.run(“INSERT INTO subscribe (date,client_id,topic) VALUES (datetime(‘now’),?,?)”,[client.id,subscriptions[0].topic]);
console.log(‘[ Subscribe ] SubscripTions:’.green,subscriptions[0].topic,’ Qos:’.green,subscriptions[0].qos,’ CilentID:’.green,client.id);
}
});
aedes.on(‘unsubscribe’,function(unsubscriptions,client){
if(client){
//Сходным образом
console.log(‘[ unSubscribe ] unSubscripTions:’.green,unsubscriptions[0],’ CilentID:’.green,client.id);
db.run(“DELETE FROM subscribe WHERE client_id = ? AND topic = ?;”,[client.id,unsubscriptions[0]])
}
});
server.listen(port,function(){
console.log(‘[ Server ] server listening on port’.green,port)
});
//Sqlite3
CREATE TABLE “publish” ( `date` TEXT NOT NULL, `client_id` TEXT NOT NULL, `topic` TEXT NOT NULL, `data` TEXT NOT NULL );
CREATE TABLE “subscribe” ( `date` TEXT NOT NULL, `client_id` TEXT NOT NULL, `topic` TEXT NOT NULL );
//Micropython for ESP8266
>>> from umqtt.simple import MQTTClient
>>> conn = MQTTClient(‘esp8266′,’192.168.1.64’,8266)
>>> conn.connect()
0
>>> conn.publish(b’/test’,b’test’)
>>> conn.disconnect()
Преимущества и недостатки Легкий вес
Может лучше сочетаться с бизнес-логикой
Qos2 не поддерживается или поддерживается не полностью
Издатель: Лидер стека программистов полного стека, укажите источник для перепечатки: https://javaforall.cn/140313.html Оригинальная ссылка: https://javaforall.cn