使用 Machinechat 和 Seeed SenseCAP 建立一個專用 的 LoRaWAN 感測器網絡

描述

這專案使用現成的硬體和軟體建立一個專用 LoRaWAN 物聯網感測器網路。詳細介紹了軟體包括 Machinechat 的 JEDI Pro SSE(Seeed Studio Edition)應用軟體和 ChirpStack LoRaWAN 網路伺服器應用程式。硬體包括 Seeed 的 Odyssey x86 mini PC、一個 SenseCAP 戶外 LoRaWAN 閘道器和兩個戶外 SenseCAP 環境感測器。

image

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 Spread Spectrum)技術的擴頻調變技術。 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 物聯網感測器網路的框圖如下所示。

image

此網絡的組成要素是:

  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 堆疊元件使用的資料庫。建議修改使用者名稱和密碼。請記住在更新 chirpstack-network-server.tomlchirpstack-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 安裝軟體 :

ChirpStack 閘道橋設定檔位於 /etc/chirpstack-gateway-bridge/chirpstack-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 中找到。

(注意:chirpstack-network-server.toml 文件基於位於目錄 /etc/chirpstack-network-server/examples 中的美國版本 chirpstack-network-server-us915​​.toml 文件,並按以下方式進行修改)

更新設定後,您需要重新啟動 ChirpStack Network Server 並驗證沒有錯誤。

啟動 ChirpStack Network Server 服務 :

sudo systemctl start chirpstack-network-server

將 ChirpStack 網路伺服器服務設定為在引導時啟動:

sudo systemctl enable chirpstack-network-server

列印 ChirpStack 網路伺服器日誌輸出以檢查錯誤:

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

US915 設定範例子頻段 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/chirpstack-application-server/chirpstack-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 替換為安全金鑰!
您可以使用以下命令產生隨機秘密

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 代理的職責。對於這個項目,Mosquitto 是 MQTT 代理,基本的安全等級是設定使用者名稱和密碼(這在 MQTT 驗證和授權 - ChirpStack 開源 LoRaWAN® 網路伺服器 中有詳細描述) 。

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/mosquitto/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/mosquitto/conf.d/auth.conf 的新設定文件,其配置如下:

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

4 - 更新 ChirpStack 設定文件

編輯三個 ChirpStack 設定檔 /etc/chirpstack-gateway-bridge/chirpstack-gateway-bridge.toml /etc/chirpstack-network-server/chirpstack-network-server.toml /etc/chirpstack-application-server/chirpstack-application-server.toml 以新增憑證:
chirpstack-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 位址,然後到 ipadress:8000。預設用戶是 “sensecap”,密碼是 “sensecap!!!”

image

設定 LoRa 配置
前往儀表板上的「LoRa」標籤,並將「封包調度配置」設定為指向執行 ChirpStack 的 Ubuntu 伺服器的 IP 位址。上行鏈路和下行鏈路連接埠預設為 1700,因此將設定保留為 1700。

image

將 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 - 新增網路伺服器

image

2 - 創建組織

命名組織並勾選「閘道器」框

image

3 - 建立服務設定檔

名稱服務設定檔和複選框

image

4 - 建立閘道器

命名閘道器,輸入閘道器 ID 並選擇網路伺服器
(註:閘道器 ID 為 EUI:來自 SenseCAP 閘道器標籤)

image

5 - 建立設備設定檔

命名設備設定檔並選擇為此設定顯示的值

image

6 - 在裝置設定檔中編輯編解碼器

編輯 CODEC 以使用 machinechat 文章中的 CODEC Seeed SenseCAP LoRaWAN ChirpStack CODEC

image

將 SenseCAP LoRa 感測器添加到 ChirpStack

1 - 創建應用程式

命名應用程式並選擇為此設定顯示的服務設定文件

image

2 - 新增裝置(SenseCAP 感測器)

新增終端設備需要輸入 EUI(印在產品標籤上)和必須在線上檢索的應用程式金鑰;請參閱 https://sensecap-docs.seeed.cc/pdf/Guide-for-SenseCAP-Adaption-to-3rd-Party-Gateways-Servers-V1.2.pdf 的第 4.1 節

image

在 ChirpStack 中建立設備

image

為裝置新增應用程式金鑰

image

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

在 ChirpStack 整合的 HTTP Integration 標籤中選擇「新增」

image

將編組器設定為 「JSON」,並將端點設定為執行 JEDI Pro SSE 的電腦的 IP 位址,即 “http://192.168.1.101:8090”。確保 ChirpStack HTTP 整合和 JEDI Pro SSE 資料收集器配置中的連接埠號碼(本例中為 8090)相同。它應該是唯一的、未使用的連接埠號碼(不是 80、8080 等)

image

設定 JEDI Pro SSE 資料收集器

image

在 JEDI Pro SSE 上顯示 SenseCAP LoRa 感測器數據

溫度/濕度和光強度 SenseCAP 感測器的數據儀表板範例

image

結論

Machinechat 的 JEDI Pro SSE 應用軟體、ChirpStack LoRaWAN 網路伺服器和 Seeed 的 SenseCAP LoRa 硬體相結合,形成強大的基於邊緣的 IoT 無線感測器網絡,無需任何雲端連接或互聯網連接。

參考

Seeed - Odyssey 藍 x86 mini PC
Seeed - SenseCAP 戶外閘道器 - LoRaWAN US915MHz
Seeed - SenseCAP 無線光強度感測器 - LoRaWAN US915MHz
Seeed - SenseCAP 無線空氣溫濕度感測器 - LoRaWAN US915MHz
Seeed - Guide for SenseCAP Adaption to 3rd Party Gateways Servers
Machinechat 的 JEDI One 物聯網平台入門
Machinechat - Building a private, edge-based LoRaWAN IoT sensor network