kintoneで実践するiotハンズオン -90分で挑戦!kintone & aws iot連携-

160
Twitter: @yamaryu0508 FB: https://www.facebook.com/ryu.yamashita.3 2016年2月19日 株式会社ジョイゾー/kintoneエバンジェリスト/ kintone Café 運営事務局・東京支部 山下 竜 kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携- Developers Summit 2016 【19-F-3】サイボウズ特別トラック #devsumiF

Upload: joyzo

Post on 16-Apr-2017

2.677 views

Category:

Software


5 download

TRANSCRIPT

Page 1: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

Twitter: @yamaryu0508 FB: https://www.facebook.com/ryu.yamashita.3

2016年2月19日 株式会社ジョイゾー/kintoneエバンジェリスト/ kintone Café 運営事務局・東京支部 山下 竜

kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

Developers Summit 2016 【19-F-3】サイボウズ特別トラック

#devsumiF

Page 2: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

自己紹介「山下 竜」

2

2013.3 IOTとグループウェア(デヂエ)の連携を試みてkintone に出会う2014.4 - kintoneエバンジェリストに

2014.11 kintone好きが高じて、界隈初のkintone転職2015.2 kintone Café 運営事務局開設、事務局メンバーに

2014.5 - 2014.10 kintone Café 福岡 Vol.1 - 3を主催

現在(kintone歴2年ちょっと、AWS歴数ヶ月) 多分、“日本で唯一100%kintoneでご飯食べてる人”

株式会社ジョイゾー 山下 竜(33) 福岡県大牟田市出身

「ブルーウェーブ」という共通点

Page 3: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

kintone楽しませてもらっています!

3

Pepperによるアプリ作成

アイディアバナナ (貰いに行っただけ)

NKアグリさんの 見学

kintone devCamp 2015

kintone Café クラウドEXPO

ハンズオン祭りcybozu.com developer

network

デブサミ

Page 4: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

会社紹介「株式会社ジョイゾー」

4

会社名  株式会社ジョイゾー 所在地  東京都江東区木場3-5-5 設立  2010年12月20日(6期目) 社員数  8名(kintoneエバンジェリスト2名) 主な事業  kintone導入支援・カスタマイズ開発  サイボウズOffice/ガルーン構築支援 案件の9割以上がkintone

Page 5: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

日本初定額制来店型システム開発「システム39」

5

Page 6: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

1Week20万円の定額kintoneカスタマイズ

6

Page 7: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

kintoneエコシステム背景

Page 8: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

新しいSI・働き方

コミュニティ

ユーザー

コアサービス

グローバル

他サービス開発者/パートナー

Page 9: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

kintoneエコシステムの本質

9

作って、使って、 コミュニケーションして、楽しい!

ユーザーが、 コミュニティ参加者が、 開発者/パートナーが、 サイボウズの人が、

Page 10: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

kintoneエコシステム テクニカルな切り口では・・・

Page 11: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

kintoneエコシステム

11

「kintoneエコシステム」構築の3つのテクニカルキーワード

Lv.1 kintoneプラグイン

kintone連携サービス

サーバレスアーキテクチャ

Lv.2

Lv.3

帳票

複合機

経費精算

基幹

EAI

BI

Page 12: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

kintoneエコシステム

12

「kintoneエコシステム」構築の3つのテクニカルキーワード

Lv.1 kintoneプラグイン

kintone連携サービス

サーバレスアーキテクチャ

Lv.2

Lv.3

帳票

複合機

経費精算

基幹

EAI

BI

最近注目しています!

Page 13: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

kintoneとAWSナイスな相性だと 言われています!

Page 14: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

kintoneとAWS

14

• アプリケーション寄りPaaS(SaaS)

• クライアントサイド/フロントエンド (UI/UX)

• 行動的/解釈の共有でアクションを起こし、コミュニケーションで業務を回す

• インフラ寄りPaas(IaaS、BaaS)

• サーバーサイド/バックエンド   (コマンド)

• 思考的/データを捌き事象を解釈する

APIで 結合・補完

良質のインプット

強力なデータ処理

Page 15: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

AWS Lambdaによる サーバレスアーキテクチャ

参考・引用「Serverless Architecture on AWS」 (http://www.slideshare.net/keisuke69/serverless-architecture-on-aws)

肝となる

Page 16: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

Lambda イベントソース

kintoneエコシステム(王道っぽいAWSとkintoneの連携パターン)

Amazon DynamoDB Stream

Amazon SNS

Amazon S3

Amazon Kinesis

AWS Lambda

Amazon EC2

REST API

kintone on cybozu.com

・レコード操作 ・ワークフロー操作 ・スペース操作 ・アプリ操作

REST API

kintone.proxy() & Amazon API Gateway 経由もやっぱりイイ!

REST API

プリミティブな連携 ・ホスティング ・バッチ処理

Amazon API Gateway

AWS IoT

16

Page 17: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

サーバ(EC2)による処理系の例

17

データプッシュポーリング・ 待機・監視

データの発生状況を ポーリングチェック

処理(コード)の 実行

・ロードバランス ・レプリケーション ・オートスケール

データ

Page 18: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

サーバレス(Lambda)による処理系の例

18

データ

トリガー

データの発生が トリガーとして渡る

・ロードバランス ・レプリケーション ・オートスケール

処理(コード)の 実行

• インフラ構築不要

• インフラの運用管理不要

• キャパシティ

• スケール

• デプロイ

• 障害耐性

• モニタリニグ

• ロギング

• セキュリティパッチ適用

サーバレス(Lambda)の恩恵

Page 19: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

Lambda イベントソース

kintoneエコシステム(王道っぽいAWSとkintoneの連携パターン)

19

Amazon DynamoDB Stream

Amazon SNS

Amazon S3

Amazon Kinesis

AWS Lambda

Amazon EC2

REST API

kintone on cybozu.com

・レコード操作 ・ワークフロー操作 ・スペース操作 ・アプリ操作

REST API

kintone.proxy() & Amazon API Gateway 経由もやっぱりイイ!

REST API

プリミティブな連携 ・ホスティング ・バッチ処理

Amazon API Gateway

AWS IoT

Page 20: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

kintone & AWSサーバレスアーキテクチャのベストプラクティス

Page 21: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

その3

その2

kintoneとAWSサーバレスアーキテクチャのベストプラクティス

21

その1 AWS各サービスを用いたkintoneへのインプット

kintoneへのAPIアクセスのラッピング

kintoneからAWS各サービスへのアクセス

(従来IoT、kintone controller)

(Webhookからの連携、kintoneデータの柔軟な公開)

(kintoneデータを元にした機械学習)

その4 Schedule Eventによるkintoneバッチ処理

API

(定期的な集計、サービス間連携)

Page 22: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

AWS各サービスを用いたkintoneへのインプット

22

・農業(圃場) ・見守り ・建設・工事現場 ・工場設備 ・エネルギー設備

現場

センサー

・温度 ・湿度 ・照度 ・加速度 ・騒音

センサー クラウド kintone

・通知 ・ワークフロー ・スレッド ・カスタマイズビュー

事象・データが発生する データを捌き、 事象を解釈する

解釈の共有でアクションを起こし、コミュニケーションで業務を回す

IoT

Page 23: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

ルール (閾値条件)

AWS各サービスを用いたkintoneへのインプット

23

XX

MQTT

REST API

Rule Action

kintone & AWSによるIoT構成例

センサー トピック

Rule Action

全データ 蓄積

業務アクションのために 即時連携が必要なデータ

通知・ワークフロー

可視化

必要なデータを 必要な分だけ取得

MQTT

ルール (全データ)

認証

REST

API

Page 24: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

AWS各サービスを用いたkintoneへのインプット

24

kintone controller

REST API

AWS LambdaAWS IoTコントローラー

IoT連携

・レコード操作 ・ワークフロー操作 ・スペース操作 ・アプリ操作

①ボタンを押す ②IoT情報を受け取って、次のサービスに渡す

③受け取った情報をトリガーにkintoneにアクセス

Page 25: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

kintoneへのAPIアクセスのラッピング

25

Webhook Event REST API

①Gitのプッシュ、 課題追加等の発生

②APIでパラメータを 渡す

③Eventでパラメータを受け取り、 APIでkintoneへ

Webhook(通知等)をAPI Gatewayを経由してLambdaで捌いた内容を kintoneに連携

Webhookからのkintoneアクセス

Page 26: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

kintoneへのAPIアクセスのラッピング

26

①kintoneデータへのアクセスをAPI Gatewayで APIを再定義

②kintoneを意識することなく 有益な情報にアクセス

kintoneに蓄積されたデータをAPI Gatewayで再定義したAPIで柔軟に公開

kintoneのデータを再定義したAPIで公開

REST API Event REST APIRESTful Service

Page 27: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

kintoneからAWS各サービスへのアクセス

27

kintoneのデータを元にしたMachine Learning

AWS Lambda

kintone on cybozu.com

①kintoneデータで 予測モデル作成

Amazon API Gateway

Amazon Machine Learning

②kintoneにデータ登録 ③API(クエリ)で パラメータを渡す

④Eventでパラメータを受け取り、 APIでリアルタイム予測へ

REST API Event REST API

⑤予測実行後 予測値を返す

※初動のモデル作成は直接実施  (Lambda未経由)

⑥予測値をセット

kintone.proxy()

kintoneのデータ管理に予測機能を追加!

Page 28: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

kintoneからAWS各サービスへのアクセス

28

REST API Event REST API

Device Shadow

SOAP API

①スイッチON/OFF②API GatewayとLambdaを介して、 Device ShadowのREST APIをコール

③Device Shadowで Raspberry Piを制御

④Raspberry PiからLAN内の Wemoにアクセス

⑤家電の電源をON/OFF

Page 29: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

Schedule Eventによるkintoneバッチ処理

29

①Lambdaを定期起動

スケジュールイベント(定期実行)で、サービス間連携

Event REST API

連携 サービス

REST API ②connpassのデータを取得

③connpassのデータを kintoneへ

④kintoneに入ったデータを kViewerで公開

Page 30: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

kintoneエコシステム真時代の到来!なぜ今なのか?

改めて、

Page 31: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

サーバーレスアーキテクチャが 登場したから?

キーワードですが、いち要素にすぎません

Page 32: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

コミュニティ

ユーザー

コアサービス

グローバル

他サービス新しいSI・働き方 開発者/パートナー

もう一度見返してみましょう!

Page 33: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

新しいSI・働き方

コミュニティ

ユーザー

コアサービス

グローバル

他サービス

2011

2006

2014

20142015

20132011

開発者/パートナー

Page 34: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

それぞれの進化によりエコシステム形成のためのピースが全て実際に埋まったから^^

紙芝居でなく写真になり、 システムも今日実践しましょう!

Page 35: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

いよいよ本題

kintone & AWS IoT連携 ハンズオンシナリオと構成

Page 36: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

ハンズオンモチベーション

36

kintone × IoT とは?

データベース プロセス 管理

コミュニケーション

ただの「データベース」ではなくて、kintoneならではの 「プロセス管理」や「コミュニケーション」の機能を活かす!

ここで大切なのは

「オフィスのデータ」だけでなく 「現場のデータ」も取り込む

オフィスで人が入力 現場でセンサーが送信

kintone × センサークラウド 連携事例

データ送信センサークラウド kintone

レコード登録  - 通知  - ワークフロー

カスタマイズビュー  - グラフカスタマイズ

megakiku connect (IoTアプリ)

※kintone連携機能有

- 温度・湿度・照度等のデータを蓄積 - 生産予測の精度向上 - 上のノウハウ再利用で、フランチャイズ化に伴う生産管理の効率化

NKアグリ様(東京・和歌山)(kintoneでやっていること)

温度センサー

・低下する就労人口 ・農業経営・技術の継承問題

チームワークプラットフォームの インプットとしてのIoT

引用「kintone × IoT 連携による現場業務の改善」 (http://www.slideshare.net/joyzojp/kintone-iot)

Page 37: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

Rule Action

全データ 蓄積

可視化REST

API

必要なデータを 必要な分だけ取得

ルール (全データ)

ルール (閾値条件)

ハンズオン構成(続き)

37

XX

MQTT

REST API

センサー トピック

Rule Action

業務アクションのために 即時連携が必要なデータ

通知・ワークフローMQTT

認証

kintone & AWSによるIoT構成例

Page 38: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

ハンズオン構成(続き)

①BLE CentralからBLE Peripheralの センサーデータをAWS IoT Device GWへ MQTT Publish

AWS Lambda kintone on cybozu.com

MQTT

AWS IoT

Event REST API

IoT Device

BLE Peripheral

BLE Central

②AWS IoTルール エンジンでイベントドライブ

③Lambdaから kintoneへのレコード操作

AWS IoT/Lambdaからkintoneへの柔軟なデータ取り込みを体験

※今回BLE CentralはRaspberry Piで代用38

Page 39: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

Special Thanks

39

引用「TechCrunch」 (http://jp.techcrunch.com/2016/01/13/skydisc/)

最近1億円の資金調達をされた福岡の

の着脱式センサ「GINGA」をAWS様のご協力でお借りしています!

SKYDISC様

Page 40: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

• kintone

• kintone REST APIをNode.jsでコールする

• レコード操作

• ワークフロー操作(応用編)

• AWS

• AWS Lambdaの設定方法

• AWS IoTの設定方法

• デバイス、ルール、ポリシー、証明書

• IoT Device

• AWS IoT SDKによるMQTT Publishの記述方法

今回のハンズオンに必要とされるスキルセット(目標・成果物)

40

Page 41: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

ハンズオンの手順

①BLE CentralからBLE Peripheralの センサーデータをAWS IoT Device GWへ MQTT Publish

AWS Lambda

IoT Device ← AWS IoT ← Lambda ← kintone

MQTT

AWS IoT

Event REST API

IoT Device

BLE Peripheral

BLE Central

②AWS IoTルール エンジンでイベントドライブ

③Lambdaから kintoneへのレコード操作

データやプロセスの終着点側から設定すると、スムーズに進みます!

41

Page 42: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

kintone & AWS IoT連携 ハンズオン予備知識

Page 43: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

kintone REST API

Page 44: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

kintone3大要素とREST API

44

データベース プロセス管理 コミュニケーション

充実 強化中 弱いAPIからの操作も3大要素をバランスよく活用することが重要!

API操作で3大機能同士を密に結合できるようになると、更に便利になると期待しています!

Page 45: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

kintone3大要素とREST API(ポータル画面)

45

スペースの 作成・メンバー更新等

アプリの作成・更新

(欲しい)

(参考:「cybozu.com developer network > kintone API」)

Page 46: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

kintone3大要素とREST API(詳細画面)

46

レコードの 取得・登録・更新・削除

添付ファイルの アップロード・ダウンロード

レコードの ステータス変更

(欲しい)(参考:「cybozu.com developer network > kintone API」)

Page 47: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

kintone REST APIの概要

47

• kintoneアプリのレコードやスペースの操作

kintone REST APIの用途

プロトコル

• HTTPSプロトコル

フォーマット

• JSON

文字コード

• UTF-8

認証認証

• ユーザ認証(パスワード、APIトークン)

• Basic認証

その他

• 同時処理レコード数100件

• API同時アクセス10件※GET/recordsのみ500件

Page 48: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

kintone REST APIの概要(続き)

48

• https://{subdomain}.cybozu.com/k/v1/{command}.json【通常】

• https://{subdomain}.cybozu.com/k/guest/{space id}/v1/{command}.json【ゲストスペース】

URI

リクエストヘッダ

• Host: {subdomain}.cybozu.com:443

• Content-Type:application/json

• 認証情報

Page 49: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

リクエスト例(GET/records)

49

QWRtaW5pc3RyYXRvcjpwYXNzd29y

GETメソッドではContent-Typeは不要

Basic認証を使用していない場合にも空欄で入れておく分には問題ない様子

https://{subdomain}.cybozu.com/k/v1/records.json?app={app id}

 【認証方法の記述】 X-Cybozu-Authorization : {BASE64-encoded "id:password"} Authorization : Basic {BASE64-encoded "id:password"} ※例の{base64-encoded "id:password"}はidをAdministrator、passwordをpasswordとした場合の値としています

HTTPクライアント設定画面

※以降、Google Chromeのアドオン「POSTMAN」を利用しています

Page 50: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

リクエスト例(GET/records:続き)

50

リクエスト詳細

https://{subdomain}.cybozu.com/k/v1/records.json?app={app id}

QWRtaW5pc3RyYXRvcjpwYXNzd29yZA==

{subdomain}.cybozu.com

{app id}

Page 51: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

リクエスト例(GET/records:続き)

51

レスポンス

"{field code}": { "type" : "{field type}", "value" : "{value}" }

各フィールドはこのように記述されます ・複数値を取りうる{value}は配列になります ・POST/PUTの際はtypeが不要です

フィールドの記述

Page 52: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

リクエスト例(POST/records)

52

HTTPクライアント設定画面

QWRtaW5pc3RyYXRvcjpwYXNzd29y

https://{subdomain}.cybozu.com/k/v1/records.json

Page 53: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

リクエスト例(POST/records:続き)

53

リクエスト詳細

POST/PUTメソッドではContent-Lengthが必要(自動補完してくれない言語・ライブラリを利用する場合は要注意)

https://{subdomain}.cybozu.com/k/v1/records.json

QWRtaW5pc3RyYXRvcjpwYXNzd29yZA==

{subdomain}.cybozu.com

Page 54: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

リクエスト例(POST/records:続き)

54

レスポンス

【POSTのレスポンス】 ・ids(レコードID)とrevisions(リビジョン) 【PUTのレスポンス】 ・revisions(リビジョン)

Page 55: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

AWS IoT

Page 56: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

AWS IoTの概要

56

引用「AWS IoTの仕組み」 (https://aws.amazon.com/jp/iot/how-it-works/)

• DEVICE GATEWAY

• メッセージブローカー、MQTT/HTTP1.1

• AUTHENTICATION & AUTHORIZATION

• TLS1.2、IAM、SigV4、Cognito

• AWS IoT DEVICE SDK

• Embedded C、JavaScript、Arduino Yún

• RULES ENGINE

• SQLライクな記述、AWSサービスへのアクション

• DEVICE SHADOWS

• オフライン時のメッセージ受信

• REGISTRY

• メタデータ管理参考「Everything You Want to Know About AWS IoT」 (http://www.slideshare.net/AmazonWebServices/mbl205-new-everything-you-want-to-know-about-aws-iot)

Page 57: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

AWS IoTの概要(DEVICE GATEWAY)

57

Page 58: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

AWS IoTの概要(DEVICE GATEWAY・続き)

58

メッセージブローカー

PublishSubscribe

MQTTイメージ

Page 59: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

AWS IoTの概要(DEVICE GATEWAY・続き)

59

メッセージブローカー

POSTGET

RESTイメージ

Page 60: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

AWS IoTの概要(AUTHENTICATION & AUTHORIZATION)

60

認証・アクセス許可

Page 61: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

AWS IoTの概要(AUTHENTICATION & AUTHORIZATION・続き)

61

認証・アクセス許可

XXポリシー

証明書証明書

モノ

Page 62: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

AWS IoTの概要(RULE ENGINE)

62

ルールエンジン

ルールエンジンアクション

Page 63: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

AWS IoTの概要(RULE ENGINE・続き)

63

ルールエンジン

SQLライクな記述が可能なフィルタ 例: SELECT * FROM ‘things/thing-2/color' WHERE color = ‘red’

メッセージ交換(文字列操作、算術演算等)

Page 64: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

AWS IoTの概要(RULE ENGINE・続き)

64

ルールエンジンアクション受け取ったメッセージの処理

パブリッシュ データ格納 Lambda関数呼出

テーブル操作 パブリッシュ リパブリッシュ

Page 65: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

AWS IoTを中心にハンズオン構成を見る

65

XX

MQTT REST API

①証明書で紐ついたモノから メッセージ(データ)をPublish

Event

②受け取ったメッセージを Topic等でフィルタ

③受け取ったメッセージを Lambdaで処理してkintoneへ連携

MQTT

{ "temp": "14", "humidity": "80", "time": "2016-02-19T12:23:56+09:00", "device": "Lambda test" }

メッセージ kintoneの レコード

Page 66: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

ハンズオンの設定概要

66

XX

MQTT REST API

Event

【kintone】 ①アプリ作成 ②APIトークンの取得

MQTT

【AWS Lambda】 ①eventで送られてきたメッセージを 処理して、kintoneに連携するLambda 関数の作成

【AWS IoT】 ①モノの作成 ②ルールの作成 ②ポリシーの作成 ④証明書の生成 ⑤証明書とモノの紐付け ⑥証明書とポリシーの紐付け

【IoT Device】 ①BLEによるセンサー値取得 ②AWS IoT Device SDKによる センサー値のMQTT Publishの設定

Page 67: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

ハンズオン本編

Page 68: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

サンプルダウンロード

68

①「https://github.com/joyzo/devsumi-2016-19F3」にアクセス

②「Download ZIP」をクリックして、 ファイル一式をダウンロード

Page 69: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

kintoneアプリの設定

Page 70: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

kintoneアプリの設定(テンプレートからのアプリ作成)

①「ハンズオンスペース」をクリックして、個別スペースに移動

70

Page 71: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

kintoneアプリの設定(テンプレートからのアプリ作成・続き)

②アプリ作成の「+」をクリック

③「テンプレートから選ぶ」をクリック

④「アプリを作成する」をクリック ⑤今回1つのアプリが追加される

71

Page 72: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

kintoneアプリの設定(インシデント管理アプリの概要)

72

フォーム項目フィールド の種類

フィールドコード

測定日時 日時 time

センサー名 文字列(1行) device

温度 数値 temp

湿度 数値 humidity

IoT DeviceからAWS IoT/Lambdaを経由して登録されるセンサーデータ用のフォームを準備

Page 73: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

kintoneアプリの設定(インシデント管理アプリの概要・続き)

73

フォーム項目フィールド の種類

フィールドコード

タイトル 文字列(1行) タイトル

優先度 ドロップダウン 優先度

内容 文字列(複数行)

内容

対応期限 日付 対応期限

対応者 ユーザー選択 対応期限

センサーデータをトリガーに発生する業務に関連するフォームを準備

Page 74: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

kintoneアプリの設定(インシデント管理アプリのID確認)

74

①アプリURLの「/k/」の後ろの数値(アプリID)をメモ

Page 75: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

kintoneアプリの設定(インシデント管理アプリのAPIトークン取得)

75

②「アプリの設定を変更」をクリック

①「・・・」をクリック

Page 76: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

kintoneアプリの設定(インシデント管理アプリのAPIトークン取得・続き)

76

③「詳細設定」をクリックして展開

④「APIトークン」をクリック

Page 77: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

kintoneアプリの設定(インシデント管理アプリのAPIトークン取得・続き)

77

⑤「生成する」をクリック

⑥「レコード閲覧」、「レコード追加」、「レコード編集」、「レコード削除」にチェック

⑦生成されたAPIトークンをメモ

⑧「保存」をクリック

Page 78: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

kintoneアプリの設定(インシデント管理アプリのAPIトークン取得・続き)

78

⑨「設定完了」をクリック

⑩「OK」をクリック

Page 79: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

Lambda・関数の設定

AWS IoTのルールエンジンからのアクセ本をトリガーにkintoneのレコードを操作するLambda関数の設定

Page 80: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

Lambda・関数の設定

80

①「Lambda」をクリック

※今回は「東京(ap-northeast-1)」リージョン

Page 81: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

Lambda・関数の設定(続き)

81

②(Lambda利用が初めてでなければ)「Create a Lambda function」をクリック

②(Lambda利用が初めてならば)「Get Started Now」をクリック

Page 82: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

Lambda・関数の設定(続き)

82

③今回は「Skip」をクリック

Page 83: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

Lambda・関数の設定(続き)

83

④「Name」に今回のLambda関数の名前(例: kintone-iot)を記入

⑤「Runtime」は「Node.js」を選択しておく

⑦「APP_ID」の値をメモしておいたkintoneアプリのIDで差し替える

⑥サンプルの「./nodejs/kintone_iot.js」を貼付け ※日本語は貼付け時に文字化けし、不具合の原因になることがある ※全選択して貼り付けると既存のソースを残して追加されることがある

⑧「API_TOKEN」の値をメモしておいたkintoneアプリのAPI Tokenで差し替える

Page 84: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

Lambda・関数の設定(続き)

84

⑨「Handler」はそのまま ※ZIPコードをアップロードする際にファイル名と同一である必要がある(index.handler → index.js)

⑪基本実行権限を持つIAMロールを新しく作る場合には「許可」をクリック

⑬「Next」をクリック⑩「Role」は基本実行権限を持つ既存ロールか「Basic execution role」を選択

⑫「Memory」を512、「Timeout」を5で設定

※ポップアップの許可が必要な場合があります

Page 85: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

Lambda・関数の設定(続き)

85

⑭「Create function」をクリック

Page 86: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

Lambda・関数の設定(続き)

86

⑮Lambda関数の作成完了

⑯「Test」をクリック

⑰サンプルの「./json/sample_event.json」を貼付け ※IoT DeviceがPublishしてくるデータ

⑱「Save and test」をクリックして、テスト実行

Page 87: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

Lambda・関数の設定(続き)

87

⑲テスト実行が成功すると「Execution result」が「succeeded」になり、kintoneのレスポンスが出力される

Page 88: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

• event(PublishされたメッセージがAWS IoT経由で渡される)データを用いてkintoneへのレコード登録を行う

イベントコード「kintone_iot.js」の概要

88

Page 89: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

// Libraries var https = require('https'); // HTTPS request

// constant parameters const KINTONE_HOST = 'kintone-iot.cybozu.com'; const APP_ID = 3; const API_TOKEN = 'Tm8C8ziqgf7fUx2XdvAAIu1PJINczwPHVntFj9ON';

イベントコード「kintone_iot.js」の部分解説

89

HTTPSリクエストを行う標準モジュールNode.jsのモジュール(1行目~)

設定値(定数)(6行目~)アプリ毎の固有の情報(今回の編集対象)

Page 90: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

// get options to access to kintone REST API var getOptions = function(path, method) { return { hostname: KINTONE_HOST, port: 443, path: path, method: method, secureProtocol: 'SSLv3_method', headers: { 'X-Cybozu-API-Token': API_TOKEN } }; };

イベントコード「kintone_iot.js」の部分解説(続き)

90

ヘッダ情報は認証情報のみセットしておく (URL渡しのGET/records等以外はContent-Type: application/jsonを別途付加)

HTTPSリクエスト時に必要な情報を取得する関数(9行目~)

Page 91: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

// regist record to kintone var postRecord = function(event, callback) { console.log('start postRecord'); // set request body var params = { "app": APP_ID, "record": { "time": { "value": event.time || event.timestamp || "" }, "device": { "value": event.device || "devsumi_device" }, "temp": { "value": event.temp || "" }, "humidity": { "value": event.humidity || "" } } }; var json = JSON.stringify(params); // set request headers var options = getOptions('/k/v1/record.json', 'POST'); options.headers['Content-Type'] = 'application/json';

// access to kintone REST API var req = https.request(options, function(res) { console.log('STATUS: ' + res.statusCode); console.log('HEADERS: ' + JSON.stringify(res.headers)); res.setEncoding('utf8'); res.on('data', function(chunk) { console.log('BODY: ' + chunk); if (res.statusCode === 200) { callback(null, JSON.parse(chunk)); } }); });

req.on('error', function(e) { console.log('problem with request: ' + e.message); callback(e.message); });

req.write(json); req.end(); };

イベントコード「kintone_iot.js」の部分解説(続き)

91

eventを処理してレコード登録を行う関数(24行~)

eventから登録するrecordを作成

「Content-Type: application/json」をリクエストヘッダに付加

POST/recordをコール

Page 92: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

Lambda関数のテスト起動で kintoneにレコード登録する動きの確認

Page 93: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

ここまでの設定による動き

①BLE CentralからBLE Peripheralの センサーデータをAWS IoT Device GWへ MQTT Publish

AWS Lambda

MQTT

AWS IoT

REST API

IoT Device

BLE Peripheral

BLE Central

②AWS IoTルール エンジンでイベントドライブ

③Lambdaから kintoneへのレコード操作

Event

(設定済みの範囲)先ほどのテスト

93

Page 94: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

イベント履歴の確認

94

①「Monitoring」をクリックする

②直近24時間の履歴を表示

③詳細をCloudWatchで確認するためにクリック

Page 95: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

イベント履歴の確認(続き)

95

④直近のログストリームをクリック

⑤テストで挿入したeventデータ

⑥kintoneのレスポンスが表示され正常終了

Page 96: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

kintoneのレコード登録確認

96

⑳Lambdaのテストで登録されたレコード

Page 97: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

AWS IoTの設定

モノ周辺の設定を行い、MQTT PublishされたデータをLambdaに渡す

Page 98: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

AWS IoTの設定

98

①「AWS IoT」をクリック

※今回は「東京(ap-northeast-1)」リージョン

Page 99: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

AWS IoTの設定

99

②(AWS IoT利用が初めてでなければ)「Create a resource」をクリック

②(AWS IoT利用が初めてならば)「Get started」をクリック

Page 100: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

AWS IoTの設定(モノの作成)

100

④「Name」に作成するモノの名前(例: kintone-iot)を記入

③「Create a thing」を選択

⑤「Create」をクリック

Page 101: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

AWS IoTの設定(モノの作成・続き)

101

⑦Shadowのエンドポイント等が表示される

⑥「View thing」をクリック

Page 102: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

AWS IoTの設定(ルールの作成)

102

⑧「Create a rule」を選択

⑨「Name」にルール名(例: kintone_iot)を記入

Page 103: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

AWS IoTの設定(ルールの作成)

103

⑨「Attribute」に「*」を記入

⑪「Choose an action」では「Insert this message into a code function and execute it

(Lambda) 」を選択

⑩「Topic filter」に「devsumi/ginga」を記入

Page 104: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

AWS IoTの設定(ルールの作成・続き)

104

⑫「Function name」は先程設定した「kintone-iot」を記入・選択

⑬「Add action」をクリック

⑮「Create」をクリック

⑭「Lambda Action」が追加される

Page 105: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

AWS IoTの設定(ルールの作成・続き)

105

⑰先ほど設定したクエリ情報等が表示される

⑯「View rule」をクリック

Page 106: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

AWS IoTの設定(ポリシーの作成・続き)

106

⑱「Create a policy」を選択

⑲「Name」にポリシー名(例: kintone-iot)を記入

㉑「Resource」には「*」を記入

㉒「Allow」にチェック

㉓「Add statement」をクリック

⑳「Action」には 「iot:*」を記入

Page 107: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

AWS IoTの設定(ポリシーの作成・続き)

107

㉕「Create」をクリック

㉔「Statement 1」が追加される

Page 108: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

AWS IoTの設定(ポリシーの作成・続き)

108

㉗設定されたポリシー情報が表示される

㉖「View policy」をクリック

Page 109: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

AWS IoTの設定(証明書の作成)

109

㉘「Create a certificate」を選択

㉙「1-Click certificate create」をクリック

Page 110: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

AWS IoTの設定(証明書の作成・続き)

110

㉚生成された3つの証明書をダウンロード 【ファイル名(今回の命名ルール)】 サンプルの「./ginga/」で「./ginga/cert」フォルダを作成し、その下に保存 ・public key -> public.pem ・private key -> private.pem ・certificate -> certificate.pem ※「Download」の部分が「Show」となっている方は コピペしてテキストエディタで保存してください。

Page 111: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

AWS IoTの設定(証明書とポリシーの紐付け)

111

㉛先程作成した証明書に「レ(チェック)」を入れる

32「Attach a policy」をクリック

33先程作成したポリシー名を記入

34「Attach」をクリック

Page 112: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

36「Attach a thing」をクリック

AWS IoTの設定(証明書とモノの紐付け)

112

35選択中の証明書にはチェックのまま

37先程作成したモノの名前を記入

38「Attach」をクリック

Page 113: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

AWS IoT(証明書のアクティベーション)

113

39選択中の証明書にはチェックのまま

40「Activate」をクリック

Page 114: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

AWS IoT(証明書のアクティベーション・続き)

114

41「ACTIVE」に変わる

Page 115: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

AWS IoTの設定(再掲:AUTHENTICATION & AUTHORIZATION)

115

認証・アクセス許可

XXポリシー

証明書証明書

モノ

証明書のアタッチ状況

モノポリシー

Page 116: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

AWS IoTの設定(ルート証明書の取得)

116

42Symantecからルート証明書を取得

43コピペもしくはcURLコマンド等で他の証明書と同じフォルダに「rootCA.pem」として保存する ※cURLコマンドはサンプルの「howto_curl_rootCA.txt」に記載

Page 117: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

AWS IoTへのPublishで kintoneにレコード登録する動きの確認

Page 118: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

ここまでの設定による動き

AWS LambdaAWS IoT

REST API

IoT Device

BLE Peripheral

BLE Central

②AWS IoTルール エンジンでイベントドライブ

③Lambdaから kintoneへのレコード操作

Event

(設定済みの範囲)MQTT Publishテスト

①BLE CentralからBLE Peripheralの センサーデータをAWS IoT Device GWへ MQTT Publish

MQTT

118

Page 119: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

MQTT Publishの確認(エミュレータの準備)

119

①「https://github.com/yamaryu0508/aws-iot-publisher」にアクセス

②「Download ZIP」をクリックして、 ファイル一式をダウンロード

※ハンズオンではUSBにてアプリを配布

Page 120: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

MQTT Publishの確認(エミュレータの準備・続き)

120

/ ┣ AWS IoT Publisher-darwin-x64/ (Mac用) ┃ ┗ AWS IoT Publisher.app (エミュレータアプリ) ┣ AWS IoT Publisher-win32-ia32/ (Windows32bit用) ┃ ┗ AWS IoT Publisher.exe (エミュレータアプリ) ┗ AWS IoT Publisher-win32-x64/ (Windwos64bit用) ┗ AWS IoT Publisher.exe (エミュレータアプリ)

レポジトリの中身(パッケージ済アプリ部分のみ)

③自分の環境に適したアプリを起動

Page 121: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

MQTT Publishの確認(エミュレータによるPublish)

①「Asia Pacific (Tokyo)[ap-northeast-1]」を選択

②先程設定した「devsumi/ginga」を記入

③先程ダウンロードした「rootCA.pem」を選択

④先程ダウンロードした「certificate.pem」を選択

⑤先程ダウンロードした「private.pem」を選択

⑥サンプルの「sample_event.json」をkey-value形式で入力

⑦「Publish to AWS IoT !」をクリック

121

Page 122: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

MQTT Publishの確認(エミュレータによるPublish・続き)

122

⑧AWS IoTにConnectして メッセージをPublish

出典: https://github.com/yamaryu0508/aws-iot-publisher

Page 123: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

kintoneのレコード登録確認

123

⑧MQTT Publishのテストで登録されたレコード ※Lambda-kintone間はチェック済みのため、LambdaのCloudWatch Logsの確認は省略

Page 124: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

AWS IoT内のMQTT Clientを使った確認(続き)

124

①「MQTT Client」を選択

Page 125: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

AWS IoT内のMQTT Clientを使った確認(続き)

125

②「Clinet ID」を入力(例: devsumi-test)

③「Connect」をクリック

Page 126: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

AWS IoT内のMQTT Clientを使った確認(続き)

126

④「Connection」が 「Connected」になる

Page 127: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

AWS IoT内のMQTT Clientを使った確認(続き)

127

⑤「Publish to topic」をクリック

⑥サンプルの「./json/sample_event.json」を貼付け ※IoT DeviceがPublishしてくるデータ

⑦「device」を「MQTT Client test」等わかりやすいものにしておく

⑧「Publish」をクリック

Page 128: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

AWS IoT内のMQTT Clientを使った確認(続き)

128

⑨「Publish」に成功すると「Success!」が表示される

Page 129: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

kintoneのレコード登録確認

129

⑩MQTT Clientからのテストで登録されたレコード ※Lambda-kintone間はチェック済みのため、LambdaのCloudWatch Logsの確認は省略

Page 130: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

IoT Deviceの設定

Page 131: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

IoT Device周辺の詳細

131

BLE MQTT Publish

温湿度センサー (BLE Peripheral)

GW (BLE Central) AWS IoT

ここでの設定対象

Peripheralから送られてくるセンサー値を取得して、 AWS IoTにメッセージ(データ)をパブリッシュする

BLE Centralの動き

IoT Device周辺の構成

Page 132: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

IoT Device周辺の詳細(続き)

132

BLE MQTT Publish

センサー (BLE Peripheral)

GW (BLE Central) AWS IoT

- Periferalの値を読み取るNode.jsコーディング - AWS IoTアクセス用の証明書のセット - AWS IoT SDKを用いたAWS IoTアクセス用のNode.jsコーディング

BLE Centralの設定内容

Page 133: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

IoT Deviceの設定

133

{kintoneのログインID(例: user1)}/ ┣ ginga_iot.js (センサーの値を取得してPublishするメインのNode.jsファイル) ┣ node_module/ (Node.jsのモジュール群) ┃ ┣ aws-iot-device-sdk/ (証明書を伴うAWS IoTへのアクセス) ┃ ┣ noble/ (BLE Centralの作成) ┃ ┗ moment/ (日時操作) ┗ cert/ (証明書ファイル群) ┣ rootCA.pem (ルート証明書) ┣ certificate.pem (証明書) ┗ private.pem (秘密鍵)

BLE Centralのフォルダ構成 フォルダ名を「ginga/」からkintoneのログインIDに各自修正しておく

Page 134: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

// constant parameters const DEVICE_NAME = 'dev1'; const TOPIC = "devsumi/ginga"; // MQTT TOPIC const MY_ADDRESS = "f3:2f:85:98:69:ce"; // MAC Address of BLE peripheral, "GINGA" const REGION = 'ap-northeast-1';

IoT Deviceの設定

134

ginga_iot.jsの編集箇所(6行目~)①Peripheralの「Dev**」を記入

②Peripheralのアドレスを記入

Page 135: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

• アドレス指定したPeripheralからのadvertisementがあった際にセンサーの値を取得する

• 証明書を紐付けて、取得したセンサーの値をAWS IoTにPublishする

• 「AWS IoTのリージョン」、「証明書のパス」、「Topic」の指定が必要

Centralコード「ginga_iot.js」の概要

135

Page 136: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

// libraries var noble = require('noble'); // BLE central module var awsIot = require('aws-iot-device-sdk'); // AWS IoT SDK var moment = require('moment'); // Date library

Centralコード「ginga_iot.js」の部分解説

136

Node.jsのモジュール群(1行目~)

// constant parameters const DEVICE_NAME = 'dev1'; const TOPIC = "devsumi/ginga"; // MQTT TOPIC const MY_ADDRESS = "f3:2f:85:98:69:ce"; // MAC Address of BLE peripheral, "GINGA" const REGION = 'ap-northeast-1';

設定値(定数)(6行目~)

AWS IoTルールエンジンで設定したTopicと同じ値

AWS IoTの設定を行った東京リージョン

Page 137: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

// device config. var device = awsIot.device({ keyPath: './certs/private.pem', certPath: './certs/certificate.pem', caPath: './certs/rootCA.pem', clientId: DEVICE_NAME, region: REGION });

Centralコード「ginga_iot.js」の部分解説(続き)

137

AWS IoT Device SDKにおけるdeviceオブジェクトの初期化(12行目~)

証明書のパス

Page 138: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

// parse & publish temperature/humidity data function publish_ginga(data) { // parse temperature data var t1 = parseInt(data[0]); var t2 = parseInt(data[1]) / 100; var temp_value = t1 + t2; // temperature value // parse humidity data var h1 = parseInt(data[2]); var h2 = parseInt(data[3]) / 100; var humidity_value = h1 + h2; // humidity value // create & publish message var message = { "device": DEVICE_NAME, "sensor": 'ginga', "time": moment().format(), "temp": temp_value, "humidity": humidity_value }; message = JSON.stringify(message); console.log("# Publish: " + message); device.publish(TOPIC, message); // publish }

Centralコード「ginga_iot.js」の部分解説(続き)

138

GINGAのデータをパースしてAWS IoTにPublishする関数(48行目~)

温度をパース

湿度をパース

Publishするメッセージ

AWS IoTへのPublish

Page 139: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

// event for BLE peripheral "discover" noble.on('discover', function(peripheral) { noble.stopScanning();

if (MY_ADDRESS == peripheral.address) { var serviceUUID = peripheral.advertisement.serviceUuids[0]; console.log('# Service UUID: ' + serviceUUID); peripheral.connect(function(error) { if (error) console.log('# Connect error: ' + error); console.log('# Connected to ' + peripheral.uuid); peripheral.discoverServices([serviceUUID], function(error, services) { if (error) console.log('## discoverServices error: ' + error); console.log('## services.length: ' + services.length); var service = services[0]; service.discoverCharacteristics(null, function(error, characteristics) { if (error) console.log('## discoverCharacteristics error: ' + error); console.log('## characteristics.length: ' + characteristics.length); characteristics[0].notify(true, function(error) { if (error) console.log('## notify error: ' + error); setInterval(function() { characteristics[0].read(function(error, data) { if (data) { // publish_humidity(data); // publish humidity // publish_temp(data); // publish temperature publish_ginga(data); // publish GINGA data } }); }, 10 * 1000); // per 10sec }); }); } ); }); } else { console.log("# No my device is discovered"); } });

Centralコード「ginga_iot.js」の部分解説(続き)

139

Peripheralからのadvertisement受信時の処理(80行目~)

BLE Peripheralからのadvertisementを受けてデータが取れたら、Publishする関数を呼ぶ

nobleモジュールでBLEのadvertisementを受けた時のイベント

advertisementが指定したアドレスからの時にはデータ取得のために処理続行

Page 140: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

メインファイルと証明書をCentralに設置

各自のファイルセット → kintone → BLE Central

SCPコマンドも良いのですが、ファイルの受け渡しのためにkintoneを利用します

Page 141: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

{kintoneのログインID(例: user1)}/ ┣ ginga_iot.js ┣ node_module/ ┃ ┣ aws-iot-device-sdk/ ┃ ┣ noble/ ┃ ┗ moment/ ┗ cert/ ┣ rootCA.pem ┣ certificate.pem ┗ private.pem

kintoneにファイルセットを保存

141

圧縮して、kintoneの「ユーザー管理」アプリに保存

BLE Centralのフォルダ

Page 142: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

kintoneに保存したファイルセットをCentralにデプロイ

142

$ curl -X GET "https://kintone-iot.cybozu.com/k/v1/file.json?fileKey={ファイルキー}"\ -H "X-Cybozu-Authorization:{「ID:Passwrod」のbase64エンコード値}"\ -o ./{kintoneのログインID(例: user1)}.zip

ファイル取得のコマンド

$ unzip ./{kintoneのログインID(例: user1)}.zip

ファイルセットの展開

今回は代表何名か分を実施させていただきますm(__)m

Page 143: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

CentralからMQTT Publish

Page 144: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

Peripheralの電源を入れる

144

下に倒れている状態 (バックの枠に合った状態)

上に倒れている状態 (バックの枠に合ってない状態)

OFF ON

ONに!

Page 145: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

Centralでコードを実行

145

$ node ginga_iot.js

PeripheralのデータをPublish

Page 146: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

kintoneのレコード登録確認

146

IoT DeviceからAWS IoT/Lambda経由で登録されたレコード

Page 147: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

おさらいとまとめ

Page 148: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

今回やった内容のおさらい

148

XX

MQTT REST API

①証明書で紐ついたモノから メッセージ(データ)をPublish

Event

②受け取ったメッセージを Topic等でフィルタ

③受け取ったメッセージを Lambdaで処理してkintoneへ連携

MQTT

{ "temp": "14", "humidity": "80", "time": "2016-02-19T12:23:56+09:00", "device": "Lambda test" }

メッセージ kintoneの レコード

Page 149: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

今回行った設定のおさらい

149

XX

MQTT REST API

Event

【kintone】 ①アプリ作成 ②APIトークンの取得

MQTT

【AWS Lambda】 ①eventで送られてきたメッセージを 処理して、kintoneに連携するLambda 関数の作成

【AWS IoT】 ①モノの作成 ②ルールの作成 ②ポリシーの作成 ④証明書の生成 ⑤証明書とモノの紐付け ⑥証明書とポリシーの紐付け

【IoT Device】 ①BLEによるセンサー値取得 ②AWS IoT Device SDKによる センサー値のMQTT Publishの設定

Page 150: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

• AWS IoT/LambdaでkintoneへのIoTインプットが容易に実現できました

• 今回はデータ連携のハンズオンでしたが、kintoneはチームワークプラットフォームなので、ただのDBやビューワだけでなく、IoTインプットからのワークフロー、コミュニケーション、そしてアクションにつなげる利用がkinotne IoT活用の鍵となります

まとめ

150

Page 151: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

ハンズオンは以上です

Page 152: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

ハンズオン後片付け(Lambda関数の削除)

152

①今回作成した関数にチェック

②「Delete function」をクリック

③「Delete」をクリック

Page 153: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

ハンズオン後片付け(AWS IoT証明書の削除)

153

①証明書のリンクをクリック

②ポリシーにチェック

③モノにチェック

④「Detach」をクリック

⑤「Detach」をクリック

※「Detach」、「Deactive」後に、 「Delete」が可能になる

Page 154: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

ハンズオン後片付け(AWS IoT証明書の削除・続き)

154

⑥証明書にチェック

⑧「Deactive」をクリック ⑦「Deactive」をクリック

Page 155: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

ハンズオン後片付け(AWS IoT証明書の削除・続き)

155

⑨証明書にチェックのまま

⑪「Delete」をクリック ⑩「Delete」をクリック

Page 156: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

ハンズオン後片付け(AWS IoTポリシーの削除)

156

③「Delete」をクリック ②「Delete」をクリック

①ポリシーにチェック

Page 157: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

ハンズオン後片付け(AWS IoTモノの削除)

157

③「Delete」をクリック ②「Delete」をクリック

①モノにチェック

Page 158: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

ハンズオン後片付け(AWS IoTルールの削除)

158

③「Delete」をクリック ②「Delete」をクリック

①ルールにチェック

Page 159: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-

本日の内容は以上です

Page 160: kintoneで実践するIoTハンズオン -90分で挑戦!kintone & AWS IoT連携-