書接上篇博文
ThingsBoard使用筆記(2)模擬傳感器發送MQTT並顯示監控圖表
1.模擬硬件監控設備給定時給服務端發送數據
- 使用mqtt-temperature.js,發送監控數據到服務器,並接受服務器控制,注意修改IP
var mqtt = require('mqtt');
const ACCESS_TOKEN = process.argv[2];
var client = mqtt.connect('mqtt://localhost',{
username: ACCESS_TOKEN
});
var controlValue,
realValue = 25;
client.on('connect', function () {
console.log('connected');
client.subscribe('v1/devices/me/rpc/request/+');
console.log('Uploading temperature data once per second...');
setInterval(publishTelemetry, 1000);
});
client.on('message', function (topic, message) {
console.log('request.topic: ' + topic);
console.log('request.body: ' + message.toString());
var requestId = topic.slice('v1/devices/me/rpc/request/'.length),
messageData = JSON.parse(message.toString());
if (messageData.method === 'getValue') {
if(controlValue === undefined) {
client.publish('v1/devices/me/rpc/response/' + requestId, JSON.stringify(realValue));
} else {
client.publish('v1/devices/me/rpc/response/' + requestId, JSON.stringify(controlValue));
}
} else if (messageData.method === 'setValue') {
controlValue = messageData.params;
console.log('Going to set new control value: ' + controlValue);
} else {
client.publish('v1/devices/me/rpc/response/' + requestId, message);
}
});
function publishTelemetry() {
emulateTemperatureChanging();
client.publish('v1/devices/me/telemetry', JSON.stringify({temperature: realValue}));
}
function emulateTemperatureChanging() {
if(controlValue !== undefined) {
if(controlValue >= realValue) {
realValue += (Math.random() + (Math.abs(controlValue - realValue)/30));
} else {
realValue -= (Math.random() + (Math.abs(controlValue - realValue)/30));
}
}
}
- 執行監控數據發送
# CKbirnV1FPOebt0WfUNs 是設備令牌
node mqtt-temperature.js CKbirnV1FPOebt0WfUNs
2.查看監控圖表,能看到一條直線
3.創建溫度控制部件
- 創建控制部件
- 選擇目標設備
- 保存後效果
- 點擊控制溫度