使用 MQTT 在項目中實現數據收發

console.log("onConnect");

client.subscribe("ny-power/computed/co2");

client.subscribe("ny-power/archive/co2/24h");

client.subscribe("ny-power/upstream/fuel-mix/#");

}

// called when a message arrives

function onMessageArrived(message) {

console.log("onMessageArrived:"+message.destinationName + message.payloadString);

if (message.destinationName == "ny-power/computed/co2") {

var data = JSON.parse(message.payloadString);

$("#co2-per-kwh").html(Math.round(data.value));

$("#co2-units").html(data.units);

$("#co2-updated").html(data.ts);

}

if (message.destinationName.startsWith("ny-power/upstream/fuel-mix")) {

fuel_mix_graph(message);

}

if (message.destinationName == "ny-power/archive/co2/24h") {

var data = JSON.parse(message.payloadString);

var plot = [

{

x: data.ts,

y: data.values,

type: 'scatter'

}

];

var layout = {

yaxis: {

title: "g CO2 / kWh",

}

};

Plotly.newPlot('co2_graph', plot, layout);

}

上述應用訂閱了不少主題,因為我們將要呈現若干種不同類型的數據;其中 ny-power/computed/co2 主題為我們提供當前二氧化碳排放的參考值。一旦收到該主題的新消息,網站上的相應內容會被相應替換。

使用 MQTT 在項目中實現數據收發

ny-power.org 網站提供的 NYISO 二氧化碳排放圖。

ny-power/archive/co2/24h 主題提供了時間序列數據,用於為 Plotly 線表提供數據。ny-power/upstream/fuel-mix 主題提供當前燃料組成情況,為漂亮的柱狀圖提供數據。

使用 MQTT 在項目中實現數據收發

ny-power.org 網站提供的燃料組成情況。

這是一個動態網站,數據不從服務器拉取,而是結合 MQTT 消息總線,監聽對外開放的 WebSocket。就像數據泵和打包器程序那樣,網站頁面也是一個發佈訂閱客戶端,只不過是在你的瀏覽器中執行,而不是在公有云的微服務上。

你可以在 http://ny-power.org 站點點看到動態變更,包括圖像和可以看到消息到達的實時 MQTT 終端。

繼續深入

ny-power.org 應用的完整內容開源在 GitHub 中。你也可以查閱 架構簡介 ,學習如何使用 Helm 部署一系列 Kubernetes 微服務構建應用。另一個有趣的 MQTT 示例使用 MQTT 和 OpenWhisk 進行實時文本消息翻譯, 代碼模式(code pattern)參考 鏈接 。

MQTT 被廣泛應用於物聯網領域,更多關於 MQTT 用途的例子可以在 Home Assistant 項目中找到。

如果你希望深入瞭解協議內容,可以從 mqtt.org 獲得該公開標準的全部細節。

想了解更多,可以參加 Sean Dague 在 OSCON 上的演講,主題為 將 MQTT 加入到你的工具箱 ,會議將於 7 月 16-19 日在奧爾良州波特蘭舉辦。


via: https://opensource.com/article/18/6/mqtt

作者: Sean Dague 選題: lujun9972 譯者: pinewall 校對: wxy

本文由 LCTT 原創編譯, Linux中國 榮譽推出


分享到:


相關文章: