Node-REDを使ってみる その1(execノード、Pythonプログラム実行)
はじめに
今回はNode-REDのexecノードを使ってみました。コマンドを実行できるノードです。
私はNode-RED MCUを先に使い始めたので、Node-RED自体はあまり使っていません。非常に便利なソフトウェアなので、使いこなしたいなと思っています。
なお、環境はRaspberry PiのNode-REDで実行しています。
▼Raspberry Pi 400を使っています。
▼先日、Node-RED Advent Calendar 2023にノードの作成について書きました。サーボモーター用のノードです。
https://qiita.com/background/items/9b820251aa9dda5a3167
▼今回はそのときのリポジトリを例として使います。
https://github.com/404background/node-red-mcu-servo
execノードを使ってみる
フォルダの作成
まずは動作確認のために、フォルダを作成してみました。基本的にはLX Terminalで実行する場合と同じなのですが、カレントディレクトリには注意する必要があります。
▼実行してみると分かるのですが、以下の2つのフローでは動作が異なります。

上のフローでは、Desktopに移動してからフォルダの作成が行われます。ちゃんとDesktopにexecフォルダが作成されていました。
しかし下のフローでは、/home/piディレクトリにexecフォルダが作成されていました。どうやらexecノード毎にホームディレクトリで実行するような挙動になっているようです。
ファイルのパスには要注意ですね。
gitコマンド
git cloneとgit pullを試してみました。
▼execノードは引数を指定することができます。clone先のURLを渡しています。


▼実行すると、リポジトリがcloneされました。


git pullも実行できました。
▼フローはこちら

▼Already up to dateと表示されています。

npmコマンド
まずはnpm initコマンドを実行して、package.jsonを作成してみました。
▼npmフォルダを作成してから、npm initを実行します。

▼デバッグノードに結果が表示されています。

▼package.jsonが作成されていました。


先程git cloneでインストールしたフォルダを、npmでインストールしてみました。
▼フローはこちら。こちらも引数にフォルダのパスを指定することで、injectノードからペイロードを送れば実行できます。


▼node_modulesフォルダと、package-lock.jsonが生成されています。npm installを実行すると用意されるものです。


Node-REDの再起動
私の環境ではNode-REDをサービスとして起動しています。ノードを更新したときによく使うコマンドです。
▼以下のフローで再起動できます。

Pythonのプログラムを実行する
今回はhelloと表示するだけの、hello.pyファイルを用意しました。
▼Pythonフォルダを/home/piディレクトリに作成しました。

▼print('hello')だけです。

▼コマンドで実行してみると、helloと表示されます。

Pythonディレクトリに移動してからhello.pyを実行します。ファイル名を引数として渡すことで、複数のファイルがあっても実行しやすいようにしてみました。
▼フローはこちら。ファイル名を引数として渡しています。


▼実行してみると、デバッグ欄にもhelloと表示されました。

最後に
普段使っているコマンドを実行できたので、便利に使えそうです。
いつもディレクトリごとにLX Terminalを開いていたので、タスクバーが混雑していました。execノードでよく使うコマンドを用意しておけば、入力の手間が省けそうですね。
これでNode-RED MCUの環境を用意するフローも作れるのでは?と思いつつ。
▼環境構築は大変なんですよね。そのおかげでコマンドに慣れてきたような気もしますが。