ABLICのPH-AシリーズでデータをUSBに保存する設定をしてみました

今回は、ABLICのPH-Aシリーズで漏水センサーからエラーを受信する際、OpenBlocksのUSBに漏水センサー情報を記録する設定を追加します。

今回のデータ

今回は、ABLICのPH-Aシリーズを使ってエラーが起こった時に、「時刻」「デバイスid」「major」「minor」「RSSI」をそれぞれ記録していきます。

追加するものは、以下の3つになります。

時刻の取得

まずは、エラーが起こった時の現在時刻を取得していきます。
functionノードを下図の場所に追加し、中に以下のプログラムを入れます。


// ペイロードから日付オブジェクトを生成
let date = new Date();
//年・月・日を取得する
let year = date.getFullYear();
let month = date.getMonth() + 1;
let day = date.getDate();
month = ("0" + month).slice(-2);
day = ("0" + day).slice(-2);
//時・分・秒を取得する
let hour = date.getHours();
let minute = date.getMinutes();
let second = date.getSeconds();
hour = ("0" + hour).slice(-2);
minute = ("0" + minute).slice(-2);
second = ("0" + second).slice(-2);
// 日付文字列に変換して再度ペイロードをセット
msg.time = year + "/" + month + "/" + day + "_" + hour + ":" + minute + ":" + second;

return msg;

今回は、functionノードで現在時刻を求めましたが現在時刻を出してくれるノードもありますので、そちらの方が便利だと思います。
これで時刻の取得は完成です。

必要データの書き出し

次に、必要なデータをmsg.payloadとして送ります。
既存のセンサー番号取得ノードを開きます。

これを下記のように編集します。

var data00

//データの読み取り
data00 = msg.payload.data;
//データからminor部分を取り出し数値に変換する
var minor_hex = data00.slice(-6, -2);
var minor = parseInt(minor_hex, 16);
//データからmajor部分を取り出し数値に変換する
var major_hex = data00.slice(-10,-6);
var major = parseInt(major_hex, 16);
//デバイスから直接取れるデータはmsgで直接入れる
var deviceId = msg.payload.deviceId;
var time = msg.time;
var rssi = msg.payload.rssi;
msg.payload = {
  "time" : time,
    "major_Dec" : major,
    "minor_Dec" : minor,
    "deviceId": deviceId,
    "rssi" : rssi,
};
return msg;

deviceIdとRSSIはデータを見るとデータが入った状態で送られてきていました。

そのため、ここではmajor、minorのみを求めpayloadに追加して値を返しています。

CSV出力の方法

まずはOpenBlocksの設定でシステム→FSTAB編集を開きます。
編集確認の確認をクリックし中身を開きます。

下図のような画面が出てきましたら、下記を1番下に追加してください。
起動時にUSB接続する設定

/dev/sda1  /mnt  vfat  defaults,auto,rw  0  0

最後に下にある保存を押してください。

ここまで来たら次はNodeREDになります。
NodeREDに「csv」と「write file」を下図の順番で追加してください。

csvノードを開き、オブジェクトからCSVへ変換の出力をヘッダを一度だけ送信するにします。

次にwrite fileノードを開き、パスを「/mnt/usb/好きな名前.csv」名前はローマ字であれば自由に変更してください。

こちらで設定は完了です。最後にデプロイをし、OpenBlocksを再起動してください。

USBをネットワーク上で見る設定

OpenBlocksは、USBを取るのにコマンドが必要になります。
そのため、手間のかからないネットワーク上でUSBの中身を見る設定をしていきます。

こちらはとても簡単です。まずOpenBlocksの設定でメンテナンス→機能拡張→インストール機能からsambaをインストールしてください。(インストール済みのため写真内には出てきませんでした)

インストール後、拡張→sambaを開き使用するを選択、samba用ディレクトリパスを「/mnt/usb」にします。

最後に保存して完了です。

実際に見ることもできました。

OpenBlocksが電源を落とせない場合

今回はこちらが少し大変です。まずは、OpenBlocksにSSH接続をするための設定をします。
OpenBlocksのシステム→フィルター内のSSHを有効にします。

次に、SSH関連のrootログイン許可設定をpassword認証不可から許可に変更してください。

こちらでSSH接続ができるようになったため、コマンドプロンプトンを開きます。(Windows+Rを押してcmdと入力してください)
開いたら、「ssh root@自身のOpenBlocksのIPアドレス」を入力してパスワードは初期パスワード「0BSI0T」でログインしてください。

このようになりましたらログインができてます。
そうしましたら、USBを接続し以下のコマンドを入力していきます。

USBが接続されているかを確認します。

sudo fdisk -l

このように表示されれば大丈夫です。あまりにもギガ数が多かったり、TypeがFAT32出ない場合は正常ではありませんのでUSBフォーマットをかけてください。

次にUSB内に保存先を作ります。

sudo mkdir -p /mnt/usb

次にUSBのマウントを有効にします。

sudo mount /dev/sda1 /mnt/usb

最後に有効になっているかを確認します。

df -h

下記のような出力があれば大丈夫です。

この時一番右が、/mnt/usbになっているかを確認してください。

これでUSBの接続は完了になります。
この後の設定はNode-REDからになりますので、前の文をご確認ください。