前回はNode-REDから簡単なechoコマンドとlsコマンドを実行しました。今回はデータ/パラメーターの受け渡しとファイル保存を行ってみましょう。

なお、配置したノードは前回からの続きになります。つまり以下のような状態になっています。

ノードからの値をechoで出力

 まず、簡単なところでノードからの値(文字列やデータなど)をechoで出力してみます。ここではタイムスタンプの値を表示してみましょう。execノード(前回の続きなのでls -laと表示されているブロック)をダブルクリックします。

 設定画面が表示されます。この段階ではコマンドはls -laとなっています。この欄にechoとだけ入力します。

 設定画面の+引数の横の□をクリックしてチェックを入れます。チェックを入れたら「完了」ボタンをクリックします。

 デプロイします。デプロイが終わったら前回と同様にタイムスタンプのノードの左側の□をクリックします。

 クリックすると現在のタイムスタンプがデバッグメッセージサイドバーに表示されます。同じ値がRaspberry Piのターミナルにも表示されます。

わかりやすい日付形式で出力

 さすがにタイムスタンプの値では現在の日時がわかりません。そこで、今度は2025年4月1日のように変換して表示してみましょう。タイムスタンプのノードにはYYYY-MM-DDといった日付形式で出力する設定があります。まずは、これを試してみましょう。
 タイムスタンプのノードをダブルクリックして設定画面を開きます。

「エポックからの経過ミリ秒」と書かれた欄があります。この欄の右側にある▼をクリックします。メニューが表示されるのでYYYY-MM-DDTHH:mm:ss.sssZの項目を選択します。選択したら完了ボタンをクリックします。

あとはデプロイしてからタイムスタンプのノードの左側の□をクリックして実行します。実行するとデバッグメッセージサイドバーとRaspberry Piのターミナルにわかりやすくなった日付が表示されます。

日本語の日付形式で出力 (functionノード)

 タイムスタンプ(inject)ノードの日付形式は1つしか用意されていないため、このままでは日本のYYYY年MM月DD日といった形式にはできません。また、日付だけで十分な場合もありますが、時間も出力されてしまいます。用途によっては不便です。そこで、今度はfunctionノードを利用して日本の日付形式に変換してみましょう。
 検索するといくつか方法があるようですが、ここではストレートにfunctionノードにJavaScriptのコードを書くことにします。  まず、タイムスタンプとechoのノードを繋ぐ線を選択し削除します。

 次に機能のカテゴリにあるfunctionノードをドラッグドロップして配置します。

 次に図のように各ノードを繋ぎます。

 function 1ノードをダブルクリックして設定画面を表示します。

 コードのタブの部分に以下のJavaScriptコードを入力します。入力したら「完了」ボタンをクリックします。

let dt = new Date(msg.payload);
let y = dt.getFullYear();
let m = dt.getMonth()+1;
let d = dt.getDate();
msg.payload = y+"年"+m+"月"+d+"日";
return msg;

 デプロイボタンをクリックしてデプロイしたらタイムスタンプの左側の□をクリックして実行します。すると現在の日付が表示されます。

 少しプログラムについて説明します。functionノードにはタイムスタンプの値が渡されますが、この値はmsgオブジェクトのpayloadプロパティに渡されます。そして、functionノードで処理した結果はmsgオブジェクトとして次のノードに渡します。
 JavaScriptのプログラム部分ですが、メジャーなプログラム言語(スクリプト言語)なので検索するかAIに聞いてもらえばよいでしょう。1行目のnew Date()の()内にミリ秒を指定すると、そのミリ秒に対応したDateオブジェクトを作成してくれます。今回は、この機能を使ってJavaScriptで日付文字列を生成しています。

テンプレートの利用

 次にテンプレートノードを利用して渡された日付に文字を追加して出力してみましょう。まず、funcion 1ノードとechoノードを繋ぐ線を選択してdeleteキーを押して削除します。

 機能のカテゴリからtemplateノードをドラッグドロップして配置します。

 templateノードを図のように各ノードと繋ぎます。

 templateノードをダブルクリックして設定画面を開きます。

 テンプレートの欄にThis is the payload: {{payload}} !と表示されています。これを削除して以下のように入力します。{{payload}}の部分が渡された日付の文字列に置き換わります。

今日は{{payload}}です。

 入力したら完了ボタンを押します。あとはデプロイボタンをクリックしてデプロイします。タイムスタンプのノードの左側の□をクリックして実行し結果を確認します。現在の日付がデバッグメッセージサイドバーとRaspberry Piのターミナルに表示されます。

ファイルへの保存

 次に出力した内容をファイルに保存してみましょう。ファイルへの保存は専用のノードが用意されています。ストレージのカテゴリからwrite fileノードをドラッグドロップして配置します。

 write fileノードと各ノードを図のように繋ぎます。ノードからの出力は複数のノードに渡すことができます。今回はこの機能を利用してデバッグメッセージサイドバーとraspberry Piのターミナルとファイルへの書き込みを行います。

 次にwrite fileノードをダブルクリックして設定画面を開きます。

 ファイル名の欄には保存するファイルのパスを指定します。注釈にもありますが、単純にファイル名だけを入力すると意図しない場所に保存される可能性がありますので、慣れるまではフルパス(絶対パス)で指定した方が無難でしょう。ここでは/home/piディレクトリ内にd.txtというファイルで保存します。

この記事は
Members+会員の方のみ御覧いただけます

ログイン/無料会員登録

会員サービスの詳細はこちら