はじめに
前回の記事では、Home Assistantを使ってTRADFRI Gatewayに接続されたスマート電球を操作してみました。しかし、TRADFRI Gateway経由ではリモコンやモーションセンサーなどの機器をHome Assisantから扱えず、あまり実用的ではありませんでした。
そこで、今回はTRADFRI Gatewayを使わず、Raspberry PIにzigbee通信モジュール(CC2531)を指し、スマート電球やリモコンを直接操作できるようにしてみます。
少し記事が長くなりそうなので、2回に分けて書く予定です。
第1回:Home Assistantのインストールと設定
第2回:MQTTの設定とIKEAスマート電球の利用 <–この記事
第2回:MQTTの設定とIKEAスマート電球の利用
第2回では、Raspberry PiにCC2531 USBスティックを接続し、MQTTの設定を行ってスマート電球をHome Assitantから操作できるようにします。
USBスティックの接続と確認
まずは、CC2531 USBスティックをRaspberry Piに接続し、動作確認を行います。
①USB スティックの接続
Raspberry PiのUSBポートに、前回ファームウェアを書き換えたCC2531 USBスティックを接続します。
②認識確認
Home AssistantにSSH接続したターミナルより「dmesg」コマンドを入力し、USBスティックが認識されているか確認します。以下のように「Product: TI CC2531 USB CDC」というものが表示されていればOKです。
~ $ dmesg
・・。省略・・・
[ 5318.052212] usb 1-1.4: new full-speed USB device number 3 using xhci_hcd
[ 5318.191202] usb 1-1.4: New USB device found, idVendor=0451, idProduct=16a8, bcdDevice= 0.09
[ 5318.191247] usb 1-1.4: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 5318.191279] usb 1-1.4: Product: TI CC2531 USB CDC
[ 5318.191305] usb 1-1.4: Manufacturer: Texas Instruments
[ 5318.191330] usb 1-1.4: SerialNumber: __0X00124B0014D99402
[ 5318.232549] cdc_acm 1-1.4:1.0: ttyACM0: USB ACM device
[ 5318.235077] usbcore: registered new interface driver cdc_acm
[ 5318.235098] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters
~ $
次に「ls /dev/ttyAMA0」と入力し「/dev/ttyAMA0」シリアルポートが存在しているか確認します。
~ $ ls /dev/ttyAMA0
/dev/ttyAMA0
~ $
以上で、USBスティックの接続と確認は完了です。
MQTTの設定
次に、Home AssistantにMQTTをインストールし設定します。
①Mosquitto brokerアドオンのインストール
Add-on storeの画面から「Mosquitto broker」を探し、クリックします。
Mosquitto brokerの画面が表示されたら「INSTALL」をクリックします。
②Mosquitto brokerアドオンの設定
インストールが完了したら「Configuration」タブを選択し、Configureaaion欄の「logins」の設定で、ユーザ名「mqtt」、パスワード「mqtt」を設定し、「SAVE」をクリックします。
③Mosquitto brokerの起動
設定変更が終わったら「Info」タブに戻り「START」をクリックしましょう。
アドオンが起動したら「Log」タブからログを確認し、エラーが出ていないことを確認します。以下の画面に出ているSSLの警告メッセージは無視してOKです。
④Mosquitto brokerの動作確認
MosquittoでMQTTメッセージが正しく送受信できる事を確認するために、Home AssistantにSSHでログインしたコンソールを2つ用意します。
1つ目のコンソールで、以下のように「mosquitto_sub」コマンドを実行し、MQTTメッセージの受信待機を開始します。
~ $ mosquitto_sub -h 172.30.32.1 -u mqtt -P mqtt -t 'zigbee2mqtt/#'
次に、2つ目のコンソールで、以下のように「mosquitto_pub」コマンドを実行し、MQTTメッセージを送信します。
~ $ mosquitto_pub -h 172.30.32.1 -u mqtt -P mqtt -t zigbee2mqtt//switch/1/on -m "Switch is ON"
2つ目のコマンドを入力すると、1つ目のコンソールに「Switch is ON」というメッセージが表示され、MQTTメッセージが正しく送受信できたことが確認できます。
~ $ mosquitto_sub -h 172.30.32.1 -u mqtt -P mqtt -t 'zigbee2mqtt/#'
Switch is ON
⑤MQTTの統合1
MQTTをHome Assistantに統合し、Home AssistantがMQTTにメッセージを送受信できるようにします。左メニューから「設定」メニューを選択し「Integrations」を選択します。
⑥MQTTの統合2
Integrationsの画面が表示されると、既に「MQTT」のカードが追加されており、このカードの「CONFIGURE」ボタンを押したくなります。ただし、ここはじっと我慢して、画面右下の「+」アイコンをクリックします。
※MQTTカードから設定するとMQTTのユーザ名とパスワードが設定できず、失敗します。
追加するサービスのリストが表示されるので「MQTT」を探して、クリックします。
設定画面が表示されたら、以下のようにMQTTの設定情報を入力します。
・Broler:localhost
・Port:1883
・Username:mqtt ※上で設定したもの
・Password:mqtt ※上で設定したもの
設定が完了すると、Integrationsの画面にlocalhostのMQTTが追加されます。
以上で、MQTTの設定は完了です。
Zigbee2MQTTの設定
次に、Zigbee機器を操作するためにZigbee2MQTTをインストールし、設定します。
①アドオンレポジトリの追加
Zigbee2MQTTはHome Assistantの標準レポジトリには登録されていないので、レポジトリの追加を行います。まず、Add-on storeのページの右上にある「・・・」アイコンをクリックし、「Repositories」を選択します。
②レポジトリURLの入力
レポジトリ追加の画面が表示されたら「Add repositories」欄に「https://github.com/danielwelch/hassio-zigbee2mqtt」と入力して「ADD」をクリックします。
以下の画面のように、Zigbee2mqtt Hass.io Add-onのレポジトリが追加されるので「CLOSE」をクリックします。
③Zigbee2mqttアドオンの追加
Add-on storeの画面に戻ると、画面の一番下に「zigbee2mqtt」と「zigbee2mqtt-edge」の二つのアドオンが表示されます。「zigbee2mqtt」の方を選択します。edgeは開発者用のβ版なので、通常は「zigbee2mqtt」を選びましょう。
zigbee2mqttの画面が表示されたら「INSTALL」をクリックします。INSTALLには2〜5分ほど時間がかかるので、少し待ちましょう。
④Zigbee2MQTTの設定
インストールが完了したらZigbee2MQTTの設定を行います。画面上の「Configuration」タブを選択し、以下の情報を設定して「SAVE」をクリックします。
・permit_join:true
・server:<Raspberry PiのIPアドレス>:1883
・user:mqtt ※mqttの設定時に入力したもの
・password:mqtt ※mqttの設定時に入力したもの
なお、permit_joinは、新しいZigbee機器のペアリングを許可する設定です。全ての機器のペアリングが完了したら、セキュリティの観点からfalseにする事をお勧めします。
また、server欄に入力するIPアドレスは192.168.x.xなど、Wifiルータから割り当てられたRaspberry PiのIPアドレスにしてください。Home Assitantの内部IPアドレスである「172.30.32.1」のアドレスではうまくいきません。また、ポート番号を書くのも忘れがちなので注意して下さい。私はここでつまずき、解決に1日かかりました😂
⑤Zigbee2MQTTの起動
設定が完了したら「Info」タブに戻り「START」をクリックしましょう。
次に「Log」タブを選択しエラーが出ていないことを確認します。また、以下の赤枠のように上でインストールしたMQTT Brokerに正しく接続できたことを確認します。
以上でZigbee2MQTTの設定は完了です。
Zigbee機器のペアリング
ここからは、IKEAのリモコンとスマート電球をペアリングしていきます。
①zigbee2MQTTログの表示
左メニューの「Supervisor」メニュー→「zigbee2MQTT」→「Log」タブとクリックし、zigbee2MQTTのログを表示させます。
②リモコンのペアリング
リモコンとRaspberry Piを5cm以内に置き、リモコンの裏側の蓋を開けたところにある、ペアリングのスイッチを5秒以内に4回押します。
4回リモコンのボタンを押したら、zigbee2MQTTのログの「REFRESH」を押してログを確認します。ペアリングがうまくいくと、以下のようなログが表示され「TRADFRI remote control (E1524/E1810)」として正しく認識されていることが確認できます。ここで、「”friendly_name”:”0x680ae2fffe19472a”」となっている部分を探し、friendly_nameの後ろの文字列(Macアドレス)をメモしておきましょう。
なお、ペアリングできない場合は、zigbee2mqttの設定画面で「permit_join: true」になっていることを確認しましょう。
zigbee2mqtt:info 2020-07-05 08:56:00: Device '0x680ae2fffe19472a' joined
zigbee2mqtt:info 2020-07-05 08:56:00: Starting interview of '0x680ae2fffe19472a'
zigbee2mqtt:info 2020-07-05 08:56:00: MQTT publish: topic 'zigbee2mqtt/bridge/log', payload '{"type":"device_connected","message":{"friendly_name":"0x680ae2fffe19472a"}}'
zigbee2mqtt:info 2020-07-05 08:56:00: MQTT publish: topic 'zigbee2mqtt/bridge/log', payload '{"type":"pairing","message":"interview_started","meta":{"friendly_name":"0x680ae2fffe19472a"}}'
zigbee2mqtt:info 2020-07-05 08:56:02: MQTT publish: topic 'zigbee2mqtt/bridge/log', payload '{"type":"device_announced","message":"announce","meta":{"friendly_name":"0x680ae2fffe19472a"}}'
zigbee2mqtt:info 2020-07-05 08:56:23: MQTT publish: topic 'homeassistant/sensor/0x680ae2fffe19472a/action/config', payload '{"icon":"mdi:gesture-double-tap","value_template":"{{ value_json.action }}","state_topic":"zigbee2mqtt/0x680ae2fffe19472a","json_attributes_topic":"zigbee2mqtt/0x680ae2fffe19472a","name":"0x680ae2fffe19472a_action","unique_id":"0x680ae2fffe19472a_action_zigbee2mqtt","device":{"identifiers":["zigbee2mqtt_0x680ae2fffe19472a"],"name":"0x680ae2fffe19472a","sw_version":"Zigbee2mqtt 1.14.1","model":"TRADFRI remote control (E1524/E1810)","manufacturer":"IKEA"},"availability_topic":"zigbee2mqtt/bridge/state"}'
zigbee2mqtt:info 2020-07-05 08:56:23: MQTT publish: topic 'homeassistant/sensor/0x680ae2fffe19472a/battery/config', payload '{"unit_of_measurement":"%","device_class":"battery","value_template":"{{ value_json.battery }}","state_topic":"zigbee2mqtt/0x680ae2fffe19472a","json_attributes_topic":"zigbee2mqtt/0x680ae2fffe19472a","name":"0x680ae2fffe19472a_battery","unique_id":"0x680ae2fffe19472a_battery_zigbee2mqtt","device":{"identifiers":["zigbee2mqtt_0x680ae2fffe19472a"],"name":"0x680ae2fffe19472a","sw_version":"Zigbee2mqtt 1.14.1","model":"TRADFRI remote control (E1524/E1810)","manufacturer":"IKEA"},"availability_topic":"zigbee2mqtt/bridge/state"}'
zigbee2mqtt:info 2020-07-05 08:56:23: MQTT publish: topic 'homeassistant/sensor/0x680ae2fffe19472a/linkquality/config', payload '{"icon":"mdi:signal","unit_of_measurement":"lqi","value_template":"{{ value_json.linkquality }}","state_topic":"zigbee2mqtt/0x680ae2fffe19472a","json_attributes_topic":"zigbee2mqtt/0x680ae2fffe19472a","name":"0x680ae2fffe19472a_linkquality","unique_id":"0x680ae2fffe19472a_linkquality_zigbee2mqtt","device":{"identifiers":["zigbee2mqtt_0x680ae2fffe19472a"],"name":"0x680ae2fffe19472a","sw_version":"Zigbee2mqtt 1.14.1","model":"TRADFRI remote control (E1524/E1810)","manufacturer":"IKEA"},"availability_topic":"zigbee2mqtt/bridge/state"}'
zigbee2mqtt:info 2020-07-05 08:56:23: MQTT publish: topic 'homeassistant/binary_sensor/0x680ae2fffe19472a/update_available/config', payload '{"payload_on":true,"payload_off":false,"value_template":"{{ value_json.update_available}}","state_topic":"zigbee2mqtt/0x680ae2fffe19472a","json_attributes_topic":"zigbee2mqtt/0x680ae2fffe19472a","name":"0x680ae2fffe19472a_update_available","unique_id":"0x680ae2fffe19472a_update_available_zigbee2mqtt","device":{"identifiers":["zigbee2mqtt_0x680ae2fffe19472a"],"name":"0x680ae2fffe19472a","sw_version":"Zigbee2mqtt 1.14.1","model":"TRADFRI remote control (E1524/E1810)","manufacturer":"IKEA"},"availability_topic":"zigbee2mqtt/bridge/state"}'
zigbee2mqtt:info 2020-07-05 08:56:39: Successfully interviewed '0x680ae2fffe19472a', device has successfully been paired
zigbee2mqtt:info 2020-07-05 08:56:39: Device '0x680ae2fffe19472a' is supported, identified as: IKEA TRADFRI remote control (E1524/E1810)
zigbee2mqtt:info 2020-07-05 08:56:39: Configuring '0x680ae2fffe19472a'
zigbee2mqtt:info 2020-07-05 08:56:39: 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-07-05 08:56:46: Successfully configured '0x680ae2fffe19472a'
③スマート電球のペアリング
次に、スマート電球をペアリングします。スマート電球のペアリングは少々コツがいります。まず、スマート電球を点けた状態にしてRaspberry Piとなるべく近くにしておきます。次に、家の壁のスイッチで「スイッチを消して、点けて」を6回繰り返します。一応、IKEAの公式手順のビデオはここにあります。ただ、私はこの通りにやっても、できませんでした😭
コツは、点けている時間を極力短くすることです。(少し長く)消して→点けて→(すぐに)消す、とすると良いようです。うまくいくと、電球が一回強く光って、以降は暗くなったり明るくなったりを繰り返します。強く光らず、暗くなったり明るくなったりを繰り返している場合は失敗です。
うまくいくと、以下のようなログが表示され、スマート電球が「TRADFRI LED bulb E27 1000 lumen」として認識されます。ここでもfriendly_nameをメモしておきましょう。
zigbee2mqtt:info 2020-07-05 09:19:21: Device '0xec1bbdfffef84420' joined
zigbee2mqtt:info 2020-07-05 09:19:21: Starting interview of '0xec1bbdfffef84420'
zigbee2mqtt:info 2020-07-05 09:19:21: MQTT publish: topic 'zigbee2mqtt/bridge/log', payload '{"type":"device_connected","message":{"friendly_name":"0xec1bbdfffef84420"}}'
zigbee2mqtt:info 2020-07-05 09:19:21: MQTT publish: topic 'zigbee2mqtt/bridge/log', payload '{"type":"pairing","message":"interview_started","meta":{"friendly_name":"0xec1bbdfffef84420"}}'
zigbee2mqtt:info 2020-07-05 09:19:24: MQTT publish: topic 'zigbee2mqtt/bridge/log', payload '{"type":"device_announced","message":"announce","meta":{"friendly_name":"0xec1bbdfffef84420"}}'
zigbee2mqtt:info 2020-07-05 09:19:44: MQTT publish: topic 'homeassistant/light/0xec1bbdfffef84420/light/config', payload '{"brightness":true,"color_temp":true,"schema":"json","command_topic":"zigbee2mqtt/0xec1bbdfffef84420/set","brightness_scale":254,"state_topic":"zigbee2mqtt/0xec1bbdfffef84420","json_attributes_topic":"zigbee2mqtt/0xec1bbdfffef84420","name":"0xec1bbdfffef84420_light","unique_id":"0xec1bbdfffef84420_light_zigbee2mqtt","device":{"identifiers":["zigbee2mqtt_0xec1bbdfffef84420"],"name":"0xec1bbdfffef84420","sw_version":"Zigbee2mqtt 1.14.1","model":"TRADFRI LED bulb E27 1000 lumen, dimmable, white spectrum, opal white (LED1732G11)","manufacturer":"IKEA"},"availability_topic":"zigbee2mqtt/bridge/state"}'
zigbee2mqtt:info 2020-07-05 09:19:44: MQTT publish: topic 'homeassistant/sensor/0xec1bbdfffef84420/linkquality/config', payload '{"icon":"mdi:signal","unit_of_measurement":"lqi","value_template":"{{ value_json.linkquality }}","state_topic":"zigbee2mqtt/0xec1bbdfffef84420","json_attributes_topic":"zigbee2mqtt/0xec1bbdfffef84420","name":"0xec1bbdfffef84420_linkquality","unique_id":"0xec1bbdfffef84420_linkquality_zigbee2mqtt","device":{"identifiers":["zigbee2mqtt_0xec1bbdfffef84420"],"name":"0xec1bbdfffef84420","sw_version":"Zigbee2mqtt 1.14.1","model":"TRADFRI LED bulb E27 1000 lumen, dimmable, white spectrum, opal white (LED1732G11)","manufacturer":"IKEA"},"availability_topic":"zigbee2mqtt/bridge/state"}'
zigbee2mqtt:info 2020-07-05 09:19:44: MQTT publish: topic 'homeassistant/binary_sensor/0xec1bbdfffef84420/update_available/config', payload '{"payload_on":true,"payload_off":false,"value_template":"{{ value_json.update_available}}","state_topic":"zigbee2mqtt/0xec1bbdfffef84420","json_attributes_topic":"zigbee2mqtt/0xec1bbdfffef84420","name":"0xec1bbdfffef84420_update_available","unique_id":"0xec1bbdfffef84420_update_available_zigbee2mqtt","device":{"identifiers":["zigbee2mqtt_0xec1bbdfffef84420"],"name":"0xec1bbdfffef84420","sw_version":"Zigbee2mqtt 1.14.1","model":"TRADFRI LED bulb E27 1000 lumen, dimmable, white spectrum, opal white (LED1732G11)","manufacturer":"IKEA"},"availability_topic":"zigbee2mqtt/bridge/state"}'
zigbee2mqtt:info 2020-07-05 09:19:58: Successfully interviewed '0xec1bbdfffef84420', device has successfully been paired
zigbee2mqtt:info 2020-07-05 09:19:58: Device '0xec1bbdfffef84420' is supported, identified as: IKEA TRADFRI LED bulb E27 1000 lumen, dimmable, white spectrum, opal white (LED1732G11)
zigbee2mqtt:info 2020-07-05 09:19:58: 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}}'
④リモコンの設定
次にペアリングした機器をHome Assistantのエンティティとして登録します。左メニューから「File editor」を開き「/config/configuration.yaml」に以下のように記述します。「<friendly_name>」は上でメモしたリモコンのfriendly_nameに置き換えてください。
sensor:
- platform: "mqtt"
name: toggle-switch
state_topic: "zigbee2mqtt/<friendly_name>"
availability_topic: "zigbee2mqtt/bridge/state"
icon: "mdi:toggle-switch"
value_template: "{{ value_json.click }}"
- platform: "mqtt"
name: switch_battery
state_topic: "zigbee2mqtt/<friendly_name>"
availability_topic: "zigbee2mqtt/bridge/state"
unit_of_measurement: "%"
device_class: "battery"
value_template: "{{ value_json.battery }}"
この設定では、リモコンを2つのエンティティとして登録しています。1つ目はスイッチとしての登録であり、MQTTの”zigbee2mqtt/<friendly_name>”のトピックの「click」の値を参照してスイッチのOn/Offの状態を検知するように設定しています。また、2つ目はバッテリー残量を表示するためのエンティティであり、MQTTの”zigbee2mqtt/<friendly_name>”のトピックの「battery」の値をバッテリー残量として登録しています。
⑤スマート電球の設定
スマート電球も同様にエンティティとして登録します。
light:
- platform: "mqtt"
name: IKEA_light
state_topic: "zigbee2mqtt/<friendly_name>"
availability_topic: "zigbee2mqtt/bridge/state"
brightness: true
color_temp: true
schema: "json"
command_topic: "zigbee2mqtt/<friendly_name>/set"
brightness_scale: 254
この設定では、IKEA_lightというライトを定義し、Home Assistantの画面で操作されると「zigbee2mqtt/<friendly_name>/set」のトピックに値を書き込むという設定をしています。また、brightnessは電球の照度の設定可能にする設定、color_tempは電球色を設定可能にする設定となります。
⑥設定の保存とhassの再起動
yamlファイルの記述が完了したら、画面右上のフロッピーのアイコンをクリックして保存します。
次に、画面右上の歯車のアイコンからHASSを再起動します。
⑦ エンティティの確認
Hassが再起動したら、File editorの「entities」の欄をクリックして、先ほど設定した「IKEA-light」「toggle_switch」「switch-battery」の3つが表示されている事を確認しましょう。
以上で、Zigbee機器のペアリングと設定は完了です。
Loveless UIの設定
ここからは、Loveless UI画面にスマート電球の操作パネルを追加して、Home Assistantからスマート電球を操作できるようにします。
①設定モードへの移行
画面左側の「状態」メニューを選択しLoveless UI画面を表示させ、画面右上の「・・・」アイコンをクリックして「Configure UI」を選択します。
初回は、以下のようなメッセージが出ますが「TAKE CONTROL」をクリックしましょう。
②カードの追加
画面右下の「+」アイコンをクリックします。
カードの選択画面が表示されるので「照明」カードを選択します。
③照明カードの設定
照明カードの設定画面のEntity欄で、上で設定した「light.ikea_light」を選択し、「SAVE」をクリックします。
④スマート電球の動作確認
それでは、動作を確認しましょう‼️⁉️
追加されたカードの電球アイコンをクリックしてみて下さい。クリックに合わせてスマート電球がOn/OffすればOKです。
また、電球の周りのプログレスバーをドラックすると、電球の明るさを変更できます。
さらに、電球アイコンを長押しすると、以下のような詳細画面が表示され、電球の色を変更できます。
以上で、Loveless UIの設定は完了です。
Automationの設定
ここからは、Automationを設定し、リモコンのボタンと連動してスマート電球をOn/Offにできるように設定します。
①Automationの記述
画面左メニューより「File editor」を選択し、configuration.yamlに以下の記述を追加します。「<friendly_name>」の部分はスイッチのfriendly_nameに置き換えて下さい。
automation:
- id: switch_toggle
alias: switch_toggle
trigger:
platform: mqtt
topic: "zigbee2mqtt/<friendly_name>/action"
payload: "toggle"
action:
service: light.toggle
entity_id: light.ikea_light
この設定では、スイッチの「”zigbee2mqtt/<friendly_name>/action”」の値が「toggle」になったら、ikea_lightエンティティをトグルするという設定になります。つまり、リモコンのスイッチが押されるたびに、電球のOn/Offが切り替わる設定となります。
②設定の保存とHASSの再起動
ファイルの編集が完了したら、ファイルを保存し、HASSを再起動させます。
③動作確認
それでは、リモコンの前面ボタンを押してみましょう!ボタンクリックに合わせて、スマート電球がOn/OffすればAutomationの設定は完了です!!
また、画面左の「ログ」メニューを表示すると、以下のようにAutomationのトリガーが実行されたことがログとして表示されます。
以上で、完了です。
おわりに
今回は、Raspberry PiにCC2531 USBスティックを接続し、MQTTとZigbee2MQTTを設定しました。また、IKEAのスマート電球とリモコンをペアリングし、Home Assitantのエンティティに登録して操作できるようにしてみました。Home Assitantの良いところはyamlファイルの定義によって、細かく動作を設定できるところだと思います。
また、Home Assistantに電球を登録することで、一日の中でどの時間に電球が点いていたかということがログに記録されるので、後で確認することもできます。
第1回:Home Assistantのインストールと設定
第2回:MQTTの設定とIKEAスマート電球の利用 <–この記事
コメント