【RaspberryPi】Node-REDでCPU温度の可視化を行ってみる【前編】

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

f:id:ueponx:20200509231950p:plain

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

f:id:ueponx:20200509230922p:plain

RaspberryPiのCPU温度を調べる

RaspberryPi版のUbuntu20.04LTS初期CLIでのログインではCPU温度が表示されています。

CPUの温度の情報は以下のコマンドで取得する事ができます。(※Ubuntuでも同じコマンドでCPUの温度を取得することができます)

$ cat /sys/class/thermal/thermal_zone0/temp

すると以下のような結果を得る事ができます。

実行例

f:id:ueponx:20200509090437p:plain

$ cat /sys/class/thermal/thermal_zone0/temp
42774

出力される値は42774となっていますが、これは42.774℃の意味になります。出力された値を1/1000すれば温度になります。

RaspberryPiのCPU温度を調べる、もう一つの取得方法

実はvcgencmdコマンドを使用することでも温度を取得する事ができます。vcgencmdコマンドは引数をあたえることで色々なハードウエア情報を取得することができます。以下がコマンドの詳細のリンクとなります。CPUのクロックや電圧、メモリ状態、対応しているCODEC、USB起動の設定を行ったOTP (One Time Programmable)の状態などもこのコマンドから参照することができます。

elinux.org

CPUの温度を検知するには以下のように実行します。

$ vcgencmd measure_temp

実行例

f:id:ueponx:20200509091914p:plain

$ vcgencmd measure_temp
temp=44.4'C

今回は先程のコマンドとは違い、見やすい温度表示になっています。表示される桁は少ないですが、実行的には誤差だと思います。

どちらのコマンドを使っても同じではありますが、他の用途にも使えそうな後者をしようしてみようと思います。

Node-REDでコマンド実行を行う

Node-REDでは指定したプログラムを実行するノードがあります。

パレットの【機能】のカテゴリにあるexecノードになります。

f:id:ueponx:20200509093736p:plain

このノードは実行したプログラムの標準出力、エラー出力、リターンコードをそれぞれの端子に出力します。

ノードの入力・出力の情報は以下の通りです。

f:id:ueponx:20200509094722p:plain

f:id:ueponx:20200509094325p:plain

入力は主に引数情報を与えることが用途になるかなと思います。 各出力は上から

  1. 標準出力(stdout)返却コードも取得可能
  2. 標準エラー(stderr)返却コードも取得可能
  3. 返却コード(return code)

今回使用するvcgencmdの結果は標準出力に出力されるので、こちらを使っていくことになります。 ではこのノードを使って、温度の表示を行ってみます。 injectノードexecノードdebugノードを取り出して

f:id:ueponx:20200509095813p:plain

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

f:id:ueponx:20200509095830p:plain

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

f:id:ueponx:20200509100925p:plain

プロパティにある各項目を編集します。

  • 【コマンド】の入力ボックスに実行するプログラムvcgencmd measure_tempのコマンドを入力
  • 引数のmsg.payloadのチェックボックスをOFF(入力端子を使った引数を与える場合に使用します)
  • 名前は自由につけることができます。(今回は名前はつけていません)

編集すると以下のようになります。vcgencmdコマンドのサブコマンドであるmeasure_tempを【追加引数】として与えてもいいのですが、今回はコマンド側に設定しています。編集が終わったら【完了】ボタンをクリックします。

f:id:ueponx:20200509100929p:plain

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

f:id:ueponx:20200509103545p:plain

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

f:id:ueponx:20200509104905p:plain

引き続き、この値を可視化していきます。

Node-REDにnode-red-dashboardをインストールする

Node-REDには扱うデータをダッシュボード化して、Webで表示させるノードが存在しています。こちらのノードはデフォルトでインストールされていないので、まずはこちらをパレットに追加していこうと思います。

追加するノード名はnode-red-dashboardとなります。詳しくは以下を参考にしてください。

flows.nodered.org

新規ノードを追加するので、フローエディタの右上にある【三】ボタン(ハンバーガーボタン)をクリックします。

f:id:ueponx:20200509193828p:plain

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

f:id:ueponx:20200509193832p:plain

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

f:id:ueponx:20200509193835p:plain

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

f:id:ueponx:20200509193838p:plain

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

f:id:ueponx:20200509193841p:plain

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

f:id:ueponx:20200509193845p:plain

インストール処理中

f:id:ueponx:20200509193847p:plain

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

f:id:ueponx:20200509193851p:plain

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

f:id:ueponx:20200509193854p:plain

追加要素の確認

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

パレットの確認

まずはパレットになります。dashboardのカテゴリーが追加されています。

f:id:ueponx:20200509193938p:plain

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

f:id:ueponx:20200509193944p:plain

今回はCPUの温度をグラフにして可視化を行うのでchartノードを使用する形になるかなと思います。

ダッシュボードタブの追加確認

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

f:id:ueponx:20200509193858p:plain

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

拡大図

f:id:ueponx:20200509193901p:plain

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

f:id:ueponx:20200509193904p:plain

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

f:id:ueponx:20200509193908p:plain

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

f:id:ueponx:20200509193911p:plain

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

f:id:ueponx:20200509193925p:plain

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

f:id:ueponx:20200509193928p:plain

とりあえず、インストール後の確認ができましたので、あとは簡単に動作を試してみようと思います。

長くなってしまったので後編につづきます。またか…

後編にむけて

今回も割と長くなりましたので、前後編に分けてしまいました。プログラム自体は既に終わっているのですが、残そうとするとボリュームが増えてしまいます。

後編では最終的には温度センサなどのダッシュボードと最近購入した、RaspberryPiのヒートシンクの効果測定をしてみようという流れで行きたいと思います。

/* -----codeの行番号----- */