カスタムデータ収集モジュール
PDHMSとは
OpenBlocksのIoTデータ処理は、それぞれが受け持つ処理によってマイクロサービス化されています。
センサーからのデータ受信はデバイスインターフェース毎の PD Handler、IoTクラウドとのデータ送受信は PD Repeater、下流制御機器の処理用スクリプトインターフェースには PD Agent、と言うように分かれています。
このそれぞれのマイクロサービス間は、Unixドメインソケットというメッセージパスによって接続されます。
OpenBlocksの場合、基本OSがLinuxであるため、Unixドメインソケットでもファイルシステムに全く依存しない抽象名前空間での通信を行っており、これによって非常に高速なメッセージパスを実現しています。
抽象名前空間を使ったUnixドメインソケットの利用方法はファイルパスの先頭文字をNULLに置き換えてCALLします。
下図にその例を示します。メッセージパス名の先頭文字に"@"がつけられていますが、これはコード記載上の問題で一時的に使っており、実際のUnixドメインソケット関数をCALLする際にNULLに置き換えています。
こういった一連の作業を受け持つ処理系をPDHMS(PlatHome Data Handling Module System)と呼んでいます。
WEB-UIの一般設定のみで構成されるPDHMS構成

基本的にはPD HandlerからPD Repeaterへの一方通行のメッセージパスで構成されます。
info
Modbus関連機器は最初から双方向のメッセージパスを構成可能ですが、ここでは例外として、詳細についてはModbusハンドラの項を参照して下さい。
アプリケーションモジュール構成のカスタム例
ユーザーカスタムによっては複雑なメッセージパスの構成も可能になります。
ユーザー定義デバイス
ユーザー定義デバイスの実体はメッセージパスです。
つまりPD Repeaterと拡張モジュール間をつなぐメッセージパスです。
WEB-UIでは例えばPD HandlerからPD Repeaterへメッセージパスをつなぐ場合、通常このメッセージパス名は省略されダイレクトの行先としてIoTクラウドとなりメッセージパスは意識されません。
つまり標準的なメッセージパスはそれぞれのモジュールにつながる、行先固定の専用パスが用意されているため、WEB-UIの表示上はIoTクラウドなどの行先そのものになっています。
しかしカスタマイズにおいては、行先未確定のためユーザー定義デバイスとしてメッセージパスを仮の送信先デバイスとしてWEB-UIに登録します。
こうして定義されたユーザー定義デバイスは、ユーザー自作のセンサーハンドラからPD Repeaterへ送る際などに使われます。
例えばLUA言語でのシリアル機器センサーハンドラを作る際にこのメッセージパスを利用して通信します。
ユーザー定義デバイスはカスタマイズの必要に応じて作成して下さい。
ユーザー定義デバイス作成
サービス⇒基本⇒Userデバイス登録タブからユーザーメモに使用目的など自分のわかりやすい内容を記載して保存ボタンを押します。

登録されるとIoTデータ⇒送受信設定タブのデバイス設定(ユーザー定義)ペインが表示され以下のように送信先が選べるようになります。

最後に、表示されたデバイス設定(ユーザー定義)ペインの送受信先設定で送信先にチェックをいれます。
自作アプリでのPD Repeaterへの送信
PD Repeaterへの送信はWEB-UIで設定したユーザー定義デバイスを元にした、抽象名前空間(abstract)の Unixドメインソケットに対してwriteを実行します。
このUnixドメインソケットのwriteを実行すると、書き込んだデータがクラウドへ送信されます。
info
ユーザー定義デバイスは先に用意して送信先を設定した状態にして下さい。
対象のUnixドメインソケットのパス規則は以下の通りとなります。
以下に、それぞれの言語で 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へ送信する例
