使用外部数据源增强您的 IoT 数据
作者:David G. Simmons / 产品, 用例, 开发者
2017 年 10 月 17 日
导航至
我写了很多关于 IoT 数据以及如何处理它的文章。(提示:当然,将其存储在 InfluxDB 中!)但是,要使您的 IoT 数据有用,不仅仅是存储、分析和可视化它——这正是我目前一直在写的。有时,使用其他数据源来增强您的 IoT 数据很有帮助,无论是为了帮助验证您的数据,还是为了给您的数据提供更大的背景。如果您正在构建“数字孪生”,那么使用外部数据增强您的 IoT 数据对于成功至关重要。我将介绍数字孪生的基本概念,然后我们将直接深入探讨如何使用来自外部数据源的数据来增强您的 IoT 数据。
数字孪生
您可能以前听说过数字孪生的概念,或者您可能没有。这个想法很简单:您创建一个物理“事物”的数字表示,您可以对其进行更改、调整等,以查看对性能等的影响。假设您是喷气发动机制造商。在现实世界中对您的发动机进行“调整”可能不是最好的主意。因此,您构建了一个喷气发动机的数字模型,并在虚拟空间中运行它,您可以在其中进行调整等。到目前为止,这还是一种价值有限的练习,因为数字模型和物理模型通常差异很大。
进入物联网世界,物理喷气发动机可以将数据直接馈送到数字模型中,使其更准确,并能够提供实时的、真实世界的结果。模型的好坏取决于您提供给它的数据。那么,如何才能使您的数字喷气发动机更好呢?给它更多的数据!不仅要引入来自您现实世界喷气发动机传感器的数据,还要引入您可以获得的所有参数。加载发动机中数千个零件中每个零件的数据表和规格。现在您可以查看每个零件的性能是否符合其规格。添加天气数据、大气数据等,以查看您的发动机在不同条件下的性能。可能性几乎是无限的。
增强您的 IoT 数据
这一切都始于几个月前我构建的 IoT 演示。您可能还记得,我开始采样一些环境数据——湿度、压力、温度等——并将其存储在 InfluxDB Cloud 中。这些传感器现在分散在整个公司。一些在我们的总部,但大多数分散在各个员工的家庭办公室,包括我的。这些数据很有趣,我们在此过程中也从中学习到了一些东西。但我们真的没有任何东西可以用来比较这些数据。
上周,我构建了一个快速演示,演示如何使用 InfluxDB 从国家飓风中心跟踪飓风数据。然后,这让我开始思考我们可以使用公开可用的实时数据集做些什么其他事情。事实证明,有很多这样的数据集,并且它们包含一些非常好的数据。所以我继续寻找,发现我可以从数千个国家气象局观测站中的任何一个获取当前天气读数。这不是很酷吗?所以我再次开始编写代码。
我需要的第一件事是我当前位置的 GPS 坐标。感谢 Google 地图,这很容易获得。然后我将其发送到国家气象局,以获取附近观测站的列表
整个输出实际上指示了站点与您位置的距离,所以我选择了最近的站点,并继续编写代码。
一个非常简单的 JSON,所以只需解析它,然后将其发送到我的 InfluxDB Cloud 实例。
var myMsg = {};
myMsg.payload = [];
myMsg.payload[0] = {};
myMsg.payload[1] = {};
const station = msg.payload.properties.station.split("/")[4];
switch (station) {
case "KSLC":
myMsg.payload[1].location = "SaltLakeCityUT";
break;
case "KRDU":
myMsg.payload[1].location = "RaleighNC";
break;
case "KBED":
myMsg.payload[1].location = "FraminghamMA";
break;
case "KSFO":
myMsg.payload[1].location = "SFMktg";
break;
default:
myMsg.payload[1].location = "Unknown";
}
myMsg.payload[0].x_temp_c=parseFloat(msg.payload.properties.temperature.value);
myMsg.payload[0].x_temp_f=parseFloat(msg.payload.properties.temperature.value * 9/5 + 32);
myMsg.payload[0].x_pressure=parseFloat(msg.payload.properties.barometricPressure.value * .01);
myMsg.payload[0].x_humidity=parseFloat(msg.payload.properties.relativeHumidity.value);
return myMsg;
看?真的很简单!到目前为止,我只从 4 个观测站收集外部数据,并通过数据库中的标签将其与现有传感器关联起来。现在我有一个新的仪表板,我可以在其中看到来自我的传感器(在室内)的实时数据与来自 NWS 的观测数据(我推测是在室外)之间的差异。
很明显,我的空调坏了。我不得不承认,我对大气压力的差异有点惊讶。我仍然不明白为什么我家里的压力比室外低,但也可能仅仅是因为观测站距离几英里远,并且在该距离内存在压力差。
接下来是什么?
总会有下一步,不是吗?我一直在与几位工程师讨论为国家气象局观测站编写 Telegraf 插件,这样您就可以在您的 telegraf.conf 文件中简单地定义观测站和您想要监控的 JSON 中的参数,并让它完成数据轮询、格式化和插入到您的 InfluxDB 实例中。
我很想听取您的意见,无论是在这里还是通过我的 Twitter feed,了解您希望在未来的博客文章中看到什么,或者在其他公开可用的数据源方面有什么需求。