「へいSiri, Windowsを点けて」でパソコンを起動する

DIYする

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))

最近のmacOSではPythonが標準搭載されなくなってしまったので、Homebrewを使ってbrewコマンド

brew install python

でインストールしてあります。その場所が/usr/bin/python3なので、冒頭に書いてあります。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, iPadのいずれかが接続されていれば、世界中からHomeKit機器にアクセス可能です。なので外出先からこのWindowsマシンを起動することができます。ルータを設定しておけば、どこからでもRemote Desktop接続を可能な状態にできます。必要な時だけ起動するサーバ、たとえば自分専用のファイルサーバなどとしても活用できます。

コメント

タイトルとURLをコピーしました