ThingsBoard模拟传感器发送MQTT并显示监控图表
2022-05-20 本文已影响0人
老鼠AI大米_Java全栈
本片主要是在ThingsBoard安装成功后,开始使用ThingsBoard,模拟一个物联网终端,每隔一秒通过MQTT发送数据到服务器;服务器接收到数据后动态显示在图表上。
创建租户管理员
- 使用默认系统账户登陆:Systen Administrator: sysadmin@thingsboard.org / sysadmin
- 租户->创建租户->创建租户管理员->使用租户管理员身份管理系统
![](https://img.haomeiwen.com/i12185313/ad58628acf620759.png)
创建监控设备
新增一个监控设备,复制访问令牌保存下来一会会用到
![](https://img.haomeiwen.com/i12185313/70dd61cac16f64c6.png)
创建仪表盘
-
仪表板库->创建仪表板
image.png
- 添加仪表板部件->添加实体
![](https://img.haomeiwen.com/i12185313/4930c39403a45c0a.png)
-
添加别名,类型选择设备类型->然后就会出现你刚刚创建的设备,选择上保存
image.png
-
创建新部件->选择Charts类型
image.png
绑定仪表盘和监控设备传递来的数据
![](https://img.haomeiwen.com/i12185313/7893b47ee9d1c3db.png)
- 双击要使用的图表->点击添加数据源->选择之前创建的实体->选择具体数据字段(数据来源于下一步MQTT发送来的数据,可以先跳过)->添加
模拟给监控设备发送mqtt消息
在windows下使用node模拟发送mqtt数据
- 首先安装mqtt
npm install mqtt
- 编写emulator.js,模拟给服务器发送mqtt消息,注意修改ip
//Requires node.js and mqtt library installed.
var mqtt = require('mqtt');
const thingsboardHost = "127.0.0.1";
// Reads the access token from arguments
const accessToken = process.argv[2];
const minTemperature = 17.5, maxTemperature = 30, minHumidity = 12, maxHumidity = 90;
// Initialization of temperature and humidity data with random values
var data = {
temperature: minTemperature + (maxTemperature - minTemperature) * Math.random() ,
humidity: minHumidity + (maxHumidity - minHumidity) * Math.random()
};
// Initialization of mqtt client using Thingsboard host and device access token
console.log('Connecting to: %s using access token: %s', thingsboardHost, accessToken);
var client = mqtt.connect('mqtt://'+ thingsboardHost, { username: accessToken });
// Triggers when client is successfully connected to the Thingsboard server
client.on('connect', function () {
console.log('Client connected!');
// Uploads firmware version as device attribute using 'v1/devices/me/attributes' MQTT topic
client.publish('v1/devices/me/attributes', JSON.stringify({"firmware_version":"1.0.1"}));
// Schedules telemetry data upload once per second
console.log('Uploading temperature and humidity data once per second...');
setInterval(publishTelemetry, 1000);
});
// Uploads telemetry data using 'v1/devices/me/telemetry' MQTT topic
function publishTelemetry() {
data.temperature = genNextValue(data.temperature, minTemperature, maxTemperature);
data.humidity = genNextValue(data.humidity, minHumidity, maxHumidity);
client.publish('v1/devices/me/telemetry', JSON.stringify(data));
}
// Generates new random value that is within 3% range from previous value
function genNextValue(prevValue, min, max) {
var value = prevValue + ((max - min) * (Math.random() - 0.5)) * 0.03;
value = Math.max(min, Math.min(max, value));
return Math.round(value * 10) / 10;
}
//Catches ctrl+c event
process.on('SIGINT', function () {
console.log();
console.log('Disconnecting...');
client.end();
console.log('Exited!');
process.exit(2);
});
//Catches uncaught exceptions
process.on('uncaughtException', function(e) {
console.log('Uncaught Exception...');
console.log(e.stack);
process.exit(99);
});
指定 emulator.js
# CKbirnV1FPOebt0WfUNs 是访问令牌之前保存的
node emulator.js CKbirnV1FPOebt0WfUNs
-
执行效果
image.png
查看最终效果
![](https://img.haomeiwen.com/i12185313/6bed1d05c4893a5b.png)