先日ソラコムのカンファレンス「SORACOM Discovery 2021」にて非常に素敵な新サービスが発表されました。
その名もSORACOM Arc
今までのSORACOMを使ったIoTシステム開発ではSORACOMが提供するSIMカードやデバイスありきでIoTシステム構築をする必要がありました。
ところが、このSORACOM Arcを使えばそのようなデバイスがなくてもWifiや有線経由でSORACOMのシステムにアクセスすることができるようになります。
つまり、手元にあるデバイスをSORACOMのシステムと連携させてIoTのプロトタイピングを簡単にするということなんです!
もうSORACOMのSIMを注文を待って技術検証する必要がなくなるわけですね。
というわけで今回はリリースしたばかりのSORACOM ArcをRaspberry Piで使えるようにセットアップして動かしてみました。
用意するもの
- Raspberry Pi 3 Model B (OSはRaspbian buster)
- Grove Base HAT for Raspberry Pi
- Grove Temperature&Humidity Sensor
soratunのインストール
まずは、soratunをインストールします。
soratunを使えばバーチャルSIMの作成から接続までのサポートを行うクライアントエージェントです。
以下のダウンロードページの中でRaspberry Pi向けの実行ファイルをダウンロードします。
[vesion]
はダウンロードするバージョンによって異なります。
ダウンロードするファイル名は、soratun_[version]_linux_armv7.tar.gz
です。
ダウンロードするファイルのリンクをコピーして以下のコマンドを実行します
wget https://github.com/soracom/soratun/releases/download/v[version]/soratun_[version]_linux_armv7.tar.gz
ダウンロードしたtar.gzファイルを以下のコマンドで展開します。
tar xvf soratun_[version]_linux_armv7.tar.gz
展開したフォルダ内にあるsoratunの実行ファイルをシステム上のディレクトリにコピーします。
sudo cp soratun_[version]_linux_armv7/soratun /usr/local/bin/
これでインストールは完了です。あとは以下のコマンドを実行してエラーが出ずにsoratunのヘルプが表示されたらコマンドが正常に機能しています。
soratun --help
ブートストラップ
さて、soratunのインストールを済ませたら今度はsoratunでSORACOMのサービスに接続するためにブートストラップを行います。
ブートストラップとはデバイス側から新しいバーチャル SIM/Subscriber を作成することを指します(ドキュメントからまんま引用)。
ブートストラップを行うには3つの方法がありますが、今回はSIMがなくてもできるSORACOM API の認証キーを使用したブートストラップ
をやってみます。
SAMユーザを作成
SORACOMのユーザーコンソールを開き右上のアカウントのボタンをクリックしてセキュリティ
をクリックします。
SORACOM Access Management (SAM) ユーザーの一覧ページがあるので、新規でSAMユーザーを作成します。
名前と概要の設定が出てきますが、ここは適当なものを設定します。迷ったら下記のやつを真似してもOKです
作成できたら今度はSAMユーザーにアクセス権限や認証キーを設定します。
先程作成したSAMユーザーをクリックして、ユーザー権限の設定画面を開きます。
権限設定
権限はドキュメントにあった以下の最低限の構成をコピペします。
右側のドキュメントには用途に応じた権限のテンプレートがあるようですが、いつかArcのテンプレも追加されるといいですね
{ "statements": [ { "api": ["Sim:createSim", "Sim:createArcSession"], "effect": "allow" } ] }
以下のように設定できたら保存
ボタンをクリックして設定を保存しちゃいましょう
認証設定
今度は認証設定を行います。
認証設定タブをクリックして認証キーを生成
をクリックします。
クリックされると以下のダイアログが出ます。ダイアログの注意にもある通り、認証キーシークレットは一度ダイアログを閉じると再確認出来ないので、クリップボードにコピー
をクリックして手元にメモしておきましょう。
ちなみに、クリップボードにコピーされた文字列はコンマ区切りなので、ファイルで保存するときにはCSV形式で保存すると後で見やすくなります。
ブートストラップの実行
SAMユーザーを作成したところでブートストラップを実行します。
ブートストラップは以下のコマンドで実行します。
arc.json
とはSORACOM Arcの設定ファイルでブートストラップを実行したときに作成されます。
SAMユーザーを変更するようなことがなければこの作業は1回だけやれば良さそうです
soratun --config ~/arc.json bootstrap authkey
コマンドを実行するといくつか質問が来ます。
最初の質問では認証キーIDを入力します。認証キーIDはkeyId-
から始まる文字列です。
✗ SORACOM API auth key ID (starts with "keyId-"):
次の質問では認証キーシークレットを入力します。認証キーシークレットはsecret-
から始まる文字列です。
✗ SORACOM API auth key (starts with "secret-"):
今度はバーチャルSIMを作成するカバレッジを選択します。今回はJapan coverage
を選択します。
Use the arrow keys to navigate: ↓ ↑ → ← ? Coverage to create a new virtual SIM: ▸ Global coverage (g.api.soracom.io) Japan coverage (api.soracom.io)
実行後に以下のようにバーチャルSIM IDができて、arc.json
の保存先のパスが表示されたらブートストラップは完了です。
Virtual subscriber SIM ID: 1234567890 Created/updated configuration file: /home/pi/arc.json
接続確認
それでは接続確認です。soratunを使ってsoracomのプラットフォームに接続するには以下のコマンドを使います。
sudo soratun --config ~/arc.json up
実行するとログが表示されるので、ちゃんと接続できるか別ターミナルで以下のコマンドを実行します。
ping pong.soracom.io
無事に応答が返っていればSORACOMのプラットフォームに接続出来ています。
systemdを使う
ここは必須ではありませんが、Raspberry Piを立ち上げたときにSORACOMの接続をするためには、systemdを使う方法があります。
そしてそのserviceファイルはなんと先程ダウンロードしたsoratunの実行ファイル一式の中のsoratun_[version]_linux_armv7/soratun.service.sample
に入っています。
なので、以下のコマンドでserviceファイルを保管しておきます。
sudo cp soratun_[version]_linux_armv7/conf/soratun.service.sample /etc/systemd/system/soratun.service
あと、設定ファイルの内容に合わせてarc.json
も以下のコマンドでコピーしておきます。
sudo cp arc.json /etc/
以下のコマンドでsoratun.serviceを立ち上げます。
sudo systemctl start soratun.service
立ち上げた後にping pong.soracom.io
を実行してシステムから応答があればサービスは正常に起動しています。
この時点でバックグラウンドで起動しているのでこの先の作業はターミナル一つだけでできるようになります。
Raspberry Piの起動時にsoratunを立ち上げるには以下のコマンドを実行してデーモンに登録します。
sudo systemctl enable soratun.service
センサーデータを送信する
これでSIMを使わずにRaspberry PiをSORACOMのプラットフォームに接続ができるようになりました。
ということでここからRaspberry Piでとったセンサーの値をSORACOM Harvest Dataに送信してみます。
SIMグループの作成
SORACOMのコンソール画面にあるSIMの一覧で先ほど作成したバーチャルSIMには名前が何もありません。
なので作業するときにSIMの管理をしやすくするために名前をつけておきましょう。
名前の項目にマウスカーソルを当てると名前が設定できるようになるので、そこで変更が出来ます。
これでSIMの名前を変更したのでここからSIMグループを作成します。
SIMの一覧画面から先程作成したバーチャルSIMを選択して詳細
ボタンをクリックします。
SIMの詳細画面が開くのでグループのセレクトボックスから新しいグループを作成
をクリックします。
グループ名の入力が要求されるので任意の名前を設定します。
作成が完了してグループ名に設定した名前が表示されたらグループの作成は完了です。
SORACOM Harvest Dataを有効にする
作成したSIMグループでSORACOM Harvest Dataを使えるように設定します。
Menu → SIMグループ
から先程作成したSIMグループを選択してSORACOM Harvest Data
をONにして保存します。
センサーの接続
Grove Base HATをRaspberry Piに取り付けたら、温湿度センサーは12, 11ピンに接続します。
プログラムの作成
次にRaspberry Piでセンサーの値をHarvestに送信するプログラムを用意します。
以下のコードをRaspberry Pi上の任意のディレクトリに保存します。
# coding: utf-8 import time import seeed_dht import requests sensor = seeed_dht.DHT('11', 12) while True: humi, temp = sensor.read() if not humi is None: print('Humidity: {0:.1f}%, Temperature: {1:.1f}'.format(humi, temp)) data = {'Humidity': humi, 'Temperature': temp} res = requests.post('http://harvest.soracom.io', json=data) print(res.status_code) else: print("None") time.sleep(30)
このプログラムを実行するときに使うライブラリを以下のコマンドでインストールします
sudo pip3 install seeed-python-dht
動作確認
いよいよ動作確認です。以下のコマンドで先程作成したプログラムを起動します。
python3 send_harvest.py
実行後、センサーの値が表示されてステータスコードが201
と表示されていたらSORACOMにデータ送信は出来ています。
ちゃんとデータが保存できてるか確認
それではちゃんとデータが取れているかを確認してみます。
コンソール画面のSIM一覧からSIMを選択して、操作 → データを確認
で開きます。
以下のようにデータの確認画面が表示されてセンサーデータのグラフが表示されたらデータが正常に保存されています。
まとめ
今回はSORACOM Arcを使ってRaspberry Piからセンサーの値を送信してみました。
SORACOM ArcはSORACOM Discoveryでも話していた「IoTの民主化」を体現された究極のサービスと言っても過言ではありません。
そしてsoratunを使えば面倒な通信の設定がコマンド操作だけであっという間に終わってしまうのでめちゃくちゃ便利です。
これさえあればSORACOMのサービスと連携したIoT開発がより手軽になって「IoTの民主化」がさらに加速していくことでしょう!