Wake On LANを使って、HomeKitからWindowsマシンを起動できるように設定しました。WindowsのWOLを有効化し、HomebridgeのWOLプラグインを設定します。
ヘッドレス運用のWindows
HomeKitをメインに使ってスマートホームしているのは、Appleのエコシステムに取り込まれているからです。なのでmacOSばかり使っていて、Windowsは滅多に使いません。それでもたまにWindowsが必要になることがあります。そんなときは、小型のWindowsデスクトップ機に、MacからMicrosoft Remote Desktop経由で使ってます。仮想マシンでWindowsを動かすより高速です。さらに、中古デスクトップなら格安ですし、メーカ品中古にはWindowsライセンスが付いているので、Windowsを買うより安いです。
ということで、ディスプレイもキーボードも接続していない(ヘッドレスの)、小型Windowsデスクトップ機を棚の上に置いてあります。でも必要になった時にそこまで行って電源を入れるのが面倒です。macOSからの操作や、Siriに音声でお願いして電源を入れたいところです。ということで、Windowsマシンの電源投入をHomeKitから可能にすることを考えました。WindowsマシンはEthernetに接続されているので、Wake On LAN (WOL)機能を使って起動するのが簡単そうです。
BIOSをWOL対応する
まずはBIOSレベルで、電源off状態でもLANチップに電源供給されるように設定します。BIOSによって色々な名前になってますが、要するにWOLとかWake On LANなどを有効にするという意味の項目を有効にすれば良いです。
WindowsをWOL対応する
次に、WindowsもWOLに対応させます。「デバイスマネージャ」「ネットワークアダプター」から使用中のEthernetチップを選んで、詳細設定でWake On Magic Packetを有効にします。これ以外はデフォルトのままで良いです。
ただ、手元のマシンでは「Wake On Magic Packet」の項目が現れなくて苦労しました。このマシンには、IntelのI219というチップが搭載されていて、Windowsで最初から用意されているドライバで問題なく動作します。ただ、そのドライバだとWake On Magic Packetの項目が現れないようです。インテルのサイトからWindows用ドライバをダウンロードしてインストールすると、ようやくWake On Magic Packetの項目が現れて設定できました。
Windows 11の高速スタートアップを無効にする
Windows 11のデフォルト設定では、高速スタートアップという機能が有効なのですが、これが動いているとWOLが効かないようです。「コントロールパネル」「ハードウェアとサウンド」「電源オプション」「現在利用可能でない設定を変更します」を選び、「高速スタートアップを有効にする(推奨)」のチェックマークを外します。
Pingに応答させる
後述するHomeKitのWOLプラグインには、pingコマンド応答の有無で電源状態を検出する機能があります。Windowsはデフォルトではpingに応答しないので、応答するように設定しておきます。「コントロールパネル」「システムとセキュリティ」「Windows Defender ファイヤウォール」「詳細設定」「受信の規則」「ファイルとプリンターの共有 (エコー要求 – ICMPv4 受信)」を有効にします。
MACアドレスを調べておく
色々な方法があるとは思いますが、DOS窓からipconfig /allコマンドで調べました。「物理アドレス」の項目に現れる6バイトの16進数です。
WOLを試す
以上でWindows側の準備は整いました。WindowsをWOL対応させる手順は面倒で、一つでも欠けているとWOLしません。でも、ネットで調べるとたくさんの記事が見つかり助かります。
準備が完了したので、Windowsマシンの電源を落として、他のマシン(ここではmacOSのターミナル)から起動できるかどうか試します。WOLでは、LAN全体にマジックパケットというデータを流すことで、電源を入れます。マジックパケットは、0xFFが6個の後に、MACアドレスを16回繰り返した内容のデータです。Pythonでプログラムすると以下のようになります。
#!/usr/bin/python3
import socket
s=socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
s.sendto(b'\xFF'*6+b'\x11\x22\x33\x44\x55\x66'*16, ('192.168.xxx.255', 7))
Python 3は/usr/bin/にあるので、1行目にそのパスが書いてあります。なお、python 3を動作させるためにはコマンドラインデベロッパツールが必要です。以下をご覧ください。
Pythonプログラムの、sendtoメソッドの引数で、MACアドレス(この例では0x112233445566)と、LANのブロードキャスト用アドレス(最後が255のアドレス)を設定します。これを動かせばWindowsマシンが起動するはずです。pingの応答も確認しました。
% ping 192.168.xxx.xxx PING 192.168.xxx.xxx (192.168.xxx.xxx): 56 data bytes 64 bytes from 192.168.xxx.xxx: icmp_seq=0 ttl=128 time=0.840 ms 64 bytes from 192.168.xxx.xxx: icmp_seq=1 ttl=128 time=0.606 ms
Homebridgeで設定する
次はHomebridgeの設定です。Homebridgeのインストール方法はこちらに書きました。
Homebridgeのプラグインタグでwolを検索すると8個のプラグインが見つかりました。今回は、Homebridge WoLというプラグインを使いました。
設定ボタンを押して、IPアドレスやMACアドレスなどを書き込んでいけば良いです。コンフィグには以下のような内容が追加されました。
{
"name": "Windows",
"ip": "192.168.xxx.xxx",
"host": "192.168.xxx.xxx",
"pingInterval": 3,
"pingsToChange": 3,
"pingTimeout": 1,
"pingCommandTimeout": 0,
"mac": "11:22:33:44:55:66",
"broadcastAddress": "192.168.xxx.255",
"startCommandTimeout": 0,
"wakeGraceTime": 45,
"wakeCommandTimeout": 0,
"shutdownGraceTime": 15,
"shutdownCommandTimeout": 0,
"log": true,
"logPinger": false,
"debugLog": false,
"returnEarly": true,
"accessory": "NetworkDevice"
},
この結果、iPhoneやMacのホーム.appに以下のようにWindowsというボタンが現れ、クリックすると電源が投入されました。またpingの応答のある間は、onの状態になります。
Siriにも「ういんどうずを点けて」と話しかけると電源を入れてくれます。Windowsの発音は日本語でokです。HomeKitから電源を切ることはできませんが、Remote Desktop接続などして使用後にシャットダウンすると、pingの応答がなくなるので、ホーム.appの表示もoffになります。
外出先からPCを起動
HomeKitにHomePodまたはAppleTVが接続されていれば、ホームハブとして機能し、世界中からHomeKit機器にアクセス可能です。なので外出先からこのWindowsマシンを起動することができます。ルータを設定しておけば、どこからでもRemote Desktop接続を可能な状態にできます。必要な時だけ起動するサーバ、たとえば自分専用のファイルサーバなどとしても活用できます。
まとめ
Homebridgeのプラグインで、WOLマジックパケットを流せるようにして、HomeKitからパソコン電源を投入できるようにしました。これで外出先からでも家のPCの電源を入れられます。
コメント
パソコンがワークデスクの下の奥にあるため、毎日しゃがんでパソコンの電源をオンにするのが大変でした。
リモートで電源を入れるための基板を購入しようと試みましたが、驚いたことに、私のパソコンではPCIEポートが電源オフ時には通電せず、この基板を使用することはできませんでした。
次に、フィンガーボットを導入してパソコンのスイッチをリモートでオンオフできるようにしましたが、ワークデスクの奥にあるため、ハブからのBluetooth信号が届かないことがわかりました。
Wi-Fiを活用した良い解決策がないかと探していたところ、その問題に対する記事に出会いました。追加投資なしにパソコンをリモートで起動できるとは驚きでした。
スマートホームの構築は、まさに試行錯誤の連続ですね。いろいろな記事で勉強させていただきます。
WOLが使えたのは何よりです。一番スマートな方法だと思います。
3.3V auxの通電は、もしかしたらBIOS設定で変えられるのかもしれません。
ありがとうございます。なんてスマートな方法だとびっくりです。
Windowsのアプリを使ってサーバーPCからマウスクリックで起動できるようになりました。
Homebridgeを使ったアレクサ連携もがんばります。
p.s.
BIOS設定をすべてチェックしたのですが、どうも私のDellミニタワーではないようでした。
Dellは3.3V aux通電しないのでしたか。
HomebridgeはHomeKitを使うためのブリッジなので音声エージェントはSiriを使うことになります。
Alexaも使えなくは無いけど、有料サービスが必要だったと思います。
Alexaから使うのでしたら、WOLをするAlexaスキルを使うのが良いと思います(使ったことないですが)