[Raspberry Pi] スマートプラグ「TP-Link HS105」で iOS デバイスの充電を自動で停止する(失敗)

スマートプラグの「TP-Link HS105」を半年ほど前に買ったがずっと放置していた。

Amazon.co.jp: 【Amazon Alexa認定取得製品】 TP-Link WiFi スマートプラグ 遠隔操作 直差しコンセント Echo シリーズ/Google ホーム/LINE Clova 対応 音声コントロール サーキュレーター ハブ不要 3年保証 HS105 : DIY・工具・ガーデン https://amzn.to/46x1gQY

最近、iOS デバイスの Shortcuts アプリの Automation の便利さに気付いた。例えば、充電が 95% になったら Slack に通知するようにしたりしている。

参考:
[iOS] Siri から Slack に音声入力で投稿する – with a Christian Wife
https://wacw.cf/2021/01/02/posting-to-slack-with-voice/

[iOS] Shortcuts のオートメーションの確認ダイアログ – with a Christian Wife
https://wacw.cf/2021/01/03/siri-shortcuts-automation-dialogue/

ひょっとして Automation とスマートプラグを組み合わせれば、95% まで充電したら充電を自動停止するなんてことができるのではないか、と思い立ち、放置していたスマートプラグに挑戦することにした。

環境:iPad Pro 9.7″、iPadOS 14.2(英語環境)、Raspberry Pi 3 Model B(Raspberry Pi OS Buster )、macOS Catalina Version 10.15.6(英語環境)

(1)TP-Link HS105 をコンセントに刺す。TP-Link HS105 には極性がある。コンセントの穴が大きいほうに TP-Link HS105 の N と書かれているほうを刺す(そもそも逆向きには刺さらない)。TP-Link HS105 を直接コンセントに刺すか、TP-Link HS105 とコンセントの間に極性対応の延長コードを使えば、TP-Link HS105 から先は普通の延長コードだろうがどんな機器だろうが接続できる。

今回はテスト用として適当なライトを繋いでおいた。

(2)iPad に「Kasa Smart」アプリをインストールする。

「Kasa Smart」をApp Storeで
https://apps.apple.com/jp/app/kasa-smart/id1034035493

(3)Kasa Smart アプリを起動。最初に Local Network を検索する許可を求められるので許可する。そして「I've already given Local Network permission」をタップする。

次にアカウントの作成をする。私は Mac で以下のページからあらかじめ作っておいた。

Create Account
https://www.tplinkcloud.com/register.php

ログインする。最初に地域を選択したりして、設定が完了する。

(4)Kasa Smart アプリ右上の「+」ボタンをタップ。「What would you like to add?」で「Device」をタップ。画面に従って設定をしていく。

最初接続がなかなかうまくいかなかったが、一旦設定を削除したりして、なんとか設定が完了した。ファームウェアのアップデートもした。

下の「Devices」タブに自分で付けたデバイス名が追加された。右の「ON」「OFF」ボタンでスイッチを操作できるようになった。WiFi だけでなく、4G 回線からも操作できる。

(5)以下、Raspberry Pi で作業する。まずはアップデート。

1$ sudo apt-get update
2$ sudo apt-get upgrade
3$ sudo apt-get dist-upgrade

(6)node.js をインストールする。

1$ sudo apt-get update
2$ sudo apt-get install -y nodejs npm
3$ sudo npm cache clean
4(ここでいろいろ警告が出るが無視することにする。)
5$ sudo npm install npm n -g
6(ここもいろいろ警告が出るが無視することにする。)
7$ sudo n stable

(7)homebridge とプラグインをインストールする。

1$ sudo apt-get install libavahi-compat-libdnssd-dev
2$ sudo npm install -g --unsafe-perm homebridge
3$ sudo npm install -g --unsafe-perm homebridge-config-ui-x
4$ sudo hb-service install --user homebridge

(8)Mac から以下のアドレスで管理画面にアクセスできるようになる。初期アカウント名 ・パスワードが admin/admin なので、ログインする。

http://[Raspberry Pi の IP アドレス]:8581/

(9)トップの「Plugins」をクリック。

「Search for plugins to instal…」に「tplink smart」と入力して検索。『Homebridge Tplink Smarthome』が出てくるので、「INSTALL」をクリック。

設定画面が出てくるので、とりあえずそのまま「Save」を押す。これで TP-Link のスマートプラグ用のプラグインのインストールが完了する。

(10)右上の電源ボタンみたいなアイコンをクリックして、Homebridge を再起動する。

(11)iPad の Home アプリを開く。「Accessories>Add Accessory」をタップ。Homebridge のトップページに表示される QR コードをスキャンする。「Add to Home」をタップ。画面に従って設定を済ませる。

これで Favorite Accessory に TP-Link HS105 が追加される。タップでオン・オフできるはずだ。(これでもって TP-Link HS105 が Home Kit に対応したわけだ。)

なお、アプリを介さなくてもプラグの電源ボタンでオン・オフはできる。

(12)iPad の Shortcuts アプリを開く。

「Automation>+ボタン>Create Personal Automation>Battery Level」をタップ。

Battery Level を 95% に設定し、「Rises Above 95%」をタップ。「Next」をタップ。

「Add Action>Apps>Home>Control My Home」をタップ。

「Set Scenes and Accessories」をタップ。「TP-Link HS105」をタップ。「Next」をタップ。「TP-Link HS105」のアイコンをタップして、「Turn Off」になるようにする。「Done」をタップ。

「Next」をタップ。「Ask Before Running」のトグルをオフにしておく。「Done」をタップ。

これで、TP-Link HS105 に iPad を充電器と接続し、電源をオンにして充電を開始すれば、95% になった時点で TP-Link HS105 がオフになり、充電が自動的に終了するようになった。

***

ただ、ここまでやって気付いた。同じことはもっと簡単にできると。

12 の「Add Action>Apps」で Kasa Smart アプリを選択し、「Turn on/off a device」をタップする。次に「Turn Off the TP-Link HS105」と設定すればいい。

しかし、Kasa Smart アプリを経由すると 95% になった時点で画面タップが必要となる。Shortcut アプリの Automation はなぜかアプリによってこういう不便な仕様になっている。完全自動ではないのだ。

***

これでうまく運用できるようになったと思ったが、何度か使ってみて問題が起きた。95% になったときに、iPad の通知センターに「Automation failed "When battery level rises above 95% encountered an error: Accessory is not reachable」と表示される。スマートプラグもオフにならない。

たまたまではなく、この状況が何度も起きるのだ。

Homebridge のページで Logs を読んでみると、以下のようにエラーが起きている。

 1[1/13/2021, 9:02:32 AM] [TplinkSmarthome.API] TCP 192.168.100.100:9999 Error: TCP Timeout after 15000ms
 2192.168.100.100:9999 {"system":{"set_relay_state":{"state":0}}}
 3	at Timeout._onTimeout (/usr/local/lib/node_modules/homebridge-tplink-smarthome/node_modules/tplink-smarthome-api/src/network/tcp-socket.ts:67:17)
 4	at listOnTimeout (internal/timers.js:554:17)
 5	at processTimers (internal/timers.js:497:7)
 6[1/13/2021, 9:02:32 AM] [TplinkSmarthome.API] [TP-Link HS105] device.send() Error: TCP Timeout after 15000ms
 7192.168.100.100:9999 {"system":{"set_relay_state":{"state":0}}}
 8	at Timeout._onTimeout (/usr/local/lib/node_modules/homebridge-tplink-smarthome/node_modules/tplink-smarthome-api/src/network/tcp-socket.ts:67:17)
 9	at listOnTimeout (internal/timers.js:554:17)
10	at processTimers (internal/timers.js:497:7)
11[1/13/2021, 9:02:32 AM] [TplinkSmarthome] [TP-Link HS105]
12[1/13/2021, 9:02:32 AM] [TplinkSmarthome] Error: TCP Timeout after 15000ms
13192.168.100.100:9999 {"system":{"set_relay_state":{"state":0}}}

これは私だけでなく、同じことが起きている人がいるようだ。

State not updating on plugs, switch randomly erroring · Issue #168 · plasticrake/homebridge-tplink-smarthome · GitHub
https://github.com/plasticrake/homebridge-tplink-smarthome/issues/168

TCP Socket Closed error · Issue #134 · plasticrake/homebridge-tplink-smarthome · GitHub
https://github.com/plasticrake/homebridge-tplink-smarthome/issues/134

やはり、Homekit にネイティブ対応したスマートプラグがいるのかな。

参考:
コンセントには極性がある?影響は? 3つ確認方法を細かく説明! | 電気エンジニアのツボ
https://shimatake-web.com/outlet-polarity/

コンセントに刻印されている「W」の意味を、教えてください。 – コンセント – Panasonic
https://jpn.faq.panasonic.com/app/answers/detail/a_id/80567/~/%E3%82%B3%E3%83%B3%E3%82%BB%E3%83%B3%E3%83%88%E3%81%AB%E5%88%BB%E5%8D%B0%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%82%8B%E3%80%8Cw%E3%80%8D%E3%81%AE%E6%84%8F%E5%91%B3%E3%82%92%E3%80%81%E6%95%99%E3%81%88%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84%E3%80%82

Homebridgeで家電を管理する-その1 | Malaysia Hacks
https://www.my-hacks.info/2020/12/03/post-1372/

スマートプラグHS105をHomeKit対応させる方法 | オタクのリンゴはおいしい
https://otaku-ringo.com/hs105-homebridge/

【レビュー】TP-Linkスマートプラグ(HS105)は国内仕様で安心安全!Amazon EchoやIFTTTなどにも対応 – BENRI LIFE
https://www.benrilife.com/tplink-smartplug-review/

Raspberry Pi をHomekitのブリッジにするまでの手順メモ – Qiita
https://qiita.com/ARBALEST000/items/1a5eabb4df1a2938441b

homebridge-tplink-smarthome – npm
https://www.npmjs.com/package/homebridge-tplink-smarthome