先日までRaspberryPiにUbuntuをインストールしていましたが、作業中CPU温度がかなり高くなっていたので、その温度を可視化することができないかなと思いました。
折角なのでその値をNode-REDで表示・可視化させてみます。ちなみに今回は計測するOSはRaspbianで行っています。

こんな感じで可視化したい。

RaspberryPiのCPU温度を調べる
RaspberryPi版のUbuntu20.04LTS初期CLIでのログインではCPU温度が表示されています。
CPUの温度の情報は以下のコマンドで取得する事ができます。(※Ubuntuでも同じコマンドでCPUの温度を取得することができます)
$ cat /sys/class/thermal/thermal_zone0/temp
すると以下のような結果を得る事ができます。
実行例

$ cat /sys/class/thermal/thermal_zone0/temp
42774
出力される値は42774となっていますが、これは42.774℃の意味になります。出力された値を1/1000すれば温度になります。
RaspberryPiのCPU温度を調べる、もう一つの取得方法
実はvcgencmdコマンドを使用することでも温度を取得する事ができます。vcgencmdコマンドは引数をあたえることで色々なハードウエア情報を取得することができます。以下がコマンドの詳細のリンクとなります。CPUのクロックや電圧、メモリ状態、対応しているCODEC、USB起動の設定を行ったOTP (One Time Programmable)の状態などもこのコマンドから参照することができます。
CPUの温度を検知するには以下のように実行します。
$ vcgencmd measure_temp
実行例

$ vcgencmd measure_temp temp=44.4'C
今回は先程のコマンドとは違い、見やすい温度表示になっています。表示される桁は少ないですが、実行的には誤差だと思います。
どちらのコマンドを使っても同じではありますが、他の用途にも使えそうな後者をしようしてみようと思います。
Node-REDでコマンド実行を行う
Node-REDでは指定したプログラムを実行するノードがあります。
パレットの【機能】のカテゴリにあるexecノードになります。

このノードは実行したプログラムの標準出力、エラー出力、リターンコードをそれぞれの端子に出力します。
ノードの入力・出力の情報は以下の通りです。


入力は主に引数情報を与えることが用途になるかなと思います。 各出力は上から
- 標準出力(stdout)返却コードも取得可能
- 標準エラー(stderr)返却コードも取得可能
- 返却コード(return code)
今回使用するvcgencmdの結果は標準出力に出力されるので、こちらを使っていくことになります。
ではこのノードを使って、温度の表示を行ってみます。
injectノード、execノード、debugノードを取り出して

各端子をつないで行きます。execノードは標準出力である1番上のと接続します。

あとはexecノードのプロパティを編集します。execノードをダブルクリックして編集を行います。

プロパティにある各項目を編集します。
- 【コマンド】の入力ボックスに実行するプログラム
vcgencmd measure_tempのコマンドを入力 - 引数のmsg.payloadのチェックボックスをOFF(入力端子を使った引数を与える場合に使用します)
- 名前は自由につけることができます。(今回は名前はつけていません)
編集すると以下のようになります。vcgencmdコマンドのサブコマンドであるmeasure_tempを【追加引数】として与えてもいいのですが、今回はコマンド側に設定しています。編集が終わったら【完了】ボタンをクリックします。

編集が終わったら、右上にある【デプロイ】ボタンをクリックします。
デプロイに成功したら、injectノードをクリックして実行すると、デバックタブにコマンドの出力、つまりCPU温度が表示されます。

これでコマンドの実行は成功となります。
これを定期実行する場合にはinjectノードの設定を繰り返すようにします。

引き続き、この値を可視化していきます。
Node-REDにnode-red-dashboardをインストールする
Node-REDには扱うデータをダッシュボード化して、Webで表示させるノードが存在しています。こちらのノードはデフォルトでインストールされていないので、まずはこちらをパレットに追加していこうと思います。
追加するノード名はnode-red-dashboardとなります。詳しくは以下を参考にしてください。
新規ノードを追加するので、フローエディタの右上にある【三】ボタン(ハンバーガーボタン)をクリックします。

プルダウンメニューが開くので、【パレットの管理】をクリックして選択します。

すると、ユーザ設定のダイアログが開かれます。その画面の中から【ノードを追加】のタブをクリックします。

すると、次のようなノード検索の画面になります。

検索の入力ボックスへdashboardと入力します。すると、下のリストエリアに絞り込み行われたノードが表示されます。その中からnode-red-dashboardを見つけて、右側にある【ノードを追加】をクリックしてインストールを行います。

すると画面上部に確認ダイアログが出てくるので、【追加】をクリックします。これでインストール処理が開始されます。

インストール処理中

インストールが終了すると多くのノードがパレットに追加されます。いままでに比べるとかなり大量のノードが追加されているのがわかります。

念の為インストール処理した【ノードの追加】ボタンの表示が【追加しました】になっていることを確認して【閉じる】ボタンをクリックしてユーザ設定ダイアログを閉じます。

追加要素の確認
ダッシュボード用のノードが追加されたら、画面の変化を確認します。ダッシュボードのノードはパレット以外にもいろいろな部分が変わります。
パレットの確認
まずはパレットになります。dashboardのカテゴリーが追加されています。

大量のノードが追加されるのですべてをみせると以下のような状態になっています。総数16個のノードが追加されます。基本的にはダッシュボードの要素になるような情報とUIにちかいものがノード化されているようです。

今回はCPUの温度をグラフにして可視化を行うのでchartノードを使用する形になるかなと思います。
ダッシュボードタブの追加確認
実はこのノードを追加するとフローエディターの右側にダッシュボード用のタブも追加されます。各要素の処理はノード側から、ダッシュボードの配置などはタブ側から設定を行うようです。後から分かったのですが、タブ側からもノードの設定は可能なので、ノードの初期設定を適当にしてフローに配置したら、タブからきちんと設定を行うほうが楽かもしれません。(設定は後からでも変更可能です。)

ダッシュボード用のタブの表示ボタンも追加されています。
拡大図

【ダッシュボード】タブは更に3つのタブで構成されています。ダッシュボードに要素を配置する【配置】タブ

後はウインドウなどの詳細を設定する【サイト】タブ

フォントやカラーを設定する【テーマ】タブがあります。

あと、見逃しがちですがダッシュボードのページを開くボタンがあります。デプロイが終わったらこちらを押して実行の確認を行うことになります。

このボタンは設定が終わったいなかったり、ダッシュボードの要素がない場合には以下のような表示が行われます。

とりあえず、インストール後の確認ができましたので、あとは簡単に動作を試してみようと思います。
長くなってしまったので後編につづきます。またか…
後編にむけて
今回も割と長くなりましたので、前後編に分けてしまいました。プログラム自体は既に終わっているのですが、残そうとするとボリュームが増えてしまいます。
後編では最終的には温度センサなどのダッシュボードと最近購入した、RaspberryPiのヒートシンクの効果測定をしてみようという流れで行きたいと思います。