今天,我们将融合两种截然不同的应用程序,来制作一个酷炫的个人仪表板,用于调查我们所有连接互联网的设备及其随时间推移的行为。我们可以利用万维物联网 API 的一项强大功能:其灵活性。就像弹力女超人或神奇先生一样,它可以弯曲和伸展,以适应任何情况。
这种适应性使我们能够在 Project Things 网关和云原生计算基金会的 Prometheus 之间建立一座桥梁。
Prometheus 是一种时间序列数据库,最初用于监控大型服务器集群。但是,很容易教会所有连接互联网的设备假装自己是高级服务器场的一部分。
我们通过将来自万维物联网 API 的数据压缩成一系列存储在 Prometheus 中的原始数据点来实现这一点。我们将在不将任何数据离开本地网络的情况下,仅使用免费和开源软件完成所有这些工作。
安装翻译器
首先,让我们设置翻译层。这个小型实用程序将从万维物联网 API 获取数据,并将其翻译成 Prometheus 可使用并将其转换为漂亮图表的值。它从调用网关的 /things
路径开始,以获取 事物描述 列表。
接下来,它从每个描述的事物的 属性资源 读取,以获取要发送到 Prometheus 的初始属性值。然后,翻译器在每个事物上打开一个 WebSocket 连接,以获取对 属性的未来更新。最后,它将所有属性值作为格式特殊的网页提供给 Prometheus。
您可以从 GitHub 下载此实用程序。如果您在 Raspberry Pi 上运行网关,则可以 登录 并使用以下命令来安装翻译器。
cd ~/mozilla-iot
git clone https://github.com/hobinjk/gateway-prometheus-translator/
cd gateway-prometheus-translator
npm install
接下来,是时候确保翻译层知道您的网关在哪里了。在我的例子中,这是 https://hobinjk.mozilla-iot.org
,但是如果您只是在本地试用网关,它可能是 http://localhost:8080
或 http://gateway.local
。
只要您可以访问 URL 并看到网关的主事物页面,就表明您已正确填写了它。保存此 URL 以备后用,我们将在运行翻译器时使用它。
现在翻译器已经知道它应该从哪里获取数据,我们需要为它提供适当的身份,以便安全地与我们的网关进行通信。我们可以通过从网关的本地令牌服务发布“身份卡”来授权翻译器。
首先,通过单击菜单按钮,然后单击设置选项卡,进入网关的“设置”部分。
接下来,进入授权部分并创建一个新的本地授权。
允许授权请求并复制本地令牌服务发行的本地令牌。这是翻译器将向网关展示的身份卡,以确认其身份。
我们的翻译器已完全配备,准备开始其探险之旅,去收获万维物联网 API 的秘密。现在,让我们使用以下命令运行它
node translator.js "https://your-domain-here.mozilla-iot.org" "paste the local token here"
如果您能够访问 http://gateway.local:3060/metrics 并看到大量文本和数字,那么一切顺利。否则,请查看翻译器 GitHub 存储库的 故障排除部分。
安装 Prometheus
其次,让我们通过运行以下命令来安装和配置 Prometheus
sudo apt install prometheus
sudo cp ~/mozilla-iot/gateway-prometheus-translator/prometheus.yml /etc/prometheus/
sudo systemctl stop prometheus
# Clear all existing metrics (don’t typo this!)
sudo rm -r /var/lib/prometheus/metrics
sudo systemctl start prometheus
绘制所有事物图表!
现在让我们放松一下,享受图表。如果我们访问 http://gateway.local:9090,我们可以绘制图表并对历史事物数据运行查询。首先,我们可以通过单击“在光标处插入度量”并选择要绘制的属性,来获取任何事物的属性值的简单图表。在我的例子中,我首先选择了我智能插座的电压作为健全性检查。
在美国,120 伏特交流电是家用电压的公认标准,因此我们有几伏特的富余,因此一切正常。
让我们深入挖掘,看看我的笔记本电脑充电器在一整天内消耗了多少电量。为此,我们需要 instantaneousPower 度量。在这里,您可以清楚地看到,根据我的笔记本电脑是否已插入以及是否正在执行繁重的任务,功率消耗存在明显差异。在图表上的大约 05:00 时,我插入了笔记本电脑并去睡觉了(请注意,所有时间都是以格林威治标准时间显示,而不是我的本地时区)。笔记本电脑充满电,显示出一些花哨的涓流充电样式,在充电结束时功率消耗逐渐下降。
我想从这个图表中获得的见解之一是,我在整晚给笔记本电脑充电时浪费了多少电量。从图表可以看出,充电器在保持笔记本电脑充满电时大约消耗 0.6 瓦。假设我睡了 8 个小时,这意味着它消耗了 4.8 瓦时。考虑到平均电费,整个月下来,这将花费我 0.14 千瓦时,相当于 2 美分。我可以放心地睡个好觉,因为我的笔记本电脑是否插入无关紧要。
这仅仅触及了 Prometheus 使用万维物联网 API 的能力的表面。从现在开始,我们可以执行 Prometheus 支持的所有高级查询。例如,在过去的 24 小时内,我的充电器的平均功率消耗为 38 瓦。
我们还可以配置 警报,设置 更炫的图形前端,或 将我们的数据导出到外部存储。要使此设置永久保存,请按照翻译器的 安装说明 进行操作。
光明未来
我们正在研究将此时间序列功能与网关在更低级别集成,以便让更多人更容易访问这种酷炫的分析。我们的目标是构建一个针对万维物联网 API 优化的同构图形平台。
我们希望让万维物联网变得触手可及,并对所有人开放。如果您想提供帮助,请在 GitHub 上参与我们的规划,请访问 时间序列跟踪问题。您还可以构建适用于其他分析工具的翻译器,例如 Huginn 或 Munin。
关于 James Hobin
25 级电脑奇才,正在努力让物联网保持免费和开放。