レビュー

「自分で作るホームオートメーション」、エンジニア視点で使ってみた!

IoT向けのオープン技術「MQTT」「OpenHAB 2」はどういうものなのか?

今のホームオートメーションはどこまで「遊べる」か?

本格的なHA環境を構築できる「CL-System」と今回利用した「ThinkPad X230」。緑色の機材が「リレーターミナル」、ノートPC左隣の機材が「コントローラー」(試作品)。コントローラーは9月4日に発売されたばかり

 最近はAmazon EchoやGoogle Homeといったスマートスピーカーと連携してON/OFFをコントロールできる「スマートホーム」機器が普及の兆しを見せている。

 しかし、IT技術に詳しい人であれば、ちょっとした欠点も気づいてしまうだろう。

 まず、基本的にメーカーが異なれば相互接続性がない。特定のメーカーのスマートホーム機器を一度購入すれば、機器をそのメーカーで統一しなければならない。他社から魅力的なデバイスが発売されても、それを接続することはできない。いわゆる“ベンダーロックイン”と呼ばれる問題だ。

 ベンダーロックインは「製品の選択肢が狭まる」だけの問題ではなく、「メーカー都合で製品のサポートが停止してしまう」なんてこともある。頑張ってセットアップしたスマートホーム機器が数年で使えなくなり、他社製に買い替えなくてはならなくなるのは正直つらい。

CL-Systemを導入した川畑眼科医院

 また、「システムがブラックボックスで、自分でトラブルを解決しにくい」というのも気になるだろう。また、「お仕着せで用意された範囲内なら、さまざまな機能を手軽に実現できるが、ちょっとでもそれを超えることはできない」なんてことも、もどかしい。少し手を入れて改良したくても、そうはいかないのだ。

 さらに、基本的に家庭向けのため、エアコンや照明を大量に管理する事業所などに導入するには若干非力なのも気になる。とはいえ、事業所向けの高信頼性システムは非常に高価で、導入のハードルが非常に高い。

 こうした問題に取り組んでいるのが、クラウドや特定企業に依存しない、真に自由なホームオートメーション(HA)を目指すスタートアップ、クリティカだ。

 同社については、既にインタビュー記事を掲載している(前編 / 後編)が、クリティカのHAソリューション「CL-System」は、HA向きのオープンな技術である「MQTT」プロトコルや「OpenHAB 2」、そして「M5Stack」といった入手性の高いデバイスをベースとしたもの。

 多少、学習する必要はあるものの、わかってしまえば「スマートホーム」ソリューションを独自に構築したり、センサーやデバイスを連携させて処理を自動化する「ホームオートメーション」を比較的安価に構築できる。

 そこで今回は、「技術に興味がある人」向けに、CL-Systemの導入法を解説してみたい。コマンドラインでの操作に抵抗がなく、また、「新しいプロトコルや概念を理解したい」「IoT機器の内部を知ってみたい」という人向けに書いてみたので、気になる方はぜひ一読してほしい。

「CL-System」のシステム構成


システム設定はIT技術者に、電気工事は電気工事士に!

 さて、本格的なHAシステムを構築しようと思えば、電気工事や電子工作の知識が不可欠だ。

 CL-Systemでは、家庭や事業所の電気工事は免許を持つ専門の「電気工事士」に任せるが、LANやインターネットからの命令をMQTTプロトコルで受け取る「コントローラー」や、それを介して電気回路のON/OFFを行う「リレーターミナル」、照明の明度をコントロールする「ディマーターミナル」、エアコンなどのHA対応家電と通信する「JEM/A ターミナル」といった機器を制御するシステムは「PCに詳しい人」が担当することになる。

 ある程度PCに習熟したユーザーであれば、図の左側にある「MQTT」や「OpenHAB2」の環境構築・運用は簡単に行えるし、IT技術者、というレベルのユーザーであれば、「MQTT」プロトコルやHAソフト「OpenHAB 2」をマスターし、自分で細かく作りこんだHAシステムを構築できる。

I2C機器をCL-Systemにすれば、「MQTT」や「OpenHAB2」の環境構築・運用はPCユーザーでも十分可能
クリティカのHAソリューション「CL-System」。今回主に扱うリレーターミナル以外にも、照明の明るさをコントロールするディマーターミナルやエアコンなどJEM/A家電を管理するターミナル、LCDスイッチ、カードリーダーなどをラインナップする
【目標はホームオートメーションの「Lチカ」】
「コントローラー」をタッチして、「リレーターミナル」をON/OFF。今回はこれをPCやスマートフォンから行えるようにするのが目標だ


「MQTT」プロトコルを理解する

 さて、それでは早速「CL-System」のキモを解説していきたい。

 最初に理解していただきたいのが、「CL-System」のベースとなっているプロトコル「MQTT」だ。あまり馴染みのない名前かもしれないが、シンプルなプロトコルなので、少し試せば難なく概要を把握できるだろう。以下の項ではアプリのインストールや書庫ファイルの解凍、「コマンドプロンプト」のごく基本的な操作(ディレクトリを移動するCDコマンドや実行ファイルの起動)などの知識がある読者を前提に解説を進める。

 MQTTプロトコルは、Webページへのアクセスに利用されているHTTPプロトコルのような通信規格の1つ。CL-SystemをはじめとするHAソリューションやIoT機器では一般的に用いられているプロトコルで、身近なところでいえば「Facebook Messenger」などにも用いられている。

 なぜHTTPプロトコルではなく、MQTTプロトコルを利用するのか。理由はさまざまにあるのだが、まずは「軽量であること」が大きく影響しているといえる。HTTPプロトコルはさまざまなヘッダーを含んでいるため、送信サイズが大きく、送受信の処理も複雑で非力なデバイスには荷が重い。その点、MQTTプロトコルは組み込みデバイスなどで利用することを想定して設計されており、軽量だ。

 また、MQTTプロトコルはセンサーやデバイスがデータを送りあえる点、多数のデバイスへ一斉にデータを送信できる点、送信先のデバイスやネットワークが一時的にダウンしていてもデータを相手に届ける仕組みが備わっている点もメリット。

 たとえばHTTPプロトコルは、サーバー・クライアントが1体1の関係であり、クライアントからサーバーへ接続を開始する必要もあり、さらに双方がオンラインでないと送受信できない。つまり、MQTTは、大量にある非力なデバイスを柔軟に管理するのに向いているのだ。

HTTPMQTT
アーキテクチャー1対1のサーバー&クライアントブローカーを介したPub/Sub
通信方法同期(両方オンラインでなければならない)非同期(通信不良・ダウンに強い)
通信サイズ大きい小さい

 MQTTプロトコルの詳しい仕様については省くが、以下のような「パブリッシュ&サブスクライブ」モデルを採用している。

  • デバイスやセンサー(クライアント)はブローカー(サーバー)に接続し、メッセージを送信(パブリッシュ)する
  • クライアントはブローカーで特定の“トピック”を購読(サブスクライブ)する。つまり、“そのトピックにメッセージが送られてきた時だけそれを転送する”ようにブローカーへ依頼する

 メッセージはHTTPプロトコルと同じTCP/IP接続で送られ(LANやインターネットで利用できる)、機密性を確保したければTLS接続で暗号化することもできる。

トピック(宛先)に応じてブローカー(サーバー)がメッセージを割り振る

 “トピック”というのはいわばメッセージの届け先(住所)で、たとえば“大阪支店ビルの東棟の3Fにある照明”であれば、

Osaka/East/3F/Lights

などと指定できる。“照明”は“温度計”“湿度計”でもいいし、“ドアの鍵(施錠)”などでもよい。また、“トピック”にはワイルドカードのようなものを利用することも可能。たとえば“大阪支店ビルの照明全部”であれば

Osaka/+/+/Lights

と指定すればよい。この“トピック”に対し“OFFにせよ”というメッセージを送れば、東京本社からリモートで大阪支店の照明を全部落とすこともできるだろう。

 ここでは、まずWindows 10 PCにMQTTブローカーをインストールし、「コマンドプロンプト」(Windows)やAndroidからMQTTメッセージを送信してCL-Systemのコントローラー・ターミナルを操作するところまで実演してみよう。

MQTTブローカーをインストール、PCやスマホからCL-Systemのコントローラー・ターミナルを操作

 さて、MQTTブローカー(サーバー)にはさまざまなプラットフォーム向けに多くのソフトがあるが(なんならラズパイにインストールすることも可能だ)、今回は余ったWindows 10(64bit)で「Eclipse Mosquitto」を利用することにする。

「Mosquitto」のダウンロードページ

 まず、ダウンロードページで「mosquitto-(バージョン)-install-windows-x64.exe」をインストールしよう(執筆時のバージョンはv1.6.4)。ウィザードに従って[次へ]ボタンを押していけば、セットアップは完了だ。

ウィザードに従って[次へ]ボタンを押していけば、セットアップは完了

 「C:¥Program Files¥mosquitto」にインストールされるので、「コマンドプロンプト」で以下のコマンドを入力し、「Mosquitto」を起動する(一行ずつ入力し、行末で[Enter]キーを入力する)。

cd C:\Program Files\mosquitto
mosquitto -v

 “-v”オプションは詳細なログを出力するためのオプションで、省くこともできる。

「Mosquitto」(MQTTブローカー)を起動。ポート1883でトピックのサブスクライブを受け入れるとともに、パブリッシュを待機する

 これでブローカーが立ち上がった。次に、テストのため“大阪支店ビルの照明全部”をサブスクライブしてみよう。新たに「コマンドプロンプト」を立ち上げ、以下のように入力する。

cd C:\Program Files\mosquitto
mosquitto_sub  -d -h localhost -t Osaka/+/+/Lights

 “-d”オプションはデバッグメッセージを表示するオプションで省略可能。“- h”オプションは接続先のホスト(IPアドレス)で、自分のPCであれば“localhost”でOKだ。

 “-t”オプションは“トピック”を指定する。ここでは1階層だけならなんにでもマッチする“+”を利用したが、“大阪支店ビルにあるものすべて”なら以降の階層すべてにマッチするワイルドカード“#”が利用できる。

トピック“Osaka/+/+/Lights”をサブスクライブ

 次に、もう一つ「コマンドプロンプト」を立ち上げ、“大阪支店ビルの東棟の3Fにある照明”に“OFF”とパブリッシュしてみよう。

cd C:\Program Files\mosquitto
mosquitto_pub -d -h localhost -t Osaka/East/3F/Lights -m "OFF"

 起動オプションはサブスクライブの場合とほぼ同じだが、“-m”オプションでメッセージの内容を指定するところだけが異なる。

 サブスクライブした「コマンドプロンプト」側に“OFF”と表示できれば成功だ。

トピック“Osaka/East/3F/Lights”にメッセージをパブリッシュ。サブスクライブ側にメッセージが届くのが確認できる

 今回は「コマンドプロンプト」で手軽に試したが、Androidアプリ「IoT MQTT Dashboard」でテストしてみても面白い。スマートフォンからもMQTT通信が行えるのがわかる。

Androidアプリ「IoT MQTT Dashboard」でもMQTT通信のサブスクライブ・パブリッシュが可能だ
「コマンドプロンプト」(PC)でパブリッシュしたメッセージを、サブスクライブした「MQTT Dashboard」(Android)で確認

MQTTブローカーを常時立ち上げておくには

 「コマンドプロンプト」を複数立ち上げて簡易テストするだけならばいざ知らず、異なるPCやスマートフォンからMQTTブローカーへアクセスするケースを考えると、IPアドレスは固定しておいた方がよいだろう。

 そのほかにも、一般のWindows PCでMQTTブローカーを常時立ち上げておくためには、Windows サービス化(セットアップ時に自動で登録されるようだ)やデバイスをスリープさせない設定などが必要となる。インターネット経由でアクセスするために外部へ公開する場合は、セキュリティにも十分留意したい。

CL-Systemの「コントローラー」をセットアップし、MQTTクライアントから操作する

 さて、MQTTプロトコルがどのようなものか、だいたいわかっていただけただろうか。

 簡単に言ってしまえば、送り先アドレスである“トピック”を介して“パブリッシュ(メッセージの発行)”と“サブスクライブ(メッセージの受信)”を行うだけのもので、かなり柔軟に運用できる。

 しかし、通常“トピック”は何階層もいらないだろう。せいぜい、2階層ぐらいあれば事足りる。

 そこで、クリティカのCL-Systemでは、“Area”と“Place”という2階層だけに“トピック”の階層を絞っている。また、メッセージの送信先や購読先を簡単な「規約」で縛ることで、シンプルに管理できるように工夫されている。たとえば、「リレーターミナル」の各チャンネルをON/OFFしたり、ON/OFFの状態を取得したい場合は、以下の“トピック”を用いる。

# コマンドの送信先:
(Area)/(Place)/(ターミナルのシリアル番号)-(ターミナルのチャンネル)/command

# ステータスの読み取り先:
(Area)/(Place)/(ターミナルのシリアル番号)-(ターミナルのチャンネル)/status

 MQTTの仕様を少し限定する代わりに、簡単にセットアップできるよう工夫されているわけだ。

 「ターミナル」をMQTTプロトコルで操作するには、「コントローラー」を用いる。まず「コントローラー」に“Area”、“Place”、MQTTブローカーのアドレスなどを登録しよう。

“M5Stack”をCL-Systemのコントローラーにする

 前述のように、CL-Systemでは“M5Stack”などオープンな技術・デバイスで構築されている。もし手元に“M5Stack”があるならば、それにファームウェアを書き込んで、コントローラーにしてしまうことも可能だ。

“M5Stack”をCL-Systemのコントローラーに

 ファームウェアの書き込みには「Git」、「Go」言語、「Arduino-CLI」が必要となるが、最も難関となる「Arduino-CLI」の導入には専用のバッチファイルが提供されている。書き込み処理も、コンパイル・アップロード用のバッチファイルに解凍したファームウェアをフォルダーごとドラッグ&ドロップするだけで完了する。

 「コントローラー」の設定はWebインターフェイスで行える。電源を接続してしばらく待つと、「コントローラー」の名前(“CL-CTL01”など)をSSIDに持つWi-Fiネットワークが現れるので、PCやスマートフォンをそれにつなぎ、“http://192.168.4.1”へアクセスする。Wi-Fiのパスワードは“01234567”だ。

「コントローラー」の設定はWebインターフェイスで行える

 「コントローラー」の設定画面にアクセスできたら、[本体設定]をクリックして設定画面へ進む。初期設定では以下のようになっているので、“→”の先のように設定を変更する。

  • My Name:CL-CTL01 → ほかのコントローラーと重複しない任意の名前に変更
  • My Description:なし → わかりやすい名前へ(しなくてもよい)
  • Wifi SSID:なし → 利用するWi-FiネットワークのSSIDを入力
  • Wifi Password:なし → 利用するWi-Fiネットワークのパスワードを入力
  • Broker Address:MQTTブローカーのIPアドレスを入力
  • Broker Port:1883 →MQTTブローカーの初期設定を変更している場合は、適宜修正
  • MQTT Area Name:なし →“Area”の名前を設定
  • MQTT Place Name:なし →“Place”の名前を設定

 [クエリ送信]を行うと「コントローラー」の設定が書き換えらる。今回、“Area”と“Place”は適当に

  • Area:Room1402(うちの部屋はマンションの1402号室なので)
  • Place:MyRoom(書斎に設置しているので)

と設定した。ターミナルのシリアル番号は“Ry-T001”だ。

「コントローラー」の設定画面

 確認のため、前節で利用した「コマンドプロンプト」(“mosquitto_pub”コマンド)や「IoT MQTT Dashboard」アプリを用いてMQTTメッセージを送信してみよう。

mosquitto_pub -d -h localhost -t Room1402/MyRoom/Ry-T001-00/command -m "ON"
mosquitto_pub -d -h localhost -t Room1402/MyRoom/Ry-T001-00/command -m "OFF"

 “Area”と“Place”、ターミナルのシリアル番号で「リレーターミナル」のチャンネル1を遠隔でON/OFFできるのが確認できる。

【AndroidアプリからMQTTメッセージを送信】
「MQTT Dashboard」アプリから「コントローラー」「リレーターミナル」を操作

Web設定が利用できない場合は

 Webで設定する代わりに、シリアル通信で設定を書き込むこともできる。USB接続でコントローラー(ファームウェアを書き込んだ“M5Stack”でも可)を接続し、「TeraTerm」で必要なコマンドを送信するだけなので、Wi-FiのないデスクトップPCならばそっちの方が楽かもしれない。

 詳しくは、以下のマニュアルを参照のこと。


「コントローラー」を「OpenHAB2」から操作できるようにする

システム構成図(再掲)

 ターミナルとコントローラーの設定が済んだので、あとはシステム構成図の左側を構築するだけだ。コントローラーを操作するのに毎回「コマンドプロンプト」を立ち上げてMQTTメッセージを送るのは大変なので、GUIで設定や管理が行えるツールを導入するとよい。

 そうしたソフトウェアとしては「OpenHAB2」や「HomeAssistant」などが有名だが、今回は採用事例の多い「OpenHAB2」を用いることにしよう。

 「OpenHAB 2」は、さまざまなスマートホーム機器を集中管理するサーバーだ。オープンソースで開発されており、PC以外にも「Raspberry Pi」などさまざまなプラットフォームで動作する。IoT機器(Things:モノ)を遠隔操作したり、モノのセンサー値を読み取ったり、モノとモノ、モノとWebサービスなどを連携させることができる。さまざまなアドオンが用意されており、機能を拡張するのも容易だ。

事前準備:Javaのインストールと環境設定

 「OpenHAB2」はJavaで開発されており、動作させるにはJavaのランタイムが必要だ。Javaのランタイムは本家「Oracle Java」以外にも複数存在するが、「OpenHAB2」では「Zulu」というディストリビューションが推奨されている。とくに理由がなければ、「Zulu」を選択するのが無難だろう。

 なお、「OpenHAB2」は「Java 8」でしか動作しないので注意。Javaのバージョンを選択する際は“8”を選ぼう。

「Java 8」の「Zulu」をダウンロード

 今回は“Update 202”のWindows版(MSIインストーラー)を利用する。インストールはウィザードに従い[次へ]ボタンを押してゆくだけでよい。セットアップの途中、「Zulu」のインストールパスをクリップボードへコピーしておくと、次の作業がスムーズにおこなえる。

セットアップの途中、「Zulu」のインストールパスをクリップボードへコピーしておくとよい

 次にシステム環境変数を設定する。これはJavaランタイムがどのパスにインストールされているのかを「OpenHAB2」に教えてあげるためだ。まずWindows 10の検索ボックスで[システムの詳細設定の表示](システムのプロパティ)ダイアログを検索・起動し、[詳細設定]タブの[環境変数]ボタンを押す。

システムのプロパティダイアログを開き、[詳細設定]タブの[環境変数]ボタンを押す

 するとダイアログが現れるので、システム環境設定の方に“JAVA_HOME”というエントリを新規作成して、「Zulu」のインストールパスを入力してダイアログを閉じる。

C:\Program Files\Zulu\zulu-8

 この作業を省くと、「OpenHAB2」の起動時に“レジストリキーが見つからない”というエラーが発生するので注意したい。

システム環境設定の方に“JAVA_HOME”というエントリを新規作成して、「Zulu」のインストールパスを入力

 事前準備はこれで完了なので、次は「OpenHAB2」をインストールする。

「OpenHAB2」のセットアップ
「OpenHAB2」のダウンロードサイト。Windows向けの安定版を選択

 まず、「OpenHAB2」のWebサイトからWindows向けの安定版をダウンロードする。執筆時現在の最新版はv2.4.0だ。

 アーカイブをダウンロードしたらそれを展開し、空白を含まないパスに配置(コピー)する。今回はCドライブ直下(C:OpenHAB2)にインストールすることにしよう。インストール後は以下のようになる。

“C:OpenHAB2”にインストールされた「OpenHAB2」

 「start.bat」をダブルクリックして起動し、以下のようなメッセージが出ればセットアップは完了だ。

「OpenHAB2」を起動。終了する場合は“logout”コマンドを入力するか、[Ctrl]+[D]キーを押す

 なお、ファイヤーウォールの警告ダイアログが現れた場合は[アクセスを許可する]ボタンを押し、「OpenHAB2」がPCの外部からもアクセスできるようにしておこう(許可しないと、次のステップでサーバーエラーが発生する)。

「OpenHAB2」がPCの外部からもアクセスできるようにファイヤーウォールを許可

 「OpenHAB2」へアクセスするには、Webブラウザーで“http://(インストールPCのIPアドレス):8080”を開けばよい。たとえば、インストールしたPCで簡単に確認するなら“http://localhost:8080”を「Microsoft Edge」などで開く。

“http://localhost:8080”を「Microsoft Edge」で開くと初期セットアップが開始。推奨である“Standard”を選択してセットアップ処理を進める

 初期画面は「OpenHAB2」の初期セットアップ画面になっているので、推奨である“Standard”を選択してセットアップ処理を完了させてしまおう。位置情報を要求されたら、[はい]ボタンを押して許可しておいて問題ない。これは「OpenHAB2」で天気を表示する際の現在地を特定するために利用される。

 初期セットアップが完了しウェルカム画面が現れたら、

位置情報は許可しておいて問題ない

 初期セットアップが完了すると、ユーザーインターフェイスの選択画面が現れる。これから設定を行うことを考えると、Android風のUIで設定を隅々まで扱える“Paper UI”を選ぶべきだ。設定を済ませたら、タッチでさまざまなデバイスを制御できる“HABPanel”などを試してみてもよいだろう。

ユーザーインターフェイスの選択画面。設定を隅々まで扱える“Paper UI”を選択
「OpenHAB2」+「MQTT」の連携
「OpenHAB2」の“Paper UI”。Webブラウザーの大きさに合わせてUIが変わるレスポンシブデザインで、サイドパネルには画面左上のハンバーガーメニュー(横三本のアイコン)をクリックするか、Webブラウザーの横幅を広げるとアクセスできる

 さて、「OpenHAB2」のセットアップが完了して“Paper UI”にアクセスできたので、ここからはMQTTとの連携を進めていく。

 「OpenHAB2」にはさまざまなアドオン(Add-On)が用意されており、それを追加するだけで簡単に機能を拡張することができるが、MQTT連携もアドオン(MQTT Binding)の追加で簡単に行える。サイドパネルの[Add-ons]を選択し、アドオンの一覧がロードされたら[BINDING]タブへ移って“MQTT”と検索してみよう。

サイドパネルの[Add-ons]を選択。アドオンの一覧がロードされたら[BINDING]タブへ移って“MQTT”と検索

 しばらく待つと、「MQTT Binding」が現れるはずだ。これをインストールすると、「OpenHAB2」と「MQTT」を紐づける(Binding)することができる。インストールの完了は、[Install]というリンクが[Uninstall]に変わるのでわかる。

「MQTT Binding 2.4.0」をインストール

 「MQTT Binding」をインストールしたら、サイドパネルの[Inbox]をクリック。[+]ボタンを押して、「OpenHAB2」にデバイス(Thing)を追加していく。

「MQTT Thing Binding」をクリックして、MQTT機器の検索画面へアクセス

 まず、「MQTT Thing Binding」をクリックして、MQTT機器の検索画面へアクセスする。まだ何も登録されていないはずなので、[Add Manually]というリンクをクリックして手動登録へ進む。

[Add Manually]というリンクをクリックして手動登録へ進む

 すると、登録するモノ(Things、機器)のリストが現れる。今回ここで登録したいのは、MQTTのブローカーとCL-Systemのコントローラーだ。

登録するモノ(Things)のリストが現れる

 まず、MQTTのブローカーを登録しよう。“機器の選択(Choose Things)”画面で[MQTT Broker]を選択して登録画面へ遷移し、[Broker Hostname/IP]の項目にMQTTブローカー(サーバー)のIPアドレス(デフォルト設定であればポート番号は不要)を入れ、画面左上のチェックアイコンをクリックして登録を完成させる。

MQTTブローカーの登録。入力しなければならないのは、IPアドレスのみだ

 一方、CL-Systemのコントローラーは[Generic MQTT Things(汎用的なMQTT機器)]に当たるので、“機器の選択”画面でそれを選択。“Bridge Selection”で先ほど登録したブローカーをチョイスし、チェックアイコンをクリックして登録を済ませよう。

CL-Systemのコントローラーを登録

 以下のような画面になれば、“Thing(機器、モノ)”の登録は完了だ。どちらもちゃんと“Online”のラベルが付いて、ちゃんと稼働していることを確認する。

“MQTT Broker”と“Generic MQTT Things”がともにオンラインになっていることを確認する

 続いて、“チャンネル(Channels)”と“アイテム(Item)”の設定を行う。“エアコンをON/OFFする”場合、“エアコン”がアイテムで、“On/OFFする”というスイッチ操作がチャンネルに当たるだろう。ここからはまず動作(チャンネル)を定義して、操作対象(アイテム)を割り当てていく。

“チャンネル”と“アイテム”を設定すると、このように「OpenHAB2」から操作可能となる。この場合、“寝室の照明”がアイテムで、トグルスイッチ(On/OFF)がチャンネルとなる

 まず「OpenHAB2」のサイドパネルで[Configuration]-[Things]をクリックし、モノ一覧へアクセスして先ほど追加した“Generic MQTT Things(コントローラー)”の詳細画面を開く。登録直後ではまだなにもチャンネルが追加されていないはずなので、[+]ボタンを押して追加する。

“Generic MQTT Thing”にチャンネルを追加。スイッチ以外にもさまざまな動作を登録できる

 今回はコントローラーを介して電源のON/OFFを行うリレーターミナルを制御するので、タイプは“On/OFF Switch”を選択。すると、ポップアップが広がって詳細な情報を登録するよう求められる。

チャンネルの詳細設定。“MQTT state topic”、“MQTT command topic”などの項目を入力する

 チャンネルの実体は、前節で行ったMQTTプロトコルの送信処理だ。CL-Systemのコントローラー(シリアル番号は“Ry-T001”)で“Area”を“Room1402”、“Place”を“MyRoom”に設定しており、1番目のチャンネルにON/OFFコマンドを送信したい場合は、以下の内容を入力する。

  • Channel Id:Ry-T001(他と被らない任意の名前)
  • MQTT state topic:/Room1402/MyRoom/Ry-T001-00/state
  • MQTT command topic:/Room1402/MyRoom/Ry-T001-00/command

 設定が完了したら、続けて[SHOW MORE]をクリックし、メッセージをコマンドとして送信すること、メッセージの内容は“ON”と“OFF”であることを入力する。

  • is command:有効化
  • On/Open value:ON
  • Off/Close value:OFF

 [SAVE]を押すと、新規のチャンネルが作成される。

“アイテム”を作成して“チャンネル”に関連付ける

 次に、“アイテム(Item)”を作成して“チャンネル”に関連付ける。必要な項目は以下の2つだ。

  • Name:他と重複しない任意の名前
  • Label:表示名。Web UIからはわかりやすい名前にしておくとよい
“アイテム”の設定画面。いろいろ項目があるが、入力しなければならないのはとりあえず2つだけだ

 入力したら、[LINK]をクリックして登録を完了させる。あとは同じ作業を繰り返して、以下のように“チャンネル”と“アイテム”を関連付けていくだけだ。大量のモノを登録する際は、「OpenHAB2」の設定テキストを直接編集した方が早いようだが、最初はGUIで操作するのがよいだろう。

“チャンネル”と“アイテム”

 「OpenHAB2」のサイドパネルから[Control]へアクセスすれば、登録したモノをON/OFFできるようになっているはずだ。

【「OpenHAB2」のサイドパネルでHAを制御】
「OpenHAB2」のサイドパネルから「コントローラー」「リレーターミナル」を操作


「OpenHAB2」を活用すると、何ができるのか?

 さて、ここまでの説明で、「OpenHAB2」と「MQTT」の連携は一応、完了した。

 リモートで照明や家電をコントロールできるだけでもなかなか楽しく、便利ではあるが、「OpenHAB2」の魅力はそれにとどまらない。今回、すべてを解説するわけにはいかないが、例えば、以下のようなことを実現できる。

「パネル」UIでタッチ操作
「Hub Panel」ユーザーインターフェイスで機器を管理

「Hub Panel」ユーザーインターフェイスを使うことで、パネル状のUIを利用、状態を一覧したり、タッチで操作する。古いタブレットを“キオスクモード”にして、操作パネルに転用しても面白いだろう

「Hub Panel」ユーザーインターフェイスで機器を管理
ルールを設定してオートメーション

「Rule Engine」アドオンを追加することで、「〇〇が△△したら、××する」といったルールを記述できる。たとえば、「カードキーで入室したら、照明をつけて、エアコンを稼働し、勤怠をつける」といったオートメーションが「IFTTT」のような感覚で実現できる。

 IFTTTの場合は、外部ネットワークが死んでしまうと動作しなくなってしまうが、CL-Systemの場合は、LANとサーバーが動作していれば動作するのがポイントだ。


OpenHAB2の可能性………Google HomeやHue、IKEAやマインクラフト、さらには電気自動車「Tesla」まで

 「OpenHAB2」は音声読み上げにも対応しているので、「何かが完了したら音声で知らせる」ということも実現できる。

 そのほかにも、「MQTT」プロトコルで鍵、照明や空調の制御、家電や音響システムのリモート操作などの活用が考えられる。センサーの値を読み取ってグラフィカルに表示したり、センサーの値に応じてアイコンを変えたり、温度や湿度の変化を時系列でグラフ表示することも可能だ。

 また、「OpenHAB2」には「MQTT Binding」以外にもさまざまなバインディングが用意されており、スマートスピーカー「Google Home」や「Philips Hue」「LIFX」「IKEA トロードフリ」などのスマートLED照明、ウェアラブルメモ「WeMo」などのデバイスをコントロールできる。天気サービスにつないだり、「Internet Printing Protocol」と接続するバインディングもある。データがオープンに提供されてさえいれば、原理上は何とでも連携できるわけだ。

 なかには電気自動車「Tesla Model 3」の充電をスマートフォンの「OpenHAB2」からコントロールしたり、人気ゲーム「Minecraft」からスマートホーム機器をコントロールする「Minecraft Binding」といった例も紹介されている。

 「OpenHAB2」にさえ繋げられれば、リモートコントロールだけでなく、前述のルール機能でオートメーションだって実現できる。まさに可能性は無限大だ。

「OpenHAB2」を常時運用する

 「OpenHAB2」を常時運用するのであれば、サービス化するのがお勧めだ。詳しくはOpenHABの公式マニュアルを参照してほしい。「SSH」でリモート接続する方法も案内されている。


オープン技術を活用した、「安価に遊べるホームオートメーション」しかも柔軟で高拡張

 以上がざっとした解説になるが、CL-Systemの魅力は、

  • 低コスト、バランスの良い仕様の割り切り
  • オープン技術がベースなので拡張性があり、自分でなんでもプログラムできる

というところにある。

 オープンな技術と入手容易なコンポーネントを活用し、活用次第で安価に「遊べる」、しかも本格的なホームオートメーション、それがCL-Systemというわけだ。

 最近流行りのスマートスピーカーを使った家電コントロールに飽き足らないユーザーが挑戦するには、ちょうどいいソリューションといえるだろう。

 人命に関わったり、高い信頼性が求められる環境では、高価な専門のシステムが必要になるだろうが、そうではない環境では導入コストの点でも魅力的。とくにIoTやサーバーの管理・運用に慣れたIT系の事業所ならば、「MQTT」や「OpenHAB2」はさほど苦労なく扱えるであろうし、機材の転用も比較的容易なはず。興味を持った方は、ぜひともチャレンジしてみてほしい。

(協力:クリティカ)