ThingsBoard使用筆記(2)模擬傳感器發送MQTT並顯示監控圖表

書接上一篇博文

ThingsBoard使用筆記(1) 安裝

本片主要是在ThingsBoard安裝成功後,開始使用ThingsBoard,模擬一個物聯網終端,每隔一秒通過MQTT發送數據到服務器;服務器接收到數據後動態顯示在圖表上。

好了開始吧

1.使用默認系統管理員登陸系統創建租戶管理員

  • 使用默認系統賬戶登陸:Systen Administrator: [email protected] / sysadmin
  • 租戶->創建租戶->創建租戶管理員->使用租戶管理員身份管理系統

2.使用租戶管理員創建監控設備

  • 新增一個監控設備,複製訪問令牌保存下來一會會用到

3.創建儀表盤

  • 儀表板庫->創建儀表板

  •  添加儀表板部件->添加實體

  • 添加別名,類型選擇設備類型->然後就會出現你剛剛創建的設備,選擇上保存

  • 創建新部件->選擇Charts類型

4.綁定儀表盤和監控設備傳遞來的數據 

  • 雙擊要使用的圖表->點擊添加數據源->選擇之前創建的實體->選擇具體數據字段(數據來源於下一步MQTT發送來的數據,可以先跳過)->添加

5.模擬給監控設備發送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
  • 執行效果

 

 

6.查看最終效果

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章