重访 The Things Network:将 The Things Network V3 连接到 InfluxDB

导航至

回到2019年,David Simmons 创建了一篇优秀的博客,介绍了 LoRaWAN 设备和 The Things Network。他还向您展示了如何轻松地将 The Things Network V2 连接到 InfluxDB。从那时起,一些事情发生了变化,我认为是时候用一个新的项目重新审视 The Things Network 了。

那么,有什么变化吗?

自2021年1月以来,The Things Network 现在部署了 The Things Stack 社区版。简而言之,The Things Network 迁移到 The Things Stack 有一些额外的优势。

  1. 开发者友好 - The Things Stack 是为了提升开发者对 LoRaWAN 技术的技能而设计的。它将您从 LoRaWAN 网络本身抽象出来,让您可以专注于构建最终应用程序。
  2. 可访问性和可扩展性 - The Things Stack 支持所有 LoRaWAN 类别(A、B、C)和 LoRaWAN 版本。The Things Stack 支持被动漫游,允许轻松连接到社区运行的 LoRaWAN 网关之一。
  3. 高级功能 - 开发者现在可以通过 MQTT、HTTP 和 gRPC 等协议访问他们的数据。他们还提供了直接连接到企业解决方案,例如 AWS IoT、Azure IoT Hub 和 LoRa Cloud。
  4. 要了解更多信息,我强烈建议查看技术堆栈文档

新项目

与其重新发明轮子,我决定将我们众所周知的一个物联网项目移植到 The Things Network 上。Plant Buddy 是 Rick Spencer 的作品,它允许您使用一些简单的模拟和数字传感器来监控您室内植物的健康状况。如果您想了解更多,我强烈建议查看博客系列。您也可以在这里找到社区仓库 这里

那么,我们的架构将会是什么样子呢?

project-architecture

注意:此项目的 Git 仓库可在此处找到 此处

硬件设置

让我们从设置我们的 LoRaWAN 设备开始。我选择了购买一个 Arduino MKR WAN 1310。这个多功能微控制器允许轻松连接到 LoRaWAN 网络,同时保持您熟悉的 Arduino 简单性,便于原型设计。

首先,让我们解决传感器布线问题。以下是您需要准备的传感器清单

以下是传感器和MKR WAN 1310的连接图(建议在原型制作时使用面包板)

the wiring diagram for the sensors and the MKR WAN 1310

完成传感器的接线后,务必也连接上所附带的天线。现在可以使用MicroUSB线将MDR WAN 1310连接到您的计算机。

设备配置

现在设备已连接到我们的PC,是时候将我们的植物监测程序烧录到设备上了。Arduino附带一个专为烧录其设备和其它嵌入式控制器而设计的专用IDE。为了简化,以下步骤将使用IDE进行。

      1. 打开Arduino IDE,选择板管理器。安装Arduino AVR 板Install-Arduino-AVR-Boards
      2. 接下来,我们将安装LoRaWAN网络库。选择板管理器,安装MKRWAN_V2。Library Manager
      3. 让我们确保我们的设备固件是最新的。转到文件 -> 示例 -> MKRWAN_v2,并打开MKRWANFWUpdate_standalone。将该程序上传到您的设备以开始更新。
      4. 接下来,让我们转到 Things Network 社区控制台。如果您还没有,请创建一个账户。
      5. 转到应用程序。点击添加应用程序。填写论坛详情并点击创建应用程序Create Application
      6. 接下来,进入您的应用程序,导航到终端设备。点击添加终端设备
      7. 从设备库中选择一个终端设备。以下是以Arduino MKR WAN 1310为例的选择。注意:您的地区将根据您的位置而变化。Add end device
      8. 接下来,我们选择一个适当的频率计划(有关扩展因子的更多信息,请参阅此处)。我们还可以自动生成一个AppEUIAppKey Select a Frequency plan
      9. 接下来,返回Arduino IDE,转到文件 -> 示例 -> MKRWAN_v2并打开FirstConfiguration。上传该项目并打开串行监视器。从控制台复制设备EUI并将其粘贴到Things Network控制台中的设备注册论坛。点击注册终端设备
      10. (可选)您可以按照串行监视器中的其他步骤继续测试连接。
      11. 下载plant_buddy_arduino_MKR_1310.ino文件,并在Arduino IDE中打开它。注意,还需要安装MKRWAN_v2。您还需要以下包
        1. Adafruit的DHT传感器库
        2. Jun Studt的OneWire
        3. Miles Burton的DallasTemperature
        4. Arduino_JSON by Arduino
      12. 接下来,您将需要更新appEuiappKeyUpdate the appEui and appKey
      13. 上传项目并检查串行监视器。您现在应该开始看到传感器数据。
        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}

有效载荷大小

需要注意的是,当与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中的有效负载格式化器来重新格式化我们的消息。

Use the payload formatter in the Things Stack to reformat message

以下是格式化代码

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

接下来,我们将使用Telegraf和MQTT消费者插件将我们的传感器数据从Things Stack流式传输到InfluxDB。幸运的是,这很容易实现。

    1. 注册一个免费的InfluxDB云账户或下载InfluxDB OSS
    2. Telegraf下载到您的PC或网关设备(树莓派非常适用)上。
    3. 下载telegraf-mqtt-thing-network.conf
    4. 在Things Stack控制台中,转到集成 -> MQTT。通过点击生成新API密钥来生成新密码。生成新密码
    5. 将用户名和密码复制到您的Telegraf配置中
      username = "${THING_USERNAME}"
      password = "${THING_API_KEY}"
    6. (可选) 使用以下命令测试您的配置
      telegraf --debug –test --config ./mqtt/telegraf-mqtt-thing-network.conf
    7. (可选) 加载Things Network模板。(这将自动生成仪表板和存储桶)。
    8. 使用新配置启动Telegraf作为服务。

如果您已加载Things Network模板,现在应该开始看到仪表板填充。

Things Network template

从这个模板中,我们可以监控各种指标

  • LoRaWAN路由器位置:映射您的设备正在与之通信的Things Network路由器的位置。
  • 设备带宽:设备使用的带宽频率。
  • ID: 应用程序、集群、NET、Band、会话:
    • 应用程序:设备正在与之通信的应用程序ID
    • 集群:您的Things Stack集群ID。在社区版使用时,很可能是cloud.thethings.network。
    • NET:设备正在连接到的网络标识符。
    • Band:设备传输数据的地理特定频率带。
    • 会话:设备与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提供了对远程或难以触及地区进行监控的经济高效且可扩展的解决方案。使用Influx Data堆栈,我们可以转换、归一化和可视化我们的原始传感器数据,还可以监控我们的传感器连接的健康状况。这并不是说LoRaWAN适用于所有物联网用例,关于带宽和有效载荷大小的限制会将更复杂的物联网项目排除在外。一旦你开始运行,请通过InfluxData Slack社区论坛(确保用@Jay Clifford标记我)联系我。让我们继续聊天!