Python
RaspberryPi
GoogleCloudPlatform
IoT
IoTCore

Google Cloud Platform IoT Coreを使ってみる。

初めに

何故、Google Cloud PlatformのIoT Coreを使用するか。

自宅でセンシングしたデータをサーバレスでWEBから表示出来るようにしたかったため。

何故、GoogleCloudPlatformか。

Google Cloud Next Tokyo'17に参加して興味を持ったため。

目標

ラズパイからIoT Coreへ繋がるところ一通りやってみます。

前提

2017年11月時点の情報です。
ラズパイでPythonが動く環境とpipとvirtualenvが入っている必要があります。

以下の投稿を参考にして環境は用意しました。

Raspberry Piに Python開発環境を構築する
pipのインストール方法
Pythonの仮想環境を構築できるvirtualenvを使ってみる

使用するまでの手順

1.APIを有効にする

GCPのコンソールでビッグデータのIoT Coreを選択すると、APIを有効にするかどうか問われるので有効にする。

2.端末レジストリを作成する

次に、端末レジストリを作成する。コンソールの指示に従い、レジストリID、Cloudリージョン、Pub/Subのトピックを入力する。IoT Coreのアカウント(iot@system.gserviceaccount.com)にPub/Subの公開権限を付与するようポップアップで指示されるので、続行する。

3.デバイス(ラズパイ)で公開鍵、暗号鍵のセットを作成する

ラズパイでopensslを実行して鍵のセットを作成する。


$ openssl req -x509 -newkey rsa:2048 -keyout rsa_private.pem -nodes -out rsa_cert.pem -subj "/CN=unused" 

4.デバイスを登録する

IoT Coreのコンソール上で作成したレジストリを選択すると「端末の追加」ボタンがあるので押す。
色々入力をもとめられるので以下の通り入力する。

フィールド 入力内容
端末 ID (適当なID)
端末の通信 許可
公開鍵の形式 RS256_X509
公開鍵の値 ラズパイで作成したrsa_cert.pemの中身

5.デバイスからリクエストを送る

公式にサンプルプログラムがあったので、デバイスからPhysonを使用してリクエストを送ります。

$ curl -sL https://raw.githubusercontent.com/GoogleCloudPlatform/python-docs-samples/master/iot/api-client/http_example/requirements.txt -o requirements.txt -o requirements.txt
$ curl -sL https://raw.githubusercontent.com/GoogleCloudPlatform/python-docs-samples/master/iot/api-client/http_example/cloudiot_http_example.py -o cloudiot_http_example.py
$ virtualenv env
$ pip install -r requirements.txt
$ python cloudiot_http_example.py --registry_id=(レジストリID) --project_id=(プロジェクトID) --device_id=(デバイスID) --message_type=event --algorithm=RS256 --private_key_file=(秘密鍵へのパス)/rsa_private.pem --cloud_region=(プロジェクトがあるリージョン)

以下のようなメッセージが出力され、レスポンスが200であれば正常です。

Publishing message 1/100: 'reg-id/test-payload-1'
('HTTP response: ', <Response [200]>)

6.コンソールを確認する

コンソールの端末詳細画面でLatest activityのTelemetry event receivedがデバイスでコマンドを叩いた時刻になっていればOKです。
WS000017.JPG

終わりに

ひとまずデバイスをIoT Coreに繋ぐところまでできました。
IoT Coreのメイン機能はデバイスの管理とハブ機能の二つっぽいですね。センシングデータを見せる化するためにはPub/Subでさらにどうにかする必要なので、次回はPub/Subをやります。

参考にしたサイト

GCP公式Quickstart
GCP公式HTTP Client Samples

ラズパイのPython環境は以下のサイトを参考に構築いたいしました。偉大なる先人たちに感謝いたします。
Raspberry Piに Python開発環境を構築する
pipのインストール方法
Pythonの仮想環境を構築できるvirtualenvを使ってみる