1. 一度運用を開始したシステム。機能追加は、なぜ難しい?
一度運用を開始したシステムに対し、機能を追加する際、通常ファームアップが必要となります。
IoT化されていない機器の場合、機器が設置されている現地でのファームアップ作業が発生することから通常は対応が困難です。
また、システム運用中に任意の機器やセンサーを追加したい場合も容易に対応ができません。 そこで今回は、JavaScriptによる遠隔での機能の追加方法をご紹介します!
2. FW開発の際、機能追加を想定していなくても大丈夫!
まず、NEQTO Engineは、NEQTOの中でエッジ側のMCUに組み込まれるFWであり、デバイスや物理的なハードウェアの制御を担います。
NEQTO EngineにはJavaScript Engineが含まれており、お客様のアプリケーションをJavaScriptで開発できる特徴があります。
NEQTO Consoleは、NEQTO Engine のデバイスやハードウェアを管理・リモート制御するためのクラウドサービスです。
NEQTO Console上のJavaScriptエディターでJavaScriptの開発が可能です。

図1:NEQTO ConsoleのJavaScriptエディター画面
NEQTO Console上で、機能追加に対応したJavaScriptコードの変更が完了しましたら、『スクリプトの再ロード』を実行するだけで即座に機能追加が可能となります。 機能追加について、一台ずつ個別に適用したり、バッチですべての機器に対して適用することも可能です。

図2:NEQTO Consoleのスクリプトの再ロード画面
3. JavaScriptによる機能追加のメリット
JavaScriptは開発環境をダウンロードおよびインストールすることなくNEQTO Console上のJavaScriptエディターですぐに開発が可能です。 また、コンパイルも不要であり、作成したJavaScriptコードを対象機器に再ロードすれば遠隔での機能追加が容易に実現できます。 JavaScript言語での開発メリットについてもっと詳細に知りたい方は、以下のリンク先をご確認ください。 資料ダウンロード
4. 検証:JavaScriptによる機能追加の具体手順
LPガスのガス漏れを検知し、管理者にメールを送るシステムを例に説明します。下図のようなIO接続可能な端子台を実装した機器Aを想定します。今回はSTMicroelectronics製STM32 Discovery Kit (B-L4S5I-IOT01A) を使用し、LPガス警報器を接続して検証を進めます

図3:LPガス警報器と機器Aとの接続
機器Aの端子台は電源、UART、GPIOを接続可能にしています。

図4:機器Aの端子台への配線
LPガス警報器のリレー出力を機器AのGPIO(12)とGNDに接続しています。 LPガス警報器のリレー出力はa接点であり、通常は接点がオープンの状態ですが、ガス漏れを検知した場合、接点がクローズする動作をします。
NEQTO Console上ではグループというカテゴリーで地域毎にユーザ様を管理することができます。

図5:NEQTO Consoleのグループ画面
また、グループの中にユーザ様をノードというカテゴリーに紐づけて管理することができます。 下図は『千代田区』というグループのノードにユーザ様 (Aさん、Bさん、Cさん)を紐づけた例です。

図6:NEQTO Consoleのノード画面
NEQTO Console上でアクションという機能を使用し、LPガス警報器がガス漏れを検知した場合、メールを送信するよう設定をします。

図7:NEQTO Consoleのアクション設定画面
テスト用ガスにより、LPガス警報器がガス漏れを検知した際、以下のようにメールが送信されていることを確認しました。

図8:ガス漏れ検知のアラートメール
運用中このシステムに、電磁弁でガスを制御する機能を追加したい場合を想定します。 機器AのIOに電磁弁を接続することで機能追加が可能です。 今回は電磁弁の代わりにリレーで行います。

図9:リレーモジュールキットと機器Aとの接続
リレーモジュールキットの制御線と電源を、機器AのGPIO(13)と+5VおよびGNDに接続しています。
機器Aとの接続が完了したら、後は以下2ステップで機能追加は完了します!
Step 1
NEQTO ConsoleのJavaScriptエディターで、GPIO13の初期設定と、ガス漏れを検知した場合、GPIO13を1 (High) にする設定を追加します。

図10:GPIO13の初期化と設定
Step 2
NEQTO Consoleで『スクリプトの再ロード』を実行します。
機能追加の作業はこれだけです! ガス漏れを検知した際、追加したリレーモジュールキットで電源制御されていることを分かりやすく確認するためにリレーモジュールキットにライトを接続しました。

図11:リレーキットモジュールとライトとの接続
テスト用ガスにより、LPガス警報器がガス漏れを検知した際、リレーモジュールキットのリレー部分がクローズすることでライトが点灯することを確認しました。

図12:ライト点灯
このように、JavaScriptにて容易に機能追加を実現することができます!
5. まとめ
今回は、JavaScriptによる機能追加について解説しました。 端子台接続のようにインターフェースに拡張性を持って頂くことにより、運用中でもJavaScriptにて機能追加が柔軟に対応可能となります。
今回ご紹介した例はGPIOを使用した機能追加でしたが、UART接続することにより様々な機器との接続が可能となります。 UARTはプロトコルが様々ですが、JavaScriptであれば運用中のシステムでも柔軟に様々なプロトコルに対応が可能です。 もし、機能追加に伴いお客様のマイコン側のFW変更が必要な場合、NEQTOにはMachine Driverという機能がございます。 Machine Driverはお客様のマイコンのFWを遠隔でファームアップする仕組みになります。 こちらについては、また別途ブログにて詳しく解説をします!
参考サイト
https://neqto.jig-saw.com/ja/product/machine-driver
リンク
NEQTO Engineが対応しているSpresenseやSTM32 Discovery Kit (B-L4S5I-IOT01A)は、インターネットで購入可能ですので、ぜひ気軽にNEQTOをお試しください!
今回使用したデバイス購入先
STM32L4+ DISCOVERY KIT IOT NODE [B-L4S5I-IOT01A] :STマイクロエレクトロニクス
LPガス警報器 [APH-32SV]:リコーエレメックス
大電流大型リレーモジュールキット [CXD5602PWBLM1J]:秋月電子通商