Smart HomeをDIYする

Apple HomeKit は対応製品が少なくて高価なのでHomebridgeでがんばります

温度湿度センサDHT20をRaspberry Piに接続してHomeKitから使う

秋月電子で売られている温度湿度センサDHT20(380円) Raspberry Pi 4に取り付けました。これから温度・湿度を取り込み、MQTTに流すPythonプログラムを書きました。それをHomebridgeで受け取ってHomeKitから使えるようにしました。以下の構成です。これで左端のセンサからのデータが、右端のiPhone/Macに表示されます。温度・湿度の値に応じたオートメーションも設定できます。

 

 

温度湿度センサDHT20

これから乾燥する時期を迎えて、湿度によって加湿器をコントロールするなどやってみたくなりました。そうなるとちゃんとした湿度センサが欲しくなります。I2C接続の温度・湿度センサならRaspberry PiArduinoと簡単に接続できると聞いていたので、秋月電子のセンサを買いました。I2Cを使うのは初めてのことでしたが、線を4本接続するだけで簡単に使えました。

ASAIRというブランドのセンサで、3.3Vでも5Vでも稼働し、キャリブレーションされた温度と湿度が、I2Cインタフェースでデジタルに得られます。精度は温度が+/- 0.5度、湿度が+/- 3%だそうです。申し分ない性能で、しかも安いです。下の写真はセンサの裏側です。

I2C接続

I2Cは2本の信号線を、複数のセンサやコンピュータが共有し、データをシリアルに交換する規格です。信号線の1本がデータ線で、もう一本は同期タイミングのための線です。接続されたそれぞれのデバイスは固有のアドレスをもち、アドレスとデータの組み合わせを送受信します。

Raspberry PiArduinoには、I2C接続のためのファームウェアが組み込まれていますし、開発環境にはI2Cのライブラリが用意されているので、あまり苦労することなくインタフェースが作れます。

DHT20をRaspberry Piに接続する

秋月電子の商品ページからDHT20のデータシートがダウンロードできます。以下のリンクです。

https://akizukidenshi.com/download/ds/aosong/DHT20.pdf

これによると4本のピンは、左から、電源、SDA, GND, SCLです。SDAとSCLがI2Cの信号線です。

Raspberry PiのGPIOピンの3番と4番がI2CのSDAとSCLピンです。これらのピンは、GPIO2とGPIO3として普通のデジタル入出力にも使えます。I2Cで使う場合には、I2C通信を実現する際に必要なクロック回路やバッファに接続されるのだと思います。なので、DHT20の1番をRaspberry Piの1番に、2番を3番に、3番を9番に、4番を5番に接続しました。

こんな感じです。

こういう接続には、フラットケーブルになったジャンパ線が便利です。割いて使えるので、必要な本数をまとめて配線できます。たくさん入っていて安いです。

メスーメスのジャンパ線を使ったところ、センサの足にも、GPIOにもささりました。半田付けすることなく、センサとコンピュータを接続できました。Raspberry Piのケースからジャンパ線を引き出して、センサをケースの側面に両面テープで貼り付けました。

ちなみに使用しているケースはこれです。蓋が開けやすくて便利です。

Raspberry PiのI2Cを有効にする

まずはRaspberry PiのI2Cピンを有効にするよう設定します。$ sudo raspi-configとタイプして、設定画面を出します。

ここで、Interface Optionsを選んで、

I2CをEnableします。この後Raspberry Piを一応再起動しましたが、しなくても良かったかもしれません。

I2C関係のコマンドがインストールされていると便利なようです。i2cdetectというコマンドで、接続されたデバイスが確認できるらしいのですが、コマンドがありませんでした。aptでインストールします。長らくupdateしていなかったので、一応アップデートしました。

$ sudo apt update
$ sudo apt upgrade

この後、i2c-toolsというのをインストールします。

$ sudo apt install i2c-tools 

これで、i2c関係のコマンドが使えるようになります。例えば、以下のようにすると、

$ i2cdetect -y  1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:                         -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- 38 -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --  

接続されているI2Cデバイスを検出し、そのアドレスを表示してくれます。この結果によると0x38番のアドレスを持ったデバイスが接続されていることがわかりました。前出のDHT20のデータシートによると、このセンサは0x38番のアドレスを使っています。正しく接続されているようでした。

DHT20用プラグインを探す(該当なし)

有名なI2Cセンサなので、Homebridgeのプラグインで読めるかもしれないと、最初は思っていました。HomebridgeのwebインタフェースのプラグインのページでDHTで検索すると13個ほどのプラグインが見つかりました。説明によると、Raspberry PiにI2C接続したDHTセンサを動かすプラグインもありました。 

ただ、DHT20を対象としたものは無く、DHT11 / DHT12 / DHT21 / DHT22 / DHT33 / DHT44などが対象でした。DHT20は、前述のデータシートによるとDHT11の改良版らしいです。なので別の型番で動くかなと思ったのですが、どれもエラーが出たり、おかしな値が表示されたりします。

データフォーマットが異なっているのかもしれません。またDHTセンサというのはditigal humidity and temperatureセンサの略だそうです。一般的な名前なので、同じ名前を使った他社のセンサがあるのかもしれません。

ということで、専用プラグインでお手軽に設定するのは諦めて、Pythonプログラム、MQTT、Mqttthingプラグインの組み合わせで進めることにしました。

Pythonでセンサ値を読む

こちらを参考にさせていただき、Pythonでセンサ値を読むプログラムを作りました。

s-design-tokyo.com

DHT20のデータシートには、I2Cでセンサ値を読む手順が説明されています。それによると、

  1. 電源投入後100ms待つ
  2. 0x71を送ってstatus wordを得る
  3. status wordと0x18のANDが0x18だったら次に進む。そうでない場合は、レジスタを初期化する必要がある
  4. 10ms待つ
  5. 測定をトリガするコマンド0xAC, 0x33, 0x00を送る
  6. 80ms待つ
  7. 7バイトのデータを読む。1バイト目のMSBが1だったらまだ測定できていないので、もう少し待つ。0だったら次に進む
  8. 2,3,4,5,6バイトに、湿度・温度の情報が12ビットずつ入っているので分離する
  9. 7バイト目にはCRCが入っているので必要ならば確認する
  10. 湿度、温度の情報は、正規化された仮数のような表現になっているので、換算して浮動小数点10進数に変換する
  11. 必要に応じて5以下を繰り返す。測定の間隔は2秒以上にする

という手順のようです。これをPythonでプログラムします。ただし、I2C用のライブラリが足りませんでした。

pip3 install smbus

でインストールします。プログラムは、以下のようになりました。30秒間隔で測定します。

#!/usr/bin/python3
import smbus
import time

i2c = smbus.SMBus(1)
ADDRESS = 0x38

#setup for DHT20
statusword = i2c.read_byte_data(ADDRESS, 0x71)
if statusword & 0x18 != 0x18:
    print("Registers should be initialized.")
    sys.exit()
time.sleep(0.01) #10ms sleep after setup

while True:
    #trigger measurement
    i2c.write_i2c_block_data(ADDRESS,0,[0xAC,0x33,0x00])
    while True:
        #wait the measurement to be completed
        time.sleep(0.08)
        data = i2c.read_i2c_block_data(ADDRESS, 0x00, 0x07)
        if data[0] & 0x80 ==0:
            break;
    #Concatenation
    humi = data[1] << 12 | data[2] << 4 | data[3] >> 4
    temp = ((data[3] & 0x0F) << 16) | data[4] << 8 | data[5]
    #Conversion
    humidity = round(humi / 2**20 * 100)
    temperature = round((temp / 2**20 * 200 - 50),1)
    #Print results
    results='{"temperature":'+str(temperature)+\
           ',"humidity":'+str(humidity)+'}'
    print(results)
    time.sleep(30)

 これを動かすと、以下のように、30秒間隔で温度・湿度が表示されました。温度は四捨五入して小数点以下第1位で、湿度は整数で表示しています。

$ ./dhtread.py 
{"temperature":23.7,"humidity":64}
{"temperature":23.7,"humidity":63}
{"temperature":23.7,"humidity":63}

print文はjson風にしてみました。

センサ値をMQTTにパブリッシュする

この結果を、MQTTブローカーパブリッシュします。MQTTに関しては以下の記事をご覧ください。

diysmarthome.hatenablog.com

MQTTブローカーを、同じRaspberry Piで動かしているので、IPアドレスlocalhostです。トピックは、後でHomebridgeのmqttthingプラグインを使うので、mqttthing/dht20/getにしました。ここにjson形式で測定結果を流します。またデバッグ用のメッセージをmqttthing/dht20/debugに流すことにしました。MQTTライブラリにはmahoを使います。

長くなったのでメインプログラムをmain()にしました。初期化、データ読み込み、メインを分けて分かりやすくしました。MQTTのために追加した部分は太字にしてあります。

#!/usr/bin/python3
import smbus
import time
from paho.mqtt import client as mqtt_client

## for I2C ##
i2c = smbus.SMBus(1)
ADDRESS = 0x38
## MQTT ##
address='localhost'
port=1883
debug_topic='mqttthing/dht20/debug'
pub_topic='mqttthing/dht20/get'
client_id=b'dht20_02648259' #something random
username='xxxxxxxx'
password='XXXXXXXX'

def setup():
  ## setup for MQTT ##
  client=mqtt_client.Client(client_id)
  client.username_pw_set(username,password)
  client.connect(address,port)
  time.sleep(2) #wait for MQTT connection
  ## setup for DHT20 ##
  statusword = i2c.read_byte_data(ADDRESS, 0x71)
  if statusword & 0x18 != 0x18:
    print("The 0x1B, 0x1C, 0x1E registers should be initialized.")
    client.publish(debug_topic,"Initialization required.")
    sys.exit()
  time.sleep(0.01) #10ms sleep after setup
  client.publish(debug_topic,"DHT20 is ready.")
return client def readData(): #trigger measurement i2c.write_i2c_block_data(ADDRESS,0,[0xAC,0x33,0x00]) #read data while True: #wait the measurement to be completed time.sleep(0.08) data = i2c.read_i2c_block_data(ADDRESS, 0x00, 0x07) if data[0] & 0x80 ==0: break; #Concatenation humi = data[1] << 12 | data[2] << 4 | data[3] >> 4 temp = ((data[3] & 0x0F) << 16) | data[4] << 8 | data[5] #Conversion humidity = round(humi / 2**20 * 100) temperature = round((temp / 2**20 * 200 - 50),1) results='{"temperature":'+str(temperature)+\ ',"humidity":'+str(humidity)+'}' return results def main(): client=setup() while 1: results=readData() print(results) client.publish(pub_topic,results) client.loop() time.sleep(180) if __name__ == "__main__":

更新頻度を3分にしました。別のターミナルウィンドウでmosquitto_subコマンドを動かし、サブスクライブしておきます。結果は以下のようになりました。

mqttthing/dht20/debug DHT20 is ready.
mqttthing/dht20/get {"temperature":22.8,"humidity":59}
mqttthing/dht20/get {"temperature":22.8,"humidity":59}
mqttthing/dht20/get {"temperature":22.9,"humidity":59}

プログラムを自動起動する

センサから値を読んでMQTTに流すこのプログラムは、Raspberry Piが起動したらいつでも動いていて欲しいです。なので、systemctlを使って自動起動させます。systemctlに関しては、いろいろなサイトに分かりやすい説明がありますので、ここはメモ程度に書いておきます。

まずは設定ファイルを作ります。/etc/systemd/systemに、dht20.serviceという名前のファイルを作り、内容を以下にしました。ホームディレクトリがpiの場合です。そこに、servicesというディレクトリを作り、その中に上記で作成したファイルをdht20.pyという名前で置いておくという設定です。

[Unit]
Description=dht20
After=network.target

[Service]
Type=simple
WorkingDirectory=/home/pi/services
ExecStart=/home/pi/services/dht20.py
TimeoutStopSec=5
StandardOutput=null
Restart=always

[Install]
WantedBy = multi-user.target

この後、

$ sudo systemctl daemon-reload  #設定ファイル有効化
$ sudo systemctl start dht20.service  #スタートさせる
$ sudo systemctl status dht20.service  #動作を確認
$ sudo systemctl stop dht20.service  #ストップする
$ sudo systemctl enable dht20.service  #電源を入れた時に動くように設定する

などのコマンドで動作させたり、次回のリブートで自動起動させたりできます。

Homebridgeで受け取る

HomebridgeにはMqttthingプラグインを入れてあります。MQTTメッセージで動くアクセサリを実装できます。今回もこれを使います。

diysmarthome.hatenablog.com

github.com

Mqttthinの設定から、tenmeratureSensorとhumiditySensorを使いました。MQTTの設定は、プラグインの設定画面からGUIで入力できます。最終的に出来上がったconfigの部分は以下になりました。

{
    "type": "temperatureSensor",
    "name": "DHT20_temp",
    "username": "xxxxxxxx",
    "password": "XXXXXXXX",
    "topics": {
        "getCurrentTemperature": "mqttthing/dht20/get$.temperature"
    },
    "accessory": "mqttthing"
},
{
    "type": "humiditySensor",
    "name": "DHT20_humi",
    "username": "xxxxxxxx",
    "password": "XXXXXXXX",
    "topics": {
        "getCurrentRelativeHumidity": "mqttthing/dht20/get$.humidity"
    },
    "accessory": "mqttthing"
}

Mqttthingは、json形式のデータも扱えます。上の設定で、

mqttthing/dht20/get$.temperature

としたことで、mqttthing/dht20/getトピックに流れてくるjson形式のデータ:

{"temperature":23.0,"humidity":56}

のtemperatureキーの部分(23.0という値)を取得できます。humidityも同様です。

HomeKitから使ってみる

この結果、iPhoneMacのホーム.appの上に、

というような表示が現れ、これをクリックすると、

のように、今回取り付けたセンサーの値が表示されました。これをもとにオートメーションも作れます。室温が下がったらエアコンを動作させるとか、湿度が下がったら加湿器をonにするなどの自動化が可能です。例えば、上のDHT20_humiの表示をクリックして、「オートメーションを追加」のメニューを選択すると、数クリックの操作で、下のようなオートメーションが完成します。

まとめ

秋月で380円で買えるI2C温度・湿度センサをRaspberry Piに接続して、iPhoneMacのホーム.appから利用できるように設定しました。Raspberry PiでHomebridgeを動かしているなら、4本の線を配線するだけで温度・湿度センサが作れます。結果をMQTTのメッセージで流すようにしたので、他のプログラムやスマートホームシステムからも利用できると思います。

Homebridge/HomeKitで使えるRingのドアベル(半額セール中)

ちょっと前にRing Video Doorbell 4を買ってHomeKitに接続しました。Ringのアプリを使ってのビデオドアベルとして、そこそこ使えます。Homebridgeのプラグインがあり、それを使うとHomeKitからも一応使えます。「そこそこ」とか「一応」とかの歯切れの悪い状態だったのでボツネタにしてたのですが、ブラックフライデーセールでなんと半額になってました。この金額なら試しに使ってみる価値があると思います。

Ringのドアベル

日本では全然流行っていないWiFi接続のビデオインターフォンです。パナソニックアイホンの製品は一般的ですが、これらは専用子機を使って家の中で使うことを主に想定してます。スマホからアクセスできる機種もなくはないですが、割高です。Google, Amaozn, Appleのエコシステムと連携できる機種に至っては皆無です。

海外では、中国メーカの格安製品(多くはGoogle, Alexa対応を謳ってます)から、Apple HomeKitにも対応する高級品まで、色々と選択肢があります。Ring Doorbellは、メーカーとしてはHomeKit非対応ですが、オープンソースの完成度の高いHomebridgeプラグインがあり、Homebridgeユーザの中では人気の機種でした。少し前から、日本のAmazonでも取り扱われるようになっていたので、その時に購入してHomeKitから使ってみました。

通常価格は高めですが、冒頭で紹介したようにセールで半額になってます。

通常のセットアップする

まずは製品マニュアルに従って、通常のセットアップをします。玄関に取り付けて、Ringのスマホアプリをダウンロードして、ユーザ登録して、WiFiを設定します。これで普通に使用開始できました。ボタンを押すと、アプリに通知が来て、スマホ画面で来客者とビデオ会話できます。

映像は綺麗なのですが、ドアベルが押されてから、ビデオ会話できるまでの時間は少し長いです。場合によっては20秒くらいかかります。玄関の外と接続するので家の中のWiFiが届きにくいこともあります。バッテリーが1ヶ月弱でなくなるので充電が必要です。それで、玄関に古いインターフォンの配線が来ていたので、これに12V ACを流して常時充電できるように改造しました。バッテリー無しの有線給電専用モデルも出して欲しいと思いました。

Homebridgeから使う

Ring DoorbellをRaspberry Pi 4で動作させているHmebridgeに接続して、HomeKitから使用します。このために、Homebridgeプラグイン, homebridge-ringを使用しました。Homebridgeのwebインタフェースのプラグインページから、Ringと検索すると現れます。

こちらがgithubのサイトです。

github.com

インストール後に、「設定」ボタンを押すと、Ringアプリのアカウント情報の入力を求められます。Ringアプリの方で2段階認証を済ませておくと良いです。

ここで「LOG IN」ボタンを押すと、コードの入力を求められます。2段階認証で登録してある電話番号にsmsで届いた数字を入力します。

この結果、自動的にRefresh Tokenが設定されます。Refresh Tokenは、ターミナルのコマンドライン操作でも入手可能らしいですが、homebridge-ringプラグインGUIで取得できるようになってます。

ちなみにこのTokenは、いったん使用すると2分後に無効になって、新しいTokenが交付されるようです。homebridge-ringプラグインはそれを自動的に更新して、configファイルに書き込んでくれるらしいです。configファイルには、以下の項目が追加されていました。

{
    "refreshToken": "XXXX..実際は長いです..XXXX",
    "platform": "Ring"
}

これで設定は終了で非常に簡単でした。iPhoneMacのホームからビデオドアベルの映像が見られます。クリックすると、ライブビデオが見られて、会話することもできました。

Ringアプリとホーム.appの違い

こちらのページに、Ringアプリでできることと、HomebridgeでHomeKitに接続した場合にできることの比較表がありました。

linkdhome.com

ほぼ同じでした。HomeKitに接続するとApple TVから使えるのですが、Ringアプリの方が、応答時間と置き配検出で優れてます。HomeKitから使う場合、Ringのクラウド以外に、場合によってはiCloudも使うことになるので、応答速度は仕方ないところです。

https://images.squarespace-cdn.com/content/v1/58fb28d7e3df282054f72a55/1604668897685-0XGV80E7LEU9G4UZJZ6E/Homebridge-flow.jpg?format=2500w

( https://linkdhome.com/articles/ring-homekit-how-to )

HomeKitで使う一番のメリットは、他のアクセサリと統合できる点ですね。ドアベルは、カメラ映像から画像解析していて、モーションセンサとしても動作します。なのでHomeKitオートメーションで誰かがきたら玄関先の明かりをつけるなどの設定が可能です。

ただ、実際に使ってみたところ、HomeKit経由でビデオ会話を行うと、音声がかなり歪んでいました。WiFiの状況がたまたま悪かった、インターネットの接続がたまたま遅かったなどの要因も考えられるので、いつでもそうとは限りませんが、同じ時点で、Ringアプリでは割と明瞭に会話できました。

RingアプリとHomeKit側は、同時に稼働させることができるので、HomeKitは玄関の様子を見守る用途で使っていきたいと思います。

Chime Pro

オプションとしてChime Pro(チャイムプロ)があります。これがあると、ドアベルを鳴らした時に、チャイムが鳴ります。それだけではなく、WiFiのリピーターになってます。マンションのような鉄筋構造で、ドアも金属の場合は、ドア外のビデオドアベルWiFiが届きにくいです。なので、これを玄関内側に置いておくと、接続が安定します。

少し高価ですが(6,000円弱)、とりあえずはチャイムが鳴るので、システムが不安定な時にもあると安心です。ただ、かなり発熱します。

チャイムプロの良いところは、これもHomebridgeのプラグインのおかげで、HomeKitから複数のスイッチとして見えることです。それぞれのスイッチが、登録された音に対応しているので、オートメーションで色々な音が出せます。

まとめ

RingのドアベルをHomeKitから使いました。ドアベル製品としては、ビデオ会話を開始するのに20秒くらいかかることがあることもあり、応答速度が気になりました。

一方、Homebridge経由でHomeKitからも使用できました。プラグインがよくできていて設定はとても簡単です。ただ、ネットワーク環境のせいだとは思いますが、音声が歪んでしましました。玄関の様子を見る手段には問題なく使えます。

Matterの最初のバージョンにはビデオドアベルの規格もあります。Matter対応のドアベルが製品化されることに期待してます。

Appleホームサーバーのお仕事

HomeKitで作ったスマートホームに、Appleがいうところの「ホームサーバー」を設置すると、外出先から家の中をコントロールできるようになります。そのほか「スイッチAをonにしたら電球Bが点灯する」のような自動化も可能になります。Appleのサイトの説明だけではよくわからなかったこの辺りの機能をまとめておきます。

最小構成HomeKit

iPhoneとHomeKit対応のアクセサリーがあれば、最小構成のスマートホームを構築できます。例えば、アクセサリとして、WiFi接続のHomeKit対応スマートプラグがあれば、iPhoneに接続できます。

(プラグの写真は amazon.co.jp より引用)

HomeKitではアクセサリの登録にiPhoneは必須です。アクセサリとiPhoneの間は、HomeKit Accessory Protocol (HAP) と呼ばれるプロトコルで情報を受け渡しします。HAPは機器同士が1:1で動作するので、これ以外にサーバーやクラウドサービスは不要です。アクセサリがiPhoneと同じLANに接続していれば良く、iPhoneがインターネットに接続している必要もありません。

今話題のMatterは、このHAPに相当するものです。MatterにはApple社が技術協力しているようで、MatterプロトコルとHAPはかなり似たものになっているらしいです。

Zigbee/Thread接続のデバイスの場合は、iPhoneに対応する無線チップが搭載されていないため、上の図のような直接接続はできません。Zigbee/ThreadからLANに橋渡しをするブリッジが必要です。例えばIKEAZigbee製品の場合、TRÅDFRIゲートウェイというブリッジ製品が必要です。

上図のプラグには、WiFiの信号によりon/offする機能が実装されているとします。これに対して、iPhoneはHAPを使ってon/offの信号を送ります。iPhoneがリモコンスイッチになっているような単純な構成ですが、これでもSiriの音声操作や、iOSのショートカット機能を使って自動化するなど、色々な利用方法が可能です。

スイッチを追加する

上の最小構成に、on/offの状態をWiFi/BLE経由で発信するスイッチを追加した構成を考えます。このスイッチでプラグをon/offする方法を考えます。

最小構成と同じく、スイッチもiPhoneと接続するのなら、iPhoneで連動させる方法が考えられます。iPhoneがスイッチの状態をチェックして、on/offされたらプラグを制御する方法です。実現容易な機能ですが、iPhoneのホームアプリでは、iPhoneが直接このようなオートメーションを実行する機能は提供されていません。その理由は、iPhoneが家に無い場合や、電源offや機内モードになっている場合、スイッチが使えなくなるからです。いつでも確実にスイッチを動作させるためには、iPhoneのような個人が持ち歩くデバイスに頼らず、家に常駐して24時間稼働する仕掛けを利用する必要があります。

(スイッチの写真は amazon.co.jp より引用)

ペアリングする方法

スイッチとプラグがペアリングする機能があれば、下の図のようにペアリングして、スイッチでプラグをon/offできます。これならiPhoneが不在の場合でも動作します。さらには、iPhoneからも引き続きプラグをコントロール可能です。IKEAのTRÅDFRIはこの方式で動いています。ただしIKEAの場合、プラグとペアリングしたスイッチの状態はHomeKit (iPhone) から知ることはできません。

常時稼働サーバーを使う

もう一つの方法は、家の中に24時間稼働するサーバーを設置する方法です。HomeKitでは、HomePod mini, Apple TV, iPadが「ホームサーバー」になります。HomePod miniやApple TVは、一旦設置されたら24時間稼働するデバイスなのでホームサーバーに適しています。Appleは以前、AirPort (日本では商標の関係でAirMac) というWiFiルーターを販売してました。今も継続販売されていたらAirPortも間違いなくホームサーバーになっていたはずです。

 

ホームサーバーは常時稼働しているので、スイッチをプラグに連動する手順を常時実行できます。そのためには、「スイッチが押されたらプラグをon/offする」という手続きをホームサーバーに記憶させておく必要があります。手続きの登録や編集にはiPhoneを用います。iPhoneから、スイッチの「アクション」や、家の「オートメーション」を設定する操作を行い、自動化の手順を作成・編集します。この手順はホームサーバーに登録されて実行されるので、iPhoneを家から持ち出した状態でも機能します。

ペアリングするIKEA方式と比較して、HomeKit側からスイッチの状態を知ることができます。なので、プラグ以外の色々な機器を、このスイッチからコントロールするオートメーションを書くことができます。

Home Assistantも、家の中に常時稼働するHome Assistantサーバーを設置する方法で動作してます。Home Assistantを作った人たちは、インターネット上のクラウドに頼らない形で、自分たちが管理する仕組みで、自分の家の機器をコントロールすることが重要なのだと主張しています。

家の外から操作する

家庭内サーバーを設置すれば、家の中からの操作は容易に自動化できます。ただ、家のWiFi圏外からも操作できるようにするには、通常はかなり面倒な手順が必要です。外部からホームサーバーに接続できるように、家のルーターにポートフォワーディングの設定をしたり、家のIPアドレスを固定アドレスにしたり、ダイナミックDNSを利用したり、さまざまな準備が必要です。家のサーバーを外部接続可能にするので、セキュリティにも気を配らないといけません。

Appleのホームサーバーでは、外部からの接続設定が非常に楽です。HomePodなどにApple IDを設定すると、ホームサーバーはiCloudに接続します。この状態で、iPhoneMacが家のWiFiの圏外に出ると、ホームサーバーとiPhoneの接続が、自動的にiCloud経由に切り替わります。通信はすべて暗号化されているので安全です。

Home Assistantにも、外出先からのアクセスを安全に実現するためのクラウドサービスが用意されてます。当初は無償で提供されてましたが、管理が大変になったとのことで現在は年額65ドルです。一方で、iCloudには無償プランがあります。なので、iPhoneユーザーでしたら、Home Assistantを使う場合でも、HomeKit/iCloud経由で外部接続するのが良いと思います。

Threadが使える

ホームサーバーのうち、HomePod miniとApple TVの一部はThread Border Routerになります。これによりThreadに流れている情報を、WiFiEthernetに橋渡しするので、Threadデバイスが使用可能です。

 

Threadについてはこちらもご覧ください。

diysmarthome.hatenablog.com

Appleのホームサーバーでは、現在Zigbeeバイスはサポートされていません。Zigbee自体がThreadに移行するらしいので、おそらく今後もサポートされないと思います。

サーバー追加・削除が柔軟

Home Assistantなどのように、DIYでサーバーを設置すると、管理が大変です。Appleのホームサーバーは、電源を入れてApple IDを設定するだけで、必要な管理を自動的に行ってくれます。例えば、最初に示した最小構成

に、HomePod miniを追加すると、自動的にホームサーバーとして設定されて、機能開始します。

ここでHomePod miniの電源を外して停止すると、ホームサーバーが無かった時の状態に戻ります。

iPhoneからのプラグon/off操作は、ホームサーバの有無に関わらず可能です。

また、家の中には複数のHomePod mini, Apple TVが設置される可能性もありますが、その場合は、どれか一つがホームサーバーとして機能し、残りがバックアップサーバになります。

 

例えば以下は、HomeSpanのモニター機能で調べた結果です。このネットワークには、HomePod miniとApple TVが同じApple IDに登録されています。通常は、このうちHomePod mini (192.168.x.136) が接続に使われていました。

*** HomeSpan Status ***
(略)
Connection #0 192.168.x.136 on Socket 2/16  ID=315...   (admin)
(略)
*** End Status ***

ここで、HomePod miniの電源を落とすと、自動的にApple TV (192.168.x.137) に接続しました。

*** HomeSpan Status ***
(略)
Connection #0 192.168.x.135 on Socket 2/16  ID=315...   (admin)
(略)
*** End Status ***

HomePod miniからApple TVにホームサーバーが引き継がれても、同じオートメーションが引き続き使用可能です。おそらくは設定内容がiCloud側にバックアップされていて、共有されているのだと思われます。このように、iCloudで管理されているおかげで、ホームサーバーの追加や削除が非常に簡単です。サーバーを設定したり管理する手間も知識も不要です。

しかし、デメリットもあります。設定変更が反映されるまで、時間がかかることです。クラウドに関係しそうな変更によって不具合が生じた場合は、しばらく時間が経つと解消していることが何度かありました。それを待っていられない場合は、HomePodやApple TVを再起動するのも良いと思います。

まとめ

HomeKitのホームサーバーの役割をまとめてみました。家の外からのアクセス、サーバーの設定、サーバーの追加・バックアップの仕組みなど、よく考えられています。自前のローカルサーバーだけでここまで設定するのは大変だと思います。

Home Assistantはローカルなサーバでの運営が基本ですが、Google, Amazonをはじめとする多くのIoTメーカーの製品はクラウドサービスを中心に据えてます。これらに対してApple HomeKitは、ローカルで行える部分はHAPによりローカル処理し、クラウドが必要な部分にはiCloudを使用することで、ローカルとクラウドがバランス良く取り込まれた構成を目指しているように思います。

ミリ波を使ったZigbee人感センサー FP1 をHomeKitから使う

Aqaraのミリ波を使った人感センサをHomeKitから使いました。Zigbeeで通信するので、Zigbee2MQTTとHomebridgeを使用します。一般的なPIR(パッシブ赤外線)人感センサーと比較して、安定していて非常に使いやすいです。Zigbee2MQTTのwebインタフェースから感度などの設定が可能です。また人の検知以外に、人の移動のイベントもHomeKitから利用可能でした。

AqaraのFP1

独身の日セールで買いたいもの、としてネットで話題になっていたFP1を入手しました。送料込み5,700円でしたが、4,000円台で買えるところもあったらしいです。現在は7,000円台のようです。こちらの製品です.

そこそこ綺麗な白い箱に入ってます。箱には「精准感知空间有人和无人(無人),支持静止人体的存在识别(識別)」と書いてあります。漢字の雰囲気から「空間の有人と無人を正確に感知して、静止している人体の存在識別もサポートしている」という意味に読み取れます。漢字の力はすごい。

USB ACアダプタ、長めの電源(USB)ケーブル、取り付け用鉄板、両面テープなどが付属してます。付属品もしっかりしてました。

本体は丸くて洒落てます。グッドデザイン賞も受賞しているようです。ベースには強力な磁石が入ってます。ベースと本体には可動部分があって角度を調整できます。添付冊子によると、検出範囲は5m、横120度、縦40度程度とのことです。

本来の接続方法

Zigbee通信方式のセンサなので、省電力で、WiFiへの負担も無く使いやすいです。ただそのままではスマホやインターネットに接続できないので、通常はAqaraのHUB製品(例えばAqara E1)と一緒に使います。HUBがZigbeeとLANの橋渡しをしてくれるので、AqaraのスマホアプリやAqaraのクラウドからセンサが利用できるようになります。また嬉しいことに、Aqara HUBは、Apple HomeKitにも対応してます。なのでHUBを用意すればすぐにiPhoneMacのホームから使えるはずです。

今回の接続方法と比較すると、Aqara Hubを買う方が簡単で良いかもしれません。

ただし、試していませんので詳細不明ですが、上記の販売サイトにはAndroidスマホをオンラインにしておかないとHomeKitへの接続作業ができないようなことが書いてあります。これがセットアップ時の場合だけなのか、常時Androidスマホが必要なのか不明で、ちょっと不安です。

今回の接続方法

今回はFP1を、Zigbee-USBアダプター、Zigbee2MQTT、MQTTブローカ(Mosquitto)、Homebridgeを使ってHomeKitに接続しました。Zigbee2MQTT, MQTT, HomebridgeはRaspberry Pi 4 (4GB)で動いています。AqaraのHUBは使いません。

 

 

Aqara HubにはAqara社製品しか使えませんが、Zigbee2MQTTならば、市販のほとんどのZigbee製品が使えます。これからもZigbee製品を増やしていく予定があるならば、Zigbee2MQTTで頑張るのが良いと思います。Zigbee2MQTTインストールの詳細に関しては以下をご覧ください。

diysmarthome.hatenablog.com

背面ボタン長押しでペアリング

箱から出したFP1にUSB電源を接続したら、次にFP1をZigbee2MQTTにペアリングします。Zigbee2MQTTのペアリングモードがoffに設定してある場合は、webインタフェース右上のPermit join (All)のメニューをクリックしてペアリングを許可します。すると5分間、ペアリングが可能になります。

この状態でFP1の裏にあるリセットボタンを5秒程度長押しします。するとFP1の青色LEDが点滅してペアリングモードに入ります。この後20秒くらいでペアリングが終了します。WebインタフェースからDashboardメニューを選べば、FP1の情報が得られます。

人が近づいたことを検出しているようです。また温度も測定されています。ただしこの温度表示は、いつ見ても摂氏23度でした。もしかしたら測定しているふりをしているだけなのかもしれません。

Homebridge/HomeKitから使用する

HomebridgeにすでにZigbee2MQTT用のプラグインがインストール・設定されていれば、FP1が自動的にHomeKit上に現れます。iPhoneまたはMacのホームを見ると、上部に「人感検知」のアイコンが現れています。

これをクリックするとFP1が表示されます。初期状態ではZigbeeのIDが名前になってますが、以下ではAqaraFP1という名前に変更してあります。

また温度計も表示されました。ただしいつも23度なので動作しているのかどうかは怪しいです。

HomeKitからできること

iPhone/MacのホームアプリケーションでFP1のアイコンをタップすると、以下のメニューが現れます。作成できるオートメーションは、「人を検知した」と「人の検知を停止した」です。

FP1をパソコン部屋の上部に設置して、このオートメーションで部屋の照明と、足元暖房(小さなホットカーペット)の電源をon/offするように設定しました。部屋の照明はZigbee壁スイッチで、ホットカーペットMerossのスマートプラグで制御しています。

理想的な人センサ

使用したところ大変快適でした。部屋に滞在中はずっと検知してくれます。PIRセンサのように、人が静止していると検知されなくなる不具合は皆無でした。PIRセンサは、人の体温に相当する長波長赤外線の揺らぎを検出します。なので、人が動いていないと、検知されなくなってしまいます。FP1はミリ波を使って距離の変化を測定してます。ミリメーター程度の解像度があるので、呼吸による変動も測定できて人検知するようです。試しに息を止めて動かないよう頑張りましたが、それでも検知されました。脈動のような微小な体の動きを人検知に使っているようです。

人が部屋に入れば10秒から15秒程度で検知されます。部屋から出ると10秒から30秒程度で検知されなくなります。人検知センサとして期待できる機能を実現できていると思いました。

Zigbee2MQTTでの詳細設定

Aqaraのスマホアプリを使うと、検知領域などを細かく設定できるようです。でもZigbee2MQTTのwebインタフェースからもかなりの設定が可能でした。以下のように、

  • monitoring_mode:人を無指向で検知するか、左右の入出も検知するかの切り替え。undirectedの場合、presence_eventとしてenter, leve, approach, awayが得られ、reft_rightに切り替えると、加えてright_enter, left_enter, right_leave, left_leaveが得られる。
  • approach_distance:人が近づくことを検知する際の検知距離
  • motion_sensitivity:検知感度
  • reset_nopresence_status:検知結果をリセットする

の設定が可能でした。ここまでのHomeKit設定で使用されるのは、presense(人が検知されたかどうか)の値と、温度の情報だけです。なので、ここの設定もデフォルトでok、もしくは、motion_sensitivity (検知感度)の調整だけで良いと思います。上記のように、FP1は検知領域の左右から出入りしたとか、近づいた・離れたなどのイベントも検知します。これらの情報をHomeKitで利用する方法については、後ほど紹介します。

MQTTメッセージを見る

Zigbee2MQTTがパブリッシュするMQTTメッセージを見ると、詳細な状況がわかります。mosquitto_subコマンドでサブスクライブしてみます。9999...のところには、FP1の実際の値を入れてください。

mosquitto_sub -h 192.168.x.x -t zigbee2mqtt/0x9999999999999999/# -v

この結果、以下のような情報が得られます。

zigbee2mqtt/0x9999999999999999 {"approach_distance":"medium","device_temperature":23,"linkquality":200,"monitoring_mode":"undirected","motion_sensitivity":"high","power_outage_count":0,"presence":true,"update":{"state":"idle"},"update_available":false}

色々な情報がjson方式で書かれています。内容は、

  • "approach_distance" 近づく検知を行う場合の距離設定
  • "device_temperature" デバイスの温度(いつも23度)
  • "linkquality" 電波強度
  • "monitoring_mode" 検知モード
  • "motion_sensitivity" 感度
  • "power_outage_count" 電源遮断回数
  • "presence" 人の検知

などです。

MQTTメッセージを要求する

このメッセージは、人の検知状況が変化した場合など、内容が変化した場合にパブリッシュされます。また、何の変化がない場合でも5分経過すると同じ内容がパブリッシュされます。

5分待つことなく、今すぐに情報が欲しい場合は、MQTTのトピックの最後にgetとつけて、欲しい情報を要求することができます。例えば、presenseが必要ならば、その値を空白にしたjson表記をパブリッシュします。

% mosquitto_pub -h 192.168.x.x -t zigbee2mqtt/0x9999999999999999/get -m '{"presence":""}'

するとmosquitto_subしている側に、結果がすぐに現れます。

zigbee2mqtt/0x9999999999999999/get {"presence":""}
zigbee2mqtt/0x9999999999999999 {"approach_distance":"medium","device_temperature":23,"linkquality":207,"monitoring_mode":"undirected","motion_sensitivity":"medium","power_outage_count":0,"presence":true,"update":{"state":"idle"},"update_available":false}

このように、結局は全部の情報が得られることになります。

MQTTから設定する

Zigbee2MQTTのweb画面から設定変更すると、その情報がすぐにパブリッシュされます。例えばZigbee2MQTTの設定画面で、感度をmediumに下げてみます。

すると、メッセージも以下のようになります。

zigbee2mqtt/0x9999999999999999 {"approach_distance":"medium","device_temperature":23,"linkquality":207,"monitoring_mode":"undirected","motion_sensitivity":"medium","power_outage_count":0,"presence":true,"update":{"state":"idle"},"update_available":false}

motion_sensitivityがmediumに変わってます。

同じ設定はmosquitto_pubコマンドでも可能です。Zigbee2MQTTのwebインタフェースの裏でMQTTメッセージを出しているので当然可能なのです。MQTTのトピックの最後に今度は、setをつけます。そして設定したい項目を記述します。今度は感度をhighに戻してみましょう。

mosquitto_pub -h 192.168.x.x -t zigbee2mqtt/0x9999999999999999/set -m '{"motion_sensitivity":"high"}'

 この結果、感度が再びhighに戻りました。

zigbee2mqtt/0x9999999999999999 {"approach_distance":"medium","device_temperature":23,"linkquality":207,"monitoring_mode":"undirected","motion_sensitivity":"high","power_outage_count":0,"presence":true,"update":{"state":"idle"},"update_available":false}

HomeKitでpresence_eventを利用する

ここまでの設定では、HomeKitから使用できる情報は、人の検知であるpresenceだけです。その値はtrue/falseの2値です。ここまででも十分便利です。FP1は他に、presence_eventとして、 "enter", "leave", "left_enter", "right_leave", "right_enter", "left_leave", "approach", "away"という値を提供します。これを利用する方法を考えます。

このために、HomebridgeプラグインのMQTTThingを使います。MQTTThingを使えば、Zigbee2MQTTが出してくれるMQTTメッセージを利用できます。

そこで、MQTTThingの設定メニューからMotion Sensorを1個追加します。モーションセンサの名前をFP1_approachとしました。最終的なconfig設定は以下のようにしました。

{
    "type": "motionSensor",
    "name": "FP1_approach",
    "url": "mqtt://localhost:1883",
    "topics": {
        "getMotionDetected": "zigbee2mqtt/0x9999999999999999$.presence_event"
    },
    "onValue": "approach",
    "offValue": "away",
    "accessory": "mqttthing"
}

MQTTThingの最近のバージョンではjson表記のメッセージも扱えるようになってます。トピックの最後に$.をつけてjsonのキーの名前を指定できます。ここではpresence_eventの値を取得したいので、$.presense_eventと追加してます。これがapproachの場合にonとみなし、awayの場合にoffとみなすように設定しました。

これを保存してHomebridgeをリセットすると、ホームに、このモーションセンサが現れます。

設定のところでは、動きを検知したとき(ここではapproachの場合)と検知しなかったとき(awayの場合)に行うオートメーションを書きます。テストのためにNanoleafの電球をon/offさせるようにしました。

試したところ、FP1に近づく動きをすると電球が点灯し、FP1から離れる動きをすると電球が消灯しました。このようにしてセンサーに向かって近づく・離れる、センサーに左右から近づく・離れるなどの動きにHomeKitで対応できました。

まとめ

ミリ波を使ったZigbee人感センサーFP1を使ってみました。遠赤外線を使った一般的なPIRセンサと比べて3倍くらい高価ですが、応答速度は早くて動作が安定していて、人の存在を確実に検出できました。Zigbee2MQTT用のプラグインでは人の検知のみがサポートされていますが、MQTTThingプラグインを使うことで、人の移動も検出できました。MQTTメッセージに対応するPythonプログラムなどを書けば、さまざまな用途にも使えると思います。

Tuyaクラウドのお試し期間(1ヶ月)が終了して動作停止

Tuyaの開発者向けクラウドを利用してWiFi赤外線リモコンを使用していたところ、「サブスクが期限切れになりました」というエラーメッセージを受け取るようになり、動作しなくなりました。代替案を試しましたが使えなさそうでした。今後は、Zigbee対応のTuyaデバイスを、Zigbee2MQTT経由で使用するのが良いようです。

Tuyaリモコンが不調

Tuyaのデバイスは安いのに(リモコンなどは最安530円)、Homebridgeから使えてとても良いです、という紹介を先月くらいに書いたばかりでした。Tuyaの開発者向けクラウドで無料のアカウントを取得して、Tuyaの公式プラグインを使えば、さまざまなTuya製品がHomebridgeから使用できるはずでした。

diysmarthome.hatenablog.com

ところが、今月になりこれが動作しなくなりました。Tuyaのクラウドからの応答を見ると、

TuyaOpenAPI response: {"code":xxxxxxxx,"msg":"No permissions. Your subscription to cloud development plan has expired.","success":false,"t":xxxx,"tid":"xxxx"} path = /v1.0/iot-01/associated-users/devices
Failed to get device information. Please check if the config.json is correct.

というメッセージが返ってきています。サブスクリプションが期限切れになったので使用できないという内容のようです。色々なサイトやYoutubeで、Home AssistantやHomebridgeからTuyaのクラウドを使用する方法が数多く紹介されていますが、クラウド利用に期限があるような注意事項は記載されていませんでした。なのでずっと使用できると思ってました。

いろいろ調べたところ、Tuyaの開発者アカウントのお試し版 (Trial Edition) の有効期限は1ヶ月とのことでした。

以前は無料プランでもずっと利用できたようですが、ここ半年くらいでお試し期間が1ヶ月になったようです。上記のリモコンを設定してから、エラーが出るようになったのがちょうど1ヶ月くらいでした。ちなみに有料プランの料金がいくらくらいかというと、

developer.tuya.com

一番安いStandard版で年額3,300USドルです。自宅のデバイスをHome AssistantやHomebridgeで制御しようという一般人向けの価格では無いです。おそらくは、Tuyaのチップを使って自社製品を開発するメーカー向けの価格だと思われます。

Tuyaのクラウドを使用しないでデバイスを利用する方法には、

  1. LocalTuyaインテグレーションを使う
  2. Zigbee方式のデバイスならばZigbee2MQTTを使う

の2通りがあるようです。ただし、どちらも使えるデバイスに制約があります。

LocalTuyaインテグレーション

Home Assistantには、Tuya公式のTuyaインテグレーションのほかに、LocalTuyaという名前のインテグレーションがあります。(インテグレーションというのは機能拡張というような意味合いだと理解してます。)公式インテグレーションは、Tuyaクラウドを使うので、現在では設定後1ヶ月で利用できなくなります。新しいメールアドレスで開発者アカウントを取り直せば再開できますが、毎月それを行うのは現実的ではないです。

github.com

一方、LocalTuyaというのはHome Assistantの上で、Tuyaクラウドの機能を実現する仕組みのようです。これがあればTuyaクラウドに接続する必要も、さらにはインターネットに接続する必要もなく、Tuyaデバイスが利用できます。HomebridgeにはLocalTuyaに相当する機能を持つプラグインはありません。でも、Home Assistantには、デバイスをHomeKitにブリッジする機能があるので、HomeKitからもLocalTuyaを利用できるはずです。

Tuyaクラウドをローカルに実現するのは結構大変な処理だと思うので、いろいろ制約はあると思いました。特に、赤外線リモコンは、クラウド側で各種家電メーカーの赤外線信号パターンを管理していると思われるので、サポートされていないのではと思いました。確認のためにLocalTuyaをインストールしました。

結論を先に書いておくと、LocalTuyaでは赤外線リモコンは使えませんでした。リモコン以外のTuyaデバイスには有効かと思われます。

LocalTuyaをインストールする

LocalTuyaはHome Assistant (以下HA) 公式ではなく、有志の人たちが実験的に作っているインテグレーションのようです。なので、HA初心者にはインストールが大変でした。LocalTuyaのサイトによるとおすすめのインストール手順は、

  1. (ユーザ名)・プロファイルで「詳細モード」をonにする
  2. 設定・アドオン・アドオンストアからTerminal & SSHを入れる
  3. sshを操作してHACS (HA Comunity Store) を入れる
  4. 設定・デバイスとサービス・統合・統合を追加から、HACS統合を入れる
  5. HACS・IntegrationsからLocalTuyaを入れる
  6. Tuyaクラウドからデバイスのlocal_keyを入手してLocalTuyaに設定する

です。箇条書きにすると単純ですが、それぞれのステップが大変でした。(ただし、HA初心者なので、回り道している可能性はあります。)

まずは、ステップ2でつまづきました。手元ではHAをDockerでインストールしていたのですが、Docker版ではアドオンが使えないそうです。どうしても動かしたい場合は、別のコンテナを作るらしいですが、大変そうなので諦めました。そこで手元にあったRaspberry Pi 3に、HAをイメージでインストールしました。本当はPi 4を使いたかったのですが、今の品薄で入手できません。

Dockerを使わずにベアメタルなインストールをしたおかげで、アドオンがメニューに現れるようになりました。これでsshのインストールが終わります。この後、再起動し、設定・デバイスとサービス・統合・統合を追加から、HACSインテグレーションのインストールができました。詳しい手順はHACSのサイトを見ていただくとして、結構大変でした。HACSってHA本体の開発陣から嫌われているのかなと邪推したくらいです。

HACS統合がインストールできれば、サイドバーにHACSが現れます。これを選択して、Integrationsを選び、右下の「EXPLORE & DOWNLOAD REPOSITORIES」を選ぶと、LocalTuyが選択できるようになります。

右下のDOWNLOADボタンを押すとLocalTuyaをダウンロードできます。次に再起動して、設定・デバイスとサービス・統合・統合を追加からHACSからLocalTuyaをインストールできます。

設定・デバイスとサービス・統合のページにLocalTuyaが現れるようになりますので、ここからデバイスを登録できます。

慣れてないこともありますが、Home Assistantは設定が難しいですね。Homebridgeの5倍くらい難しい気がします。

LocalTuyaで使えるデバイス

LocalTuyaで現在使えるデバイスは、

  • Switches
  • Lights
  • Covers
  • Fans
  • Climates
  • Vacuums

です。この中には赤外線リモコンはありません。ただ、Tuyaの赤外線リモコンユニットで、エアコンや照明器具を登録すると、Tuyaのアプリでは、エアコン、照明デバイスとして扱われます。エアコンはClimates、照明器具はLightsに相当します。これらがLocalTuyaで使えるかどうかが心配の点でした。

そこでLocalTuyaのデバイス登録を進めたところ:

の4項目が必須情報でした。このうちHostというのは、そのデバイスIPアドレスだそうです。赤外線リモコンにはIPアドレスがありますが、その先に接続されているエアコンや照明器具は、リモコンがコントロールしているのでIPアドレスがありません。

ということで、赤外線リモコンがLocalTuyaでサポートされていない現状では、使用できないようでした。赤外線リモコンをローカルにサポートするのは大変なので、なかなか実現できないのではと思いました。

以前の記事では、TuyaのWiFiリードスイッチセンサも紹介しました。これもTuyaクラウドを利用します。これも1ヶ月制限で使えなくなっていました。

diysmarthome.hatenablog.com

WiFiリードスイッチは応答が遅かったのでZigbee方式のものに置き換えてしまいました。なのでテストできていませんが、もしかしたらこちらはLocalTuyaで使えるかもしれません。

Zigbee2MQTTを使う

Tuyaの製品ならばクラウド利用してHomeKitから使えると喜んでいたのですが、どうも制限が厳しくなっていたようです。一方、Tuyaの製品のうち、Zigbee接続のデバイスなら、ほとんどがZigbee2MQTTでサポートされています。今後は、Zigbee接続製品だけをアテにするのが良いと思いました。

まとめ

Tuya開発者向けクラウドの1ヶ月お試し期間が終了したら、Home AssistantやHomebridgeからのクラウド経由でのアクセスができなくなりました。LocalTuyaなどのツールも試しましたが、赤外線リモコンは使えませんでした。

アプリであるTuya Smartからは引き続き使用できますし、本来の使い方ではないので打ち切られても仕方ない側面もあります。でもクラウドに依存する危うさを再確認しました。TuyaはMatterのメンバーですし、対応製品の予定もアナウンスされています。今後に期待したいところです。