25
リレーションズ株式会社 久原政彦 Masahiko KUBARA

MQTTでオフィスハック with RasPi

Embed Size (px)

Citation preview

Page 1: MQTTでオフィスハック with RasPi

リレーションズ株式会社

久原政彦

Masahiko KUBARA

Page 2: MQTTでオフィスハック with RasPi

自己紹介

久原政彦(Masahiko KUBARA)リレーションズ株式会社→この会場です!

組み込みエンジニアフロントエンジニア

ステータス:明日引っ越し。

Page 3: MQTTでオフィスハック with RasPi

背景

以前は、組み込みエンジニア

ARMとBTと足裏圧力センサを使ってリハビリ支援

RasPiで廃棄物計量監視

最近は、webフロントエンジニア

JavaScript/SPA

bower, browserify, vue, gulp,,, 覚えることたくさん

。○(電子工作をもっと楽しみたい…)

Page 4: MQTTでオフィスハック with RasPi

_人人人人人人人人人人人人_> JavaScriptで電子工作 < ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^ ̄

Page 5: MQTTでオフィスハック with RasPi

JavaScriptで電子工作…

Tesselとかもあるけど…

高いねん… 10000円とか…

RasPiが安くて気軽!

3,240円なら、まぁ壊しても安心

GPIO直接叩ける

通信もWi-FiドングルでOK

「センサデータとか、処理結果とか、うまく投げたいな。」

Page 6: MQTTでオフィスハック with RasPi

_人人人人人人人人人人人人人人人_> いまMQTTが流行りだってよ! < ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^ ̄

Page 7: MQTTでオフィスハック with RasPi

MQTTって何?

メッセージングプロトコル。

IoT、とくにセンサネットワーク向き ヘッダが軽い

重要度管理ができる (QoS)

最後のメッセージはいつでも取り出せる (Retain)

遺言も残せる (Will)

pub/subモデル データを好きなだけ投げて良い

それを聞きたい人だけに、配送する

プロトコルが軽いので、中継役が低スペでもOK

Page 8: MQTTでオフィスハック with RasPi

つくってみた

Page 9: MQTTでオフィスハック with RasPi

玄関に人が来たら知らせるシステム

センサで人を検知して、アラームを鳴らす。 つい先日、5Fを増床しました。

誰かが来てもわからない。

「お客さんキタヨ!!」→すぐ対応!

「うろついてる人イルヨ」→すぐ対応!

Page 10: MQTTでオフィスハック with RasPi

システム概要

ハードウェア Raspberry Pi

アラーム:LED

センサ :焦電センサ(SB412A @\500)

ソフトウェア Node.js

mqtt.js MQTTが簡単に使える

wiring-pi GPIOが簡単に使える

Page 11: MQTTでオフィスハック with RasPi

構成

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

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

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

brokerはどうする?

test.mosquitto.org テスト用。コネクションを定期的にリセット

MQTT as a Service

Sango(時雨堂) :メッセージ数で制限

CloudMQTT(heroku):帯域幅で制限

自前で立てる mosquitto

クラウドサーバ、RasPiでもいい!

Page 15: MQTTでオフィスハック with RasPi

Demo…はライブ実行中ですね

Page 16: MQTTでオフィスハック with RasPi

やってみて

すごい、楽。 クライアントはTopicを指定してpub/subするだけでいい

○ 再送管理とか気にしない

○ APIとかいらない

意外とJavaScript-OnlyでもOKだった webプログラマ側からどんどんアプローチできるかも

webとgadgetが、簡単に繋がる! 興味のある人、ぜひお友達になりましょう!

Page 17: MQTTでオフィスハック with RasPi

これからやりたいこと

Page 18: MQTTでオフィスハック with RasPi

MQTT-SN

センサネットワーク ZigBee系を想定? XBee、TWE-Lite

BLEとかでもイケるとは思う

TWE-Liteで超省電力ノード TWE-EH Solar

○ 無電源!: 環境発電で賄える

○ 鋭意製作中。

Page 19: MQTTでオフィスハック with RasPi

ブラウザからでもpub/subできる!

mows.js

WebsocketでMQTTできる

クライアントもNode.jsで作る browserify

angular, react, vue …

gulp

mows

Page 20: MQTTでオフィスハック with RasPi

いろいろなモノと連携…

Slack

チャットでpublish

hubot

センサをsubscribeしておいて、反応する

MicroService

センサデータを、意味のあるデータへ変換

Google App Script

カレンダーを見て、会議の終了アラートとか

Page 21: MQTTでオフィスハック with RasPi

MQTTでオフィスハック

おわり

Page 22: MQTTでオフィスハック with RasPi

補足用

Page 23: MQTTでオフィスハック with RasPi

MQTTってなんぞや? [MQTT 1/3]

軽量プロトコル

IoT向けM2M用に作られたメッセージングプロトコル

2バイトヘッダサイズ。 → 組み込み環境向き(HTTPの1/10のデータ量で済む例も)

Page 24: MQTTでオフィスハック with RasPi

トピックベースで pub/sub [MQTT 2/3]

トピックでまとめる

pub/subモデル 投げたいだけ投げる

聞きたいだけ聴く 認証はTLSとかで

Brokerが仲介

Page 25: MQTTでオフィスハック with RasPi

センサネットワーク向き [MQTT 3/3]

Will

接続が切れたら発行されるメッセージ。これで電池が切れてもわかる!

Retain

最後のメッセージは取っておける。いつ購読開始してもデータが受け取れる!

QoS

メッセージの重要度を決められる。大事なデータだけは、絶対送る!