VMの制御はProxmoxのWebGUI上でやるのが一般的だと思うが、例えばVMのGPUをパススルーするなどし普通のPCの感覚で使用しようと思うと、VMの電源を入れるためだけにいちいち他のPCでWebGUIを開くという一手間が発生する。というかPCは1台でいい。
自分だけが使うなら我慢できるが、家族に使わせようと思うとやはり電源ボタンは欲しい。
WebGUI,SSH等があるが、さらにProxmoxにはAPIが用意されているのでツールを組み合わせれば既存の環境と同居できそう。
ということで、今回は物理電源ボタンでVMを起動できるようにする。
方法としてはProxmoxのAPIを外部から叩けるHomebridge(AppleのHomekit用だが、Androidのみで構築可能)とHomebridge proxmoxというPluginを使う。
各OS用のパッケージがあるのでSynology用の野良パッケージを使用した。
PluginにHomebridge proxmoxとHomebridge Google Smart Homeを追加。
これで各プラットフォームの橋渡しができる

この作業でgoogle home上にProxmoxのVMが追加されトグルできるようになる。

この方法では、Homebridge proxmoxが操作可能なAPIの機能を握っており、基本的にはコンテナとVMのトグル操作(start,stop)しかできない。
今回の私の環境では、Homebridge proxmoxで操作したいVMがWindows11なのに加えGPUをパススルーする実装になっている。
起動はGooglehome側から、終了はWindowsの操作でシャットダウンをすれば全く問題はないのだが、UIの都合上、指が滑って連続したトグル操作を誤って実行してしまうことがある。
その場合はVMをstop操作することによってシャットダウンはするが、あくまでもWindows側から見ればQemu-agentは入っているが強制終了の扱いでProxmox側のhookscriuptのみの実行になってしまう。
GPUパススルーの作法として、Windows上でシャットダウン時のシャットダウンスクリプトが必須であることもあり、一度でもトグル操作を誤ると二度とWindowsが起動しないという問題に陥ることがある。
ということで、簡単に言えば、Homebridge proxmoxにはstopではなくshutdown(Qemu-agent経由で正規の手順で正常にシャットダウンされる)を発行して欲しということ。
本来はプラグインを修正すべきだが、リクエストを受け付けてくれなさそうなのでプルリク出来ない私には自分で修正するという方法しか見つからなかった。
プラグインフォルダを漁っていき、
homebridge/node_modules/@evan-kinney/homebridge-proxmox/dist/platformAccessory.jsを修正。
Qemuのスイッチトグル時のコマンドをstopからshutdownに変えて上書き。

これで、トグル時の操作でVMのWindowsはQemu-agent経由でシャットダウンとして動作するようになる。