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 を利用することにしました。
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 ファイルを作成して、運転開始からの運転状態を書き込みます。
このようにして、遠隔地の温度を、インターネット経由で管理します。