プログラミング

MQTT スマートホームを支える技術

更新日:

こんにちは、だぶる(@double_bookmark)です。

 

最近、Amazon Echo Dotでテレビを操作しようと四苦八苦しています。

新しいことをやると新しい技術を学べるので「四苦八苦」と書いていますが、基本的に楽しいんですよね。

作りたいものは作れていませんが、その過程で横道にそれながらいろいろ学んでいます。

 

今日は今学んでいるMQTTについて書きます。

 

MQTTとは

Message Queuing Telemetry Transport の略です。

Facebook Messenger で使われているプロトコルとして有名です。

特徴 1 非常に軽量なプロトコル

httpの最小ヘッダサイズが15バイトに対してMQTTは2バイトです。

少ない情報を大量に送りあうのに特化したプロトコルになります。

特徴 2 publish,subscribe型

1対多を想定している設計。

使ってみる 配信側

MQTTは使うためには配信する側と、受け取る側を用意する必要があります。

配信する機能はBeeBotteのサービスを利用します。

BeeBotte

https://beebotte.com/

Unlimited Channels

50,000 Messages/day

5,000 Persistent Messages/day

3 Months History

SSL Encryption

無料プランでは

  • 一日、5万メッセージまで送信可能
  • 一日、5千個のデータまで保存可能

ということで自分の家のスマートホーム化で使う分には無料プランで十分使えます。

チャンネルの作り方

  • Channel:test
  • Resource:sample

補足
SoSのチェックボックスは受信側が接続したときに自動的に最新のデータを送るかどうかの機能です。
常に最新の情報が欲しいとき以外は必要がないと思います。

使ってみる 受信側

受信側はpythonで作ります。

MQTTのライブラリとしてpaho-mqttを利用します。

sudo pip install paho-mqtt

 

実際の受信コードは下記のものになります。

CHANNEL_TOKENやトピック名は自分のもので試してみて下さい。

  • トピック名:test/sample
import time
import paho.mqtt.client as mqtt

def on_connect(client, userdata, flags, respons_code):
    client.subscribe("test/sample", 1)

def on_message(client, data, msg):
    print(msg.topic + " " + str(msg.payload))

client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.username_pw_set("token:CHANNEL_TOKEN")
client.connect("mqtt.beebotte.com", 1883, 60)
client.loop_forever()

on_messageで受け取れる情報によって挙動を変えれば完成です。
私は赤外線通信で再生するファイルを指定するようにしています。

うまく出来たらこのページを更新します。

-プログラミング
-, , ,

Copyright© Book Marker , 2018 All Rights Reserved Powered by AFFINGER4.