AlibabaCloud IoT Platform設定方法

こんにちは。ひつじです。
IoTライフみなさん楽しんでますか！？

今回はAlibaba CloudのIoT Platformを紹介していきます。

IoTといえば、センサー（マイコン）から情報を収集して色々やっていくイメージですが、本記事では入門向けとしてセンサーではなくmosquittoというオープンソースから直接コマンドを発行してMQTT通信を確認していきます。

#今回の内容

1.Alibaba Cloud IoT Platformの設定を行う
2.mosquitto clientからPub通信を行う

<img width="600" alt="i1.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319145/6748263e-b94b-d5a4-c27f-ecb5c89e67c3.png">


###用語
|用語|説明|
|----|----|
|パブリッシャ|データを送付するクライアント
|サブスクライバ|データを受信するクライアント
|ブローカー|パブリッシャとサブスクライバを仲介する
|トピック|ブローカーがもつデータの送付先、アドレス

###プロダクト設定


では、早速、IoT Platformの設定を進めていきます。


Alibaba Cloud IoT Platformでは、プロダクトとデバイスという概念があります。
プロダクトはデバイスの集合体です。IoT Platform を使用するための最初のステップは、プロダクトの作成です。


IoT platformを選択->デバイス管理->プロダクト->プロダクトの作成

以下のような画面が起動します。

<img width="346" alt="i2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319145/16d23575-b95e-61a8-38b5-881fdce25257.png">


ゆくゆくはSIMを使った通信を考慮して、「モバイル2G/3G/4G」を設定しておきましょう。

###デバイス設定
デバイス管理->デバイス->デバイスの作成

<img width="402" alt="i3.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319145/6c86b9ad-fcbb-e428-b53f-b82cf109e1e2.png">


DeviceNameには入力規則があるので、ヘルプで確認しておきましょう。
OKをクリックするとデバイス証明書が表示されるので、控えておきましょう。

<img width="403" alt="i4.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319145/5dd500d0-e001-b33c-4d72-c6e7e4e1c6e8.png">


productkey   : `a61QmwQD5ZF`
DiviceName   : `mosheep`
DeviceSecret : `********`

###トピック登録
先に説明しましたがトピックとはブローカー上に配置する宛先みたいなものです。プロダクト管理画面から作成したプロダクトを選択してください。

プロダクトの詳細画面にて「トピック」カテゴリを選択してください。
するとデフォルトで作成されたトピックが確認できると思います。

今回使用するトピックを作成していきます。

<img width="600" alt="i5.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319145/fd209875-9838-b684-d5db-16a6ae2c646f.png">
<img width="329" alt="i6.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319145/ee967cf0-44a8-92cf-0749-25065ed1b1b7.png">


今回使用するトピックが作成できました。

`/a61QmwQD5ZF/${deviceName}/user/sheep`

これでIoT Plattformの設定は完了です。

#mosquittoの設定

次にクライアント側の作業を実施していきます。
IoT用語でいうパブリッシャとサブスクライバの環境になります。
先述の通りセンサー（マイコン）ではなくmosquittoで通信をみていこうと思います。


#####環境
`ECS(CentOS 7.x)＋パブリックIP`

以下のコマンドでmosquitto-clientsをインストールします。

```
wget http://download.opensuse.org/repositories/home:/oojah:/mqtt/CentOS_CentOS-7/home:oojah:mqtt.repo -O "/etc/yum.repos.d/Mosquitto.repo"
yum install mosquitto-clients
```
※mosquittoの本体をいれれば、ECSがブローカーとして機能します。

これでmosquitto環境が作成されました。

###通信用コマンドの作成

では、コマンドを実行してIoT Platformで確認してみましょう。

パブリッシュするためのコマンドは以下です。

```
mosquitto_pub -h  "ホスト名（エンドポイント名）" \
-i "クライアントID" \
-u "ユーザ名" \
-P "パスワード" \
-t "トピック" \
-m 'メッセージ' \
-q 'QoS'
```

それぞれ作り方を見ていきましょう。
詳細はTIPS！に記載しますが、クライアントIDとパスワードはAlibaba提供のツールの利用をお勧めします。


**Alibaba Cloud提供のハッシュ生成ツール**

https://files.alicdn.com/tpsservice/88413c66e471bec826257781969d1bc7.zip

<img width="600" alt="i7.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319145/eb0e1a88-c1d4-58ce-47a2-76bc0e5082df.png">


作成するのに必要なパラメータは前段のデバイス証明書を参照しましょう。

<u>**ホスト名**</u>
<font color="Magenta">[ProductKey]</font>.iot-as-mqtt.<font color="Magenta">[RegionId]</font>.aliyuncs.com

<u>**クライアントID**</u>
<font color="Magenta">[ClientID]</font>|securemode=3,signmethod=hmacsha1|

※securemode=2だとTLSモード、securemode=3だとTLS使わないモード
※[ClientID]は上記のハッシュ生成ツールの任意で決めた文字列です。


<u>**ユーザ名**</u>
<font color="Magenta">[deviceName]</font>&<font color="Magenta">[ProductKey]</font>

<u>**パスワード**</u>
devicesercretとproductKey&deviceName&clientIdの文字列をsha1でハッシュ生成する
※上記のハッシュ生成ツールで生成されたパスワードです。

<u>**トピック**</u>
前段で作成したトピックを指定

<u>**メッセージ**</u>
任意（運びたいデータ）

<u>**Qos**</u>
0:届くか保証されない（かなり軽い）
1:届くことが保証されるが重複の可能性あり（軽い）
2:メッセージに過不足なく正確に届く（ちょっと重い)


今回の認証情報でコマンドを作成すると以下のようなイメージになります（パスワードはサンプルです。）


```
mosquitto_pub \
-h "a61QmwQD5ZF.iot-as-mqtt.ap-northeast-1.aliyuncs.com" \
-i "cid|securemode=3,signmethod=hmacsha1|" \
-u "mosheep&a61QmwQD5ZF" \
-P "QQA5E3998123E8D7777FE7BDB7777C5B00DC6556" \
-t "/a61QmwQD5ZF/mosheep/user/sheep" \
-m '{id:"0001",data:"hello world"}' \
-q 0
```

上記コマンドを実行するとIoT Platformにデータが送信されます。

ではコンソール上で確認していきます。


<img width="600" alt="i8.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319145/73a71f77-777c-0fdb-7950-300fb3df43f1.png">
<img width="392" alt="i9.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319145/df1f4cb8-0ddf-7353-ebd2-9a4208c74e6a.png"
 

mosquitto_pubで送付した値が受けれていますね。

###TIPS!
接続用のパスワードですが、
devicesercretとproductKey&deviceName&clientIdの文字列をsha1でハッシュ生成する必要があります。
詳細は以下のリンクに記載されておりますが、AlibabaCloudが提供しているツールを使うのが楽です。

**マニュアル**

[https://www.alibabacloud.com/help/doc-detail/86706.html:embed:cite]

#まとめ

いかがでしたでしょうか。
GUIで設定するだけで、簡単にブローカーが作成できましたね。
mosquittoをクライアントとしてAlibaba CloudでMQTT通信を受信する流れをご理解いただけたと思います。

次回はセンサー（マイコン）から実際のセンシングデータを連携してみたいと思います。
それではご査収ください～(^－^)