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 主题为我们提供当前二氧化碳排放的参考值。一旦收到该主题的新消息,网站上的相应内容会被相应替换。
ny-power/archive/co2/24h 主题提供了时间序列数据,用于为 Plotly 线表提供数据。ny-power/upstream/fuel-mix 主题提供当前燃料组成情况,为漂亮的柱状图提供数据。
这是一个动态网站,数据不从服务器拉取,而是结合 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中国 荣誉推出
閱讀更多 Linux中國 的文章
關鍵字: 编程语言 JavaScript 新能源