前項では、EnOceanセンサからメッセージを受け取り、そこからセンサのSenderID(送信者ID)とプロファイルを取得する方法を理解しました。次は作成されたフローを使って、プロファイルに基づいてさまざまなセンサからのデータを解析し、センサ・リストを保存しましょう。
フロー2: センサをTeach-Inする
以下は、「Actor」ノードを使用して、「Input」ノードが受信したメッセージを解析するフローです。
EnOceanのコンセプト: まずは、冒頭に述べたEnOceanのルールである「Learn」と「Teach-In」の設定から行います。
フローリンク
以下のリンクから、サンプルフローをインポートできます。
URL: https://enebular.com/discover/flow/55296648-3c25-4103-9920-bfe38f891c92
サンプルフロー:
設定説明:
- 受信したメッセージの解析をするために、「Input」ノードを「Actor」ノードに繋ぎます。
- 「LEARN」インジェクトノードをクリックしてください。
- 「LEARN」インジェクトノードのPayloadのタイプをJsonに変えて、{“type”:”LRN”,”duration”:3}で設定してください。これで3秒間Learnモードになるように設定できます。
- 「LEARN」インジェクトノードを「Actor」ノードに繋ぎます。
- 「Actor」ノードにデバッグノードを繋げて、デバッグノードのコンフィギュレーションで出力を’ complete msg object’に設定します。
- 「Deploy」ボタンをクリックしてフローをデプロイします。
動作確認チェック:
- LEARNインジェクトノードをクリックしてください。これでゲートウェイデバイスは3秒間「Learn」モードに入りました。
- この3秒間の間にセンサからTeach-Inメッセージを送る必要があります。センサにあるTeach-Inボタンを押して、ハードウェア側からメッセージを送ってください。
-
- ハードウェア側の動作をシミュレーションしたい場合は、以下の方法で行ってください。
- 手動で「Teach-In」する場合に備え、「Teach-In」インジェクトノードが用意されています。
- 「Teach-In」インジェクトノードのPayload のタイプは、Jsonです。既に「{“type”:”LRN”,”senderId”:”05004e3b”,”eep”:”d5-00-01″,”name”:”Door Sensor”}」と設定されていることを確認してみてください。
- ハードウェア側の動作をシミュレーションしたい場合は、以下の方法で行ってください。
-
-
- 「Teach-In」インジェクトノードを「Actor」ノードに繋げて「Save」を押してください。
- 手動で「Teach-In」インジェクトノードをクリックしてください。
-
- センサでアクション行うとDebugウィンドウに以下のようなアウトプットが表示されます:
確認できましたか?これで、センサから該当するメッセージを受け取ることができるようになりました。
ただし、ひとつ注意点があります。ゲートウェイデバイスが再起動されるとセンサ情報は失われます。実際の場面ではセンサに関する情報は保持したいものです。次のフローではそれがどのように行われるのか見ていきたいと思います。
フロー3: 再起動時にセンサ情報を保持する
以下は「Teach-In」がおこなわれた、センサのリストをローカルストレージに保存するフローです。
コンセプト: ゲートウェイデバイスが再起動されても取得したセンサ情報が失われないようにするため、ローカルストレージに保持する方法について説明します。
フローリンク:
以下のリンクから、サンプルフローをインポートできます。
URL: https://enebular.com/discover/flow/74758981-16c2-422c-af5f-c6ce9d4fa0dc
サンプルフロー:
設定説明:
- 「Input」ノードの設定で、EnOceanハードウェアがゲートウェイ・デバイスに接続されているシリアルポートを設定します(方法は、セットアップの手順のシリアルポートに関する詳細を参照してください)。
- 左側にあるパレットから「For Actor Node」というサブフローを持ってきて、「Input」ノードと「Actor」ノードの間に繋ぎます。
- 「Actor」ノードをデバッグノードに繋ぎます。
- デバッグノードのコンフィギュレーションで出力を’ complete msg object’に設定します。
- 「For Actor Node」サブフローには再起動時にTeach-Inの情報が失われないように基本の「Actor」ノードを拡張する機能が入っています。以下の設定をします。
- Jsonのセンサリストを保存するために「For Actor Node」をダブルクリックしてください。「Edit flow template」をクリックするとサブフローが開かれます。
- JsonDBパッケージのDataInとDataOut ノードが入っています。
- 「DataOut」ノードの設定をクリックしてください。
- Data Path:’/’ に設定してください
- CollectionNameはJsonファイルで設定してください。ファイル名だけでなくファイルパスが必要となります: 例:‘../../../ports/awsiot/assets/JsonDB/EnOceanDevices’
- 任意の名前を設定し更新します。
- Learn機能とTeach-Inシミュレーターの機能は「For Actor Node」サブフローに入っています。
- 「Deploy」ボタンをクリックしてフローをデプロイします。
動作確認チェック:
- センサでアクション行うとDebugウィンドウに以下のようなアウトプットが表示されます。
- センサリストJson: Teach-Inされたプロトコル/センサの情報がjsonファイルに保持されています。ゲートウェイデバイスデバイス上でJsonファイルのコンテンツ確認ができます。
ファイルパス: ‘../../../ports/awsiot/assets/JsonDB/EnOceanDevices.json’
作成されたJsonファイルのフォーマットは以下の通りです。
{ $SenderId1: {"type": "LRN", "senderId": $SenderId, "eep": $EEP, "name": $name }, $SenderId2: {"type": "LRN", "senderId": $SenderId, "eep": $EEP, "name": $name }, }
これで再起動時にそれらの情報が失われないようになりました。
これで、プロジェクトでEnOceanを使用するための準備はすべて整いました。
最後の項目では、多数のセンサを使った規模の大きなプロジェクトで役に立つ仕組みをご紹介します。