先日はIoTのひとつとして「アレクサ、パソコンを起動して」というだけでWindowsパソコンを起動し、同時にディスプレイもONすることができた。
で、欲がでてきて今度はシャットダウンのときも自動的にできないものかと考えた。
【関連】
同時終了は簡単なようで実はチョット難しい
起動時の処理概要
まず起動のシーケンスから整理しておく。同じようにできないか考えるためだ。
声を発する「アレクサ、パソコンを起動して」
↓
アレクサがNode-RED Alexa Home Skill Bridgeスキルを経由して「Node-RED Alexa Home Skill Bridge」にメッセージを送る
↓
「Node-RED Alexa Home Skill Bridge」は登録されたアカウントにメッセージを送る(っていうかキューに入れるんだと思う)
↓
自宅のラズベリーパイ内でループしている「Node-RED Alexa Home Skill Bridge」が「Node-RED Alexa Home Skill Bridgeサーバー」内のメッセージを取得する
↓
ラズベリーパイ内の「Node-RED Alexa Home Skill Bridge」が
①宅内LANにWindows起動WOLコマンドを送信する
②Blynkサーバーにcurlコマンドを送る
↓
①により宅内Windowsは起動する
②ディスプレイ用自作スマートプラグがBlynkサーバーからのメッセージを受け取りリレーを接続しディスプレイがONになる
という感じ。
終了時の処理概要
ではOFFのときのシーケンスはどうなるかというと。
自分でwindowsをシャットダウンすることによりパソコン本体の電源は切れる。
↓
ディスプレイにはBlynkに対しcurlコマンドを送るか、Blynkアプリで操作するか、Alexa(またはGoogleHome)に司令して→ラズベリーパイ→BlynkサーバーにcurlコマンドでディスプレイOFFメッセージ
というようにディスプレイに対しても何かしら能動的なアクションが要る。
ちなみにMicrosoft自前のAIアシスタントであるCortanaさんに質問してみたら以下のような回答をいただいた。
「誤って大切なデータを消してしまうといけません。大変お手数ですが、[スタート]から電源ボタンを選択して頂けませんか?」ということで駄目らしい。
必要な条件整理
上記Blynkという言葉とかNode-REDとかっていうワードが出てきたが整理してみる。
Blynkクラウドサービス
NodeMCUやESP32などのマイコンボード内、またはラズベリーパイでも動かすことができる。
【関連】
ループさせて待受状態にしつつ、Blynkサーバー(一部課金ありだが基本的に無料でかなり使える)からのメッセージを処理しピンにHIGH信号やらLOW信号やら送ってハード制御することができる。
Node-RED
ラズベリーパイやその他プラットフォーム内で動かすことができるメッセージ処理サービスだと解釈している。Alexaからパソコンを起動できるようにしたときに使ってみてまあまあ理解したが他人に説明できるまでにはまだ至っていない。
【関連】
基本的に無料。
ラズベリーパイ内でループさせて待受状態にしておくことにより、外部からのメッセージで他のデバイスやサービスにメッセージを送ることができる。
AmazonのAlexaやGoogle Homeに対応したスキルもあるのでAlexaやGoogle Homeと連携させることができる。
必要な手順
パソコン側でシャットダウン時に”自動”処理する
Blynkのウィジェットを叩くコマンドを記述する
Blynkのウィジェットを叩くWindowsパワーシェルあたりから以下のように記述すれば良い。
curl https://188.166.206.43/ここにトークンを入れる/update/V1?value=0
ただし上記のトークンのところには独自にアプリで生成されたトークンを入れるのと、V1というのとValue=0というのはそれぞれ設定した独自のプログラムによって変わる。
gpedit.mscで終了時実行コマンドを設定できるらしいが
ファイル名を指定して実行でgpedit.mscと入れて実行する。
ウィンドウが開いたらコンピューターの構成→Windowsの設定→スクリプト と展開してシャットダウンをダブルクリック。
その中に実行したいファイル(ここではディスプレイをオフにするコマンドを入れたバッチファイル)を置く。
gpedit.mscがそもそも起動できなかったときは以下のサイトを参考にしたらできたので参考にするとよい。
グループポリシーgpedit.mscが見つからない時の対処 – Windows10 Home
また[Windows]シャットダウン時に特定プログラムを実行させる方法 | CEOブログを参考にバッチファイルを設置する。
ただここまでやっても残念ながらシャットダウン時にバッチファイルが起動されず、したがってディスプレイが自動的にオフにならなかった。
やったのはシャットダウン操作をバッチにする
どうやって実現したかというと、デスクトップに1個バッチファイルを置いた。名前は例えばshutdown_with_display.batでもなんでもいい。
その中に記述するのが先程の2件の命令で
- Blynkへのcurlするコマンド
- shutdown -s -t 適当な秒数(パラメーターの意味は調べてください)
とかって書いておけばできる。shutdownまでに数秒待機させるのであればshutdown命令を先に送って、待ち時間の間にディスプレイを消すコマンドでも良いだろう。
これによって多少の時間差はできうるもののワンアクションでパソコン電源とディスプレイ電源を切ることができる。
ついでにいうと今までは手動でWindowsメニュー→電源アイコン→シャットダウンをクリックってやってたのが、デスクトップのシャットダウンバッチファイルをダブルクリックだけでシャットダウンできるようになったのだから前よりアクションの手間は減ったわけだ。
まとめと妄想
そういうわけで起動は声だけで、終了はデスクトップのアイコンを起動するだけで本体もディスプレイもつけたり消したりできるようになった。
実はこれってバッチファイルの中に別のBlynk指示命令を入れておけば「部屋の電気も消す」とか「ルンバを動かす」とかいろいろできるかもしれない。「かも」だよ。ぜったいできるかどうかはトライしてみないとわからない。多分できるだろうけど。
とにかく面白い。
こういうの作るのは面倒・・・っていうのだったら↓市販のスマートプラグ買ってしまうのが手っ取り早くIoTできる。
Amazon純正 スマートプラグ (Works with Alexa認定)
¥1,980(2022/02/25 17:03時点の価格)
平均評価点:
>>楽天市場で探す
>>Yahoo!ショッピングで探す