#概要
本コンテンツは、JAWS DAYS 2017のIoTハンズオン向けに作成したものです。
RaspberryPiに3Gドングルを接続し、SORACOM HarvestでRaspberryPiのCPU温度やクロックの変化を可視化します。RaspberryPi以外にセンサー類を必要としませんので、手軽に試すことができます。
##SORACOM Harvestとは
SORACOM Harvest(以下、Harvest) とは、IoT デバイスからのデータ収集および可視化サービスです。SORACOM Air が提供するセルラー通信を使って、IoT デバイスのセンサーデータ等を手間なくクラウドにアップロードすることができます。アップロードされたデータは、SORACOMプラットフォーム上に 40 日間に渡って保存されます。お客様は、保存されたデータを SORACOM のユーザーコンソールでグラフ化することができます。(公式サイトより引用)
SORACOM Harvest Getting Started
###使い方は簡単、HTTP(またはUDP/TCP)でPOSTするだけ
IoTデバイスからのデータをクラウドにアップロードする場合、通常は暗号化して認証情報をつける必要があります。SORACOM Harvestの場合、SORACOMのエンドポイントにJSON形式のデータをcurlコマンドなどでHTTP POSTするだけと非常にお手軽です。SIM自体が認証キーとなるので認証情報は不要で、暗号化しないためCPUリソースをあまり消費しません。しかもキャリア閉域網内で処理されるため、非常にセキュアです。当然ながら、SORACOM Airで接続していない場合はHarvestを利用することはできません。
#必要な機材
- PC
- RaspberryPi 2または3
- micro USB電源
- micro SDカード (8GB以上)
- SORACOM Air SIM
- 3G USBドングル (本手順ではFS01BUまたはAK-020を使用)
#前提条件
- SORACOMアカウントをもっていること。アカウント開設手順はこちら
- RaspberryPiにRaspbianがインストール済みで、PCからSSHでログインまたはHDMI接続のモニタでターミナル操作ができること。手順はこちら。Raspbianは[Release date:2017-01-11]で動作確認しています
#[ToDo 1] RaspberryPiをSORACOM Airでインターネット接続する
RaspberryPiにSORACOM Air SIMの入った3G USBドングルを接続し、インターネットに接続します。手順はSORACOM公式ハンズオン用テキストを参照します。テキスト内の1章と3章のみ使用しますので注意して下さい。
1章 ユーザーコンソールを使用してAir SIMを管理する
3章 Air SIMを使って、インターネットに接続する
※connect_air.sh
を実行してインターネット接続が完了したらその画面はそのままにし、別ウインドウでSSH接続して続きを進めてください。
##3章中の$ curl ifconfig.io
でIPv6アドレスが返ってきたら
以下のコマンドを試してみてください。
$ curl globalip.me
54.250.252.xx (IPアドレスが表示されます)
##アップデートとvimのインストール
SORACOMによるインターネット接続が確立したら、RaspberryPiのターミナル画面で下記を実行します。
$ sudo apt-get update
$ sudo apt-get install -y vim
#[ToDo 2] SORACOMユーザーコンソールでHarvestの設定をする
グループを作成してHarvest機能をONに設定し、SIMをグループに追加します。SORACOM Harvestは有料サービスです。利用していなくても毎日課金されますので、使わなくなったら機能をOFFにしましょう。
- SORACOMユーザーコンソールにログインする
- 右上のMENUボタン -> [SIMグループ]の順にクリックする
- [+追加]をクリックする
- 任意のグループ名を入力し[グループ作成]をクリックする
- 作成したグループをクリックする
- [SORACOM Harvest 設定]を展開し[ON]に変更する
- [保存]をクリックする
- 注意を読み[OK]をクリックする
- 右上のMENUボタン -> [SIM 管理]の順にクリックする
- 使用中のSIMを選択し、[操作] -> [所属グループ変更]の順にクリックする
- 先ほど作成したグループを選択し[グループ変更]をクリックする
- グループが変更されたことを確認する
#[ToDo 3] RaspberryPiのCPU情報を表示させる
RaspberryPiにはじめから入っているvcgencmdというコマンドを使ってCPUの情報を取得します。以下、RaspberryPiにSSH接続して実行して下さい。
##CPUクロックを取得
$ vcgencmd measure_clock arm
frequency(45)=600062000
##CPU温度を取得
$ vcgencmd measure_temp
temp=41.2'C
##CPU電圧を取得
$ vcgencmd measure_volts
volt=1.2000V
#[ToDo 4] CPUクロック/温度のデータをSORACOM HarvestにPOSTする
PythonでCPUクロック/温度のデータをSORACOM Harvestに3秒に1回POSTします。CPUクロックは数値が大きいので10M(10,000,000)で割った値を使用します。
$ vim cpu-harvest.py
#coding: utf-8
import commands
import time
import json
import requests
try:
while 1:
# 開始時刻を記録
start_time = time.time()
# Raspbianの制御コマンド(vcgencmd)を実行
# CPU温度を取得
temp = commands.getoutput("vcgencmd measure_temp").split('=')
# CPUクロックを取得
clock = commands.getoutput("vcgencmd measure_clock arm").split('=')
# 温度とクロックを表示
print temp[1] ,
print clock[1]
# 数値型に変換(温度とクロックのレンジを合わせるために、クロックは10Mで割る)
temp_n = float(temp[1][0:-2])
clock_n = int(clock[1]) / 10000000
# JSONを整形
json_data = {"clock/10M": clock_n, "temp": temp_n}
encode_json_data = json.dumps(json_data)
# SORACOM Harvestに送信
print requests.post('http://harvest.soracom.io', data=encode_json_data, headers={'Content-Type': 'application/json'})
# 終了時刻を記録
stop_time = time.time()
# (3 - 送信にかかった時間)秒待ってループ
wait = start_time - stop_time + 3
if wait > 0:
time.sleep(wait)
# キーボード例外を検出
except KeyboardInterrupt:
# 何も処理をしない
pass
Pythonコードを実行します。停止する場合は**ctrl + C
**。
<Response [201]>
が表示されない場合は、「[ToDo 2] SORACOMユーザーコンソールでHarvestの設定をする」で設定が誤っていないか確認して下さい。
$ python cpu-harvest.py
43.3'C 900000000
<Response [201]>
42.8'C 900000000
<Response [201]>
42.2'C 600000000
<Response [201]>
#[ToDo 5] SORACOM Harvestでグラフ表示させる
- SORACOMユーザーコンソールにログインする
- 使用中のSIMを選択し、[操作] -> [データを確認]の順にクリックする
- 自動更新を[ON]に変更する
- しばらく待つとグラフが表示される
#[ToDo 6] UnixBenchを実行してCPUクロック/温度を変化させる
UnixBenchというGoogleが配布しているベンチマークツールを実行することで、CPUに負荷をかけてクロックや温度を変化させることができます。[ToDo 4]とは別のウインドウで実行(ターミナルを複数立ち上げる)することで、グラフ表示を続けながらCPUに負荷をかけることができます。
##UnixBenchをダウンロードしてコンパイルする
$ wget https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/byte-unixbench/UnixBench5.1.3.tgz
$ tar zxvf UnixBench5.1.3.tgz
$ cd UnixBench
$ make
##UnixBenchを実行する
-c 4
は4コアで実行の意味。
$ ./Run -c 4
# # # # # # # ##### ###### # # #### # #
# # ## # # # # # # # ## # # # # #
# # # # # # ## ##### ##### # # # # ######
# # # # # # ## # # # # # # # # #
# # # ## # # # # # # # ## # # # #
#### # # # # # ##### ###### # # #### # #
Version 5.1.3 Based on the Byte Magazine Unix Benchmark
Multi-CPU version Version 5 revisions by Ian Smith,
Sunnyvale, CA, USA
January 13, 2011 johantheghost at yahoo period com
#あとかたづけ
##SORACOM Air SIMは使うけどHarvestは使わない
[ToDo 2]を参考に[SORACOM Harvest 設定]をOFFにしてください。
##SORACOM Air自体使わない
###利用中断
SIMを「利用中断中」状態にすると基本料金の課金が1日5円に減額されます。ただし、「利用中断中」状態への変更1回につきSIM 1枚あたり300円の設定変更料金が発生します。
###解約
解約するとそのSIMは一切利用できなくなりますが、料金はかからなくなります。