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

非対応品を使う

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を動作させるためにはコマンドラインデベロッパツールが必要です。以下をご覧ください。

macOS VenturaでPython 3を動かす
年に1回のmacOSメジャーアップデートが昨日 (2022年10月25日) 公開されたので、最新版のmacOS Ventura 13.0にクリーンインストールしました。それで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をインストールする
HomebridgeはApple HomeKitのためのブリッジソフトウェアです。サーバーとして動かしておけば、HomeKit非対応のデバイスを、HomeKitアクセサリとして利用することができます。自作のデバイスや、GoogleやAmaz...

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の電源を入れられます。

コメント

  1. 通りすがり より:

    パソコンがワークデスクの下の奥にあるため、毎日しゃがんでパソコンの電源をオンにするのが大変でした。

    リモートで電源を入れるための基板を購入しようと試みましたが、驚いたことに、私のパソコンではPCIEポートが電源オフ時には通電せず、この基板を使用することはできませんでした。

    次に、フィンガーボットを導入してパソコンのスイッチをリモートでオンオフできるようにしましたが、ワークデスクの奥にあるため、ハブからのBluetooth信号が届かないことがわかりました。

    Wi-Fiを活用した良い解決策がないかと探していたところ、その問題に対する記事に出会いました。追加投資なしにパソコンをリモートで起動できるとは驚きでした。

    スマートホームの構築は、まさに試行錯誤の連続ですね。いろいろな記事で勉強させていただきます。

    • diysmartmatter より:

      WOLが使えたのは何よりです。一番スマートな方法だと思います。
      3.3V auxの通電は、もしかしたらBIOS設定で変えられるのかもしれません。

      • 通りすがり より:

        ありがとうございます。なんてスマートな方法だとびっくりです。
        Windowsのアプリを使ってサーバーPCからマウスクリックで起動できるようになりました。
        Homebridgeを使ったアレクサ連携もがんばります。

        p.s.
        BIOS設定をすべてチェックしたのですが、どうも私のDellミニタワーではないようでした。

        • diysmartmatter より:

          Dellは3.3V aux通電しないのでしたか。

          HomebridgeはHomeKitを使うためのブリッジなので音声エージェントはSiriを使うことになります。
          Alexaも使えなくは無いけど、有料サービスが必要だったと思います。
          Alexaから使うのでしたら、WOLをするAlexaスキルを使うのが良いと思います(使ったことないですが)

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