ブロックを積みながら(75) Node-RED、completeノードで「ちょい足し」

Joseph Halfmoon

今回の completeノードは出力ポート無のフロー終端の完了後に何かを始めるためのノードです。ノード間に「配線」がないのにアクションとるノードには、エラーをキャッチするcatchノード、ステータスを取得するstatusノードなどもありますが completeノードは特定のノードに寄生するので、ちょい足しに便利かと。

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

※Node-REDは Raspberry Pi 3 model B+ (Raspberry Pi OS, 32bit)上で動作させています。

実験用フローとそのセッティング

以下の実験フローには2本並列に短いフローが並んでいます。上側が前回作成した既存フローです。ダッシュボード上のスイッチを操作すると、外部端子に接続してある青色のLEDを点灯するというものです。下側がcompleteノードの実験用に追加したフローです。

flowAll

今回、completeノードが「寄生」するのは、既存のフローの末尾にあるrpi-goio out ノードです。これはNode-REDでもラズパイ上で運用しているときに使えるラズパイの拡張端子を操作するノードです。このノードは指定のGPIO端子にmsg.payloadに載って到来する値(0か1)を出力しますが、そこで完了、後続への出力ポートはありません。

上側のフローをまったく触らず、Completeノードの以下のように設定してみました。これでGPIO05_OUTと名づけられたノードの完了後にこのノードが起動される筈。

completeSetting

上記には2つしか見えてないですが、同一タブ上の全てのノードが列挙されており、末尾のノードでなくても寄生できそうでした。試してないケド。まあ、出力ポートがあるのであれば、素直にフローに追加した方が自然かもしれません。

なお、completeノードが送ってくるのは、寄生したノードが処理していたmsgそのままのようです。今回はmsg.payloadに数値0か1が搭載されています。

さてcompleteノードが寄生先から密に輸出した msg をカウントする functionノードの設定が以下に。なお初期化タブにて context内のcounter変数を0に初期化しています。LEDをONにすると1、OFFにすると0がpayloadに載って到着するので、このコードでLEDをONにした回数が分かる筈。

counterCode

カウント結果は、ダッシュボード上に追加配置したTEXTノードに表示してます。

実機動作結果

以下は、Windowsパソコン上のブラウザに表示したNode-REDダッシュボードのRaspberry Pi 3タブです。左下の方の BLUE LED スイッチをONにすると、LEDが点灯し、OFFにすると消灯します。LEDのラズパイ取り付けの回路図(フォトカプラで絶縁し、LEDは外部5V電源で駆動)などは第70回をご覧ください。

LEDcounter

BULE LEDのON/OFFのスイッチの下になる Count: と名がついているTEXTノードが今回「ちょい足し」のカウント結果を表示する部分です。上記は2回LEDを点灯させた後で、ちゃんと2とカウントしています。

既存フローを修正することなく、追加のフローをちょい足しできる completeノード便利。しかし「寄生」先ノードとの関係性が明らかでないので、それを忘れてしまうのがチト心配です。忘却力だし。

ブロックを積みながら(74) Node-RED、rpi-gpioをDashboard接続 へ戻る

ブロックを積みながら(76) Node-RED、rangeノードで数値範囲を変換 へ進む