MachinechatとSeeed SenseCAPによるプライベートLoRaWANセンサネットワークの構築

概要

このプロジェクトでは、既製のハードウェアとソフトウェアを使用して、プライベート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センサネットワークの実装に必要なクラウド要素は一切ありません。

ハードウェア

ソフトウェア

  • 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センサネットワークのブロック図は以下のとおりです。

ネットワークの要素は以下の通りです。

  1. JEDI Pro SSE - JEDI Pro SSEアプリケーションソフトウェアは、センサデータの収集と、ダッシュボード、ルール、アクション、通知、ネットワーク監視によるアクションを可能にするもので、Ubuntuサーバにインストールされています。JEDI Pro SSEはChirpStackネットワークサーバとシームレスに通信するデータコレクタを内蔵しており、SeeedのSenseCAPセンサからLoRaWANデータを受信します。
  2. ChirpStackネットワークサーバ - ChirpStackは、UbuntuサーバにインストールされたオープンソースのLoRaWANネットワークサーバで、SenseCAPゲートウェイから転送されたセンサデータを収集します。ChirpStackは、データの重複排除、復号化、共通データフォーマットへの変換を行い、MQTTやHTTPなどの統合を介して利用できるようにします。また、ChirpStackは、デバイスやゲートウェイを迅速に搭載し、管理するためのWebベースのインターフェースを提供します…
  3. LoRaWANゲートウェイ - LoRaWANゲートウェイは、センサなどのネットワーク機器から無線情報を収集し、EthernetなどのIPネットワークを使用してネットワークサーバのソフトウェアに転送します。IP66のエンクロージャに納められたSeeed StudioのSenseCAP室外ゲートウェイは、広い動作温度範囲をサポートしています。
  4. 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!!!」です。
image

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
image
(注:デフォルトの認証情報は、ユーザー名: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無線センサネットワークが実現できます。

参考資料




オリジナル・ソース(English)