Azure IoT Edgeモジュールツインを活用した回路状態管理
ドメイン固有言語をモジュールツイン経由で適用し、Johnny 5を実行するDockerコンテナ上でRaspberry PiのGPIOピンを制御してLEDを点滅させるデモ。
ストーリー
概要:
Azure IoT Edgeでは、断続的に接続されるデバイスが「モジュールツイン」を通じて望ましいプロパティを取得できます。これらのツインは、Edgeモジュール内で特定の動作を駆動する望ましい状態構成として使用できます。Edgeモジュールはコンテナワークロードとして実行され、常時接続が不要な自己修復と迅速なデプロイを可能にします。インターネットが利用可能になると、デバイスはクラウドサービスを活用してモジュール内のメソッドを呼び出せます。
このプロジェクトでは、Azure IoT NodeJS SDKを使用してIoT Edgeモジュールを開発し、クラウドから望ましい状態を取得して、Raspberry PiのGPIOピンを設定し、接続された回路に対してJohnny 5を用いて望ましい操作を実行します。
これにより以下のようなユースケースが可能になります:
* 単一回路に対して異なる状態構成を適用し、複数の動作モードを実現
* Kubernetesでオーケストレーションされ、適切に設定された2台のデバイスを同一回路に接続することで、冗長ハードウェアフェイルオーバーを実現
背景:
望ましい状態構成は、サーバーの初回プロビジョニング時や、実行中システムのコンプライアンス強制によく使われる概念です。この概念を、ネットワーク接続が断続的な領域でもレジリエンスと健全な動作のために設計されたサービスを用いて、回路に拡張します。このアプローチにより、接続された回路の動作を実行時に変更でき、ハードウェア冗長性を含む興味深いシナリオが可能になります。
MicrosoftのAzure IoT Edgeランタイムがプロジェクトの堅牢な基盤となります。このランタイムはローカルハードウェア上でサービスとして動作し、Azureクラウドでデバイスごとに構成されるコンテナ化された「モジュール」のオーケストレーションを可能にします。常に2つのシステムモジュールが使用されます:モジュール展開構成を取得・適用するedge-agentと、クラウドへのキャッシュメッセージングとモジュール間通信を可能にするedge-hubです。
最初に、Azure IoT NodeJS SDKを使用してAzure IoT Edgeモジュールを作成しました。このモジュールは、与えられたデバイスの望ましいプロパティと報告プロパティを指定するツイン構成を受信します。ドメイン固有言語(DSL)を採用し、それをJohnny 5の設定にパースします。これにより、クラウドで回路の動作を定義し、IoT Edgeモジュールに適用できます。
設定例を以下に示します:
“config”: “{\”peripherals\”:[{\”type\”:\”Led\”,\”name\”:\”alarm\”,\”settings\”
:{\”pin\”:\”GPIO18\”},\”initialState\”: {\”method\”:\”blink\”,\”period\”:500},\
“outputAlias\”:\”alias2\”},{\”type\”:\”Button\”,\”name\”:\”button\”,\”settings\”:
{\”pin\”:\”GPIO20\”},\”outputAlias\”:\”alias1\”}]}”,
この例では、GPIO18に接続されたLEDデバイスを定義し、初期状態として500ms周期で点滅を指定しています。LEDの状態はoutputAliasを通じて他のモジュールに伝播可能です。また、GPIO20にボタンを配置し、状態変化をalias1に発行します。このような構成では、outputAliasをルーティングすることで、追加モジュールから状態変化に独立して応答できます。
現在、このメカニズムで温度計、LED、ボタンデバイスの設定をサポートしています。
再現手順:
まず、デプロイ済みのIoT Hubを持つMicrosoft Azureサブスクリプションが必要です。
次に、Raspberry PiのGPIO18にLEDを接続してハードウェアを構成します。手順はこちらで確認できます。
回路とクラウドサービスの準備ができたら、このガイドに従ってRaspberry PiにAzure IoT Edgeランタイムをインストールします。ランタイムインストール後、この手順でデバイスを手動プロビジョニングします。
次に、LEDを点滅させるための特別なデプロイをAzureで作成します。
以下のようにデプロイを作成します:
イメージURL:
toolboc/johnny5onedge:0.0.981-arm32v7
コンテナ作成オプション:
{“ExposedPorts”:{“9229/tcp”:{}},“HostConfig”:{“PortBindings”:{“9229/tcp”:[{“HostPort”:“9229”}]},“Privileged”:true,“Devices”:[{“PathOnHost”:“/dev/i2c-1”,“PathInContainer”:“/dev/i2c-1”,“CgroupPermissions”:“rwm”},{“PathOnHost”:“/dev/gpiomem”,“PathInContainer”:“/dev/gpiomem”,“CgroupPermissions”:“rwm”}],“Mounts”:[{“Type”:“bind”,“Source”:“/lib/modules/”,“Target”:“/lib/modules/”}]}}
モジュールツインの望ましいプロパティ:
{
“properties.desired”: {
“config”: “{\”peripherals\”:[{\”type\”:\”Led\”,\”name\”:\”alarm\”,\”settings\”:{\”pin\”:\”GPIO18\”},\”initialState\”: {\”method\”:\”blink\”,\”period\”:500},\”outputAlias\”:\”alias2\”},{\”type\”:\”Button\”,\”name\”:\”on\”,\”settings\”:{\”pin\”:\”GPIO20\”},\”outputAlias\”:\”alias1\”}]}”
}
}
完了したら保存。「Specify Routes」と「Specify Metrics」セクションをスキップし、「Target Devices」まで進みます。
Priorityを10に設定し、ターゲット条件として tags.environment=’blinK を追加します。
Read More Information…..
回路のための望ましい状態構成
製造プロセス
- 高度なCAD/CAMソリューション:エンジニアリング材料製造の最適化
- 高リスク作業環境におけるHMI構成の最適化
- 制御回路:基礎、応用、ベストプラクティス
- 信号回路用高度シールドケーブル:実践的接続技術(後編)
- 信号回路用シールドケーブル:第1部-ベストプラクティス
- Azure上のKubernetesをマスター:実証済みツール、ヒント、ベストプラクティス
- あなたに最適なAzure認定パスは?Cloud Instituteエキスパートの洞察
- Azure DevOps認定資格を取得すべきか?メリットとキャリアへの影響
- 正式トレーニングなしでAzure DevOps認定試験をマスターする
- クラウドコスト管理のマスター:AWS、GCP、Azureでの実証済み戦略
- Microsoft、5G対応IoTとAIワークロードを強化するAzure Edge Zonesを発表