カスタムデータ収集モジュール
PDHMSとは
OpenBlocksのIoTデータ処理は、それぞれが受け持つ処理によってマイクロサービス化されています。
センサーからのデータ受信はデバイスインターフェース毎の PD Handler、IoTクラウドとのデータ送受信は PD Repeater、下流制御機器の処理用スクリプトインターフェースには PD Agent、と言うように分かれています。
このそれぞれのマイクロサービス間をユニックスドメインソケットと言うメッセージパスによって接続されます。
OpenBlocksの場合、基本OSがLinuxであるため、ユニックスドメインソケットソケットでもファイルシステムに全く依存しない抽象名前空間での通信を行っており、これによって非常に高速なメッセージパスを実現しています。
抽象名前空間使ったユニックスドメインソケットの利用方法はファイルパスの先頭文字をNULLに置き換えてCALLします。
下図にその例を示しますがメッセージパス名の先頭文字に"@"をつけられていますが、これはコード記載上の問題で一時的に使っており、実際のユニックスドメインソケット関数をCALLする際にNULLに置き換えています。
こういった一連作業を受け持つ処理系をPDHMS(PlatHome Data Handling Module System)と呼んでいます。
WEB-UIの一般設定のみで構成されるPDHMS構成
基本的にはPD HandelrからPD Repeaterへの一方通行のメッセージパスで構成されます。
info
Modbus関連機器は最初から双方向のメッセージパスを構成可能ですが、ここでは例外とし詳細についてはModbusハンドラの項を参照下さい。
アプリケーションモジュール構成のカスタム例
ユーザーカスタムによっては複雑なメッセージパスの構成も可能になります。
ユーザー定義デバイス
ユーザー定義デバイスの実体はメッセージパスです。
つまりPD Repeaterと拡張モジュール間をつなぐメッセージパスです。
WEB-UIでは例えばPD HandlerからPD Repeaterへメッセージパスをつなぐ場合、通常、このメッセージパス名は省略されダイレクトの行先としてIoTクラウドとなりメッセージパスは意識されません。
つまり標準的なメッセージパスはそれぞれのモジュールにつながる、行先固定の専用パスが用意されているため、WEB-UIの表示上はIoTクラウドなどの行先そのものになっています。
しかしカスタマイズにおいては、行先未確定のためユーザー定義デバイスとしてメッセージパスを仮の送信先デバイスとしてWEB-UIに登録します。
こうして定義されたユーザー定義デバイスは、例えばユーザー自作のセンサーハンドラからPD Repeaterへ送る際に使われます。
例えばLUA言語でのシリアル機器センサーハンドラを作る際にこのメッセージパスを利用して通信します。
ユーザー定義デバイスはカスタマイズの必要に応じて作成して下さい。
ユーザー定義デバイス作成
サービス⇒基本⇒ユーザーデバイス登録タブからユーザーメモに使用目的など自分のわかりやすい内容を記載して保存
ボタンを押します。
登録されるとIoTデータ⇒送受信設定タブのデバイス設定(ユーザー定義)ペインが表示され以下の様に送信先が選べる様になります。
最後に、表示されたデバイス設定(ユーザー定義)ペインの送受信設定
で送り先にチェックをいれます。
自作アプリでのPD Repeaterへの送信
PD Repeaterへの送信はWEB-UIで設定したユーザー定義デバイスを元にした、抽象名前空間(abstract)の Unixドメインソケットに対してwriteを実行します。
このUnixドメインソケットのwriteを実行すると、書き込んだデータがクラウドへデータへ送信されます。
info
ユーザー定義デバイスは先に用意して送信先を決定した状態にしておくこと!
対象のユニックスドメインソケットのパス規則は以下の通りとなります。
以下に、それぞれの言語で PD Repeater への送信を Unixドメインソケットでwriteしたサンプルを記します。
コマンドラインでPD Repeaterへの送信を試す
デバイス番号userdev_0000001としてPD Repeaterへ送信する例
コマンドラインサンプル
info
socatコマンドはデフォルトではOpenBlocksにインストールされていません。
そのため、'apt-get install socat' でインストールして下さい。
PHPでPD Repeaterへの送信を試す
デバイス番号userdev_0000001としてPD Repeaterへ送信する例
PHPスクリプトサンプル
Node.jsでPD Repeaterへの送信を試す
デバイス番号userdev_0000001としてPD Repeaterへ送信する例
Node.jsスクリプトサンプル
info
Node.jsのabstract-socketはデフォルトではOpenBlocksにインストールされていません。
'npm install abstract-socket' にてインストールして下さい。