LoRaWAN

LoRaWAN のドライバーの手引き。内蔵の Basics Station のネットワークサーバー、ゲートウェイの証明書、センサーとコンセントレーターの登録、そしてペイロードのアドレス指定。

Markdown で表示

LoRaWAN のドライバーは、Ganter Lab を小さな LoRaWAN のネットワークサーバーにします。ほとんどのドライバーとは関係の向きが逆です。ステーションのほうからセンサーに手を伸ばすのではなく、ゲートウェイのほうが Ganter Lab につなぎ、センサーはそのゲートウェイを通じてアップリンクとして読み取りを届けます。Ganter Lab は Semtech の LoRa Basics Station のプロトコルを話すネットワークサーバーを内蔵しているので、Basics Station のファームウェアで動くゲートウェイなら、このステーションを自分の LNS として使えます。

内蔵のサーバーは、アプリの起動時ではなく、有効な LoRaWAN の機器の 1 つ目が動いている connector に読み込まれたときに始まり、最後の 1 つが削除されるか無効になったときに止まります。センサーもコンセントレーターも設定されていなければ、そのポートで待ち受けるものは何もありません。1 つ追加すれば、アプリケーションを再起動せずに戻ってきます。

このドライバーの下の機器はそれぞれ、パネルで選ぶ2 つの登録のどちらかです。

  • センサー。自分の DevEUI で見分けられ、アプリケーションキーで受け入れられます。そのタグが、アップリンクのペイロードを読み解きます。
  • 無線コンセントレーター(ゲートウェイ)。自分の基地局の EUI で見分けられ、一覧から選んだ無線の地域に登録されます。自分のタグは持ちません。機器がセンサーとして登録されるまで、そのページのタグを追加は灰色のままで、理由を示します。

センサーだけでなく、コンセントレーターも登録してください。Basics Station のコンセントレーターは、つないだらすぐ自分の無線の構成を求め、答えをもらうまで何も中継しません。ですから、その基地局の EUI を一度も見たことのないステーションは、接続そのものは健全に見えるのに、その向こうのセンサーをすべて値なしのまま置き去りにします。答えは、選んだ地域からここで組み立てられます。貼り付ける設定の文はありません。

ゲートウェイの準備

このステーションへ LoRa Basics Station でつないでくるのはゲートウェイのほうで、出荷時にはステーションがどこにあるかを知りません。無線コンセントレーターとして登録した機器のページにはそれぞれ「ゲートウェイの準備」カードがあり、ゲートウェイの Basics Station 設定に入力する値を、このステーションに合わせて示します。

ゲートウェイに設定するもの カードが示すもの
LNS のアドレス (Basics Station の tc.uri) wss://<アドレス>:5001 を、まずこのステーションの名前によるアドレスで示し (組み込みの OPC UA サーバーの設定の「ネットワーク名」。空のあいだはコンピューター名)、続いてこのステーションがネットワーク上に持つ IPv4 アドレスごとに 1 つずつ、それぞれコピーボタン付きで示します。サーバー名を確認するゲートウェイ (Basics Station は初期設定で確認します。TLS_SNI) には名前によるアドレスが必要です。確認しないゲートウェイはどのアドレスでも受け入れるので、その場合はそれと同じネットワークのアドレスで足ります。
基地局の EUI コンセントレーターの基地局の EUI を、コピーボタン付きで示します。この機器がゲートウェイを登録するときの識別子です。ゲートウェイは 1 台ずつ、それぞれ自分のコンセントレーターの機器になります。空のあいだは、「接続」カードに入力するようカードが示します。
クライアント証明書 (tc.crt、鍵は tc.key) 相互 TLS です。ゲートウェイは、共通名か DNS の別名に自分の基地局の EUI を含むクライアント証明書を示します (証明書 を参照)。
信頼させるサーバー証明書 (tc.trust) このステーションのルート証明書 GanterLabConnector-<station>.pem のフルパスです。「フォルダーを開く」ボタンで、Windows のエクスプローラーにそのファイルを表示します。ボタンはステーション自身の画面で働き、ほかの機器のブラウザーでは灰色のまま理由を示します。ファイルはネットワークサーバーが初めて起動したときに書き出され、それまではカードがそう示します。

カードは、ステーションを開いてからゲートウェイが一度も接続していないあいだは開いていて、接続すると折りたたまれます。次にゲートウェイを設定するときのために、ページには残ります。Windows にインストールされたルートが証明書を保証しないゲートウェイは、最初の接続で拒否され、現場設備へのアクセスで待ちます。Semtech UDP packet forwarder のプロトコルしか話さないゲートウェイは接続できません。Basics Station のファームウェアが必要です。

このファイルは、このステーションのすべてのゲートウェイで同じで、ステーションの名前やアドレスが変わっても変わりません。Basics Station を初期設定のまま使うゲートウェイは、このステーションを受け入れます。ゲートウェイの設定で無効にするものはありません。

以前のバージョンのファイルを渡されたゲートウェイには、このファイルを tc.trust として一度インストールする必要があります。 このバージョンの最初の起動時に、以前のファイルを持っている可能性のあるゲートウェイがあるステーションでは、その起動のあいだだけ、カードに「このステーションのファイルが変わりました」という通知が出ます。通知は注意喚起であって、手順そのものではありません。すでにゲートウェイがあったステーションでは、カードに通知が出てもいなくても、新しいファイルをすべてのゲートウェイに一度インストールしてください。

ネットワークサーバーとポート

項目 値
プロトコル LoRa Basics Station(WebSocket、JSON)
待ち受け すべてのインターフェース、TCP のポート 5001、TLS のみ
ゲートウェイのアドレス wss://<station-address>:5001
探索の endpoint Basics Station の router-info の要求も、同じ待ち受けで受けます
データの接続 WebSocket のパスの最後の部分にあるゲートウェイの基地局の EUI で宛先が決まります

待ち受けは必ず TLS です。暗号化を切る設定はありません。平文の HTTP の待ち受けは、loopback 以外では拒否されます。loopback はプラントネットワークからは届かず、プロセス内の試験のためだけにあります。

証明書

受け入れは相互の TLS で行います。サーバーは自分の証明書で自分が誰かを示し、ゲートウェイもそれぞれクライアントの証明書で自分が誰かを示さなければなりません。

サーバー証明書。ネットワークサーバーは、このステーション自身のルートで署名された証明書を差し出します。これは OCPP のセントラルシステムが使うものと同じルートです。ルートはプロファイルごとに一度、どちらかのサーバーが初めて起動したときに作られ、アプリのデータフォルダーに保存されます。

  • GanterLabConnector.pfx:ua\pki\own\private の下にある秘密鍵です。無作為のパスワードで暗号化され、そのパスワード自身が Windows のユーザーごとに保護されている(DPAPI)ので、ほかの場所にコピーしたこの 2 つの組は誰にも開けません。
  • GanterLabConnector-<station>.pem:ua\pki\station の下にある、公開のルート証明書です。このステーションを信頼させるためにゲートウェイへ tc.trust として入れるのは、このファイルです。

ルートのサブジェクトは Ganter Lab Connector (<station>) で、<station> は作られた日のネットワーク名です。期限は切れません。公開のほうを各コンセントレーターに一度、手で入れる仕組みなので、期限の切れるルートは、その記念日にセンサーのネットワークを丸ごと止めてしまいます。拒否されるのはコンセントレーターの側で、このステーションからは何も見えず、戻すにはコンセントレーターを 1 台ずつ訪ねることになります。期限の警告も更新のコマンドもありません。更新するものがないからです。ドライバーのページの「ステーションのルート証明書」カードは、ルートが持つ日付を表示として見せ (「有効期限」)、公開ファイルのフルパスと、それを Windows のエクスプローラーに表示する「フォルダーを開く」ボタンも示します (ボタンはステーション自身の画面で働き、ほかの機器のブラウザーでは灰色のまま理由を示します)。

このルートの下でネットワークサーバーが差し出す証明書は、ステーションのネットワーク名 (組み込みの OPC UA サーバーの設定の「ネットワーク名」。空のあいだはコンピューター名)、localhost、ステーションのすべての IPv4 アドレスを名前として持つので、サーバー名を確認するゲートウェイも受け入れます。コンピューターの名前、ネットワーク名、ステーションのアドレスを変えても、ルートは置き換わりません。その下の証明書だけが自動で発行し直され、コンセントレーターでする作業はありません。

ルートが作り直されるのは、保存されているものをもう開けないとき (たとえば、別の Windows アカウントで書かれた場合) だけです。その場合と、コンセントレーターに以前のファイルを渡した可能性のあるステーションでこのバージョンが初めて起動したときは、ドライバーのページが 1 度だけ、「コンセントレーターに新しい証明書ファイルが必要です」の下で、すべてのコンセントレーターに新しい GanterLabConnector-<station>.pem を tc.trust として渡す必要があると述べます。渡すまで、それらは接続できません。

ゲートウェイのクライアント証明書。ゲートウェイは TLS の握手のときにクライアントの証明書を差し出さなければなりません。それのない握手は、データが 1 つも流れる前に落とされます。証明書には次のことが要ります。

  1. 次の 2 つのどちらかで信頼されていること。この Windows の機械の上で、そこにインストールされたルートまで正しい連鎖を組み立てられること。または、このドライバーのページの現場設備へのアクセスで、その証明書そのものを承認してあること(下を参照)。どちらの場合も、有効期間の内側にあることが要ります。検査に落ちた接続は拒否され、どの検査に落ちたかを診断ログが記録します。
  2. その主体の一般名か、DNS のサブジェクト代替名に、そのゲートウェイの基地局の EUI を載せていること。識別子は値として読まれるので、AABBCCDDEEFF0011、AA-BB-CC-DD-EE-FF-00-11、AA:BB:CC:DD:EE:FF:00:11 はどれも同じ基地局を指します。
  3. データの接続が名乗るのと同じ基地局を名指ししていること。接続のアドレスにあるものと違うゲートウェイを名乗る証明書は拒否されます。

現場設備へのアクセス

証明書が自己署名だったり、メーカー自身の認証局が発行したものだったりして、Windows にインストールされたどのルートもその証明書を保証しないゲートウェイでも、そのルートをこのコンピューターにインストールする必要はありません。最初の接続は拒否され、その証明書は、LoRaWAN のドライバーのページの最後にある現場設備へのアクセスで、判断を待ちます。OPC UA のドライバーのページにあるのと同じカードです。

グループ 並ぶもの できること
承認待ち 拒否された証明書の 1 つ 1 つが、それが持つ基地局の EUI の下に並びます。SHA-256 のフィンガープリント、最後に試した日時と回数、詳細(主体、発行者、ドメイン名、有効期間)が出ます。 承認すると、ゲートウェイの次の接続からその証明書を受け入れます。遮断すると、ここにふたたび並べることなく拒否し続けます。承認待ちの証明書をすべて破棄は、何も承認も遮断もせずに一覧を空にします。
承認した現場設備 承認した証明書と取り込んだ証明書が、誰がいつ判断したかとともに並びます。 承認を取り下げると、ゲートウェイの接続を閉じ、その証明書を一覧に戻します。証明書を取り込むと、ゲートウェイの公開証明書を最初の接続より前に承認します。
遮断した現場設備 遮断した証明書が並びます。遮断した証明書は、Windows が信頼していても拒否されます。 遮断を解除すると、承認はせずに、その証明書を一覧に戻します。

承認するのは証明書 1 つ 1 つで、それに署名した認証局ではありません。そのため、同じメーカーの 2 台目のゲートウェイは、それ自身の承認を待ちます。承認する前に、フィンガープリントをゲートウェイが示すものと照合してください。承認しても、その証明書がどのゲートウェイかは変わりません。受け入れるのは、その証明書が持つ基地局の EUI の下だけで、有効期間の内側だけです。Windows がすでに信頼している証明書はこれまでどおり受け入れられ、ここには出ません。何かが自動で承認されることはありません。

判断はステーションのデータフォルダーの ua\pki\lorawan に保存され、再起動しても残ります。操作が描かれるのは Connector を構成できるロールだけで、操作が効くのはステーション自身のウィンドウの中だけです。別の機器のブラウザーはカードを読むだけで変えられず、エージェントのツールが証明書を承認することもありません。一覧に並ぶ承認待ちの証明書は 100 件までです。いっぱいになると、新しい証明書は引き続き拒否されますが一覧には並ばず、カードがそのことを伝えます。

接続の項目

LoRaWAN の機器は、自分のホストもポートも持ちません。センサーには、その無線の通信を運ぶコンセントレーターを通じて届きますし、コンセントレーターのほうがこのステーションに届きます。パネルは、まず登録の選択を見せ、その次に、その登録が必要とする項目を見せます。

項目 意味 形式 既定
登録名 この機器が 2 つの登録のどちらであるか。センサーか無線コンセントレーターです。切り替えると下の項目が消えます。アプリケーションキーと地域は同じものではないからです。 センサー/無線コンセントレーター センサー
センサーの DevEUI そのセンサーの DevEUI で、参加の要求で名乗る識別です。 16 進数 16 桁。区切りなし(8899AABBCCDDEEFF)、ダッシュ入り(88-99-AA-BB-CC-DD-EE-FF)、コロン入りのどれでも。 空
アプリケーションキー(センサー) そのセンサーの OTAA のアプリケーションキー(AppKey)です。参加を認証し、セッションの鍵を導きます。 区切りのない 16 進数ちょうど 32 桁。 空
基地局の EUI(コンセントレーター) そのコンセントレーターの基地局の EUI で、クライアントの証明書が載せていなければならない識別子であり、接続のアドレスに置く識別子でもあります。 16 進数 16 桁。上のどの書き方でも。 空
無線の地域(コンセントレーター) そのコンセントレーターが立っている場所。接続のときにこのステーションが渡すチャネル、データレート、受信の窓を決めます。一覧から選ぶもので、自由記述はありません。 ヨーロッパ 868 MHz、アメリカ合衆国 915 MHz、オーストラリア 915 MHz、アジア 923 MHz、中国 470 MHz(改訂 1)、中国 470 MHz(改訂 2) ヨーロッパ 868 MHz
送信がないまま許す最長時間(センサー) このセンサーが黙っていてよい秒数で、これを過ぎると、保存された値は読み取りとして数えられなくなります。0 なら期限切れを切ります。下を参照してください。 0 以上 3600

DevEUI(センサー)または基地局の EUI(コンセントレーター)がまだ空の機器、たとえば追加したばかりの機器は、それを待ちます。ステーションはその機器をネットワークサーバーに登録せず、接続も試みません。ツリーのその行とページ上部の通知は、エラーを出す代わりに「DevEUI がまだ入力されていません」または「基地局の EUI がまだ入力されていません」と表示し、再接続 には開き直すものがなく、稼働状態はまだ不明のままです。接続のカードで識別子を入力すると、ステーションがその機器を登録します。識別子を空のまま保存され、その EUI(16 進数 16 桁、区切りなし)で名付けられた機器は待たず、これまでどおり名前で登録されます。

アプリケーションキーは秘密であり、ステーションもそのように扱います。パネルはそれを点で隠し、入力した内容を確かめるあいだだけ見せる パスワードを表示 のチェックボックスを添えます。設定のデータベースは、入力した Windows アカウントのもとで保護して保存します。そして診断ログにも、ドライバーが読むアドレスにも現れません。そのアドレスは DevEUI だけを運びます。別の Windows アカウントで同じ設定を開くと、この鍵は一緒には開きません。欄は空で戻り、「この Windows アカウントでは読み取れません。入力したコンピューターと Windows アカウントでしか開けないためです。ここでもう一度入力してください。」と伝え、キーをもう一度入力するまでセンサーは参加しなくなります。バックアップで持ち出した設定はキーを保ちます。バックアップは、あなたが与えたパスワードで封をされているからです。

参加は OTAA だけです。センサーはコンセントレーターを通じて無線で参加し、ネットワークサーバーは設定した AppKey でそれに答えます。どの機器も持っていない DevEUI からの参加の要求は拒否され、診断ログに残ります。個体設定による有効化(ABP、あらかじめ用意したセッションの鍵)には対応していません。センサーのセッションはこのステーションのもので、参加を中継したコンセントレーターのものではありません。届く範囲にコンセントレーターが複数あれば、アップリンクはそれを聞き取ったものを通って届き、落ちたり外されたりしたコンセントレーターがセンサーを連れて行くことはありません。

機器を無効にするか削除すると、再起動を待たずにその場でネットワークサーバーから外れます。鍵が登録から消え、このステーションで保持していたセッションが解放され、次の参加は拒否されます。コンセントレーターを無効にするか削除すると、その接続もすぐに閉じられ、それが中継していたセンサーはセッションを保ちます。

サーバーが受け入れない登録は、そもそも行われません。入力されているのに 16 進数 16 桁になっていない DevEUI や基地局の EUI、入力されていないか 16 進数 32 桁になっていないアプリケーションキー、このステーションが設定できない地域がそれにあたります。その機器は接続していないものとして読まれ、ツリーのその行と、ページの見出しの下の赤い文字が、拒否された項目とそこに入れるべきものを名指しし、診断ログにも同じ行が残ります。その機器のためにネットワークサーバーが起動されることはなく、ステーションは同じ登録をもう一度試しません。機器を戻すのはその項目を直すことで、再接続は同じ拒否で答えます。

コンセントレーターの稼働状態

コンセントレーターはタグを持たないので、そこにいるかどうかを読み取りで知ることはできません。その稼働状態、つまりツリーのその行の点と、ドライバーのページの 稼働状態 の列は、そのゲートウェイがこのステーションにつながっているかどうかです。

状況 稼働状態
基地局の EUI がまだ空 まだ不明:何も登録されていません
登録済みで、ゲートウェイがまだつながっていない(たとえば、その証明書がまだ承認を待っている) オフライン
ゲートウェイがつながっている オンライン
ゲートウェイが落ちた:止まった、電源が抜けた、ネットワークから切り離された オフライン(またつながるまで)
無効 無効

コンセントレーターへの変更を保存したあと、または Connector が起動したあと、最大 10 秒間は まだ不明 と読まれます。登録し直すとゲートウェイの接続が閉じられ、ゲートウェイがつなぎ直すまで少しかかるからです。センサーはコンセントレーターの状態にかかわらず、自分の読み取りから自分の稼働状態を保ちます。範囲内にコンセントレーターが複数あれば、1 台が落ちても残りが届け続けます。

コンセントレーターに送られるもの

登録済みのコンセントレーターが版の握手を終えると、このステーションはその地域の無線の構成で答えます。周波数の範囲、データレートと、そのうちどれがダウンリンク専用か、そしてその地域の既定のチャネルの計画です。基地局の EUI がここに登録されていなければ何も送られず、どの基地局が尋ねてきたのか、それが登録されていないことを診断ログが述べます。コンセントレーターがつないでいるのに、その向こうのセンサーが 1 つも値を伝えないときに探すのは、その記録です。

読み出し周期の項目はありません。LoRaWAN は押し出し型です。いつアップリンクするかはセンサーが決め、サーバーは機器ごとにいちばん新しい読み解いたペイロードを保ち、タグの値は 1 秒の決まった周期でそのキャッシュから更新されます。

ですから、まだアップリンクしていないセンサーには、失敗した読み取りではなく、読み取りがありません。そのタグは空のままで、機器はオフラインになるのではなく、まだ何も観測していないと伝え、失敗は診断ログに残りません。最初のアップリンクを待つのは、プロトコルが働いている姿です。センサーが実際に送ったペイロードの中で何にも解決しないアドレスは別の話で、そのとおり読み取りの失敗として伝えられます。

センサーが黙ったとき

センサーを読みにいくものが何もないので、最後に送られたペイロードは、次のものが来るまでそのキャッシュに残ります。放っておくと、電池の切れたセンサーは、ステーションが動いているかぎり同じ数値を良好な読み取りとして出し続け、真ではなくなった値でグラフ、履歴、警報を養うことになります。

ですから、センサーはそれぞれ自分のパネルに、秒で表した送信がないまま許す最長時間を持っています。既定は 3600 秒、つまり 1 時間で、よくあるセンサーの 10 分から 30 分の周期を余裕をもって覆います。もっとまれにしか伝えないセンサーは、自分の値を上げてください。その期限を過ぎると、次のようになります。

  • そのタグは値を運ぶのをやめ、最後のアップリンクを繰り返す代わりに品質の悪い状態を出します。
  • 機器のパネルが、そのセンサーが最後に送信した時刻を述べるので、どれくらい黙っているかが分かります。

この項目を 0 にすると、そのセンサーの期限切れを切ります。最後のアップリンクが、いつまでも良好として読まれ続けます。ほかは何も変わりませんし、保存されたペイロードが捨てられることもありません。

タグのアドレス指定

LoRaWAN のタグは、読み解いたアップリンクのペイロードの中のバイトをアドレスに取ります。自由記述のアドレスはありません。「信号源」のカードは、Cayenne LPP のチャネルと型で指定するのチェックで切り替わる 2 つの方式で、型付きの項目を出します。

項目 意味 受け付ける値 既定
Cayenne LPP のチャネルと型で指定する オフのとき、チャネルの項目はただのバイトのオフセットです。オンのとき、ペイロードから Cayenne LPP のチャネルと型の組を探します。 オン/オフ オフ
チャネル / ペイロードのオフセット オフセットの方式では、値が始まる 0 起算のバイトのオフセット。LPP の方式では、探す LPP のチャネル番号。 0 以上 0
LPP の型コード LPP の方式でだけ使います。チャネルのバイトに続く Cayenne LPP のデータ型のバイトです(たとえば温度なら 103)。値のバイトは、一致したチャネルと型の組のすぐ後ろから読み、いくつものペイロードが一致するときは、いちばん新しいものが勝ちます。 0 以上 0
読み取り長(バイト、空欄なら自動) 値を作るペイロードのバイト数。空欄ならデータ型から決めます。Boolean と Byte は 1、Int16 は 2、Int32 と Float は 4、String は 16 です。 1 以上、または空欄 空欄
ビットマスク(16 進数。空欄ならなし) ほかの何よりも先に、生のバイトに AND で当てる 16 進数のマスクです(たとえば状態のビットを落とす 0x0FFF)。0x の接頭辞は任意で、桁数が奇数のマスクは左に 0 を足します。マスクは読み取り長とちょうど同じバイト数を覆わなければならず、そうでなければ読み取りがエラーになります。 16 進数の文字列か空欄 空欄
上位バイトを先に(MSB first、ビッグエンディアン) そのペイロードが値をビッグエンディアンで運ぶと宣言します。読んだバイトは、変換の前に並びを逆にします。ここにワードの順の項目はありません。長さの決まっていないペイロードには、入れ替える 16 ビットのワードがないからです。 オン/オフ オフ
係数(空欄ならなし) ネットワークサーバーが読み解いた直後、値がタグ自身の変換経路に入る前に当てる、バス側の係数です。数値の型にだけ効きます。入力したその場で 0 は拒否されます(「係数が 0 だと、すべての読み値が 0 になります。」)。そのタグのすべての読み取りを、良好な品質のまま 0 として伝えてしまうからです。 0 以外の任意の数、または空欄 空欄

読み取りのときの処理の順序は、アドレスの示すバイトを取る → ビットマスクを当てる → 上位バイトを先にがオンなら並びを逆にする → タグのデータ型に変換する → 係数を当てる(数値の型)、です。

11 バイトのペイロードのオフセット 2 に、ビッグエンディアンの Int16 の温度を運ぶセンサーの例です。

  • オフセットの方式:チャネル / オフセットは 2、読み取り長は 2、上位バイトを先にはオン。
  • LPP の方式で、同じセンサーがチャネル 1、型 103 で Cayenne LPP を話す場合:LPP のチェックを入れ、チャネルは 1、型コードは 103、読み取り長は 2。

対応するデータ型

型 読むバイト数(自動) バイトの読み解き方
Boolean 1 0 は false、それ以外は true
Byte 1 符号なしのバイト
Int16 2 符号付きの 16 ビット整数
Int32 4 符号付きの 32 ビット整数
Float 4 IEEE 754 の単精度
String 16 読み取り長の分の UTF-8 の文字列

書き込みと機器検出

LoRaWAN のタグは読み取り専用です。値はセンサーのアップリンクからしか来ませんし、アクセスの項目に書き込める選択肢はなく、ランタイムは成功を装うのではなく書き込みを拒否します。ダウンリンクは、ネットワークの通信としてはプロトコルの中に存在しますが(参加の受理、MAC のコマンド)、タグの値の書き込みとしては存在しません。

このドライバーに機器検出のスキャンはありません。コンセントレーターは基地局の EUI と地域で、センサーはそれぞれ DevEUI と AppKey で、手で追加してください。機器を追加する全体の流れは Connector のページにあります。