重新审视 The Things Network:将 The Things Network V3 连接到 InfluxDB
作者:Jay Clifford / 产品, 用例, 开发者
2022 年 2 月 25 日
导航至
早在 2019 年,David Simmons 创建了一篇很棒的博客,介绍了 LoRaWAN 设备和 The Things Network。他还向您展示了将 The Things Network V2 连接到 InfluxDB 是多么容易。从那时起,发生了一些变化,我认为现在是时候通过一个新项目重新审视 Things Network 了。
那么发生了什么变化?
自 2021 年 1 月起,The Things Network 现在部署了 The Things Stack Community Addition。简而言之,The Things Network 迁移到 The Things Stack 后,增加了一些好处
- 开发者友好 - The Things Stack 旨在提升开发者在 LoRaWAN 技术方面的技能。它将您从 LoRaWAN 网络本身中抽象出来,让您可以专注于构建终端应用程序。
- 可访问性和可扩展性 - The Things Stack 支持所有 LoRaWAN 类(A、B、C)和 LoRaWAN 版本。The Things Stack 支持被动漫游,可以轻松连接到社区运行的 LoRaWAN 网关之一。
- 高级功能 - 开发者现在可以通过 MQTT、HTTP 和 gRPC 等协议访问他们的数据。他们还提供与 AWS IoT、Azure IoT Hub 和 LoRa Cloud 等企业解决方案的直接连接。
- 要了解更多信息,我强烈建议您查看技术堆栈文档。
一个新项目
我没有重新发明轮子,而是决定将我们一个著名的物联网项目移植到 The Things Network。Plant Buddy 是 Rick Spencer 的心血结晶,让您可以使用一些简单的模拟和数字传感器来监控您家植物的健康状况。如果您想了解更多信息,我强烈建议您查看博客系列。您还可以在此处找到社区仓库。
那么我们的架构会是什么样子呢?
注意:此项目的 Git 仓库可以在此处找到。
硬件设置
让我们从设置我们的 LoRaWAN 设备开始。我选择购买 Arduino MKR WAN 1310。这款一体化微控制器可以轻松连接到 LoRaWAN 网络,同时保持您熟悉和喜爱的 Arduino 简洁性,以便进行原型设计。
首先,让我们解决传感器接线问题。以下是您需要的传感器列表
以下是传感器和 MKR WAN 1310 的接线图(我强烈建议在原型设计时使用面包板)
完成传感器接线后,请务必连接随附的天线。现在您可以使用 MicroUSB 电缆将 MDR WAN 1310 插入您的计算机。
设备配置
现在我们的设备已连接到我们的 PC,是时候使用我们的植物监控程序刷新设备了。Arduino 配备了专门构建的 IDE,用于刷新他们的设备以及其他嵌入式控制器。为简单起见,以下说明将使用 IDE 完成
-
-
- 打开 Arduino IDE 并选择开发板管理器。安装 Arduino AVR 开发板。
- 接下来,我们将安装 LoRaWAN 网络库。选择开发板管理器并安装 MKRWAN_V2。
- 让我们确保我们的设备固件是最新的。前往 文件 -> 示例 -> MKRWAN_v2 并打开 MKRWANFWUpdate_standalone。将其上传到您的设备以开始更新。
- 接下来,让我们前往 Things Network 社区控制台。如果您还没有帐户,请创建一个帐户。
- 转到应用程序。单击添加应用程序。填写论坛详细信息,然后单击创建应用程序。
- 接下来,进入您的应用程序并导航到终端设备。单击添加终端设备。
- 从设备库中选择一个终端设备。以下是 Arduino MKR WAN 1310 的示例选择。注意:您的地区会根据您所在的位置而变化。
- 接下来,我们选择合适的频率计划(有关扩频因子的更多信息可以在此处找到)。我们还可以自动生成 AppEUI 和 AppKey
- 接下来,返回到我们的 Arduino IDE 并前往 文件 -> 示例 -> MKRWAN_v2 并打开 FirstConfiguration。上传此项目并打开串口监视器。从控制台复制设备 EUI 并将其粘贴到 Things Network 控制台中的设备注册论坛中。 单击注册终端设备。
- (可选)您可以按照串口监视器的其余步骤进行操作以测试连接性。
- 下载 plant_buddy_arduino_MKR_1310.ino 文件并在 Arduino IDE 中打开它。注意以及 MKRWAN_v2。您还需要以下软件包
- Adafruit 的 DHT 传感器库
- Jun Studt 的 OneWire …
- Miles Burton 的 DallasTemperature
- Arduino 的 Arduino_JSON
- 接下来,您需要更新 appEui 和 appKey。
- 上传项目并检查串口监视器。您现在应该开始看到传感器数据。
Your module version is: ARD-078 1.2.3 Your device EUI is: a8610a32333c8c0dSending: {"soil_moisture":3,"air_temperature":21,"humidity":48,"soil_temperature":22,"light":20}
- 打开 Arduino IDE 并选择开发板管理器。安装 Arduino AVR 开发板。
-
有效负载大小
仍然需要注意的是,在使用 LoRaWan 设备时,有效负载大小至关重要。这意味着发送 JSON 消息(就像我们输出到串口控制台一样)是绝对不可取的。我强烈建议您对消息进行编码,例如使用 base64。我还建议您查看使用字节以进行进一步阅读。
由于数据编码不是本教程的目的,我们将保持我们的编码非常基本
String sensorString = String(moistureSenorReading) + "-" + String(airTemperatureReading) + "-" + String(humidityReading) + "-" + String(soilTemperatureReading) + "-" + String(lightReading);
char payload[sensorString.length()+1];
sensorString.toCharArray(payload, sensorString.length() +1);
然后我们可以使用 Things Stack 中的有效负载格式化程序来重新格式化我们的消息。
以下是格式化代码
function Decoder(bytes, port) {
var result = "";
for (var i = 0; i < bytes.length; i++) {
result += String.fromCharCode(parseInt(bytes[i]));
}
result = result.replace(/\0/g, "");
var sensors = result.split("-");
return { payload: {"soil_moisture": parseFloat(sensors[0]),
"air_temperature": parseFloat(sensors[1]),
"humidity": parseFloat(sensors[2]),
"soil_temperature": parseFloat(sensors[3]),
"light": parseFloat(sensors[4])}, };}
连接到 InfluxDB
接下来,我们将把我们的传感器数据从 Things Stack 流式传输到 InfluxDB。幸运的是,使用 Telegraf 和 MQTT Consumer Plugin 可以轻松实现这一点
-
- 注册一个免费的 InfluxDB Cloud 帐户 或下载 InfluxDB OSS。
- 下载并安装 Telegraf 到您的 PC 或网关设备(Raspberry PI 非常适合)。
- 下载 telegraf-mqtt-thing-network.conf。
- 接下来,在 Things Stack 控制台中,前往 集成 -> MQTT。通过单击生成新的 API 密钥生成新密码。
- 将用户名和密码复制到您的 Telegraf 配置文件中
username = "${THING_USERNAME}" password = "${THING_API_KEY}"
- (可选)使用以下命令测试您的配置
telegraf --debug –test --config ./mqtt/telegraf-mqtt-thing-network.conf
- (可选)加载 Things Network 模板。(这将自动生成仪表板和存储桶)。
- 使用新配置将 Telegraf 作为服务启动。
如果您已加载 Things Network 模板,您现在应该开始看到仪表板填充。
通过此模板,我们可以监控各种指标
- LoRaWAN 路由器位置: 映射您的设备正在与之通信的 Things Network 路由器的位置。
- 设备带宽: 您的设备正在使用的带宽频率。
- ID:application、cluster、NET、Band、session:
- 应用程序: 您的设备正在与之通信的应用程序的 ID
- 集群: 您的 Things Stack 集群的 ID。使用社区版时,最有可能为 cloud.thethings.network。
- NET: 您的设备正在连接的网络标识符。
- 频段: 您的设备正在传输数据的特定地理位置的频段。
- 会话: 您的设备和 Things Network 之间的当前会话密钥标识符。
- 设备元信息:品牌、代码率、设备 ID、固件版本、型号 ID、上次已知消息
- 品牌: 设备品牌名称(Arduino、ST)
- 代码率: 代码率是指实际携带信息的已传输比特的比例。
- 设备 ID: 设备的唯一标识符。
- 固件版本: 设备上安装的当前固件版本。
- 型号 ID: 设备型号版本(链接到品牌)
- 上次已知消息: 设备报告的上次消息的时间。用于检查活动。
- 消耗的空口时间: 图表描述了设备有效负载从发送者到接收者传输的时间。
- 通道 RSSI: 接收信号强度指示器,客户端设备接收信号的相对质量。RSSI 最大值因制造商而异,但经验法则是值越高,信号质量越好。
- 通道 SNR: 信噪比,衡量所需信号与背景噪声的比率。典型的 LoRa SNR 值介于 -20 dB 和 +10 dB 之间。值越接近 +10 dB,表示接收到的信号损坏越少。
- 相关性: SNR 与空口时间、RSSI 与空口时间、SNR 与 RSSI:比较 SNR、空口时间和 RSSI 之间趋势的热图。
- 连接周期: 设备连接的估计周期。这与 Telegraf 将消息传递到 InfluxDB 相关。它有助于发现一天中停机时间的模式。
结论
The Things Network 证明了社区主导项目的力量。对于日常物联网爱好者来说,LoRaWAN 提供了一种经济高效且可扩展的解决方案,用于监控偏远或难以到达的区域。使用 InfluxData 堆栈,我们可以转换、规范化和可视化我们的原始传感器数据,还可以监控我们的传感器连接的健康状况。这并不是说 LoRaWAN 适用于所有物联网用例,带宽和有效负载大小的限制使更多密集型物联网项目疏远。一旦您启动并运行,请在 InfluxData Slack 和 社区论坛 上与我联系(只需确保标记我 @Jay Clifford)。让我们继续聊天!