Homie: An MQTT Convention for IoT/M2M Japanese memo

日本語訳されたものがうまく見つからないので、自分向けメモ
元ネタ

階層

Homieでは、以下の3階層/種類が登場人物となります。

  • Devices: デバイスです。Arduinoだったり、ESP8266だったり、車だったりを表すことを想定してます。
  • Nodes: デバイスは、複数のノードを提供できます。ノードはデバイスからは独立で論理的に分離できるものです。例えば、車は車輪、エンジン、ライトといったノードを提供することが想定されます。
    ノードは、配列にすることができ、例えば、2つのライトを提供するときに、配列の2要素として提供が可能です。
  • Properties: ノードは、複数のプロパティを持つことができます。プロパティは、デバイスやノードの特徴を表し、通常それらは、(有限数の)状態です。例えば、車輪ノードはアングルプロパティを持つかもしれません。エンジンノードは、スピードや方向、温度を持つかもしれません。ライトノードは、強さや色を持つかもしれません
  • プロパティは、settableになれます。例えば、温度であれば、settableにして欲しいとは思わないかもしれませんが、サーモスタットでは、settableにして欲しいと思います。
    プロパティは、retainedになれます。デフォルトでretainedです。Non-retainedプロパティは、一時的なイベント(例えば、ドアベルが押された)に使われます。

Retained, settableについては、以下のような組み合わせが考えられます。

retained + non-settable
ノードは、プロパティの状態をPublishします(例:温度センサ)
retained + settable
ノードは、プロパティの状態をPublishし、プロパティに対してのコマンドを受け取ることもできます(例:ランプの電源)
non-retained + non-settable
ノードは、一時的なイベントをPublishします(例:ドアベルが押された)
non-retained + settable
ノードは、一時的なイベントをPublishし、コマンドを受け取ることができます(例:コーヒーを淹れる)
Attributes
デバイス、ノード、プロパティは、特別なアトリビューを持ちます。あトリビュートは、それぞれのIDの前に$をつけて表現されます。このアトリビュート情報を使って、オートマチックディスカバリーが行われます。
例: デバイスは、IPアトリビュートを持ち、ノードは、nameアトリビュートを持ち、プロパティは、unitアトリビュートを持ちます。

Base Topic

Homieでは、 “homie/”から始まるトピックを使います。この前提を使用することが難しい場合は、Homie以外のオプションを探すことがおすすめです。

Devices

Homie/”device ID”がデバイスのトピックです。デバイスは、ユニークなIDを持つ必要があります。
# IDのフォーマットは別途定められています。

Device Attributes

homie/”device ID”/$device-attribute
デバイスが、brokerにMQTT(再)接続をするとき、デバイスは、そのアトリビュートをすぐに送信しなければいけません

以下は、IDが”super-car”というデバイスで、wheels,engine,lightsというノードを持つものから送られることが想定されるものです。

homie/super-car/$homie → "2.1.0"
homie/super-car/$name → "Super car"
homie/super-car/$localip → "192.168.0.10"
homie/super-car/$mac → "DE:AD:BE:EF:FE:ED"
homie/super-car/$fw/name → "weatherstation-firmware"
homie/super-car/$fw/version → "1.0.0"
homie/super-car/$nodes → "wheels,engine,lights[]"
homie/super-car/$implementation → "esp8266"
homie/super-car/$stats/interval → "60"
homie/super-car/$state → "ready"

Device Behavior

デバイスアトリビュート$stateは、デバイスの状態を表すもので、以下の6種類があります。

init
MQTT brokerに接続した直後で、Homieのメッセージ全てを送れていないし、デバイスもまだ操作可能でない状態。このメッセージが最初に送られるべきメッセージであるべき
ready
MQTT brokerに接続し、全てのメッセージが送信済みで、操作可能状態になっている。すべてのアナウンスメントメッセージを送信したら、このメッセージを送らなければいけない
disconnected
MQTT brokerからきちんと接続解除できた状態。接続解除前に送らなければいけない
sleeping
デバイスがスリープ状態であることを表す。スリープに入る前に送らなければいけない
lost
きちんと接続解除できなかった状態。このメッセージをLWT(LastWillTopic)に設定しなければいけない
alert
MQTT brokerに接続されているが、エラーである状態。例:センサーが動作せずデータが取得できないため、修理等が必要。このメッセージは、エラー状態になったときに送らなければいけない

Device Statistics

homie/device ID/$stats/$device-statistic-attribute:
$statsは、その配下に、時間経過で変化するデバイスのアトリビュートを送信することができる。デバイスは、$stats/interval秒毎に、それらを送らなければいけない
例えば、”super-car”デバイスは、$stats/interval の値が60であるならば、以下の値を60秒毎に送らなければいけない。

homie/super-car/$stats → "uptime,cputemp,signal,battery"
homie/super-car/$stats/uptime → "120"
homie/super-car/$stats/cputemp → "48"
homie/super-car/$stats/signal → "24"
homie/super-car/$stats/battery → "80"

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です