加载中…
个人资料
kenjican
kenjican
  • 博客等级:
  • 博客积分:0
  • 博客访问:2,860
  • 关注人气:21
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

關於MQTT(四)-----mosquitto设定websocket

(2019-02-16 15:52:46)
标签:

mosquitto

mqtt

paho

websocket

分类: Ubuntu,Puppy,Mac,Centos,
  如果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/

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有