陈拓 [email protected] 2020/02/10-2020/02/10
1. 概述
MQTT.fx官方网站:http://mqttfx.jensd.de/
MQTT.fx的基本用法请看《MQTTfx连接物联网云平台》一文:https://zhuanlan.zhihu.com/p/101104351
本文讲述MQTT.fx的高级用法,通过js脚本发送和接收云端的消息。当你需要连续向云端发送多条消息时,脚本特别好用。
2. MQTT.fx的脚本文件放在哪里
- 工作目录
MQTT.fx默认的工作目录是C:\Users\Administrator\AppData\Local\MQTT-FX
配置文件mqttfx-config.xml中记录了这个位置:
<workingDir>C:\Users\Administrator\AppData\Local\MQTT-FX</workingDir>
- 创建脚本文件
脚本文件放在文件夹scripts中,里面已经有一个模板了:
01__Switch_Fountain_Test.js
我们再创建2个js文件:02__Publish_Test.js和03__Subscribe_Test.js
先创建js文件再打开MQTT.fx,MQTT.fx打开后创建的js文件列表中看不到。
- 选择默认编辑器
MQTT.fx不带编辑器,需要指定一个外部编辑器。
右击一个js文件 > 属性
更改
选择记事本,确定。
3. Script属性上报Publish
下面以阿里云物联网平台为例上报属性,也就是上传数据到云端。
3.1 单个数据上报
- 选择脚本
打开MQTT.fx > 连接Connect > 选择Scripts > 下拉列表 > 选择脚本
- 点击Edit打开记事本编辑脚本02__Publish_Test.js
完整js代码如下:
var Thread = Java.type("java.lang.Thread");
function execute(action) {
out("Test Script: " + action.getName());
publishTemp(20.8);
action.setExitCode(0);
action.setResultText("done.");
out("Test Script: Done");
return action;
}
function publishTemp(temp) {
out("temp value : " + temp);
var data = '{"id":"1","version":"1.0","params":{"Temperature":' + temp + '},"method":"thing.event.property.post"}';
mqttManager.publish("/sys/a1KDpQ8yhGW/BedroomTemperature/thing/event/property/post", data);
}
function out(message){
output.print(message);
}
- 点击Execute运行脚本
- 查看云端接收到的数据
- 查看云端日志
- 日志详情
3.2 连续数据上报
每隔5分钟上报一次数据,发送10个数据,取10~27之间的整数随机值:
- 写js程序
var Thread = Java.type("java.lang.Thread");
function execute(action) {
out("Test Script: " + action.getName());
var temp;
for (var i = 0; i < 10; i++) {
temp = random(10, 27);
publishTemp(temp);
Thread.sleep(300000);
}
action.setExitCode(0);
action.setResultText("done.");
out("Test Script: Done");
return action;
}
function publishTemp(temp) {
out("temp value : " + temp);
var data = '{"id":"1","version":"1.0","params":{"Temperature":' + temp +
'},"method":"thing.event.property.post"}';
mqttManager.publish
("/sys/a1KDpQ8yhGW/BedroomTemperature/thing/event/property/post", data);
}
function random(lower, upper) {
return Math.floor(Math.random() * (upper - lower+1)) + lower;
}
function out(message){
output.print(message);
}
- 运行js程序
- 查看云端收到的数据
4. 日志清理
日志文件mqttfx.log不断在增长,占用空间,必要时清理一下。
参考文档:
- 使用MQTT.fx接入物联网平台
https://help.aliyun.com/document_detail/86706.html - 自己写微信小程序MQTT模拟器https://blog.csdn.net/chentuo2000/article/details/102507560
- 阿里云物联网平台基本设置-物模型
https://blog.csdn.net/chentuo2000/article/details/103559553 - 微信小程序MQTT模拟器 阿里云物联网平台测试https://blog.csdn.net/chentuo2000/article/details/102216865
- 树莓派连接阿里云物联网平台-属性(nodejs)https://blog.csdn.net/chentuo2000/article/details/103705694
- 树莓派连接阿里云物联网平台-服务(nodejs)https://blog.csdn.net/chentuo2000/article/details/103754860
- 树莓派连接阿里云物联网平台-订阅(nodejs)https://blog.csdn.net/chentuo2000/article/details/103769449
- 树莓派连接阿里云物联网平台-事件(nodejs)https://blog.csdn.net/chentuo2000/article/details/103805559
- MQTTfx连接物联网云平台
https://zhuanlan.zhihu.com/p/101104351 - MQTT.fx - HiveMQ MQTT Toolbox https://www.hivemq.com/blog/mqtt-toolbox-mqtt-fx/
- Linking the ESP8266 to a Raspberry Pi through MQTT
https://www.penninkhof.com/2015/05/linking-the-esp8266-a-raspberry-pi-through-mqtt/ - mqttfx-manual
https://github.com/Jerady/mqttfx-manual