SORACOM ArcをRaspberry Piで試してみた

先日ソラコムのカンファレンス「SORACOM Discovery 2021」にて非常に素敵な新サービスが発表されました。

その名もSORACOM Arc

blog.soracom.com

今までのSORACOMを使ったIoTシステム開発ではSORACOMが提供するSIMカードやデバイスありきでIoTシステム構築をする必要がありました。

ところが、このSORACOM Arcを使えばそのようなデバイスがなくてもWifiや有線経由でSORACOMのシステムにアクセスすることができるようになります。

つまり、手元にあるデバイスをSORACOMのシステムと連携させてIoTのプロトタイピングを簡単にするということなんです!

もうSORACOMのSIMを注文を待って技術検証する必要がなくなるわけですね。

というわけで今回はリリースしたばかりのSORACOM ArcをRaspberry Piで使えるようにセットアップして動かしてみました。

用意するもの

soratunのインストール

まずは、soratunをインストールします。

soratunを使えばバーチャルSIMの作成から接続までのサポートを行うクライアントエージェントです。

以下のダウンロードページの中でRaspberry Pi向けの実行ファイルをダウンロードします。

[vesion]はダウンロードするバージョンによって異なります。

ダウンロードするファイル名は、soratun_[version]_linux_armv7.tar.gzです。

github.com

ダウンロードするファイルのリンクをコピーして以下のコマンドを実行します

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のユーザーコンソールを開き右上のアカウントのボタンをクリックしてセキュリティをクリックします。

f:id:KMiura:20210626013458p:plain

SORACOM Access Management (SAM) ユーザーの一覧ページがあるので、新規でSAMユーザーを作成します。

f:id:KMiura:20210626013929p:plain

名前と概要の設定が出てきますが、ここは適当なものを設定します。迷ったら下記のやつを真似してもOKです

f:id:KMiura:20210626112929p:plain

作成できたら今度はSAMユーザーにアクセス権限や認証キーを設定します。

先程作成したSAMユーザーをクリックして、ユーザー権限の設定画面を開きます。

f:id:KMiura:20210626113522p:plain

権限設定

権限はドキュメントにあった以下の最低限の構成をコピペします。

右側のドキュメントには用途に応じた権限のテンプレートがあるようですが、いつかArcのテンプレも追加されるといいですね

{
  "statements": [
    {
      "api": ["Sim:createSim", "Sim:createArcSession"],
      "effect": "allow"
    }
  ]
}

以下のように設定できたら保存ボタンをクリックして設定を保存しちゃいましょう

f:id:KMiura:20210626114614p:plain

認証設定

今度は認証設定を行います。

認証設定タブをクリックして認証キーを生成をクリックします。

f:id:KMiura:20210626114948p:plain

クリックされると以下のダイアログが出ます。ダイアログの注意にもある通り、認証キーシークレットは一度ダイアログを閉じると再確認出来ないので、クリップボードにコピーをクリックして手元にメモしておきましょう。

ちなみに、クリップボードにコピーされた文字列はコンマ区切りなので、ファイルで保存するときにはCSV形式で保存すると後で見やすくなります。

f:id:KMiura:20210626115818p:plain

ブートストラップの実行

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の管理をしやすくするために名前をつけておきましょう。

名前の項目にマウスカーソルを当てると名前が設定できるようになるので、そこで変更が出来ます。

f:id:KMiura:20210626223833p:plain

これでSIMの名前を変更したのでここからSIMグループを作成します。

SIMの一覧画面から先程作成したバーチャルSIMを選択して詳細ボタンをクリックします。

f:id:KMiura:20210626225824p:plain

SIMの詳細画面が開くのでグループのセレクトボックスから新しいグループを作成をクリックします。

f:id:KMiura:20210626230740p:plain

グループ名の入力が要求されるので任意の名前を設定します。

f:id:KMiura:20210626231235p:plain

作成が完了してグループ名に設定した名前が表示されたらグループの作成は完了です。

f:id:KMiura:20210626232026p:plain

SORACOM Harvest Dataを有効にする

作成したSIMグループでSORACOM Harvest Dataを使えるように設定します。

Menu → SIMグループから先程作成したSIMグループを選択してSORACOM Harvest DataをONにして保存します。

f:id:KMiura:20210626234335p:plain

センサーの接続

Grove Base HATをRaspberry Piに取り付けたら、温湿度センサーは12, 11ピンに接続します。

f:id:KMiura:20210627023753p:plain

プログラムの作成

次に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を選択して、操作 → データを確認で開きます。

f:id:KMiura:20210627022141p:plain

以下のようにデータの確認画面が表示されてセンサーデータのグラフが表示されたらデータが正常に保存されています。

f:id:KMiura:20210627022946p:plain

まとめ

今回はSORACOM Arcを使ってRaspberry Piからセンサーの値を送信してみました。

SORACOM ArcはSORACOM Discoveryでも話していた「IoTの民主化」を体現された究極のサービスと言っても過言ではありません。

そしてsoratunを使えば面倒な通信の設定がコマンド操作だけであっという間に終わってしまうのでめちゃくちゃ便利です。

これさえあればSORACOMのサービスと連携したIoT開発がより手軽になって「IoTの民主化」がさらに加速していくことでしょう!