Cayenne (myDevice.com)でRaspberry Piをモニタリングする

**今回のアドベントカレンダーではRaspberry PiでLoRaWANゲートウェイを構築した際のお話を書かせて頂く予定でしたが、よんどころない事情により原稿を書き上げることができなかったため、この記事でお茶を濁らせて頂きます。
本来掲載する予定だった内容については近日中に書き上げて公開する予定なので何卒ご容赦のほどお願いいたします**
m(_ _)m


最近、IoTデバイスの情報を視覚化するために利用しているIoTサービス[Cayenne](https://developers.mydevices.com/cayenne/features/)を使ってRaspberry Piの状態監視を行ったら恐ろしく簡単だったのでその手順の紹介です。
事の発端はつい先日国内でも販売が開始されたRaspberry Pi 4を購入したのですが、世の中の噂ではRaspberry Pi 4は発熱が凄まじく、冷却ファンなどを備えたちゃんとしたケースに収納しないと発熱によりCPUの性能が抑えられてしまい性能を発揮できないと言われていたため、はたして自分のRaspberry Pi 4はどの程度発熱するのかを調べてみようと思い立った事でした。
とりあえずRaspberry Pi 4に負荷をかけてCPUの温度を見るだけなら`stress`コマンドなどでCPUに負荷をかけながら`cat /sys/class/thermal/thermal_zone0/temp`や`vcgencmd measure_temp`などを実行すれば良いのですが、流石にそれだと味気ないのでもう少し格好良くしたかったのです。
で、最近使い始めたIoTデバイス向けのサービスCayenneでは比較的簡単な手順でいろいろな情報を収集しそれをグラフィカルに表示したり操作したりできるのでこれを試してみた次第です。
Cayenneのサービス自体は過去にもArduinoやM5Stick-Cなどでも利用したことがあるのである程度APIも使ったことがるからそんなに苦労ぜずともスクリプトとかを書けるかな？と思ったら、そんな心配は全く無用でCayenneのコントロールパネルでのマウスのクリック数回と数行のテキストのコピペだけで目的が達成されてしまいました！

とりあえず、CayenneのIoTサービスを使ったことがない方のためにCayenneのサービスにアカウントを登録するところから説明していますが、すでにアカウントを持っているなら本当にあっと言う間に設定は完了してしまいます。

### まずはCayenneにアカウントを作る
[CayenneのWebサイト](https://developers.mydevices.com/cayenne/features/)にアクセスして「無料で登録」(SIGN UP FREE)をクリックします。

<img width="625" alt="スクリーンショット 2019-11-28 18.38.29.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148717/bc3fbe3d-0fec-6ba5-407d-6e0c190a9674.png">

登録フォームが表示されるので、「名前」(First Name)、「名字」(Last Name)、「メールアドレス」(Email Address)、「パスワード」(Password)をフォームに入力し、「利用規約」（MyDevices Cayenne Terms.)を読んで納得したならば「同意する」(I agree)のチェックボックスをチェックして「無料で始める」(GET STARTED FREE)をクリックするだけです。

<img width="620" alt="スクリーンショット 2019-11-28 18.39.49.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148717/1c30ecfe-091c-3f9b-c15e-4c8550387eeb.png">

### Raspberry PiをCayenneのコントロールパネルに登録する
Cayenneにアカウントを登録するとすぐにCayenneのコントロールパネルにリダイレクトされてプロジェクトを開始するデバイスの選択画面が表示されるのいで、ここから「Raspberry Pi」をクリックします。

<img width="640" alt="スクリーンショット 2019-11-28 17.24.52.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148717/5e858196-d7f2-998b-85d3-62ed4561a537.png">

続いてCayenneが推奨する動作環境である「Raspbian」のインストールについての確認画面が表示されますが、ここではすでにお使いのRaspberry PiにはRaspbianがインストールされている前提で話を進めるので「次へ」(Next)をクリックします。

<img width="632" alt="スクリーンショット 2019-11-28 17.26.10.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148717/93a3418b-8a66-259d-9ace-57e8ec0dc186.png">

次のステップとしては「スマートフォンアプリをインストールする」と「ターミナルやSSHを使う」の2つの手順についての説明が表示されますが、ここでは2番目の「ターミナルやSSHを使う」を行いました。
※1番目の手順「スマートフォンアプリをインストールする」も説明のビデオを見る限りは簡単そうですが今のところ試してはいません。

<img width="616" alt="699c8c82-2b20-eec5-825a-14c249d87d89.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148717/26240800-c4d5-8cf6-d29f-4abe9aeb4415.png">

Raspberry Piで動作しているRaspbianにターミナルやSSH経由でログインして、先ほどの「ターミナルやSSHを使う」の説明に表示されているコマンドラインをそこにコピーして実行すればCayenneのクライアントアプリケーションがRaspberry Piへとインストールされます。

`wget https://cayenne.mydevices.com/dl/rpi_xxxxxxxxxx.sh`を実行 (rpi_xxxxxxxxxx.shの部分はインストールする機器ごとに Cayenneのコントロールパネルで自動的に生成してくれる。)

```
pi@raspberrypi:~ $ wget https://cayenne.mydevices.com/dl/rpi_xxxxxxxxxx.sh
--2019-11-28 08:35:16--  https://cayenne.mydevices.com/dl/rpi_xxxxxxxxxx.sh
Resolving cayenne.mydevices.com (cayenne.mydevices.com)... 52.206.177.93, 54.156.191.83
Connecting to cayenne.mydevices.com (cayenne.mydevices.com)|52.206.177.93|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1392 (1.4K) [text/x-sh]
Saving to: ‘rpi_xxxxxxxxxx.sh’

rpi_xxxxxxxxxx.sh   100%[===================>]   1.36K  --.-KB/s    in 0s

2019-11-28 08:35:18 (10.5 MB/s) - ‘rpi_xxxxxxxxxx.sh’ saved [1392/1392]

pi@raspberrypi:~ $
```
管理者権限(sudo)で`sudo bash rpi_xxxxxxxxxx.sh -v`を実行

```
pi@raspberrypi:~ $ sudo bash rpi_xxxxxxxxxx.sh -v
rpi_xxxxxxxxxx.sh
continuing as new install...
--2019-11-28 08:36:37--  https://updates.mydevices.com/raspberry/myDevices.tar.gz
Resolving updates.mydevices.com (updates.mydevices.com)... 54.148.225.117
Connecting to updates.mydevices.com (updates.mydevices.com)|54.148.225.117|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 103721 (101K) [application/x-gzip]
Saving to: ‘/home/pi/myDevices.tar.gz’

/home/pi/myDevices. 100%[===================>] 101.29K   237KB/s    in 0.4s

2019-11-28 08:36:38 (237 KB/s) - ‘/home/pi/myDevices.tar.gz’ saved [103721/103721]

./myDevices/
./myDevices/myDevices.service
./myDevices/live_network.ini
./myDevices/crontab.sh
./myDevices/tightvncsetup.sh
./myDevices/Cayenne-Agent/
./myDevices/Cayenne-Agent/setup.py
./myDevices/Cayenne-Agent/myDevices/
./myDevices/Cayenne-Agent/myDevices/schedule/
```

```

Installed /usr/local/lib/python3.7/dist-packages/enum34-1.1.6-py3.7.egg
Searching for requests==2.21.0
Best match: requests 2.21.0
Adding requests 2.21.0 to easy-install.pth file

Using /usr/lib/python3/dist-packages
Searching for psutil==5.5.1
Best match: psutil 5.5.1
Adding psutil 5.5.1 to easy-install.pth file

Using /usr/lib/python3/dist-packages
Finished processing dependencies for myDevices==2.0.3
writing list of installed files to '/etc/myDevices/uninstall/installed_agent'
Thu 28 Nov 08:36:59 GMT 2019 myDevices installed for Python 3.7.3
(98%)
Thu 28 Nov 08:36:59 GMT 2019 Configuring os and agent
RealVNC detected
(100%)
Thu 28 Nov 08:37:03 GMT 2019 Install finished
(100%)
Thu 28 Nov 08:37:04 GMT 2019 Install cleanup finished
Your system will reboot!
Connection to 192.168.xxx.xxx closed by remote host.
Connection to 192.168.xxx.xxx closed.
```

Raspberry Pi上でのインストールの進捗に合わせてCayenneのコントロールパネルにもインストールの進捗が表示されます。

<img width="627" alt="スクリーンショット 2019-11-28 17.37.15.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148717/6e89df48-d38a-1a21-53eb-a5a8e9b91451.png">

RaspbianへのCayenneクライアントのインストールが完了するとRaspberry Piが再起動され、無事にCayenneクライアントの動作が始まれば自動的にCayenneのWebページにRaspberry Piの情報が表示されるはずです。

<img width="623" alt="スクリーンショット 2019-11-28 17.40.13.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148717/a998416a-7b53-cf61-a8de-b1e92eca8114.png">

## で、結局のところどうだったかといえば…
CPUの温度をモニタリングしながらstressでCPUの負荷を100%にした状態で放置したところ、ほぼ58度くらいで温度の上昇は止まりました。
この時のヒートシンク表面の温度は45度くらいでした。
<img width="910" alt="スクリーンショット 2019-11-28 12.16.09.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148717/7b99b70a-6a9f-d5f3-f186-16b5e1413bdb.png">

<img width="1625" alt="スクリーンショット 2019-11-28 12.39.55.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148717/8b68b6df-7da2-ba3a-edec-915620dce98a.png">
<img width="40%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148717/3f94c464-d1e4-4a15-55d4-325b7ba5a3e2.jpeg">

ほぼCPUの負荷がない状態でのCPU温度は43度ほど、ヒートシンクの表面温度は35度ほどなので、今のところは強制空冷は無くともまずまず大丈夫そうな感じです。

<img width="1622" alt="スクリーンショット 2019-11-28 12.49.45.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148717/b41a63f2-1a6e-288b-3790-d4cf43ab5021.png">
<img width="40%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148717/e50fe2e8-b499-5d59-752a-6a721bb5dfeb.jpeg">

ちなみに計測時の室温はArduinoに接続したBME280での測定で28度ほどだったので、実際には26度程度だと思われます。
<img width="610" alt="スクリーンショット 2019-11-28 13.01.09.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148717/9fdc28f7-985f-8b1e-2c72-5abfe135442d.png">