web前端高级-vue

ThingsBoard模拟传感器发送MQTT并显示监控图表

2022-05-20  本文已影响0人  老鼠AI大米_Java全栈

本片主要是在ThingsBoard安装成功后,开始使用ThingsBoard,模拟一个物联网终端,每隔一秒通过MQTT发送数据到服务器;服务器接收到数据后动态显示在图表上。

创建租户管理员

image.png

创建监控设备

新增一个监控设备,复制访问令牌保存下来一会会用到


image.png

创建仪表盘

image.png

绑定仪表盘和监控设备传递来的数据

image.png

模拟给监控设备发送mqtt消息

在windows下使用node模拟发送mqtt数据

npm install mqtt

//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
上一篇 下一篇

猜你喜欢

热点阅读