概要
このプロジェクトでは、既製のハードウェアとソフトウェアを使用して、プライベートLoRaWAN IoTセンサネットワークを構築することについて詳述しています。 ソフトウェアは、Machinechatのアプリケーションソフトウェア「JEDI Pro SSE(Seeed Studio Edition)」と、LoRaWANネットワークサーバアプリケーション「ChirpStack」で構成されています。ハードウェアは、SeeedのOdyssey x86 Mini PC、SenseCAP屋外用LoRaWANゲートウェイ、および2台のSenseCAP屋外用環境センサで構成されています。
MachinechatとChirpStackのアプリケーションは、Ubuntu Linuxが動作するOdyssey Mini PCにインストールされます。プライベートLoRaWANセンサネットワークの実装に必要なクラウド要素は一切ありません。
ハードウェア
-
Seeed Odyssey Blue x86 Mini PC
クアッドコアCeleron J4105 Mini PC、128GB外付けSSD搭載 -
Seeed SenseCAP屋外用ゲートウェイ - LoRaWAN US915MHz
SenseCAP LoRaWANゲートウェイは、LoRaWAN®プロトコルに基づき、低電力、長距離の環境データ収集とモニタリングに適用されます。 -
Seeed SenseCAPワイヤレス気温および湿度センサ - LoRaWANUS 915MHz
SenseCAPワイヤレス気温および湿度センサは電池駆動で、IP66のエンクロージャに納められ気温と湿度を測定します。 -
SenseCAP ワイヤレス光度センサ - LoRaWAN US915MHz
SenseCAPワイヤレス光度センサは電池駆動で、IP66のエンクロージャに納められ光の強さを測定します。
ソフトウェア
-
JEDI Pro SSE
IoTデータの収集、可視化、モニタリング、およびデータストレージのためのアプリケーションソフトウェアで、IoTソリューションに組み込むことができます。 -
ChirpStack
ChirpStackは、オープンソースのLoRaWANネットワークサーバスタックで、LoRaWANネットワーク用のコンポーネントをオープンソースで提供しています。モジュラーアーキテクチャにより、既存のインフラストラクチャに統合することが可能です。 -
Ubuntu LTS18.04.6
サーバ、デスクトップ、クラウド、開発者、モノのためのセキュアなエンタープライズLinux。バージョン - Ubuntu 18.04. 6 LTS (長期サポート)
背景
LoRaは、Semtechが開発した長距離・低消費電力の無線技術で、CSS(チャープスペクトル拡散)技術から派生したスペクトラム拡散変調方式を採用しています。 LoRaWAN®は、LoRa Alliance®が管理する相互運用性のための規格です。LoRaデバイスとLoRaWAN規格は、長距離、低消費電力、安全なデータ伝送など、無線センサネットワークアプリケーションに多くの利点と機能を提供します。
複数のネットワーク事業者がクラウドベースのLoRaWANネットワークをグローバルに提供しており、お客様はこれに加入し接続することができます。また、お客様自身がエッジベースのプライベートなLoRaWAN長距離IoTセンサネットワークを構築することも可能です。プライベートネットワークの利点は、エンドツーエンドによるデータコントロールとプライバシー維持、ソフトウェアやインフラのアップデートやアップグレードの制御ができ、インターネット接続の必要がなく、また定期的なサービス/サブスクリプションネットワーク料金も不要です。
インプリメンテーション
今回のプロジェクトでは、Seeedの屋外用LoRaWANゲートウェイと、同社の電池駆動式屋外センサ2台をLoRaハードウェアとして使用しました。サーバハードウェアは、Ubuntu LTS18.04が動作するSeeedのOdyssey Mini-PCで構成されています。Odyssey Mini-PCには、MachinechatのJEDI Pro SSEソフトウェアとChirpStackネットワークサーバがインストールされています。LoRaWANゲートウェイとUbuntuサーバは、ともに同じEthernetネットワークに接続されています。実装したプライベートLoRaWAN IoTセンサネットワークのブロック図は以下のとおりです。
ネットワークの要素は以下の通りです。
- JEDI Pro SSE - JEDI Pro SSEアプリケーションソフトウェアは、センサデータの収集と、ダッシュボード、ルール、アクション、通知、ネットワーク監視によるアクションを可能にするもので、Ubuntuサーバにインストールされています。JEDI Pro SSEはChirpStackネットワークサーバとシームレスに通信するデータコレクタを内蔵しており、SeeedのSenseCAPセンサからLoRaWANデータを受信します。
- ChirpStackネットワークサーバ - ChirpStackは、UbuntuサーバにインストールされたオープンソースのLoRaWANネットワークサーバで、SenseCAPゲートウェイから転送されたセンサデータを収集します。ChirpStackは、データの重複排除、復号化、共通データフォーマットへの変換を行い、MQTTやHTTPなどの統合を介して利用できるようにします。また、ChirpStackは、デバイスやゲートウェイを迅速に搭載し、管理するためのWebベースのインターフェースを提供します…
- LoRaWANゲートウェイ - LoRaWANゲートウェイは、センサなどのネットワーク機器から無線情報を収集し、EthernetなどのIPネットワークを使用してネットワークサーバのソフトウェアに転送します。IP66のエンクロージャに納められたSeeed StudioのSenseCAP室外ゲートウェイは、広い動作温度範囲をサポートしています。
- LoRaWANセンサ - Seeed StudioのSenseCAPシリーズのLoRaWANセンサは、電池を内蔵し、最大3年間使用できます(1時間に1回メッセージを送信する初期設定使用時)。このプロジェクトでは、湿度・温度センサと光度センサを利用しています。
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 - 補助コンポーネントのインストール(Mosquitto MQTTブローカー、Redisデータベース、PostgreSQLデータベース)
これらの補助コンポーネントをインストールするには、パッケージ管理システムのaptを使用してください。
sudo apt install mosquitto mosquitto-clients redis-server redis-tools postgresql
2 - セキュリティをオフにし、匿名ユーザーを許可することで、初期テスト用にMosquittoを設定します。システムが稼働したら、以下のステップでMQTTセキュリティを有効にしてください。MQTT通信の安全性確保
「chirpstack.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
and 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
(注:私の場合は上記のキーサーバではうまくいかなかったので、以下を使用しました)
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/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/chirpstack-network-server/chirpstack-network-server.tomlにあり、データベースと周波数プランの設定に合わせて更新する必要があります。今回使用したUS915のサンプルは以下をご覧ください。その他の情報およびサンプルはInstalling the ChirpStack Network Server(ChirpStackネットワークサーバのインストール)を参照してください。
設定更新後、ChirpStackネットワークサーバを再起動し、エラーが発生しないことを確認する必要があります。
ChirpStackネットワークサーバを起動します。
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通信の安全性確保
MQTTの認証と権限付与はMQTTブローカーが担当するため、ChirpStackネットワークサーバおよびアプリケーションサーバは、それらを処理しません。今回のプロジェクトでは、MosquittoをMQTTブローカーとし、基本的なセキュリティレベルとして、ユーザー名とパスワードを設定します(これについては、MQTT authentication & authorization - ChirpStack open-source LoRaWAN<sup>®</sup> Network Server で詳しく解説しています)。
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の設定ファイルの更新
3つの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」タブを開き、「Packet Dispatch Configuration」が、ChirpStackが動作するUbuntuサーバーのIPアドレスを指すように設定します。アップリンクとダウンリンクのポートのデフォルトは1700なので、1700のままにしておきます。下図のように設定しますが、IPアドレスはChirpStackサーバに変更します。
ChirpStackにSenseCAP LoRaゲートウェイを追加
ChirpStackへのゲートウェイの追加に関する詳細は、Connecting a gateway to ChirpStackを参照してください。
1 - ChirpStackのGUIにログイン
ChirpStackサーバのIPアドレスと8080ポートでログイン画面を表示します。
例:http://192.168.1.23:8080
(注:デフォルトの認証情報は、ユーザー名:admin、パスワード:adminです)
2 - ネットワークサーバを追加
3 - 組織を作成
組織名を入力し、「ゲートウェイ」にチェックを入れます
4 - サービスプロファイルを作成
サービスプロファイル名を入力し、チェックボックスにチェックを入れます
5 - ゲートウェイを作成
ゲートウェイ名、ゲートウェイIDを入力し、ネットワークサーバを選択します。
(注:ゲートウェイIDは、SenseCAPゲートウェイラベルのEUI:です)
6 - デバイスプロファイルを作成
デバイスプロファイル名を入力し、このセットアップで表示される値を選択します。
7 - デバイスプロファイルのCODECを編集
CODECを編集して、machinechatの記事(Seeed SenseCAP LoRaWAN ChirpStack CODEC)のCODECを使用します。
ChirpStackにSenseCAP LoRaセンサを追加
1 - アプリケーションを作成
アプリケーションの名前を入力し、このセットアップで表示されるサービスプロファイルを選択します。
2 - デバイス(SenseCAP Sensor)を追加
エンドデバイスを追加するには、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 IntegrationsのHTTP Integration(統合)タブで「Add」を選択します。
マーシャラーを「JSON」に、エンドポイントをJEDI Pro SSEが動作しているマシンのIPアドレス、つまり 「http://192.168.1.101:8090」に設定します。ChirpStack HTTP統合とJEDI Pro SSEデータコレクタの設定において、ポート番号(この例では8090)が同じであることを確認してください。 それはユニークな未使用のポート番号である必要があります(80、8080などではありません)。
JEDI Pro SSEデータコレクタの設定をします
SenseCAP LoRaセンサのデータをJEDI Pro SSEで表示
温度/湿度およびSenseCAP光度センサのデータダッシュボード例
まとめ
MachinechatのJEDI Pro SSEアプリケーションソフトウェア、ChirpStack LoRaWANネットワークサーバ、およびSeeedのSenseCAP LoRaハードウェアの組み合わせにより、クラウド接続やインターネット接続を必要としない強力なエッジベースのIoT無線センサネットワークが実現できます。
参考資料
- Seeed - Odyssey Blue J4105 Mini PC
- Seeed - SenseCAP Outdoor Gateway - LoRaWAN US915MHz
- Seeed - SenseCAP Wireless Light Intensity Sensor - LoRaWAN US915MHz
- Seeed - SenseCAP Wireless Air Temperature and Humidity Sensor - LoRaWAN US915MHz
- Seeed - Guide for SenseCAP Adaption to 3rd Party Gateways Servers
- Getting Started with machinechat’s JEDI One IoT Platform
- Machinechat - Building a private, edge-based LoRaWAN IoT sensor network