js和mqtt的学习笔记

简要整理下最近的mqtt和js的东西做个备忘

Posted by Les1ie on May 26, 2017

2017年5月19日20:24:15

0x00 配置nodejs环境

官网链接

windows 下,直接下载二进制包,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ node -v
$ npm -v
$ # 配置cnpm 可忽略
$ npm install -g cnpm --registry=https://registry.npm.taobao.org #配置cnpm
$ # 进入一个存放项目文件的目录,不使用-g全局安装
$ mdkir d:/work/node
$ cd d:/work/node
$ npm install monitor-dashboard
$ # 运行项目
$ cd node_modules/monitor-dashboard
$ npm start monitor-dashboard
$ # 根据提示信息访问站点 localhost:4200
$ 

linux下的部署

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ # try ln -s
$ ln -s ./bin/node /usr/bin/node
$ ln -s ./bin/npm /usr/bin/npm
$ # 如果失败,则尝试用.profile添加路径
$
$ cd nodejs/bin
$ pwd
$ vim .profile
[vim .profile] 
export PATH=/root/nodejs/bin:$PATH
$ source .profile



其实linux下的部署官方给了更简单的方式,参考链接 放弃上面的手动链接吧..

1
2
$ curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
$ sudo apt install nodejs

搞定

chrome的kiosk模式 这个模式下

$ # 结束chrome的进程
$ taskkill /f /im chrome.exe
$ chrome.exe https://ip.cn -kiosk

monitor-dashboard是一个将monitor的数据可视化的项目

参考monitor的说明

freeboard是一个在线的web仪表盘,通过js获取输入信息源进行绘图, 免费的项目均为public,私有的需要付费

配置dashboard-monitor,freeboard环境

1
$ npm install mqtt monitor-dashboard freeboard -g

mqttjs 是nodejs提供的一套关于mqtt的js接口,透过mqtt.js可以方便的调用mqtt的相关模块 其中mqtt的github地址, 面向例程编程 :)

官方给出的demo如下

1
2
3
4
5
6
7
8
9
10
11
12
13
var mqtt = require('mqtt')
var client  = mqtt.connect('mqtt://test.mosquitto.org')

client.on('connect', function () {
  client.subscribe('presence')
  client.publish('presence', 'Hello mqtt')
})

client.on('message', function (topic, message) {
  // message is Buffer
  console.log(message.toString())
  client.end()
})

配置mqtt环境可以直接通过apt包管理

1
2
3
4
$ sudo apt install mosquitto mosquitto-client 
$ # 如果需要使用c/c++开发的,请安装dev包/如果不行再装lib.... 
$ # apt list|grep mosquitto找找哪些可能有用的
$ sudo apt install mosquitto-dev

0x01 mqtt和mqttjs笔记

发布消息和订阅消息格式如下

1
$ mosquitto_sub -d -q 2 -t 'topic' 
1
$ mosquitto_pub -d -q 2 -t 'topic' -m 'your_info'

即可

在通过npm安装好mqtt之后相当于装好了mqtt的server 和client端, 发布和订阅消息格式如下

1
$ mqtt subscribe 'your_topic'

以及

1
$ mqtt publish 'your_topic' 'your_infomation'

如果需要一台服务器做中转broker,这只需在中转服务器上安装好mosquitto, 服务自动启动。分别在不同的客户端上运行订阅和发送消息的服务即可,如下

中转服务器, 默认开放1883端口,启动了mqtt之后不需要做任何的操作

1
2
$ sudo apt install mosquitto mosquitto-client
$ mosquitto -d # 后台运行,配置文件是默认读取的,不需要指定 /etc/mosquitto/mosquitto.conf

接收订阅消息的客户机, 这里直接使用nodejs 提供的mqtt模块

1
2
3
$ mqtt sub -t 'topic/first' -h 'xxx.xxx.com'
$ #使用mosquitto模块也可以,命令如下
$ mosquitto_sub -d -t 'topic' -h 'xxx.xx.com'

运行之后即处于监听状态

发布订阅消息的客户机

1
2
3
$ mqtt pub -t 'topic/first' -h 'xxx.xxx.com' -m "this info comes from Les1ie's clientA"
$ # 使用mosquitto则命令如下 
$ mosquitto_pub -d -t 'topic' -h 'xxx.xx.com' -m "infomaiton is here"

当然,这只是最简单的mqtt的命令行版本,我们需要把这个移植到我们的js脚本里面去。

这里提供了一个例程,可以参考一下

写给除了js啥语言都写过的基础教程

以及可能没有什么用的比较难一点的js进阶

在服务端的/etc/mosquitto/mosquitto.conf文件中加入

1
2
listener 233390
protocol websockets

重启mosquitto,

1
$ mosquitto -c /etc/mosquitto/mosquitto.conf

本地发布消息的js代码:

client_pub.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/*
 * author: Les1ie
 * email: [email protected]
 * date: 2017.5.26
 */
var mqtt = require('mqtt')
var client = mqtt.connect('mqtt://t.les1ie.com')

var date = new Date()
var second = date.getSeconds()
//client.publish('topic', 'this is a test info')
client.publish('topic', second.toString())
console.log("now it is at " + second)


client.end()

以及订阅的js代码

client_sub.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/*
 * author: Les1ie
 * email: [email protected]
 * date: 2017.5.26
 */

var mqtt = require('mqtt')
var client = mqtt.connect('mqtt://t.les1ie.com')

client.subscribe('topic')

client.on('message', function(topic, message){
	console.log(message.toString())
	
})

0x02 可视化mqtt数据

目前准备尝试两种解决方案, freeboard 和 monitor-dashboard

尝试用过一段时间的freeboard-mqtt, 发现有部分问题未能解决, 服务端开启了websockets之后,本地仍然无法很好的连接到服务端, 参考的是树莓派的例子,

对于monitor-dashboard, 网上参考的例程特别少,需要自己摸索, 在作者的仓库里面有一个样例