元祖 [熱の実験室] 第35回 - Google Drive を利用した、遠隔地温度管理

「熱の実験室」のコーナーでは、熱を利用した身近な実験を行なっています。

第35回(2020年3月)の実験
 LANで接続できない、遠隔地の温度を管理する場合、その設定やデータ取得にインターネットを利用することになります。しかし一般的には、そのために必要なインターネットに接続したWebサーバーを、自由に使用できない場合が多いはずです。インターネット経由で手軽にデータやり取りできるのは、各種のクラウドストレージです。その中で、多くのひとが利用している Google Drive を利用して、遠隔地温度管理することを試してみることにしました。

 ● 使用する機器とソフトウェア

  • コンピューター: Raspberry Pi Zero W
  • 温度制御基板: Kタイプ熱電対入力 × 2、負荷(ヒーター)駆動は、SSR(DC5V)
  • Google Drive を利用するためのソフトウェア: rclone
 ハードは、Raspberry Pi Zero W に、熱電対の入力により温度測定・コントロールするための基板を接続したもので、ローカル(LAN内)またはWebサーバー(インターネット)を使用して温度管理する場合と同一です。
 クラウドストレージには多くの種類があります。以前は、ファイルを直接Webブラウザから http で参照できるものもありましたが、現在、そのように手軽にできるものはありません。また、接続台数が制限されるなど、仕様変更で使いにくくなっているものがあります。
 Windowsパソコンでは、各クラウドストレージ専用のソフトをインストールすることで、ローカルのファイルが自動同期されますが、Raspberry Pi(Linux)からクラウドストレージを使うには、やり方もいろいろあって、それほど簡単ではありません。クラウドストレージと、Raspberry Pi から利用する方法をいくつか試してみて、Google Drive + rclone を利用することにしました。

 ● Raspberry Pi に rclone を設定

 rclone は、rsync for cloud storage という通り、Linuxのファイルを同期するコマンド rsync と同様の機能を、クラウドストレージで使用できるようにするものです。多くのクラウドストレージに対応していて、ドキュメントも充実しているので、Raspberry Pi にインストールして、接続確認できるところまでは、手順 にしたがってやれば、割と簡単です。
 rclone で Google Drive に接続できるようになると、例えばファイルをコピーするときのコマンドが、
rclone copy gdrive:dummy.txt ./
(Google Drive の dummy.txt をカレントディレクリーにコピー)
というように、Linuxのコマンドでローカルのファイルをコピーするより、ちょっと長くて面倒になります。プログラムの中でも、ローカルのファイルと同じように記述できた方が、何かと便利だと思いました。そこで、/mnt/gd というディレクトリーに、rclone の gdrive: をマウントして、ローカルのファイルと同じコマンドで扱えるようにしました。
 マウントするためには、Linuxの mount ではなく、rclone mount gdrive:gdrive /mnt/gd というように、rclone のコマンドを使用しますが、ここまでで2つの問題が発生しました。
  • (1) Raspberry Pi 起動後、rclone を使えるようになるまでに時間がかかる。
  • (2) rclone mount から使用する fusermount がなくてマウントできない。
 Raspberry Pi 標準OSの Raspbian lite をインストールした状態で、rclone を使用するために不足しているソフトがあるためで、 (1)には rng-tools、(2)には fuse という2つのソフトをインストールすることで、問題は解決しました。
sudo apt-get install rng-tools fuse
 マウントして、ローカルのファイルと同じコマンドで扱えるようになっても、同じように動作できるわけではありません。データロガーとして、測定値をファイルに追記していこうとしたとき、このままではできません。rcron mount のオプションで、--vfs-cache-mode を writes にすると、書き込み時にバッファリングされて追記はできますが、実際には、追記されたファイル全体が更新の都度、Google Drive と同期されることになります。
 実際に遠隔地温度管理に使用するときは、起動した状態の Raspberry Pi をそのままWebブラウザから操作したいので、起動時に自動マウントされるように、systemd で設定して終了です。
 rclone + Google Drive の、はじめのインストールと設定が割と簡単だったため、甘く見てマウントする設定にしましたが、最後まで完了するのに結構苦労しました。これなら、遠隔地温度管理のためのプログラムが多少面倒になっても、マウントしないで、rclone を直接実行するようにした方が、手っ取り早かったと思いました。

 ● 遠隔温度管理するプログラム

 Google Drive に、gdrive というディレクトリー(フォルダー)を作り、このディレクトリーが、Raspberry Pi の /mnt/gd にマウントされた状態になっています。gdrive に、次の2つのファイルを作成して、パソコンやスマートフォンで編集します。
  • (1) operation.txt(運転の有無を指定する。0: 停止、1:運転)
  • (2) temp.txt(設定温度を指定する。)
  • Raspberry Pi で /mnt/gd のファイルを監視するプログラムを起動すると、10秒に1回、上の2ファイルをチェックします。
  • operation.txt の値が、その時点の運転状態(停止・運転)と違っていたら、停止または運転をします。temp.txt の値が、その時点の設定温度と違っていたら、変更します。
  • 運転状態(設定温度、測定温度、Duty:負荷の出力比率)は、/mnt/gd の csv ファイルに10秒に1回追記し、パソコンやスマートフォンから Google Drive を見て確認できます。
  • 運転停止した時には、/mnt/gd/data に、日時ファイル名の csv ファイルを作成して、運転開始からの運転状態を書き込みます。
 このようにして、遠隔地の温度を、インターネット経由で管理します。

  • 1
  • 2