Raspberry PiとNode-redで、Hueブリッジ(Zigbee Hub)を作ってみた(スマホ&Alexa操作対応)[2/3]

スマートホーム
スポンサーリンク

はじめに

前回は、CC2531のファームウェアを書き換え、Raspberry PiにNode-redとMosquittoをインストールしました。今回は、Raspberry Piにzigbee2mqttサーバをインストールして、zigbee機器を制御できるようにしていきます。

 ■実現に向けた連載
  第1回:CC2531とRaspberry PIの準備
  第2回:zigbee2mqttサーバのインストールとzigbee機器の接続  <–この記事
  第3回:スマホ&Alexaインタフェースの実装

第2回:zigbee2mqttサーバのインストールとzigbee機器の接続

zigbee2mqttサーバのインストール

今回は、zigbee機器と通信するためにzigbee2mqttを利用します。zigbee2mqttは、メーカを問わず多くのzigbee機器をサポートしているので、異なるメーカのzigbee機器を接続して相互に運用することができます。

ちなみに、zigbee2mqttがサポートしているzigbee機器の一覧はここにリストがあります。2020年6月時点で、144メーカ、821機器をサポートしているようです‼️すごい‼️

①zigbee2mqttサーバのインストール

まずは、zigbee2mqttのソースコードをクローンして、piユーザが書き込めるようにパーミッションを変更します。

pi@raspberrypi:~ $ sudo git clone https://github.com/Koenkk/zigbee2mqtt.git /opt/zigbee2mqtt
Cloning into '/opt/zigbee2mqtt'...
remote: Enumerating objects: 147, done.
remote: Counting objects: 100% (147/147), done.
remote: Compressing objects: 100% (64/64), done.
remote: Total 10815 (delta 103), reused 117 (delta 83), pack-reused 10668
Receiving objects: 100% (10815/10815), 13.74 MiB | 2.13 MiB/s, done.
Resolving deltas: 100% (7920/7920), done.
pi@raspberrypi:~ $ sudo chown -R pi:pi /opt/zigbee2mqtt

②必要なモジュールのインストール

次に、zigbee2mqttに必要なモジュールを「npm ci」コマンドでインストールします。インストールには5〜8分ぐらいかかるので、気長に待ちましょう😊

pi@raspberrypi:~ $ cd /opt/zigbee2mqtt/
pi@raspberrypi:/opt/zigbee2mqtt $ npm ci

④zigbee2mqttの起動

必要モジュールがインストールされたら、「npm start」コマンドを入力して、zigbee2mqttサーバを起動してみましょう。起動すると前回インストールしたmosquittoに接続して、zigbee機器のペアリング待ち状態になります。

pi@raspberrypi:/opt/zigbee2mqtt $ npm start

> zigbee2mqtt@1.14.0 start /opt/zigbee2mqtt
> node index.js

zigbee2mqtt:info  2020-06-11 21:10:17: Logging to console and directory: '/opt/zigbee2mqtt/data/log/2020-06-11.21-10-17' filename: log.txt
zigbee2mqtt:info  2020-06-11 21:10:17: Starting zigbee2mqtt version 1.14.0 (commit #9009de2)
zigbee2mqtt:info  2020-06-11 21:10:17: Starting zigbee-herdsman...
zigbee2mqtt:info  2020-06-11 21:10:19: zigbee-herdsman started
zigbee2mqtt:info  2020-06-11 21:10:19: Coordinator firmware version: '{"type":"zStack12","meta":{"transportrev":2,"product":0,"majorrel":2,"minorrel":6,"maintrel":3,"revision":20190608}}'
zigbee2mqtt:info  2020-06-11 21:10:19: Currently 0 devices are joined:
zigbee2mqtt:warn  2020-06-11 21:10:19: `permit_join` set to  `true` in configuration.yaml.
zigbee2mqtt:warn  2020-06-11 21:10:19: Allowing new devices to join.
zigbee2mqtt:warn  2020-06-11 21:10:19: Set `permit_join` to `false` once you joined all devices.
zigbee2mqtt:info  2020-06-11 21:10:19: Zigbee: allowing new devices to join.
zigbee2mqtt:info  2020-06-11 21:10:19: Connecting to MQTT server at mqtt://localhost
zigbee2mqtt:info  2020-06-11 21:10:19: Connected to MQTT server
zigbee2mqtt:info  2020-06-11 21:10:19: MQTT publish: topic 'zigbee2mqtt/bridge/state', payload 'online'
zigbee2mqtt:info  2020-06-11 21:10:19: MQTT publish: topic 'zigbee2mqtt/bridge/config', payload '{"version":"1.14.0","commit":"9009de2","coordinator":{"type":"zStack12","meta":{"transportrev":2,"product":0,"majorrel":2,"minorrel":6,"maintrel":3,"revision":20190608}},"log_level":"info","permit_join":true}'

これで、zigbee2mqttサーバのインストールは完了です。

zigbee機器のペアリング

ここからは、zigbee機器をRaspberry Piにペアリングしていきます。今回は、手元にあったIKEAのスマート電球「LED1732G11」と調光用リモコン「E1524」をペアリングしたいと思います。

①リモコンのペアリング

リモコンをペアリングするには、リモコンとCC2531を5cm以内に置き、リモコンの裏側の蓋を開けたところにある、ペアリングのスイッチを5秒以内に4回押します。

うまくいくと、コンソールに以下のように表示され、リモコンがペアリングされます。

zigbee2mqtt:info  2020-06-11 21:32:54: Device '0x680ae2fffe19472a' joined
zigbee2mqtt:info  2020-06-11 21:32:54: Starting interview of '0x680ae2fffe19472a'
zigbee2mqtt:info  2020-06-11 21:32:54: MQTT publish: topic 'zigbee2mqtt/bridge/log', payload '{"type":"device_connected","message":{"friendly_name":"0x680ae2fffe19472a"}}'
zigbee2mqtt:info  2020-06-11 21:32:54: MQTT publish: topic 'zigbee2mqtt/bridge/log', payload '{"type":"pairing","message":"interview_started","meta":{"friendly_name":"0x680ae2fffe19472a"}}'
zigbee2mqtt:info  2020-06-11 21:32:56: MQTT publish: topic 'zigbee2mqtt/bridge/log', payload '{"type":"device_announced","message":"announce","meta":{"friendly_name":"0x680ae2fffe19472a"}}'
zigbee2mqtt:info  2020-06-11 21:33:34: Successfully interviewed '0x680ae2fffe19472a', device has successfully been paired
zigbee2mqtt:info  2020-06-11 21:33:34: Device '0x680ae2fffe19472a' is supported, identified as: IKEA TRADFRI remote control (E1524/E1810)
zigbee2mqtt:info  2020-06-11 21:33:34: Configuring '0x680ae2fffe19472a'
zigbee2mqtt:info  2020-06-11 21:33:34: MQTT publish: topic 'zigbee2mqtt/bridge/log', payload '{"type":"pairing","message":"interview_successful","meta":{"friendly_name":"0x680ae2fffe19472a","model":"E1524/E1810","vendor":"IKEA","description":"TRADFRI remote control","supported":true}}'
zigbee2mqtt:info  2020-06-11 21:33:41: Successfully configured '0x680ae2fffe19472a'

②リモコンからのイベント送信

試しに、リモコンの前面ボタンを押してみましょう。すると、コンソールに以下のように表示され、リモコンのボタン押下イベントがzigbee2mqttに通知されている事が分かります。

zigbee2mqtt:info  2020-06-11 21:42:10: MQTT publish: topic 'zigbee2mqtt/0x680ae2fffe19472a', payload '{"update_available":false,"action":"toggle","linkquality":65}'

③スマート電球のペアリング

次に、IKEAのスマート電球をペアリングします。ただ、スマート電球のペアリングは少々コツがいります。まず、スマート電球を点けた状態にしてRaspberry Piとなるべく近くにしておきます。次に、家の壁のスイッチで「スイッチを消して、点けて」を6回繰り返します。一応、IKEAの公式手順のビデオはここにあります。ただ、私はこの通りにやっても、できませんでした😭

コツは、点けている時間を極力短くすることです。(少し長く)消して→点けて→(すぐに)消す、とすると良いようです。うまくいくと、電球が一回強く光って、以降は暗くなったり明るくなったりを繰り返します。強く光らず、暗くなったり明るくなったりを繰り返している場合は失敗です。

スマート電球のペアリングがうまくいくと、コンソールには以下のように表示されます。

zigbee2mqtt:info  2020-06-11 21:52:21: Device '0xec1bbdfffef84420' joined
zigbee2mqtt:info  2020-06-11 21:52:21: Starting interview of '0xec1bbdfffef84420'
zigbee2mqtt:info  2020-06-11 21:52:21: MQTT publish: topic 'zigbee2mqtt/bridge/log', payload '{"type":"device_connected","message":{"friendly_name":"0xec1bbdfffef84420"}}'
zigbee2mqtt:info  2020-06-11 21:52:21: MQTT publish: topic 'zigbee2mqtt/bridge/log', payload '{"type":"pairing","message":"interview_started","meta":{"friendly_name":"0xec1bbdfffef84420"}}'
zigbee2mqtt:info  2020-06-11 21:52:24: MQTT publish: topic 'zigbee2mqtt/bridge/log', payload '{"type":"device_announced","message":"announce","meta":{"friendly_name":"0xec1bbdfffef84420"}}'
zigbee2mqtt:info  2020-06-11 21:53:03: Successfully interviewed '0xec1bbdfffef84420', device has successfully been paired
zigbee2mqtt:info  2020-06-11 21:53:03: Device '0xec1bbdfffef84420' is supported, identified as: IKEA TRADFRI LED bulb E27 1000 lumen, dimmable, white spectrum, opal white (LED1732G11)
zigbee2mqtt:info  2020-06-11 21:53:03: MQTT publish: topic 'zigbee2mqtt/bridge/log', payload '{"type":"pairing","message":"interview_successful","meta":{"friendly_name":"0xec1bbdfffef84420","model":"LED1732G11","vendor":"IKEA","description":"TRADFRI LED bulb E27 1000 lumen, dimmable, white spectrum, opal white","supported":true}}'

これで、Raspberry Piとzigbee機器のペアリングは完了です。

④ペアリングモードの解除

全てのzigbee機器をペアリングしたら、zigbee2mqttののペアリングモードを解除します。ペアリングモードのままでも使えますが、セキュリティ上、新しい機器が勝手にzigbeeネットワークに参加してしまうのは危険なので、解除することをお勧めします。

ペアリングモードを解除するには「/opt/zigbee2mqtt/data/」にある「configuration.yaml」の「permit_join」をfalseに書き換えます。

pi@raspberrypi:/opt/zigbee2mqtt $ sudo vi /opt/zigbee2mqtt/data/configuration.yaml 
homeassistant: false
permit_join: false  <--falseに書き換える
mqtt:
  base_topic: zigbee2mqtt
  server: 'mqtt://localhost'
serial:
  port: /dev/ttyACM0

⑤自動起動の設定

また、zigbee2mqttもraspberry Pi起動時に自動起動するようにsystemdに登録しておきます。「/etc/systemd/system/」に「zigbee2mqtt.service」ファイルを作成します。

pi@raspberrypi:~ $ sudo vi /etc/systemd/system/zigbee2mqtt.service

zigbee2mqtt.serviceファイルの中身は、以下のようにします。

[Unit]
Description=zigbee2mqtt
After=network.target

[Service]
ExecStart=/usr/bin/npm start
WorkingDirectory=/opt/zigbee2mqtt
StandardOutput=inherit
StandardError=inherit
Restart=always
User=pi

[Install]
WantedBy=multi-user.target

ファイルを作成したら、以下のようにしてsystemdに登録して、zigbee2mqttサーバを起動しておきます。

pi@raspberrypi:~ $ sudo systemctl enable zigbee2mqtt.service
Created symlink /etc/systemd/system/multi-user.target.wants/zigbee2mqtt.service → /etc/systemd/system/zigbee2mqtt.service.
pi@raspberrypi:~ $ sudo systemctl start zigbee2mqtt.service

node-redからzigbee機器を操作する

ここからは、ペアリングしたzigbee機器をnode-redから扱えるようにしていきます。node-redからzigbee機器を操作するには、node-red-contrib-zigbee2mqttを使います。

①node-red-contrib-zigbee2mqttのインストール

PCのWebブラウザでNode-redの画面を開き、右上の「三」メニューから「パレットの管理」を選択します。

次に「ノードを追加」タブを開き、検索欄に「zigbee2mqtt」と入力します。すると、node-red-contrib-zigbee2mqttが出てきますので「ノードを追加」をクリックします。

正常にインストールが完了すると、以下のように4つのノードがパレットに追加されます。インストールには、だいたい5分程度かかりました。

②bridgeノードの追加

次に、左側パレットの「bridge」ノードをドラッグして追加します。「bridge」ノードが追加できたら、ダブルクリックして編集画面を開き、Server欄にある鉛筆アイコンをクリックします。

③zigbee2mqttサーバ設定

zigbee2mqttサーバの設定画面で「Host」欄に「localhost」と入力し「追加」ボタンをクリックします。この設定で、上でインストールしたzigbee2mqttサーバと接続されます。

「bridge」ノードの編集画面に戻ったら「完了」ボタンをクリックします。

④デプロイ

ノードを有効化するために、画面右上の「デプロイ」ボタンをクリックします。

⑤zigbee機器の確認

デプロイが完了すると「bridge」ノードの下に「online」と表示されます。またノードをダブルクリックして編集画面を開き、「Devices」タブを開くと、上でペアリングした機器が表示されます。

⑥Friendly nameの設定

初期設定では、Friendly nameは機器のMACアドレスになっているので、分かりやすい名前に変更しましょう。各機器のFriendly nameの欄を変更して、右側の「set」のボタンをクリックすればOKです。

⑦ボタンイベントの受信

次に、リモコンのボタンが押された時に、node-redでそのイベントを受信できるようにします。まず、左側のパレットからzigbee2mqttの「in」ノードをフローに追加し、編集画面のDevice欄でリモコンのデバイスを選択します。

次に「debug」ノードをフローに追加して、先ほど追加した「in」ノードと以下のように接続します。そして「デプロイ」ボタンをクリックします。

デプロイが完了したら、リモコンの前面ボタンを押してみましょう。以下の画面のように「in」ノードの下にOKと表示され、デバックウィンドウにメッセージが表示されればOKです‼️

⑦電球の操作

次に、node-redから電球を点けたり、消したりできるようにしてみます。まずzigbee2mqttの「out」ノードを追加し、編集画面で以下のように設定します。

 ・Device:電球
 ・Payload:種類で「文字列」を選択し、値に「toggle」と入力

次に「inject」ノードを追加し、「out」ノードと接続して「デプロイ」ボタンをクリックします。

デプロイが完了したら、電球に通電(家の壁スイッチON)しておき、Node-redの「inject」ノードのボタンを押してみましょう。ボタンを押すごとに、電球が点いたり、消えたりすればOKです‼️

おわりに

今回は、Raspberry Piにzigbee2mqttサーバをインストールしてzigbee機器とペアリングし、それをNode-redから操作できるようにしてみました。当然、リモコンのノードと電球のノードを接続すれば、リモコンのボタンを押すと電球が点いたり、消えたりするようにできます。

また、今回は手元にあった、IKEAのリモコンと電球を例に説明しましたが、他のメーカのセンサーや機器でもzigbee2mqttを使って制御することが可能です。そして、異なるメーカの機器どうしもNode-redで線を引くだけで連携して動作させることが可能です‼️

次回は、連載の最後、zigbee機器をスマホやAmazon Alexaから操作できるようにしてみたいと思います。

 ■実現に向けた連載
  第1回:CC2531とRaspberry PIの準備
  第2回:zigbee2mqttサーバのインストールとzigbee機器の接続
  第3回:スマホ&Alexaインタフェースの実装  <–次はこれ

関連記事

記事が参考になったら、ブログランキングに協力(クリック)して貰えると嬉しいです。

昼間はIT企業に勤めてますが、プライベートでは「育児×家事×IoT」をテーマに家のスマートホーム化に取り組んでいます。Androidアプリも作っているので使って下さい。質問・コメントは、↓のコメント蘭でもFacebookメッセンジャーでもどちらでも大丈夫です。
E-mail:naka.kazz.d@gmail.com

naka-kazzをフォローする
スマートホーム開発者向け
スポンサーリンク
naka-kazzをフォローする
スマートホーム×DIY

コメント