Google IoT CoreとSORACOM Beamをつなげてみた。
この記事について
前回はGoogle Cloud IoT Core(以下 IoT Core)とSORACOM Beamを連携させた場合のメリットデメリットについて考察しました。今回はIoT CoreとSORACOM Beamを接続する設定方法について説明します。GCPのコンソール画面とSORACOM Beamの基本的な設定方法には触れませんので公式を参考にしてください。 前回までの記事は以下です。
IoT Coreの準備
GCPのGetting StartedBefore you beginを参考にCloud IoT Coreを 利用できるようにしてください。クラインとのインストールは実施しなくても大丈夫です。IoT Core利用の準備は以下の手順で行います。 もちろんそれぞれの手順は公式チュートリアルに記載があります。特別な設定はないですが、SORACOM Beam連携でのポイントを説明します。
レジストリの作成
レジストリ作成時は「レジストリID」、「リージョン」の値が必要になるので控えておいてください。下の画像だと「hogehoge」,「us-central1」が必要な値です。 またプロトコルの「MQTTにチェックが」入っていることを確認します。「cloud pub/sub」のトピック名も設定してください。Cloud IoTは受信したデータはここで設定した Cloud Pub/Subのトピックに送られます。レジストリへの証明書登録はオプションのため、必要ありません。
CA証明書秘密鍵と公開鍵の作成
CA証明書秘密鍵は以下のコマンドで作成します。opensslがない場合はあらかじめインストールしてください。RSA256 2048bitのキーサイズです。
> openssl genrsa -out rsa_private.pem 2048 > openssl rsa -in rsa_private.pem -pubout -out rsa_cert.pem
デバイスの登録
デバイス 登録を行う場合は端末 IDをメモってください。以下の画像中の「my-device」です。認証の項目で入力方法を「アップロード」 を選択して公開鍵の選択します。作成した証明書に従って「RS256」を選択してください。他の選択肢は「ES256」のみ利用できます。 残り二つはおそらくSORACOM側で選択できません。デバイスを登録する際に証明書のアップロードが求められるので作成した公開鍵を 設定します。上記コマンド実行の場合は「rsa_cert.pem」です。手動で入力する場合はファイルの内容をコピペしてください。
SORACOM Beamの準備
次に SORACOM Beam側の設定です。あらかじめ、グループを作成し、接続に使うSIMをグループへ所属させてください。
SORACOM Beamの設定
グループ設定からSORACOM BeamのMQTTエントリポイントを作成します。種別はGoogle IoTを選択して認証情報を新規に登録します。
認証情報IDは任意の値を入力してください。種別がGoogle IoT 認証情報になっていることを確認します。ProjectIDにはGCPのプロジェクト IDを入力します。RegionにIoT Coreのリージョン情報(今回はus-central1)Registry ID(my-registry), Device ID (my-device)を入力します。AlgorithmはRS256を選択します。private keyには作成したCA証明書のプライベートキー秘密鍵を設定します。「-----BEGIN RSA PRIVATE KEY-----」から「-----END RSA PRIVATE KEY-----」までコピペしてください。
以上で設定は完了となります。
クライアント
利用方法はSORACOM Beamのエンドポイントmqtt://beam.soracom.io:1883
に接続し、IoT Coreのテレメトリデータトピック「'/devices/{device ID}/events'」にパブリッシュするのみです。もちろん、サブスクライブと他のIoT Coreのトピックにメッセージを投げることができます。Pythonでクライアントコードを作成しました。接続後、「Cloud IoT Core」を投げて終了します。
#!/usr/bin/python # -*- coding: utf-8 -*- import paho.mqtt.client as mqtt host = 'beam.soracom.io' port = 1883 project_id = '' # Please setting your Project ID. cloud_region = '' # Please setting your Region. registry_id = '' # Please setting your registry ID. device_id = '' # Please setting your device ID. topic = '/devices/{}/events'.format(device_id) message = 'Cloud IoT Core!' def on_connect(unused_client, unused_userdata, unused_flags, rc): """Callback for when a device connects.""" print('on_connect') client.publish(topic, message) def on_publish(unused_client, unused_userdata, unused_mid): """Paho callback when a message is sent to the broker.""" client.disconnect() if __name__ == '__main__': client = mqtt.Client(protocol=mqtt.MQTTv311) client.on_connect = on_connect client.on_publish = on_publish client.connect(host, port=port) client.loop_forever()
動作や機能が違うので一概に比較はできませんが、以下のサンプルコードに比べてJWTやMQTTSの部分がシンプルになっています。このようにJWTやMQTTSの設定が不要な分、ローカルのMQTTブローカにメッセージを投げる感覚でコードが書けます。
まとめ
ここまででGoogle IoT CoreとSORACOM Beam連携の概要と実際の方法を試してきました。引き続き、GCP周りを触っていきたいと思います。