如果chrome可以直接连mosquitto
broker,那就很方便了。不需要在经过nodejs
和express用websocket中转资料。看参考资料1,paho可以透过websocket连接mqtt broker。
之前装了个chrome extension:
MQTTlens,,这不就也是用chrome就可以直接连mosquitto吗?
实际操作一次,,发现mosquitto预设不支持websocket的,,那MQTTlens是怎么连上的?不懂。。。只好重新编译mosquitto加上对websocket的支持。
这么做:
1: 先git
clone https://github.com/eclipse/mosquitto
,在 config.mk的 72行左右。将WITH_WEBSOCKETS=no 改成 yes
2: 安装 dependencies , sudo apt install
libwebsockets-dev libssl-dev xsltproc docbook-xsl -y
3: 做这3个步骤 : make clean,
make , sudo make install
4: 在 mosquitto.conf 增加以下几行:
port 1883
listener 9001
protocol
websockets
在armbian 里,mosquitto被放到
/usr/local/sbin/ 目录底下,所以我们要做个link
ln -s /usr/local/sbin/mosquitto
/usr/local/sbin/mosquitto
这样就可以用paho 的javascipt 连接
mosquitto了。 但是port要设为 9001
,因为是连接websocketsudo
P.S. 在Armbian的Pine64版本上编译mosquitto 1.6.2版,在执行时出现错误 Error:
Unsupported persistent database format version 5 (need version
4).
如果直接执行 mosquitto 是没问题的。但如果加上conf , mosquitto -c
/etc/mosquitto/mosquitto.conf 会出现Error: Unable to open log file
/var/log/mosquitto/mosquitto.log for writing.
在mosquitto.conf
把log哪一行给comment掉,可以正常启动,但退出时,出现另一个错误 Error saving
in-memory database, unable to open
/var/lib/mosquitto/mosquitto.db.new for writing. 如果加上sudo
在退出时Saving in-memory database to /var/lib/mosquitto/mosquitto.db.
表示可以正常储存进database了
到这一步,用命令行可以正常启动mosquitto了,但是用systemctl
start,就无法启动,但没有错误讯息,用journalctl -u mosquitto看到 Error: Unsupported
persistent database format version 5 (need version 4).
所以就一直重启(mosquito预设失败重启5次)
解决方式:
把/etc/mosquitto/mosquitto.conf 的persistent
location 和log 给comment掉就正常启动了
P.S.
如果还是有错误,就新增一个mosquitto 的user : sudo useradd
mosquitto
另外, 在raspberry pi, mosquitto会一直停在activating
,然后就timeout. 原因应该是mosquitto.service当时复制成带notify的档案了. .做以下comment
掉:
[Service]
#Type=notify
#NotifyAccess=main
应该也是权限的问题。。。不深究了,先跑起来再说
参考资料:
1:http://www.steves-internet-guide.com/using-javascript-mqtt-client-websockets/
加载中,请稍候......