mqttでオフィスハック with raspi
TRANSCRIPT
![Page 1: MQTTでオフィスハック with RasPi](https://reader031.vdocuments.net/reader031/viewer/2022013115/55a6afee1a28ab725c8b469d/html5/thumbnails/1.jpg)
リレーションズ株式会社
久原政彦
Masahiko KUBARA
![Page 2: MQTTでオフィスハック with RasPi](https://reader031.vdocuments.net/reader031/viewer/2022013115/55a6afee1a28ab725c8b469d/html5/thumbnails/2.jpg)
自己紹介
久原政彦(Masahiko KUBARA)リレーションズ株式会社→この会場です!
組み込みエンジニアフロントエンジニア
ステータス:明日引っ越し。
![Page 3: MQTTでオフィスハック with RasPi](https://reader031.vdocuments.net/reader031/viewer/2022013115/55a6afee1a28ab725c8b469d/html5/thumbnails/3.jpg)
背景
以前は、組み込みエンジニア
ARMとBTと足裏圧力センサを使ってリハビリ支援
RasPiで廃棄物計量監視
最近は、webフロントエンジニア
JavaScript/SPA
bower, browserify, vue, gulp,,, 覚えることたくさん
。○(電子工作をもっと楽しみたい…)
![Page 4: MQTTでオフィスハック with RasPi](https://reader031.vdocuments.net/reader031/viewer/2022013115/55a6afee1a28ab725c8b469d/html5/thumbnails/4.jpg)
_人人人人人人人人人人人人_> JavaScriptで電子工作 < ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^ ̄
![Page 5: MQTTでオフィスハック with RasPi](https://reader031.vdocuments.net/reader031/viewer/2022013115/55a6afee1a28ab725c8b469d/html5/thumbnails/5.jpg)
JavaScriptで電子工作…
Tesselとかもあるけど…
高いねん… 10000円とか…
RasPiが安くて気軽!
3,240円なら、まぁ壊しても安心
GPIO直接叩ける
通信もWi-FiドングルでOK
「センサデータとか、処理結果とか、うまく投げたいな。」
![Page 6: MQTTでオフィスハック with RasPi](https://reader031.vdocuments.net/reader031/viewer/2022013115/55a6afee1a28ab725c8b469d/html5/thumbnails/6.jpg)
_人人人人人人人人人人人人人人人_> いまMQTTが流行りだってよ! < ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^ ̄
![Page 7: MQTTでオフィスハック with RasPi](https://reader031.vdocuments.net/reader031/viewer/2022013115/55a6afee1a28ab725c8b469d/html5/thumbnails/7.jpg)
MQTTって何?
メッセージングプロトコル。
IoT、とくにセンサネットワーク向き ヘッダが軽い
重要度管理ができる (QoS)
最後のメッセージはいつでも取り出せる (Retain)
遺言も残せる (Will)
pub/subモデル データを好きなだけ投げて良い
それを聞きたい人だけに、配送する
プロトコルが軽いので、中継役が低スペでもOK
![Page 8: MQTTでオフィスハック with RasPi](https://reader031.vdocuments.net/reader031/viewer/2022013115/55a6afee1a28ab725c8b469d/html5/thumbnails/8.jpg)
つくってみた
![Page 9: MQTTでオフィスハック with RasPi](https://reader031.vdocuments.net/reader031/viewer/2022013115/55a6afee1a28ab725c8b469d/html5/thumbnails/9.jpg)
玄関に人が来たら知らせるシステム
センサで人を検知して、アラームを鳴らす。 つい先日、5Fを増床しました。
誰かが来てもわからない。
「お客さんキタヨ!!」→すぐ対応!
「うろついてる人イルヨ」→すぐ対応!
![Page 10: MQTTでオフィスハック with RasPi](https://reader031.vdocuments.net/reader031/viewer/2022013115/55a6afee1a28ab725c8b469d/html5/thumbnails/10.jpg)
システム概要
ハードウェア Raspberry Pi
アラーム:LED
センサ :焦電センサ(SB412A @\500)
ソフトウェア Node.js
mqtt.js MQTTが簡単に使える
wiring-pi GPIOが簡単に使える
![Page 11: MQTTでオフィスハック with RasPi](https://reader031.vdocuments.net/reader031/viewer/2022013115/55a6afee1a28ab725c8b469d/html5/thumbnails/11.jpg)
構成
RasPi焦電センサ
Wi-Fi
test.mosquitto.orgRasPi
Wi-Fi
publisher subscriberbroker
RasPi焦電センサ
Wi-Fi
mkubara/ir/9F
mkubara/ir/5F
mkubara/ir/9F
mkubara/ir/5F
![Page 12: MQTTでオフィスハック with RasPi](https://reader031.vdocuments.net/reader031/viewer/2022013115/55a6afee1a28ab725c8b469d/html5/thumbnails/12.jpg)
publisher(センサ)
初期設定 RasPiのWi-Fiを設定
Node.jsを入れておく
センサ出力をGPIO11に繋ぐ
npm i mqtt wiring-pi
sudo node pub.js
// MQTTクライアントのセットアップvar mqtt = require('mqtt');
, client = mqtt.connect('mqtt://test.mosquitto.org');
// センサ入力の設定var wpi = require('wiring-pi')
, sensor = 11;wpi.setup('wpi');wpi.pinMode(sensor, wpi.INPUT);
// 100msごとにセンサをチェック// 反応があればpublishするvar state = 0;setInterval(function(){var detected = wpi.digitalRead(sensor);
if (state != detected){client.publish('mkubara@github/ir/5F‘
, ''+detected);state = detected;
}}, 100);
![Page 13: MQTTでオフィスハック with RasPi](https://reader031.vdocuments.net/reader031/viewer/2022013115/55a6afee1a28ab725c8b469d/html5/thumbnails/13.jpg)
subscriber(LED)
初期設定 RasPiのWi-Fiを設定
Node.jsを入れておく
LEDをGPIO10に繋げておく
npm i mqtt wiring-pi
sudo node sub.js
// MQTTクライアントのセットアップvar mqtt = require('mqtt');
, client = mqtt.connect('mqtt://test.mosquitto.org');
// センサ入力の設定var wpi = require('wiring-pi')
, led = 10;wpi.setup('wpi');wpi.pinMode(led, wpi.OUTPUT);
// 焦電センサからの通知を購読するvar detected = 0;client.subscribe('mkubara@github/ir/5F'); client.on('message', function(topic, message){ detected = (message!='0' ? 1 :0);
});
// 定期的に表示を更新するsetInterval(function(){ wpi.digitalWrite(led, detected);
}, 100);
![Page 14: MQTTでオフィスハック with RasPi](https://reader031.vdocuments.net/reader031/viewer/2022013115/55a6afee1a28ab725c8b469d/html5/thumbnails/14.jpg)
brokerはどうする?
test.mosquitto.org テスト用。コネクションを定期的にリセット
MQTT as a Service
Sango(時雨堂) :メッセージ数で制限
CloudMQTT(heroku):帯域幅で制限
自前で立てる mosquitto
クラウドサーバ、RasPiでもいい!
![Page 15: MQTTでオフィスハック with RasPi](https://reader031.vdocuments.net/reader031/viewer/2022013115/55a6afee1a28ab725c8b469d/html5/thumbnails/15.jpg)
Demo…はライブ実行中ですね
![Page 16: MQTTでオフィスハック with RasPi](https://reader031.vdocuments.net/reader031/viewer/2022013115/55a6afee1a28ab725c8b469d/html5/thumbnails/16.jpg)
やってみて
すごい、楽。 クライアントはTopicを指定してpub/subするだけでいい
○ 再送管理とか気にしない
○ APIとかいらない
意外とJavaScript-OnlyでもOKだった webプログラマ側からどんどんアプローチできるかも
webとgadgetが、簡単に繋がる! 興味のある人、ぜひお友達になりましょう!
![Page 17: MQTTでオフィスハック with RasPi](https://reader031.vdocuments.net/reader031/viewer/2022013115/55a6afee1a28ab725c8b469d/html5/thumbnails/17.jpg)
これからやりたいこと
![Page 18: MQTTでオフィスハック with RasPi](https://reader031.vdocuments.net/reader031/viewer/2022013115/55a6afee1a28ab725c8b469d/html5/thumbnails/18.jpg)
MQTT-SN
センサネットワーク ZigBee系を想定? XBee、TWE-Lite
BLEとかでもイケるとは思う
TWE-Liteで超省電力ノード TWE-EH Solar
○ 無電源!: 環境発電で賄える
○ 鋭意製作中。
![Page 19: MQTTでオフィスハック with RasPi](https://reader031.vdocuments.net/reader031/viewer/2022013115/55a6afee1a28ab725c8b469d/html5/thumbnails/19.jpg)
ブラウザからでもpub/subできる!
mows.js
WebsocketでMQTTできる
クライアントもNode.jsで作る browserify
angular, react, vue …
gulp
mows
![Page 20: MQTTでオフィスハック with RasPi](https://reader031.vdocuments.net/reader031/viewer/2022013115/55a6afee1a28ab725c8b469d/html5/thumbnails/20.jpg)
いろいろなモノと連携…
Slack
チャットでpublish
hubot
センサをsubscribeしておいて、反応する
MicroService
センサデータを、意味のあるデータへ変換
Google App Script
カレンダーを見て、会議の終了アラートとか
![Page 21: MQTTでオフィスハック with RasPi](https://reader031.vdocuments.net/reader031/viewer/2022013115/55a6afee1a28ab725c8b469d/html5/thumbnails/21.jpg)
MQTTでオフィスハック
おわり
![Page 22: MQTTでオフィスハック with RasPi](https://reader031.vdocuments.net/reader031/viewer/2022013115/55a6afee1a28ab725c8b469d/html5/thumbnails/22.jpg)
補足用
![Page 23: MQTTでオフィスハック with RasPi](https://reader031.vdocuments.net/reader031/viewer/2022013115/55a6afee1a28ab725c8b469d/html5/thumbnails/23.jpg)
MQTTってなんぞや? [MQTT 1/3]
軽量プロトコル
IoT向けM2M用に作られたメッセージングプロトコル
2バイトヘッダサイズ。 → 組み込み環境向き(HTTPの1/10のデータ量で済む例も)
![Page 24: MQTTでオフィスハック with RasPi](https://reader031.vdocuments.net/reader031/viewer/2022013115/55a6afee1a28ab725c8b469d/html5/thumbnails/24.jpg)
トピックベースで pub/sub [MQTT 2/3]
トピックでまとめる
pub/subモデル 投げたいだけ投げる
聞きたいだけ聴く 認証はTLSとかで
Brokerが仲介
![Page 25: MQTTでオフィスハック with RasPi](https://reader031.vdocuments.net/reader031/viewer/2022013115/55a6afee1a28ab725c8b469d/html5/thumbnails/25.jpg)
センサネットワーク向き [MQTT 3/3]
Will
接続が切れたら発行されるメッセージ。これで電池が切れてもわかる!
Retain
最後のメッセージは取っておける。いつ購読開始してもデータが受け取れる!
QoS
メッセージの重要度を決められる。大事なデータだけは、絶対送る!