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

MQTTでオフィスハック with RasPi

Jul 16, 2015

Download

Engineering

Masahiko Kubara
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
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

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