ブロックを積みながら(79) Node-RED、watchノードでファイルを監視

Joseph Halfmoon

今回は watch ノードです。watchといっても腕時計ではありませんよ。指定したファイルを監視してくれるノードです。Node-REDの「外側で」起こった変更を捕捉するのには便利な機能じゃないかと思います。捕捉できたところで次にどうするのかはまた別の話ですが。

※「ブロックを積みながら」投稿順 index はこちら

捕捉した後のことはまた別な話と割り切ってしまうと、watchノードの実験はシンプルです。使用したフローが以下に。flow

Watchノードで監視するファイルを指定し、変更があった時に msg が送出されるので、Debugノードで送出された msg を表示するだけ。

Watchノードの設定

このノードはOSにファイルの監視をお願いすることになるのだと思います。そのため監視可能な対象は、なんでもfileに見えるLinuxと、そうでないWindowsでは差があるみたいです。また、以下の設定画面にあるようにパスの設定もLinuxとWindowsで区切り文字が違います。

監視対象の「ファイル」は , で区切って列挙すれば複数の同時監視が可能です。しかしワイルドカードのようなものは使えないようです。知らんけど。

watchSetting1

動作確認

上記のように設定して、監視対象ファイルが存在するディレクトリで以下のようにしてみました。これでファイル末尾に1行追加される筈。

$ date -R >>sample.txt

実行すると直ぐにWatchノードが反応し、デバッグウインドウには以下のようなプロパティ群を載せた msg が到来します。

    • payload 監視対象ファイルのフルパスが返る
    • topic 設定画面で指定しているファイル名が返る。ここではフルパスで指定しているのでpayloadと同じ。
    • file ファイル名(パスなし)が返る。
    • filename 以下ではフルパスのファイル名が返ってくる。helpにはこのプロパティの説明なし?
    • size 更新後のファイルサイズ(この場合バイト数)が返る
    • type ファイルタイプ。ここでは普通のファイルなので “file” が返る

Debug

ファイル名がもらえるので、後の処理はちゃんとやれよ、と。

末尾に1行追加した監視対象の sample.txt ファイルを眺めていてちょいと不思議なことに気づきました。こんな感じ。cat

date コマンドで1行末尾に追加しているのはタイムスタンプですが、時刻を見ると09:17:56 でした。

一方 Node-REDエディタのDebugウインドウに表示されている時刻は、9:17:55と1秒早いです。

dateコマンドの出力リダイレクトを検出した時点でNode-REDに「お知らせ」がいっているのかな?でもそれにしては size に載っている 137(バイト)という数字は、dateコマンドからの書き込みが終了しないと確定しないと思うので、dateコマンドが ”09:17:56” と書き込んだ後の数字だよね。。。ううむ、Linux素人にはこの辺のマジックは理解できませぬ。もしかすると、ファイルのタイムスタンプを処理するときに小数点以下(ファイルシステムによっては秒以下まで保持している)の処理の仕方がdateとNode-REDで違うのかも?謎です。

ブロックを積みながら(78) Node-RED、batchノードでmsg列をひとからげ へ戻る

ブロックを積みながら(80) Node-RED、jsonノードで文字列とオブジェクト相互変換 へ進む