使用 Machinechat 和 Seeed SenseCAP 建立一个私有的 LoRaWAN 传感器网络

描述

该项目使用现成的硬件和软件建立一个专用LoRaWAN物联网传感器网络。详细介绍了软件包括Machinechat的JEDI Pro SSE (Seeed Studio Edition)应用软件和ChirpStack LoRaWAN网络服务器应用程序。硬件包括Seeed的Odyssey x86 mini PC、一个SenseCAP户外LoRaWAN网关和两个户外SenseCAP环境传感器。

Machinechat和ChirpStack应用程序安装在运行Ubuntu Linux的Odyssey mini PC上,并且不需要云元素来实现私有LoRaWAN传感器网络。

硬件

软件

  • JEDI Pro SSE
    用于物联网数据收集、可视化、监控和数据存储的应用软件,可集成到物联网解决方案中。

  • ChirpStack
    ChirpStack开源LoRaWAN网络服务器堆栈为LoRaWAN网络提供开源组件。模块化的架构使得在现有的基础设施内集成成为可能。

  • Ubuntu LTS18.04.6
    安全企业Linux服务器,桌面,云,开发人员和东西。版本- Ubuntu 18.04。6 LTS(长期支持)

背景

LoRa是由Semtech公司开发的一种远程、低功耗无线技术,它利用了源自chirp扩频(CSS)技术的扩频调制技术。LoRaWAN是由LoRa联盟®管理的互操作性标准。LoRa设备和LoRaWAN标准为无线传感器网络应用提供了许多优点和功能,包括长距离、低功耗和安全数据传输。
几家网络运营商在全球范围内提供基于云的LoRaWAN网络,供客户订阅和连接。客户的另一个选择是建立自己的私有、基于边缘的LoRaWAN远程物联网传感器网络。专用网络的好处包括维护端到端的隐私和对数据的控制,对软件和基础设施更新和升级的控制,不需要互联网连接,也不需要经常性的服务/订阅网络费用。

实现

在这个项目中,LoRa硬件包括Seeed的户外LoRaWAN网关和两个电池供电的户外传感器。服务器硬件由Seeed运行Ubuntu LTS18.04的Odyssey mini pc组成。Machinechat的JEDI Pro SSE软件和ChirpStack网络服务器安装在Odyssey mini pc上。LoRaWAN网关和Ubuntu服务器都连接到同一个以太网络。实现的专用LoRaWAN物联网传感器网络的框图如下所示。

该网络的组成要素是:

  1. JEDI Pro SSE—JEDI Pro SSE应用软件能够收集传感器数据,并能够通过仪表板、规则、动作、通知和网络监控对其进行操作,并安装在Ubuntu服务器上。JEDI Pro SSE有一个内置的数据采集器,可以与ChirpStack网络服务器无缝通信,从Seeed的SenseCAP传感器接收LoRaWAN数据。
  2. ChirpStack网络服务器—ChirpStack是一个开源的LoRaWAN网络服务器,安装在Ubuntu服务器上,收集从SenseCAP网关转发的传感器数据。ChirpStack对数据进行重复数据删除、解密和转换为通用数据格式,并通过集成(包括MQTT和HTTP)使其可用。ChirpStack还提供了一个基于web的界面,可以快速板载和管理设备和网关。
  3. LoRaWAN网关——LoRaWAN网关从传感器等网络设备收集无线信息,并通过IP网络(如以太网)转发给网络服务器软件。Seeed Studio的SenseCAP户外网关具有IP66外壳,并支持扩展的工作温度范围。
  4. LoRaWAN传感器- Seeed Studio的SenseCAP系列LoRaWAN传感器有一个内置电池,可以使用长达3年(使用默认配置,每小时发送一次消息)。在这个项目中,使用了湿度/温度传感器和光强度传感器。

设置Ubuntu服务器硬件

1 - 如果尚未安装,请下载并安装Ubuntu LTS18.04.6见下载链接
注:对于ODYSSEY - X86J4105 mini pc安装信息请参见Creating Bootable USB and Installing OS (Ubuntu Desktop 18.04)

建立ChirpStack LoRaWAN网络服务器

ChirpStack提供了下载、安装和设置ChirpStack网络服务器 https://www.chirpstack.io/project/guides/debian-ubuntu/ 的详细说明和背景信息。下面是我在Odyssey mini pc Ubuntu服务器上设置ChirpStack时所遵循的步骤的演练。

1 - 安装dependencies (Mosquitto MQTT broker,Redis数据库,PostgreSQL数据库)

使用包管理器 apt 安装这些 dependencies

sudo apt install mosquitto mosquitto-clients redis-server redis-tools postgresql

2 - 通过关闭安全性和允许匿名用户来配置Mosquitto 进行初始测试。一旦系统启动并运行,将在下面的步骤保护MQTT通信。
创建一个名为“ chirstack .conf 的文件,其中包含以下内容 :

listener 1883 
allow_anonymous true

将创建的文件保存在下面的目录中 :

/etc/mosquitto/conf.d 

现在,重启服务器 :

sudo shutdown -r now 

3 - 设置PostgreSQL数据库和用户

进入 PostgreSQL 的命令行工具 :

sudo -u postgres psql

在这个提示符中,执行以下查询来设置ChirpStack堆栈组件使用的数据库。建议修改用户名和密码。请记住在更新chirstack -network- server时使用新的用户名和密码值 tomlchirstack -application-server Toml 配置文件。

设置用户和密码

create role chirpstack_as with login password 'dbpassword';
create role chirpstack_ns with login password 'dbpassword';

为服务器创建数据库

create database chirpstack_as with owner chirpstack_as;
create database chirpstack_ns with owner chirpstack_ns;

更改为 ChirpStack 应用服务器数据库

\c chirpstack_as

启用 pq_trgm hstore 扩展名

create extension pg_trgm;
create extension hstore;

退出 psql

\q

4 - 设置ChirpStack软件存储库

确保安装了 dirmngr apt-transport-https:

sudo apt install apt-transport-https dirmngr

设置这个新存储库的密钥 :

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 1CE2AFD36DBCCA00

( 注意 : 上面的 keyserver 不适合我,所以我使用下面的 )

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 1CE2AFD36DBCCA00 

通过创建新文件将存储库添加到存储库列表中 :

sudo echo "deb https://artifacts.chirpstack.io/packages/3.x/deb stable main" | sudo tee /etc/apt/sources.list.d/chirpstack.list

更新 apt 包缓存 :

sudo apt update

5 - 安装ChirpStack网关桥

使用 apt 安装软件包 :

sudo apt install chirpstack-gateway-bridge

ChirpStack网关网桥配置文件位于/etc/ chirstack -gateway-bridge/ chirstack -gateway-bridge toml 。这个项目的默认配置就足够了。

启动 ChirpStack Gateway Bridge 服务 :

sudo systemctl start chirpstack-gateway-bridge

设置 ChirpStack Gateway Bridge 服务在引导时启动 :

sudo systemctl enable chirpstack-gateway-bridge

6 安装ChirpStack网络服务器

使用 apt 安装软件包 :

sudo apt install chirpstack-network-server

ChirpStack网络服务器配置文件位于/etc/ chirstack -network-server/ chirstack -network-server。Toml和必须更新以匹配数据库和频带配置。参见下面这个项目使用的US915示例。更多信息和示例可以在安装ChirpStack Network Server中找到。(注意:chirstack -network-server。toml文件基于美国版本chirstack -network-server-us915。更新配置后
,您需要重新启动ChirpStack Network Server并验证没有错误。
启动 ChirpStack Network Server 服务 :

 sudo systemctl start chirpstack-network-server

设置 ChirpStack Network Server 服务在引导时启动 :

sudo systemctl enable chirpstack-network-server

打印 ChirpStack Network Server 日志输出以检查错误 :

sudo journalctl -f -n 100 -u chirpstack-network-server

US915 *配置例子sub-band 2 (125kHz 通道 8 - 15 500kHz 通道 65)

[general]
log_level=4

[postgresql]
dsn="postgres://chirpstack_ns:dbpassword@localhost/chirpstack_ns?sslmode=disable"

[network_server]
net_id="000000"

[network_server.band]
name="US_902_928"

[network_server.network_settings]
enabled_uplink_channels=[8, 9, 10, 11, 12, 13, 14, 15, 65]

7 - 安装ChirpStack应用服务器

使用 apt 安装软件包 :

sudo apt install chirpstack-application-server

ChirpStack应用服务器配置文件位于/etc/ chirstack -application-server/ chirstack -application-server。Toml和必须更新以匹配数据库配置。下面是一个配置示例,它与前面步骤中创建的数据库相匹配。

[general]
log_level=4

[postgresql]
dsn="postgres://chirpstack_as:dbpassword@localhost/chirpstack_as?sslmode=disable"

[application_server.integration] marshaler="json"

[application_server.external_api]
jwt_secret="verysecret"

注意 : 必须jwt_secret 替换为一个安全的secret!
你可以使用下面的命令来生成一个随机的秘密

openssl rand -base64 32

启动 ChirpStack 应用服务器服务 :

sudo systemctl start chirpstack-application-server

ChirpStack 应用服务器服务设置为开机启动 :

sudo systemctl enable chirpstack-application-server

打印 ChirpStack 应用服务器日志输出以检查错误 :

sudo journalctl -f -n 100 -u chirpstack-application-server

保护MQTT通信

ChirpStack网络服务器和应用服务器不处理MQTT身份验证和授权,因为这是MQTT broker的责任。对于这个项目,Mosquitto 是MQTT broker,基本的安全级别是设置用户名和密码(这在MQTT authentication & authorization 中有详细描述)。

1 - 设置密码

使用mosquitto_passwd命令,可以创建一个用于身份验证的密码文件。下面是创建密码文件并添加用户名的示例(只在第一次使用-c,因为它会创建一个新文件):

*创建一个密码文件,用户为chirpstack_gw, chirpstack_ns和chirpstack_as

sudo mosquitto_passwd -c /etc/mosquitto/passwd chirpstack_gw
sudo mosquitto_passwd /etc/mosquitto/passwd chirpstack_ns
sudo mosquitto_passwd /etc/mosquitto/passwd chirpstack_as

保护密码文件

sudo chmod 600 /etc/mosquitto/passwd

2 - 设置acl(访问控制列表文件)

访问控制列表文件将用户名映射到一组主题。将此文件写入/etc/ mosquito /acls 。请看下面的例子:

user chirpstack_gw
topic write gateway/+/event/+
topic read gateway/+/command/+

user chirpstack_ns
topic read gateway/+/event/+
topic write gateway/+/command/+

user chirpstack_as
topic write application/+/device/+/event/+
topic read application/+/device/+/command/+

3 - Mosquitto 配置

添加一个新的配置文件/etc/ mosquito /conf.d/auth.conf 配置如下:

allow_anonymous false
password_file /etc/mosquitto/passwd
acl_file /etc/mosquitto/acls

4 - 更新ChirpStack配置文件

编辑三个ChirpStack配置文件/etc/ chirstack -gateway-bridge/ chirstack -gateway-bridge toml/etc/ chirstack -network-server/ chirstack -network-server Toml ,和/etc/ chirstack -application-server/ chirstack -application-server toml 来添加新的凭据:
例如 chirstack -application-server .toml

[application_server.integration.mqtt]

# Connect with the given username (optional)
username="chirpstack_as"

# Connect with the given password (optional)
password="your_password"

连接并配置SenseCAP LoRaWAN网关

登录 SenseCAP 网关,找到网关
的IP地址,然后进入“ipaddress:8000”。默认用户为“sensecap”,密码为“sensecap!!”

image

进入仪表板上的“LoRa”选项卡,设置“数据包调度配置”指向运行ChirpStack的Ubuntu服务器的IP地址。
上行和下行端口默认为1700,所以保留1700的设置。像下图一样配置它,但将IP地址更改为ChirpStack服务器。

将SenseCAP LoRa网关添加到ChirpStack

添加网关到ChirpStack的详细信息请参见Connecting a gateway to ChirpStack

1 - 登录到ChirpStack GUI

使用 ChirpStack 服务器的 IP 地址和 8080 端口进入登录界面 : 示例:
http://192.168.1.23:8080

image

(注意:默认凭据为用户名:admin密码:admin)

2 - 添加Network Server

2 - 创建组织

命名组织并勾选“ Gateways

image

3 - 创建服务配置文件

名称服务配置文件和复选框

4 - 创建网关

名称网关,输入网关 ID ,选择网络服务器
(注意:网关ID为EUI:来自SenseCAP网关标签)

5 - 创建设备配置文件

命名设备配置文件并选择此设置显示的值

6 - 在设备配置文件中编辑CODEC

编辑 CODEC ,使用 CODEC 从机械技术文章 参见 Seeed SenseCAP LoRaWAN ChirpStack CODEC

image

将SenseCAP LoRa传感器添加到ChirpStack

1 - 创建应用程序

名称应用程序,并选择服务配置文件显示此设置

2 - 添加设备(SenseCAP传感器)

添加终端设备需要输入EUI(打印在产品标签上)和必须在线检索的应用程序密钥;参见 https://sensecap-docs.seeed.cc/pdf/Guide-for-SenseCAP-Adaption-to-3rd-Party-Gateways-Servers-V1.2.pdf .的4.1节。

在ChirpStack创建设备

为设备添加应用程序密钥

在ChirpStack中启用JEDI Pro SSE的HTTP集成

在ChirpStack集成的HTTP 集成 选项卡中选择“Add”

将编组程序设置为“JSON”,并将端点设置为运行JEDI Pro SSE的机器的IP地址,即“http://192.168.1.101:8090”。确保ChirpStack HTTP集成和JEDI Pro SSE数据收集器配置中的端口号(在本例中为8090)相同。它应该是一个唯一的、未使用的端口号(不是80、8080等)。

设置JEDI Pro SSE数据采集器

在JEDI Pro SSE上显示SenseCAP LoRa传感器数据

温度/湿度和光强度SenseCAP传感器的示例数据仪表板

结论

Machinechat的JEDI Pro SSE应用软件、ChirpStack LoRaWAN网络服务器和Seeed的SenseCAP LoRa硬件相结合,形成了一个强大的基于边缘的物联网无线传感器网络,而不需要云连接或互联网连接。

参考文献