はじめに
今回はIot Platformが動かしてみたいと思います。
チュートリアル通りにやると思ったんですが日本語ドキュメントがまだ更新されておらずハマりポイントが多いため、中国語(本家)のドキュメントを参考にしましょう。
Alibaba Cloudは進化が激しいようなので日本語ドキュメントより中国語(本家)を参考にする方が確実だと思います。
Internationalも更新は間に合ってないように見受けられます。
クイックスタートを参考に進めていきます。
https://help.aliyun.com/document_detail/73705.html
今回はサンプルを使って進めていきます。サンプルではライトのスイッチです。
下記を行いIot Platformへ接続できるかを確認したいと思います。
・プロダクトの作成
・デバイスの登録
プロダクトの作成
プロダクトの作成を押下しPro Editionを選択します。
最初にプロパティを作成します。
それぞれ入力します。
0でスイッチON、1でスイッチOFFです。
これでIot Platform側の設定は完了です。
次にデバイス登録してみます。
デバイスの登録
デバイスの登録といってもサンプルを利用しサーバーの上から接続します。
接続に必要な証明書の情報が発行されます。
コピーしておきます。
今回はECSを利用しています。
また今回はC言語SDKを使用します。SDKは64bit Ubuntu16.04を推奨しています。
コンパイルが必要なのでmake等いれます。
apt-get install -y build-essential make git gcc
次にサンプル https://github.com/aliyun/iotkit-embedded/archive/v2.3.0.zip をダウンロードします。
wget https://github.com/aliyun/iotkit-embedded/archive/v2.3.0.zip
unzipで解凍します。ただしunzipはインストールが必要です。
apt install unzip
サンプルの中にあるPRODUCT_KEY 、DEVICE_NAME 、DEVICE_SECRETを先ほどコピーしたキーに書き換えます。
PRODUCT_SECRETは無視してください。
vi iotkit-embedded-2.3.0/examples/linkkit/linkkit_example_solo.c
// for demo only #define PRODUCT_KEY "xxxxxxxxxxxxxxxxxx" #define PRODUCT_SECRET "7jluWm1zql7bt8qK" #define DEVICE_NAME "xxxxxxxxxxxxxxxxxxxx" #define DEVICE_SECRET "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
ここから重要です。
今回は日本のRegionに作成しています。
その為、IoT Platformのエンドポイントがサンプルと異なり変更が必要となります。
変更前
int domain_type = IOTX_CLOUD_REGION_SHANGHAI;
変更後
int domain_type = IOTX_CLOUD_REGION_JAPAN;
たぶん日本以外もここら辺に定義されています。それぞれのリージョンで変更してください。
src/sdk-impl/sdk-impl_internal.h
#define DYNAMIC_REGISTER_REGION_SHANGHAI "https://iot-auth.cn-shanghai.aliyuncs.com/auth/register/device" /* shanghai */ #define DYNAMIC_REGISTER_REGION_SOUTHEAST "https://iot-auth.ap-southeast-1.aliyuncs.com/auth/register/device" /* singapore */ #define DYNAMIC_REGISTER_REGION_NORTHEAST "https://iot-auth.ap-northeast-1.aliyuncs.com/auth/register/device" /* japan */ #define DYNAMIC_REGISTER_REGION_US_WEST "https://iot-auth.us-west-1.aliyuncs.com/auth/register/device" /* us west */ #define DYNAMIC_REGISTER_REGION_US_EAST "https://iot-auth.us-east-1.aliyuncs.com/auth/register/device" /* us east */ #define DYNAMIC_REGISTER_REGION_EU_CENTRAL "https://iot-auth.eu-central-1.aliyuncs.com/auth/register/device" /* german */
ではコンパイルします。
make distclean make
SELECTED CONFIGURATION: VENDOR : ubuntu MODEL : x86 CONFIGURE .............................. [examples] CONFIGURE .............................. [src/infra/log] CONFIGURE .............................. [src/infra/system] CONFIGURE .............................. [src/infra/utils] CONFIGURE .............................. [src/protocol/alcs] CONFIGURE .............................. [src/protocol/coap/cloud] CONFIGURE .............................. [src/protocol/coap/local] CONFIGURE .............................. [src/protocol/http] ~~~~~~~~ | 5.98% | src/services/ota | 15867 | 4 | 4 | 0 | | 4.74% | src/infra/system | 12577 | 664 | 184 | 480 | | 2.29% | src/services/linkkit/cm | 6090 | 56 | 56 | 0 | | 1.09% | src/infra/log | 2893 | 592 | 0 | 592 | | 0.59% | src/services/linkkit/dev_reset | 1574 | 11 | 11 | 0 | |-------|-------------------------------------|-----------|-----------|------------|--------| | 100% | - IN TOTAL - | 266591 | 3827 | 2483 | 1344 |
実行してみます。
./output/release/bin/linkkit-example-solo
実行するとCloud Connectedとでて接続できたことが分かります。
[dbg] IOT_MQTT_Subscribe_Sync(3382): success!! [inf] dm_client_subscribe(76): Subscribe Result: 24 [inf] iotx_dm_subscribe(203): Devid 0 Sub Completed [inf] _iotx_linkkit_event_callback(223): Receive Message Type: 10 [inf] _iotx_linkkit_event_callback(225): Receive Message: {"devid":0} [dbg] _iotx_linkkit_event_callback(287): Current Devid: 0 user_initialized.325: Device Initialized, Devid: 0 [inf] _iotx_linkkit_event_callback(223): Receive Message Type: 0 user_connected_event_handler.65: Cloud Connected ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ user_report_reply_event_handler.300: Message Post Reply Received, Devid: 0, Message ID: 6, Code: 200, Reply: NULL [inf] dm_msg_request(206): DM Send Message, URI: /sys/a6ciirK15iW/qWL7TtiX1V0yY5jht6uU/thing/event/property/post, Payload: {"id":"7","version":"1.0","params":{"LightSwitch":"test"},"method":"thing.event.property.post"} [inf] MQTTPublish(515): Upstream Topic: '/sys/a6ciirK15iW/qWL7TtiX1V0yY5jht6uU/thing/event/property/post' [inf] MQTTPublish(516): Upstream Payload: > { > "id": "7", > "version": "1.0", > "params": { > "LightSwitch": "test" > }, > "method": "thing.event.property.post" > } [inf] dm_client_publish(121): Publish Result: 0 [dbg] dm_msg_cache_insert(77): dmc list size: 0 user_post_property.431: Post Property Message ID: 7 [dbg] iotx_mc_cycle(1866): PUBLISH [inf] iotx_mc_handle_recv_PUBLISH(1617): Downstream Topic: '/sys/a6ciirK15iW/qWL7TtiX1V0yY5jht6uU/thing/event/property/post_reply' [inf] iotx_mc_handle_recv_PUBLISH(1618): Downstream Payload: < { < "code": 200, < "data": { < "LightSwitch": "6309: tsl parse: value of enum type must be int -> LightSwitch" < }, < "id": "7", < "message": "success", < "method": "thing.event.property.post", < "version": "1.0" < }
IoT Platform側にプッシュされていることも確認できます。
今回は接続まで確認できました。
案外、すんなりと利用できました。
Raspberry Piなんかにも簡単に実装できそうですね。