Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
IoTの基本~メッセージブローカについて~
Search
Tasuku Hori
April 12, 2019
Technology
0
230
IoTの基本~メッセージブローカについて~
メッセージブローカ/AWS IoT Coreについてのセッション資料。
※EVF2015公開資料をベースに追記
Tasuku Hori
April 12, 2019
Tweet
Share
More Decks by Tasuku Hori
See All by Tasuku Hori
誰でもAIエージェントが作れる開発環境 Dify/Llamaの紹介
coolerking
0
130
コード生成ツールの導入判断 のための評価方法の提案
coolerking
0
53
コード生成ツールGitHub Copilotは本当に効果があるのか~生成ツールの定量的評価方法~
coolerking
0
46
呪文開発~GPT3/4時代に発生した小さくて新しい作業『プロンプト・エンジニアリング』~
coolerking
0
190
Play with Kubernetes ~はじめにやること~
coolerking
1
540
国土地理院 基盤地図情報 ~GIS データの基本~
coolerking
0
1.2k
音声異常検知をためしてみよう ~身近な音声を録音して、音声異常検知モデルにかけてみよう
coolerking
0
240
富岳の使い方~富岳で機械学習~
coolerking
0
880
AI RCカー Kaigi On Line 2021 ライトニングトーク資料
coolerking
0
120
Other Decks in Technology
See All in Technology
Amazon Kendra GenAI Index 登場でどう変わる? 評価から学ぶ最適なRAG構成
naoki_0531
0
100
多領域インシデントマネジメントへの挑戦:ハードウェアとソフトウェアの融合が生む課題/Challenge to multidisciplinary incident management: Issues created by the fusion of hardware and software
bitkey
PRO
2
100
LINEヤフーのフロントエンド組織・体制の紹介【24年12月】
lycorp_recruit_jp
0
530
WACATE2024冬セッション資料(ユーザビリティ)
scarletplover
0
190
ハイテク休憩
sat
PRO
2
140
宇宙ベンチャーにおける最近の情シス取り組みについて
axelmizu
0
110
終了の危機にあった15年続くWebサービスを全力で存続させる - phpcon2024
yositosi
0
180
[Ruby] Develop a Morse Code Learning Gem & Beep from Strings
oguressive
1
150
レンジャーシステムズ | 会社紹介(採用ピッチ)
rssytems
0
150
.NET 9 のパフォーマンス改善
nenonaninu
0
760
C++26 エラー性動作
faithandbrave
2
700
20241220_S3 tablesの使い方を検証してみた
handy
3
360
Featured
See All Featured
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
169
50k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
17
2.3k
Code Review Best Practice
trishagee
65
17k
No one is an island. Learnings from fostering a developers community.
thoeni
19
3k
The Cost Of JavaScript in 2023
addyosmani
45
7k
A Tale of Four Properties
chriscoyier
157
23k
BBQ
matthewcrist
85
9.4k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
2
170
Automating Front-end Workflow
addyosmani
1366
200k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Rebuilding a faster, lazier Slack
samanthasiow
79
8.7k
A designer walks into a library…
pauljervisheath
204
24k
Transcript
IoTの基本 ~メッセージブローカについて~ 2019年4月12日 テクノロジーイノベーション部 IT プロフェッショナル 堀 扶
この資料について • メッセージブローカ/AWS IoT Core について話をします • EVF2015 社外発表セッション資料をベースとしています •
セッションを聞いた人はつまらないとおもいます • 使用しなかったスライドも添付してありますが、内容が古くなっている 場合があります
Garden Hori in 2015 ※ソースコードやドキュメントは社内GitBucket上にあります
IoTリファレンスアーキテクチャモデル センサ IoT ゲートウェイ メッセージ ブローカ ディスパッチャ ストア アプリケーション 温度・湿度
光量 水位 Arduino Edison 有線 (Groveキット流用) (プルアップ回路) IBM IoT Foundation Traial版 Mosquitto MQTT MQTT(Publish) 認証有り WiFi(インターネット) JSON形式5秒間隔 NodeRED MQTT MQTT(subscribe) 認証有り インターネット JSON形式5秒間隔 Cloudant REST REST(CORS)Basic認証 インターネット JSON形式 Node.js D3.js Paho REST MQTT REST ブラウザ HTTP Bluemix Traial版 Paho 水耕栽培器 ※灰色部分は、テストのみ Twitter © 2015 EXA CORPORATION 4 ※写真はスイッチサイエンス社、秋月電子社、アマゾン社、ユーイング社サイトより引用 ※ロゴは、IBM社、Mosquitto、Twitter社、Google社サイトより引用 IBM Cloud IoT Watson Platformでは こっち側全部をアプリケーション と呼ぶ
通販や秋葉原で入手可能なセンサ 人感 Palallax Pi2 B 水温 DS18B20 超音波 HC-SR04 温度
USB thermo 528108 温湿度 AM2321(DHT22) 照度 TSL2561 大気圧 MPL115A2 音 SEN12945P 加速度/磁気 MMA8451Q/MAG3110 ブレッドボードで 回路を組み ゲートウェイへつなぐ © 2015 EXA CORPORATION 5 ※写真はスイッチサイエンス社、秋月電子社、アマゾン社サイトより引用
センサの役割 • 状態にあわせて値の変わる”抵抗” • 電源が必要 • パッシブセンサでも計測側は電源が必要になる • 計測結果のブレが大きい •
種類により毎回値が変わる • 基本的に回路を組みブレを補正する • 予め回路を組んだ形状で販売されているものもある • 当然センサ単独部品より高価になる • 補正をプログラム側で請け負えばより安く組める • ライブラリを公開していない場合はデータ公開している • データを元に補正プログラムを組む © 2015 EXA CORPORATION 6 ※写真はスイッチサイエンス社サイトより引用
Garde Horiで使用したセンサ 温度・湿度両方計測可能 水位計測 光量計測 基板付きのものは、直接ゲートウェイへ接続可能 基盤なし →ドキュメントを読み、自分で回路を組む データ補正は実測が必要(要テスター) 水位計測を線形データ化する回路は
国内販売されていなかった © 2015 EXA CORPORATION 7 ※写真はスイッチサイエンス社、Milone社社、Amazon社サイトより引用
IoTゲートウェイの役割 • センサとインターネット(イントラネット)の間に配置される • 書籍により近距離通信プロトコル化するところまでを指す場合も • RFIDシールを使う場合、どこがIoTゲートウェイなのか迷う • 定義はざっくりしているのでプロジェクトごとに決めておく •
プロトタイプ作成にマイコンボードを利用することが多い • AWSではデバイスゲートウェイと呼称されていた 《子機》 《センサ》 RFID(電源無し) 非接触読み取り (ベンダ独自の通信方法) 近距離通信標準 Bluetoothなど 《親機》 RFIDリーダ スマートフォン PCや専用機器等 4G/LTEやWiFi インターネットへ 《IoTゲートウェイ?》 © 2015 EXA CORPORATION 8 ※写真は富士通社サイトより引用
主な近距離通信標準 プロトコル名 無線LAN WiFi クラシック Bluetooth Bluetooth LE ZigBee IEEE規格
IEEE802.11g IEEE802.15.1 - IEEE802.15.4 送信電力 10mW 2.5mW 1mW 1mW 受信感度 -80dBm -70dBm -70dBm -85dBm 通信距離 30m 15m 10m 50m データレット 54Mbps 1Mbps 1Mbps 250kbps 消費電力 約300mW (連続動作) 約50mW (連続動作) 50μW~1mW (間欠動作) 50μW~1mW (間欠動作) 電池充電/交換 数時間 数日 数年 数年 IP親和性 ◦ △ △ X 量産コスト ¥2,000- ¥1,000- ¥1,000- ¥3,000- 適用アプリ PC周辺近距離通 信 音楽など音声近 距離通信 センサ計測 データ収集 センサ計測 データ収集 ※書籍「Bluetooth LE入門」p16より引用 © 2015 EXA CORPORATION 9
主なマイコンボード Arduino UNO R3 Raspberry Pi3 B+ Google Coral DevBoard
ATmega328/16MHz ARM Cortex A53 4core/1.4GHz ARM Cortex-A53,Cortex-M4F ¥3,240- ¥5,200- $149.99- 日本未発売 Flash:32K/SRAM:2K/ EEPROM:1K 1GB(SDRAM) 1GB LPDDR4 なし (Shield装備で ZigBee/Bluetooth/WiFi/Ethe rnet使用可) Ethernet, Bluetooth 4.1 WiFi2 HAT装備で4G/LTEも Ethernet, Bluetooth 4.1 WiFi2 HAT有無不明 日本語書籍意外と多数 日本語書籍・ブログ多数 日本語情報ほとんどなし Sketch (Arduino IDE) Linux上で使用可能な言語で 開発可 Linux上で使用可能な言語で 開発可(TensorFlow利用が基 本なのでPythonが主力) アナログピンを標準装備 H/W PWM ピンも標準提供 センサ処理だけなら十分 デジタルピン多数提供 H/W PWMが2ピンのみ アナログピンなし Raspberry Pi互換GPIOピン配 列(おそらくアナログなし) TensorFlow Lite対応 アナログ品がない場合、 センサと接続するにはAD 変換器が必要! © 2015 EXA CORPORATION 10
GPIO:General Purpose Input/Output 実行時ユーザによって制御可能である入出力インターフェイス 一般的にピン形状をしている場合が多い デジタルピン:0Vか3.3Vかどちらかの電圧状態にできる アナログ:0から3.3Vの間の電圧状態にできる センサを直結するにはアナログ入力ピンが必要
メッセージブローカの役割 ガンガン送信されるセンサデータ一時窓口 トピック名/hogehogeでPublish Port:1833で 待ち受け (443,8883) トピック名/hogehogeでSubscribe 購読をやめるまで ひたすら送られてくる →Webアプリのように
作るとキケン ガンガン メッセージデータを送信 最初にPublisher登録 最初にSubscriber登録 Publisher Subscriber メッセージ ブローカ 認証可 認証可 OSSのMQTTライブラリ (Eclipseライセンス) Sketchにも対応している ※写真はアマゾン社サイトより引用 ※ロゴはIBM社サイトより引用
主なメッセージブローカ • Eclipse Mosquitto • オープンソース • 汎用MQTTライブラリEclipse Paho •
IBM Watson IoT Platform/Message Sight • AWS IoT Core • Google Cloud Pub/Sub • Microsoft Azure IoT Hub • 時雨堂 Sango/Akane • ニフティクラウド MQTT ※写真はIBM社、サイトより引用 ※ロゴはMosquitto、時雨堂社、ニフティ社サイトより引用 これらのブローカのほとんどがMQTTプロトコルに対応している ロゴからわかるとおり「ハブ&スポーク」構造 をとることも大きな特徴と言える
MQTTプロトコル • Publish/SubScribe型モデル(後述)、TCP/IP上で動作、ペイロード自由 • QoS指定可能 • 0:At most once, 1:
At least once, 2:Exactly once • Will (遺言) • 意図しない切断があった場合に送信される • Retain • 最後にpublishしたメッセージを残しておき、その後Subscribeしたノードへ最初に送る • セキュリティ • ユーザ、パスワードによる認証(TLS)ほか(ベンダごとに異なる) • エンベロープが軽量 • HTTPと比較して1/10~1/100の通信量に • ボディはJSON形式が一般的 • 送信可能な型はソフトウェア・サービスで異なる IoTやM2Mの実現に適したシンプルで軽量なプロトコル © 2015 EXA CORPORATION 14
Publisher Subscriber モデル • 非同期メッセージングの概念モデルのひとつ • 出版・購読型モデルとも呼ばれている • メッセージ送信者は特定の受信者を想定せず送信 •
ただし送信メッセージは各々クラス分けされている • 受信者はあらかじめ興味のあるクラスを指定 • 興味のあるクラスに属するメッセージのみ受信(フィルタリング) • フィルタリングには、トピックベース、コンテンツベースなどがある メッセージの属性や内容が購読側の定義した制約に マッチしたものだけ受信
トピックベースのフィルタリング 《MQTTブローカ》 《Publisher》 《Subscriber》 メッセージ /トピックA メッセージ メッセージ メッセージ 受信対象
Subscriber “/トピックA” Subscriber X “/トピックB” Subscriber Y “/トピックC” Subscriber Y “/トピックD” Subscriber Z ①Publisherがメッセージを送信 ②トピックから受信先Subscriberを決定 /トピックB /トピックC /トピックD ③すべての受信対象Subscriberへ送信
ワイルドカードをつかって購読対象指定 Publisher A Publisher B Publisher C MQTTブローカ 受信対象 Subscriber
“/tokyo/temp” Subscriber X “+/temp” Subscriber Y “/tokyo/#” Subscriber Z “/tokyo/”と前方一致 2階層以上も可 “/temp”と末尾一致 前方は1階層のみOK Subscriber X Subscriber Y Subscriber Z メッセージ メッセージ メッセージ “/tokyo/temp” “/tokyo/humid” “/osaka/temp” メッセージ “/tokyo/temp” メッセージ “/tokyo/temp” メッセージ “/tokyo/temp” メッセージ “/tokyo/humid” メッセージ “/osaka/temp”
IBM Watson IoT Platform 最初にデバイスを登録し、 Publish通信時の認証に必要な Auth Tokenを取得 org=5nrm95 type=arduino
id=b4218af014ce auth-method=token auth-token=oWW!9999999999999DN 組織ID:URLの先頭文字列になる デバイスタイプ:トピック文字列の一部で使用 デバイスID:MACアドレス、トピック文字列の一部で使用 登録時以下の情報を一度だけ表示 ※画面はIBM IoT Foundation トライアル版 Sketchプログラムで使用する 独自フォーマットの JSONでないと受け 取ってくれない
Microsoft Azure IoT Hub MQTTブローカを拡張さ せデバイス上で特定の プロセスを実行できる ように拡張 詳しく知りたい人は Aidemy講座「IoTデバイスへ
の機械学習モデルのデプロ イ」(有料)を受講のこと
AWS IoT Core Device Gateway メッセージにクエリをかけ、合致し た場合他のサービスへ送信 セキュアな通信を実現するための 機能 デバイスの状態を永続
化したサービス デバイス・IoTアプリ間の Pub/Sub トピックベースだが、さらにSQLっぽ いクエリができるようになっている ※AWS IoTマニュアルより引用
リファレンスアーキテクチャと重ねると 《センサ》 《IoTゲートウェイ》 《メッセージブローカ》 《ディスパッチャ》 《ストア》 《ストア》 《ストア》 《アプリケーション》 《アプリケーション》
《アプリケーション》 脳内にリファレンスアーキテクチャモデルがあると、ベンダ固有の構造も理解が早くなる
モノのカゲ Thing (モノ) Things Group (モノのグループ) Billing Group (請求グループ) 親子関係
<<concrete>> Device (デバイス) <<abstract>> (Party) <<abstract>> Job (ジョブ) Type (タイプ) Custom Job (カスタム ジョブ) OTA Job (OTA更新ジョ ブ) Core Job (Core更新ジョ ブ) Certificate (証明書) Policy (ポリシー) アタッチ モノ固有の 属性を管理 請求ドメイン デバイス本体 のこと アプリとして の所属 private key X509 証明書 デバイスが通電されていない状態でも代 わりにThing Shadowが機能の一部対応でき るように拡張されている 請求単位の 所属 属性の切り出し [完全?] サーバ 証明書 直接関係を 紐付ける情報はないが 接続時に随時アタッチされる (秘密鍵&X509証明書つきで) 割当 AWS IoT Core 作成 Thing Shadow (モノのカゲ) 0..1 0..1 1 * 0..1 * * * 0..1 1 * 0..1 0..1 * 0..1 0..1 1 《JSON》 デバイス上でジョブを外部からキックでき る機能、IBMやMSなども同等の機能をもつ 比較的メジャーな拡張機能 * *? アプリ側から直接接続する場 合、未アタッチの証明書を 使って接続する
倉庫入出庫システム:SCD 倉庫管理者 倉庫入出庫 システム ←作業指示群 外部の ロジスティックス システム ←荷物→ 荷物入庫情報→
デモシステムでは この部分は作成しない 研究テーマのデモシステム
《donkeycar》 倉庫入出庫システム:SCD(RATF海面) 外部の ロジスティックス システム 倉庫管理者 ローダ 手動運転 モデルファイル 学習データ
《Agent》 最新入出力・位置情報 作業報告 モニタ モデルファイル 学習データ 実測データ(学習データのもと) アナリスト スーパバイザ モデルファイル 作業指示 (かたまり) 入出庫情報 作業指示(個別) 《Planner》 倉庫入出庫システム Thing Shadow
Shadowが存在する前提での設計が必要 電源ONしたで A:モノ A:Shadow Aはんが、電源ONしたらしいで Aに何かあったら、教えろや Aに、この作業してって伝えといて この作業してほしいって誰か言うてきたで うけたまわり~♪ 倉庫管理者:アプリ
わかってま。 《特定トピックのsubscribe》 《update (reported更新)》 《subscribe時定義したcallback呼び出し》 《update (desired更新)》 《register delta callback呼び出し》 なにか書き込まれたら、教えろや わかってま。 《register delta callback登録》 《update (reported更新)》 《subscribe時定義したcallback呼び出し》 Aはん仕事おっぱじめたで AWS IoT が機能要件を満たすかどうかを判断しなくてはならない
マニュアルを読もう! AWS IoT Coreには、一般的なMQTTブローカにはある機能が一部存在しない!
ネットに踊らされるな! 機能 AWS IoT Core Eclipse Mosquitto 対応プロトコル 3.1.1 3.1/3.1.1
QoS 0, 1 (2未サポート) 0, 1, 2 Will X→◦(ベータ版はXだった) ◦ Retain X ◦ Payloadサイズ 128K 制限なし TLS ◦ ◦ WebSecureSocket X→◦(ベータ版はXだった) ◦ 認証 AWSアカウントレベル→カスタムオー ソライザ対応(要ポリシー) X→パスワード認証可能 https://dev.classmethod.jp/cloud/aws/why-is-there-different-between-aws-iot-message-broker-and-general-one/より引用 ..したが誤りが多い! ..どうもベータテスト時の内容を更新していないらしい AWS IoT Coreの記事には嘘..というか古い情報が多い!
設計者の意図を読み取れ! なぜ、AWS IoT CoreはMQTT仕様をすべて実装しなかっただろう?
Topicフォーマット設計ですべてが決まる (payloadタイプ) (コマンド) 【モノ】 【モノのグループ】 《w/h role》 【モノのグループ】 《party》 【モノのタイプ】
《system》 real virtual /agent /planner /loader /supervisor /jones /status /report /order /json /image_array /bin /monitor /analyst 親子 * 1 ※AWS IoT の場合ルールエンジンが存在するので、後付けでなんとかなるかも.. 通常のトピックベースメッセージブローカの場合、Topicフォーマットにない分類は、購読分別できない なぜ、real/virtualを先頭に入れたのか?
デジタルツイン 「モニタ」が、仮想環境と現実環境と繋ぐ →デジタル・ツイン実現にも、 メッセージブローカが重要なミドルウェアであることがわかる Topicフォーマット設計時点から、デジタルツイン化を想定しているから ※本物の倉庫でのローダの状態をほぼリアルタイムでシミュレータ上で確認できる
ルールエンジン • AWS IoT Core 独自機能 • SQLに似たクエリに合致するメッセージをトリガ • 受信payload上のJSONデータ項目に対してもクエリで使用可能
• デジタルツインにおけるシミュレータ側メッセージの転送もルー ル記述可能 { "sql": "SELECT state, version FROM ‘real/agent/loader/+/status/+'", "ruleDisabled": false, "actions": [{ "republish": { "topic": " virtual/agent/loader/${topic(3)}/status/${topic(5)}", "roleArn": "arn:aws:iam::xxxxxxxx:role/xxxxxx-role" } }] } real/.. で始まるトピックの メッセージを virtual/.. で始 まるトピックに書き換えて republishする
参考:AWS IoT Greenglass • IoTゲートウェイ上でLambdaを動作させる • ネットワーク接続が切れても業務をできるだけ継続できるように する • コンテナ実行を選択しない場合は、Lambdaの一部機能はNGに
• Raspberry Piほか対象デバイスが制限される • ネットワークが切れても動作できるようにするには、データス トア操作などがローカルで完結できるようにしておく
メッセージブローカを使いこなすには • ミドルウェアだがベンダによりERP/業務パッケージに近い場合も • どれだけ正確に Fit&Gap できるかが重要 • 意図しない使い方だと運用中どこかで破綻 •
自分のリファレンスアーキテクチャモデルを持とう • ネット記事だけでなく、きちんと公式ドキュメントを読もう • あたりまえのことが、実は できていない • いそがば、まわれ • ネット上の記事でも”たまたま”動いているコードが存在する • デバイスの回路設計は、たまたま頻度は多少上がる • 通信ライブラリはベンダ独自提供の方が生産性高い • 昔から、難易度の高い実装は並列処理と通信と言われてきた • 再現できないバグが潜みやすい
iLearning IoTビジネス実践講座 【プロトタイプ開発編】4/18 1.はじめに (システム全体像) 2.M2Mのための通信ネットワークの基礎 (1)M2Mにおける主要通信方式(WAN)の選択 (2)通信モジュールとは (3)無線通信方式と通信プロトコル (4)通信パケット量の比較
(5)サーバ接続通信回線 (6)閉域網サービスのセキュリティ(例 3.M2M機器量産開発時の注意点 (1)開発要件の整理 (2)開発のアプローチ (3)通信モジュール/通信ユニット/センサー一覧 (4)近距離通信(ローカル通信)の選択肢 (5)M2M機器に対する法的対応 (6)M2M機器に対するセキュリティ 4.プロトタイプ開発環境 (1)プロトタイピングについて (2)シングルボードコンピュータ基礎 【ビジネスモデル設計編】4/19 1.はじめに (1)IoTビジネス実践講座の目的/構成/位置づけ (2)M2M/IoTの概要と事例 (3)ビジネスモデルと立ち位置の確認 2.市場選定と販路開拓 (1)M2M/IoT市場環境に対する考察 (2)市場選定と販路開拓 3.商流 (1)支払タイプの分類 (2)見えない化とは (3)事例分析結果 (4)事例サンプル (5)最新の支払タイプ例 4.ビジネス価値 (1)ビジネス価値とは (2)価値の視点 (3)共通価値項目の分類/定義 (4)例題事例の解説/分析方法 (5)事例分析考察 (3)Edison、Raspberry Piの仕様と仕組み (4)実習機器セットアップ (5)簡単なプログラムの作成 5.実習 (*注) (1)照度センサー、温度センサーを使用したプログ ラムの作成 (2)近接センサー を使用したプログラムの作成 (3)加速度センサーを使用したプログラムの作成 (4)総合実習 (*)要PC持ち込み 5.経営層が理解すべきこと (1)3つのポイント概要 (経営者主導/想定外価値/収益 性が上がるまでの時間) (2)価値進化のスパイラル 6.プロジェクトリーダが理解すべきこと (1)業務面/技術面の課題、サポータから見た課題 (2)課題の本質と克服 【ビデオ講演】 東京大学 稲田修一特任教授 「M2M/IoT活用とイノベーション」 【特別講演】IoT R&D (株式会社入鹿山未来創造研究所) 入鹿山剛堂理事 「IoTを活用した新規事業開発のポイント」 ※期限が近いので、受けたい人は今すぐワークフローで申請のこと メッセージブローカについては座学レベル? エクサのIoT学習リソース
その他の学習リソース • AWSドキュメント「AWS IoTの水やりのサンプル」 • 2015年の時作ったGarden Horiに近いデモシステムが作れる • Raspberry Pi側の設定も書かれている
• 要ルータ(proxyなしで接続可能であり、要8883/443ポートin/out許可) • 基本無料(Piや土壌湿度センサなどを購入する場合は有料) • Aidemy「IoTデバイスへの機械学習モデルのデプロイ」 • Azure IoT Hub & Raspberry Pi を使用する • e-Learning型式なので、受講自体は誰でも可能 • Google Cloud Platfrom無料枠の範囲で体験可能 • Udemy講座には推奨できる講座なし • 販売しているのにまだ未完成とか、古いなど • メッセージブローカの学習は、どれか1つのベンダの”マニュアルを読んで、 使ってみる”
おわり ※以降のページはEVF2015時点の参考資料です
参考:Amazon FreeRTOS • Amazonが買収(?)してMIT準拠になったOSS • マイクロコンピュータユニット(MCU)ボードのOS • AWS IoT認証つきでOSイメージが入手できる •
ただし、対象のMCUボードがそれほど多くない
プラントIoTに強いエクサ
AWS IoT Core への接続:サンプルコード from AWSIoTPythonSDK.MQTTLib import AWSIoTMQTTClient CLIENT_ID =
"ajent_jones_test" ENDPOINT = "awpukm99x9999mn-ats.iot.us-east-1.amazonaws.com" PORT = 8883 # あらかじめコンソールからダウンロードしておく ROOT_CA = "conf/aws/jones/AmazonRootCA1.pem" PRIVATE_KEY = "conf/aws/jones/c1ffe9999x-private.pem.key" CERTIFICATE = "conf/aws/jones/c1ffe9999x-certificate.pem.crt" TOPIC = 'agent/forklift/jones/+/+' def subscribe_callback(client, userdata, message): print("Received a new message: ") print(message.payload) print("from topic: ") print(message.topic) print("--------------¥n¥n") # 続く # 続き client = AWSIoTMQTTClient(CLIENT_ID) client.configureEndpoint(ENDPOINT, PORT) client.configureCredentials(ROOT_CA, PRIVATE_KEY, CERTIFICATE) client.configureAutoReconnectBackoffTime(1, 32, 20) client.configureOfflinePublishQueueing(-1) client.configureDrainingFrequency(2) client.configureConnectDisconnectTimeout(10) client.configureMQTTOperationTimeout(5) client.connect() # コールバック関数は別スレッドで処理され終了する client.subscribe(TOPIC, 1, subscribe_callback) try: while True: sleep(5) except KeyboardInterrupt: client.disconnect() AWS IoT Python SDK: https://github.com/aws/aws-iot-device-sdk-python 汎用ライブラリよりベンダ提供SDKを使ったほうが、できることできないことを判断しやすい
ディスパッチャの役割 ストア アプリケーション ディスパッチャ ブローカ ブローカからのSubscribeデータを 所定のストアへ振り分ける ブローカ側の通信を受け取れ ディスパッチ先へ連携できれば NodeREDでなくてもよい
IBM IoT Foundationにも REST APIがあり、 デバイス改廃などを UIを使用せずに管理可能 ストア側のREST APIを 使用して格納する NodeRED側にREST APIを用意 これをアプリケーション側でCall MQTTノード WebSocketノード REST API REST API ブローカからのSubscribeデータを所定のストアへ格納する © 2015 EXA CORPORATION 40 ※ロゴはIBM、Apache Foundation、アマゾン社サイトより引用
NodeREDでの実装 《IBMIoTノード》 IoTFから温度・湿度センサ データを受信する 《Functionノード》 現在時刻を追加 《Functionノード》 温度データを抽出 出力形式に記述 《Functionノード》
湿度データを抽出 出力形式に記述 《Cloudantノード》 データベースへinsert 《Cloudantノード》 データベースへinsert 《Switchノード》 温度5度未満の場合 《Templateノード》 温度警告メッセージ作成 《Twitterノード》 Tweetする 《Twitterノード》 Tweetする クリックすると 設定やロジックなどが 書けるようになる 《Switchノード》 湿度10%以下の場合 《Templateノード》 湿度警告メッセージ作成 ロジックの流れをノードフローで記述 ノードごとに設定やロジックを記述 → Node.jsコード化され実行 時刻を取得するためのリソースが Arduino側にないため © 2015 EXA CORPORATION 41
用意されているノード RSS/Atom AFINN-111感情分析 電話連携ただし海外かつ有料 © 2015 EXA CORPORATION 42
ストアの格納対象となるデータ例 { d: {.. }, "timestamp": "2015-06-24T00:26:54.309Z", "timemills": 1435105614309, "tempC":
27, "tempF": 81 } ディスパッチャ編集後の温度データ キー項目は”時刻” 非キー項目は”温度” JSON形式 すべてのセンサデータを格納する場合、明らかに既存のRDBMSでは不向き 3台のArduinoから同様のデー タが5秒間隔で送信される © 2015 EXA CORPORATION 43
データビジュアリゼーション • REST APIからJSON形式データを取得 • 水耕栽培監視システム • 温度、水位のアラートTweet • 最新データを取得する
• 温度・湿度、水位、光量データを参照する 《D3.js》 データに基づいてドキュメントを操作するための JavaScript ライブラリ。 「HTMLドキュメントがReadyになった時、SVG(Scalable Vector Graphics)タグ をDOM操作し、JSONデータを反映させる」流れで実装する。 サンプルは豊富だが、グラフ描画部はデータ量をもとに座標操作をJavaScript で記述する記述が中心となるため、コードの読解が難しい。 © 2015 EXA CORPORATION 44 ※写真及びロゴはIBM社、D3サイトより引用
最新データ表示 D3.js Example D3 Bubble Chartを流用 http://app-graph.mybluemix.net/ © 2015 EXA
CORPORATION 45 ※写真はD3サイトより引用
光量、温度・湿度データ表示 D3.js Example D3 Show Reelを流用 http://app-graph.mybluemix.net/light.html http://app-graph.mybluemix.net/dht22.html © 2015
EXA CORPORATION 46 ※写真はD3サイトより引用
水位データ表示 D3.js Example D3 Liquid Fill Gaugeを流用 http://app-graph.mybluemix.net/water.html © 2015
EXA CORPORATION 47 ※写真はD3サイトより引用
デモシステム成果 ※栽培した野菜は、美味しくいただきました © 2015 EXA CORPORATION 48 現在、トマト育成中
IoTでもシステムを作ってみて • ゲートウェイはネットワーク接続までが山 • Arduino YUNやIntel EdisonはLinux側で設定 • ZigBeeやBLEを使うとき、おそらく同じ苦労が必要 •
センサデータは「こわれた蛇口の水」 • NoSQL/Object Storageは格納先として有効 • MQTTブローカのU:信頼性・P:性能は重要 • どこでデータを間引くかを決める • センサが移動体の場合、人体の場合などでも異なる • Cloudantは検索を使いこなせるかが鍵 • D3.js サンプルコードを読む難易度高し • 美しい白鳥は、水面下で必死で足をかいている • そろそろJavaScriptを..(崖っぷち?) © 2015 EXA CORPORATION 49 ※写真は森田温泉旅館サイトより引用
IoT、どこから攻めこむ? ケース限定 高価 自由度高い 安い 独自開発 汎用センサ 自由度高いAPI 既存ソリューション 限定されたAPI
センサベンダとの協業 によるデバイス改良 センサ ゲートウェイ ストア アプリケーション Public IaaS PaaS積極活用 オンプレ連携 データ分析 ブローカ ディスパッチャ ユーザ企業の視界 今回のデモシステム © 2015 EXA CORPORATION 50 U社屋内位置情報センサス タータキット約500万円~ オキュラスリフト $350.0 Parrot AR Drone2 ¥29,588- 2013/7/16 RFIDタグ40円~ 但し要リーダ約8万~ ※写真はアマゾン社サイトより引用
「何を」をひねり出すための道具 SONYのDIYツールキット「MESH」 イマドキの電子ブロック「littleBits/cloudBits」 YahooとSONY開催のハッカソン SONY+ニフティ+三井不動産のハッカソン 最優秀作品「仮面ライダーMESH」 注意! 楽しいイベントでした、で終わる可能性あり © 2015
EXA CORPORATION 51
littleBits/cloudBits • つなげて遊べる電子ブロック「littleBits」 • cloudBitでクラウドにつなげる事が可能に • コントローラ知識がなくてもIoTできる • 部品にはArduinoボードもある 犬が出ていったら
アラートメール送信 StudentSet $232.90 WorkShopSet $998.75 Pro Library $3299 いろんな事例”プロジェクト”をWebサイトで公開 いいねするごとに 風船が膨らむ © 2015 EXA CORPORATION 52
SONYのIoTブロック”MESH” • SONYのベンチャーグループがクラウドファウンディングにかけて製品化 • SONYのCFサイトにて販売中 1個¥5,980- (GPIOは¥6,980-) • GPIOブロックはArduinoのように別途センサなどを外付けできる ©
2015 EXA CORPORATION 53
電子ブロック復刻版 • 学研より再販されている • Amazonで¥11,217- • 難易度は高くIoTコンサル向きではない • 通信系デバイスがない •
電子回路の学習向け © 2015 EXA CORPORATION 54
タッチボードインベンターズキット © 2015 EXA CORPORATION 55
サーキットステッカスタータキット © 2015 EXA CORPORATION 56 ※Amazonで出品待だった..
Amazonで3960円 iBeacon • iOSデバイスと組み合わせ近接接近検知するための仕組み • 距離、方向は検知できない • 24GHz帯なので人体によく吸収される • AndroidでiBeacon⇒
aBeacon • iBeaconデバイスは省電力使い捨て型 • Amazonでデバイス購入可能 • BLE(Bluetooth Low Enagy)による接続 © 2015 EXA CORPORATION 57
TEXAS INSTRUMENTS SensorTag • BluemixセミナーのIoTデモで使用 • あくまでセンサの評価モジュール $25- • 日本語情報はほとんどない
• 温度、湿度など環境センサ、iBeacon • 国内認可済み © 2015 EXA CORPORATION 58
人体動作、脳波センサ • Kinect™ • MSゲーム機Xboxのデバイス、人体の動きで操作 • APIも提供されている • 動作検知にはGoogle Project
Soliなど • 脳波センサ • すでに幾つか製品化されている • NeuroSky MindWave Moboile • EPSON MOVERIO(スマートグラス) © 2015 EXA CORPORATION 59
Arduino注意事項 • 電気に関する知識ゼロの人のArduino学習最短コースは、書籍から入るのがベスト • 書籍は多数出版されている • Amazonにも対応するキットを販売している • やはり最初はUNOがおすすめ •
できるだけ回路を組まない、やや高くつくがGroveキットを多用する • スターターキットはロボットショップで売っている • どうしてもセンサを自前で回路を組む場合「プルアップ抵抗」が基本 • 通販は秋月のほうがスイッチサイエンスより安い • 秋葉原での購入なら秋月よりロボットショップのほうが入りやすい • 秋月や亜土、若松は他の部品もたくさんあって素人には探しづらい • スイッチサイエンス社は購入するとしばらくしたらサイト上に追加情報を書き込んでくれ ること有り • ブログ公開している人も結構いる • Ethernetのみ使用する場合Arduino Leonardo ETHでも良い • UNOはminiUSBだが、YUNはmicroUSB © 2015 EXA CORPORATION 60
Arduinoシールド注意事項 • Arduino純正WiFiシールド • Arduino IDE付属のサンプルプログラムが動く • (他のシールドもだが)使えなくなるピンを確認してセンサをつけること • Seeeds製WiFiシールド
• 国内認可?、要確認 • 要ハンダ付け • 標準WiFiライブラリではなくWiFlyライブラリを使う(Seeeds社Wiki参照) • 最初にファームを更新する • PubSubClientライブラリが使えなかった • Arduino純正Ethernetシールド • 現在販売中のシールドはバージョン”2” • ベータ版IDE(arduino.orgからダウンロード)で開発すること • FTDIアダプタがあると便利 • ファームウェア更新確認のシリアル接続に使用する • 通販サイトで入手可能 • microUSBケーブルがもう1本必要 © 2015 EXA CORPORATION 61
Arduino YUN注意事項 ショートすると動作しない 座高がYUNのほうが高い! ※Arduinoは、安全のため1A以上になると停止する © 2015 EXA CORPORATION 62
IBM IoTF注意事項 • QuickStartにあるグラフはTrial版にはない • Trial版はMQTT通信要認証 • 大量デバイス使用時にはREST APIを使って登録する •
サービス自体の停止ができない • 受けまくり、送りまくり • デバイスを外しまくるか、API Keyを消すか • Auth Tokenはメモし忘れたら作り直し • IoTFからもREST APIでデータ参照可能だがアプリから直接触らせな いほうが良い • 止められない以上、ディスパッチャかストアからもらうようにするしかない © 2015 EXA CORPORATION 63
NodeRED注意事項 • デフォルトのメモリサイズだとすぐ食いつぶす • 1GBくらいにしておく • イメージファイルなどをデプロイする場合はcfコマンドを使う • バックアップはシート単位でExport •
フロー上で外部変数を定義できない • REST APIを作る場合は駄々漏れに成る可能性あり © 2015 EXA CORPORATION 64
D3.js注意事項 • Exampleのコードは難易度が高い • 流用もすぐにはできない、じっくり読む必要あり • JSONをREST APIでGET/POSTしてデータを取り込む • SVGタグのDOM操作可能だが、Ajaxなどの遅延更新機能は用意さ
れていない • jQuery($.PeriodicalUpdater()など)を併用する • データ項目数が同じ場合の更新はくせがある • 書籍「D3.js徹底入門」に記載有り、JavaScriptに明るくない人は買って おいたほうがよい © 2015 EXA CORPORATION 65
ロボティクス • 制御工学、センサー技術・機械機構学などを統合してロボット の設計・製作・運転に関する研究、ロボット工学 • 既存のロボットの活用 • Pepper, Mindstorm, Robi,
Karotz • お掃除ロボット、家庭内センサコントロール • Bebop Drone(70K), AR Drone(40K), Mini Drone(12K) • Raspberry Pi + 既存の模型 © 2015 EXA CORPORATION 66
LEGO MINDSTORM EV3 • 教育用レゴ、ロボットがつくれる • EV3ではジャイロなどのデバイスも用意 • 役員レベルのイノベーション研修などにも活用されて いる
• EV3で高速ルービックキューブ6面揃える猛者も © 2015 EXA CORPORATION 67
Parrot Drone API • Parrot社のドローン操作用API • 本体自体はさわれない – Linuxが動作しているらしい(ハックしているブログ有) •
操作するスマートデバイス側のアプリを作るためのSDKが用意され ている • 現在いろんな会社がドローンを販売 © 2015 EXA CORPORATION 68
iRobot ルンバ • Roomba SCI • iRobot社の掃除ロボットに実装されている • 8ビットの単純な構造 •
USBシリアルコンバータやBluetoothアダプタ経由でコマンドを送る • Roombatics • ルンバ工学、ルンバのプログラムを修正すること • 洋書だが魔改造本もAmazonで買える © 2015 EXA CORPORATION 69
Arduino Relay-4 Shield • Arduinoもロボティクスのコントローラとして使用可能(もともとコッチで有名) • Arduinoは5V, 40mAまでしか供給できない • 模型で使うモータ1.5V,
560mA以上必要 • 供給電力以外のON/OFFにはリレーを使用する • リレーを搭載したシールドも販売されている • 指定デジタルピンをHIGH、LOWセットしてON/OFF操作 • NO(Normally Open): LOW状態でCと通電状態 • NC(Normally Close): LOW状態でCと不通状態 • C(Common): デジタルピンでコントロールされる © 2015 EXA CORPORATION 70