Raspberry Pi でSORACOM 接続＋MQTTをしてみよう 前編  [Step 1 ～ Step 5]

# はじめに
この記事は、[春のIoTリレーハンズオン@関西](http://www.slideshare.net/ichiroohkini/jawsugiot-iot)の一環として開催される[＜SORACOM接続 + MQTT編>](https://soracom-ug-kansai.doorkeeper.jp/events/39574)のハンズオン用資料です。
本ハンズオンでは、RaspbianをインストールしたRaspberry Pi（以降、ラズパイ）でSORACOMのサービスの基本部分をひととおり使えるようになるまでの手順をまとめています。
GPIOにはA/DコンバータMCP3002を用い、フォトダイオードのアナログ入力を行います。

# [Step 1.] SORACOMユーザーコンソールにアクセス
[SORACOMユーザーコンソール](https://console.soracom.io/#/)は、SORACOM Airの管理を行うサイトです。自身の所有しているSORACOM AirのSIMの休止／再開や速度変更、グループ設定などをブラウザ上で行うことができます。
ここでは、SORACOMコンソールにログインして、自身のSIMを特定し、簡単な管理操作を行います。
## 【ToDo 1.1】SORACOMユーザーコンソールにログイン
自身のPCのブラウザで[SORACOMコンソール](https://console.soracom.io/#/)を表示させ、SORACOMアカウントでログインします。
![キャプチャ02.PNG](https://qiita-image-store.s3.amazonaws.com/0/4092/0d653422-bb64-2873-a43f-764df205a6a5.png)
メールアドレス・パスワードは、ご自身のSORACOMアカウントやハンズオン指定のSORACOMアカウントを入力して「ログイン」ボタンをクリックします。
## 【ToDo 1.2】自分のSORACOM AirのSIMのIMSI（イムジー）を特定しておく
SIM管理画面が表示されるのでSIMの名前などを入力し検索して、自分のIMSIをパソコン（のエディタなど）にコピーしておいてください。
![キャプチャ03.PNG](https://qiita-image-store.s3.amazonaws.com/0/4092/1ee848f3-e577-f6d0-a081-dbcb18d0357d.png)

# [Step 2.] SORACOM APIリファレンスでAPIを試す
[SORACOM API リファレンス](https://dev.soracom.io/jp/docs/api/)は、[Swagger](http://swagger.io/)を用いたインタラクティブなWeb APIドキュメントサイトで、ユーザの認証データを用いてAPIの動作確認が可能となっています。
ここでは、速度変更のAPIを用いて実際に自身のSIMの速度を変更してみます。
## 【ToDo 2.1】SORACOM APIでスピード変更してみる
[SORACOM APIリファレンス](https://dev.soracom.io/jp/docs/api/)サイトにアクセスし「SORACOM ユーザーコンソールのアカウントによる認証:」欄のメールアドレス・パスワードを入力し「認証」ボタンをクリックします。
メールアドレス・パスワードはご自身のSORACOMアカウントやハンズオン指定のSORACOMアカウントを使います。
認証がうまくいくと「認証」ボタンの下に「認証OK」と表示がされ、APIが利用できるようになります。
![image](https://qiita-image-store.s3.amazonaws.com/0/4092/518acabd-e0a9-005a-26f1-75eb229a30ec.png)
## 【ToDo 2.2】update_speed_classを実行してスピード変更
・API Key, Token, Operator IDが表示されているのを確認。SORACOMサービスを用いたソースコードに使うことができます。
・下方にスクロールしてSubscriberサブツリー下のupdate_speed_classをみつけてクリックします。
![image](https://qiita-image-store.s3.amazonaws.com/0/4092/e0c80661-65e2-a0e7-a879-131e7f399702.png)
・Parametersエリアの「imsi」欄に自分のSORACOM AirのIMSIを入力します。
・（右側のbodyをクリックして）「speed_class」欄に速度クラスを示すJSONパラメータをいれます。
・「Try It out!」ボタンをクリックしAPIを実行。
![image](https://qiita-image-store.s3.amazonaws.com/0/4092/b22d8efa-320c-7262-4f37-18c7681e466e.png)
・[SORACOMユーザーコンソール](https://console.soracom.io/#/)のSIM管理画面で更新ボタンをクリックした後、自分のIMSI番号を持つSIMの速度クラスを確認する。API実行で指定したspeed_classになっていれば正常に実行されています。
![image](https://qiita-image-store.s3.amazonaws.com/0/4092/f603b896-91c4-ead5-4da5-bb5d2ea87431.png)
ここまではPC上のブラウザの操作でした。次からはラズパイを使います。

# [Step 3.] ラズパイの電源をいれてPCからターミナル接続する
ラズパイにWifiドングルまたはLANケーブルをつなぎ、電源を入れます。ターミナルで操作を行う上で必要なVimエディタのインストールを行います。ラズパイはデフォルトでviしか入っていません。Vim(Vi improved)を入れ設定ファイルをカスタマイズしておくことで、作業効率があがるでしょう。
※nanoなど、その他のエディタを用いる場合は割愛してください。

## 【ToDo 3.1】ラズパイを起動しVimエディタの準備
・PC上のターミナルやTeraTermなどでログインし、piユーザー（パスワード: raspberry）でログインしておきます。
・WiFiもしくは有線LANであらかじめインターネットに接続しておき、以下のコマンドでvimの最新版を入手しておきます。

```bash
$ sudo apt-get update
$ sudo apt-get install vim
```

好みに応じてvimの設定ファイル`~/.vimrc`を以下のようにしておくと後々操作しやすいかも。

```bash
$ vi ~/.vimrc
```

```vim:.vimrc 
"#####表示設定#####
set number "行番号を表示する
set title "編集中のファイル名を表示
set showmatch "括弧入力時の対応する括弧を表示
syntax on "コードの色分け
set tabstop=4 "インデントをスペース4つ分に設定
""
```

# [Step 4.] ラズパイからCLIとSDKをいじる
ラズパイ上にSORACOM SDKをインストールし、CLI操作を行います。SORACOM SDKはRubyがインストールされていればどの環境でも利用可能ですが、後ほどSORACOM SDKを用いたソースを使うことと、使用PC（のRubyやシェルの振る舞い）にかかわらず、同一の操作ができることからラズパイにインストールしたSORACOM SDK for Rubyで操作を行います。
※時間があれば、ご自身のPC(Mac, Win, Linuxなど）でRuby環境を構築してSORACOM SDK for Rubyをインストールしてみてください。
## 【ToDo 4.1】SORACOM SDKのインストール
[SORACOM SDK for Ruby](https://dev.soracom.io/jp/tools/)を参照して`gem`コマンドを使いSORACOM SDKをインストールする。ラズパイは`sudo`が必要である。
## 【ToDo 4.2】コマンドライン補完
[SORACOM SDK for Ruby](https://dev.soracom.io/jp/tools/)を参照してコマンドライン補完の指定を行う。ラズパイはデフォルトでbashが使われているため、 `~/.bashrc`の最下行に指定を行うとよい（sourceコマンドによる反映を忘れないようにする）。
確認：以下の操作を行って、サブコマンドが補完されるか確認する。

```bash
$ soracom sub[tab] #subとキー入力後タブキーを押下
$ soracom subscriber #subscriberサブコマンドが補完されればOK
```

## 【ToDo 4.3】.bashrcに認証情報の追加と速度変更による確認 
コマンドおよびスクリプトで必要となる認証情報を`~/.bashrc`の最下行に追加する。
`your mail`および`your password`はSORACOMコンソールでログインするときに使ったものを入力にします。sourceコマンドによる反映を忘れないようにして下さい。

```bash:.bashrc
export SORACOM_EMAIL='your mail'
export SORACOM_PASSWORD='your password'
```

確認：以下の操作を行って、サブコマンドが補完されるか確認します。
`your IMSI`は自分のSIMの10桁のIMSI番号を入力します。

```bash
$ soracom subscriber update_speed_class --imsi 'your IMSI' --speed-class 's1.fast'
```

[SORACOMコンソール](https://console.soracom.io/#/)で自分のSIMの速度がs1.fastになっているか確認します。
![キャプチャ.PNG](https://qiita-image-store.s3.amazonaws.com/0/4092/fbe2ae40-fa85-d554-4117-92e7f284295a.png)

## 【ToDo 4.4】すべてのSIMの速度をs1.fastにするスクリプトの実行
[SORACOM SDK使用例サンプルコード](https://github.com/soracom/soracom-sdk-ruby#%E4%BD%BF%E7%94%A8%E4%BE%8B)をコピーペーストしてホームディレクトリなどに`sora01.rb`などとして保存し、実行してみます。
[SORACOMコンソール](https://console.soracom.io/#/)ですべてのSIMの速度がs1.fastになっているか確認します。

```bash
$ vi sora01.rb
$ ruby sora01.rb
found 40 SIMs.
change plan to s1.fast
done
```

## 【ToDo 4.5】課題：自分のIMSI番号のSIMだけ速度を変更するスクリプトの作成
`sora01.rb`をコピーして自分のIMSI番号のSIMだけs1.standardにするスクリプトを作成し、実行・確認する。
また、自分のIMSI番号のSIMだけ使用可能にしてください（ヒント: /subscribers/{imsi}/activate）

```bash
$ cp sora01.rb sora02.rb
$ vi sora02.rb #ソースを書き換える
$ ruby sora02.rb
```
ブラウザで[SORACOMコンソール](https://console.soracom.io/#/)を確認してください。
状態が「使用中」に、速度クラスが「s1.standard」になればOKです。
![image](https://qiita-image-store.s3.amazonaws.com/0/4092/d179ba2c-57c3-003b-90c1-e2a80f4446e7.png)
次からUSBモデムで実際に接続します。
【ToDo 4.5】の[答え](https://gist.github.com/yoshidaken1/e04c8b9da2b974c3228f#file-sora02-rb)

# [Step 5.] ラズパイからSORACOM Airを接続できるようにする
SORACOM Airを装着したUSBモデム「FS01BU」をUSBコネクタに接続し、SORACOM Airの接続スクリプトの作成と自動起動の指定をします。
USBモデム「FS01BU」はラズパイが起動している状態でUSBコネクタに差し込むとうまく認識しない場合があるため、差し込む前にあらかじめラズパイをシャットダウンしておきます。

```bash
$ sudo halt
```

## 【ToDo 5.1】SORACOM Air接続スクリプトを自動起動させる
SORACOM AirとUSBモデムFS01BUを接続するスクリプトが[gistで公開](https://gist.github.com/j3tm0t0/65367f971c3d770557f3)されています。このスクリプトをRaspberry Piで自動起動させる手順を行ってください。以下のQiita記事リンクを開いて手順に従い自動起動させるようにします。

*  [簡単にRaspberry PiでSORACOM Airを使う(FS01BU USBモデムを用いて自動接続)](http://qiita.com/dietposter/items/068019ee53252206a6bf)  …うまくいけば10分程度で作業完了します。

もし自動起動できないようでしたら、`insserv -r`で起動スクリプトを削除し、`/etc/rc.local`にスクリプトの起動コマンドを入れてやります。

```bash
$ sudo insserv -r /etc/init.d/soracomair
$ sudo vi /etc/rc.local
```
最下行の`exit 0`の上に以下のように記述してください。

```bash:/etc/rc.local
# 10秒実行を待つ
sleep 10 
# 接続スクリプトの実行
sudo sh /opt/sora/connect_air.sh &
# このexit 0が最下行
exit 0
```

おつかれさまでした！
次は以下のステップを行ってください。

* [Raspberry Pi でSORACOM 接続＋MQTTをしてみよう 後編 [Step 6 ～ Step 8]](http://qiita.com/dietposter/items/42cfc8f76997999f3332)