描述
這專案使用現成的硬體和軟體建立一個專用 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 感測器網路。
硬體
- Seeed Odyssey 藍 x86 mini PC
四核心 Celeron J4105 mini PC 128GB 外置 SSD - Seeed SenseCAP 戶外閘道器 - LoRaWAN US915MHz
SenseCAP LoRaWAN 閘道器基於 LoRaWAN 協議,適用於低功耗、遠距離的環境資料擷取和監控。 - Seeed SenseCAP 無線空氣溫濕度感測器 - LoRaWAN US915MHz
SenseCAP 無線空氣溫濕度感測器是電池供電的,在 IP66 外殼中測量大氣溫度和濕度。 - SenseCAP 無線光強度感測器 - LoRaWAN US915MHz
SenseCAP 無線光強度感測器是電池供電的,在 IP66 外殼中測量環境光強度。
軟體
- 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 物聯網感測器網路的框圖如下所示。
此網絡的組成要素是:
- JEDI Pro SSE — JEDI Pro SSE 應用軟體能夠收集感測器數據,並能夠透過儀表板、規則、動作、通知和網路監控對其進行操作,並安裝在 Ubuntu 伺服器上。JEDI Pro SSE 有內建的資料擷取器,可與 ChirpStack 網路伺服器無縫通信,從 Seeed 的 SenseCAP 感測器接收 LoRaWAN 資料。
- ChirpStack 網路伺服器 — ChirpStack 是一個開源的 LoRaWAN 網路伺服器,安裝在 Ubuntu 伺服器上,收集從 SenseCAP 網關轉送的感測器資料。ChirpStack 對資料進行重複資料刪除、解密和轉換為通用資料格式,並透過整合(包括 MQTT 和 HTTP)使其可用。ChirpStack 還提供了一個基於 web 的介面,可以快速板載和管理設備和閘道器。
- LoRaWAN 閘道器-LoRaWAN 閘道器從感測器等網路設備收集無線訊息,並透過 IP 網路(如乙太網路)轉發給網路伺服器軟體。Seeed Studio 的 SenseCAP 戶外閘道具有 IP66 外殼,並支援擴展的工作溫度範圍。
- 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.toml
和 chirpstack-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!!!”
設定 LoRa 配置
前往儀表板上的「LoRa」標籤,並將「封包調度配置」設定為指向執行 ChirpStack 的 Ubuntu 伺服器的 IP 位址。上行鏈路和下行鏈路連接埠預設為 1700,因此將設定保留為 1700。
將 SenseCAP LoRa 閘道器新增至 ChirpStack
有關向 ChirpStack 添加閘道器的詳細信息,請參閱 Connecting a gateway to ChirpStack
1 - 登入 ChirpStack GUI
使用 ChirpStack 伺服器的 IP 位址和連接埠 8080 存取登入畫面:
範例:http://192.168.1.23:8080
(注意:預設憑證是 使用者名稱:admin 密碼:admin )
2 - 新增網路伺服器
2 - 創建組織
命名組織並勾選「閘道器」框
3 - 建立服務設定檔
名稱服務設定檔和複選框
4 - 建立閘道器
命名閘道器,輸入閘道器 ID 並選擇網路伺服器
(註:閘道器 ID 為 EUI:來自 SenseCAP 閘道器標籤)
5 - 建立設備設定檔
命名設備設定檔並選擇為此設定顯示的值
6 - 在裝置設定檔中編輯編解碼器
編輯 CODEC 以使用 machinechat 文章中的 CODEC Seeed SenseCAP LoRaWAN ChirpStack CODEC
將 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 Integration
標籤中選擇「新增」
將編組器設定為 「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 硬體相結合,形成強大的基於邊緣的 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