10
5

More than 5 years have passed since last update.

バルスと話すとサーバーをシャットダウンさせる。

Posted at

バルスで、サーバーを落としたい

先ずは「バルス」とマイクに向かって話したときに、サーバーを終了することができるかどうかです。もちろん最終目標は、ArduinoかRaspberry Piに繋げたマイクに向かって「バルス」というと、リモート接続先のサーバーが、その後一切起動しなくなるやつですが。

想定する動作

  1. サーバー(仮想マシンでOK)に、Node-REDを入れる。execノードを使いたいので、IBM Cloudのスターターキットは使えない。
  2. Webブラウザ上でNode-REDにアクセス
  3. PC内蔵または外部接続のマイクに向かって話す
  4. Watson Speech to Textで音声認識、テキスト変換
  5. 「バルス」と認識した場合のみ、Node-RED実行サーバーに対してシャットダウンを実行

と、手始めにこんな感じで動けば良いので、Node-REDのフローを作りました。下記が作成したサンプルです。

導入したノード

Node-REDをサーバーに導入しただけでは、Watsonに接続するためのノードがありませんので、Node-RED画面の「三」→「パレットの管理」→「ノードを追加」から、下記を追加します。

  • node-red-contrib-browser-utils
  • node-red-node-watson

サンプルコードは、Node-REDでインポートして動かすことができます。「exec」ノードが必須です。

[{"id":"f01a4ba5.5e2148","type":"tab","label":"バルス システム ver1","disabled":false,"info":""},{"id":"1afd992c.3e61e7","type":"microphone","z":"f01a4ba5.5e2148","name":"","x":139,"y":54,"wires":[["da788f89.44d65"]]},{"id":"da788f89.44d65","type":"watson-speech-to-text","z":"f01a4ba5.5e2148","name":"","alternatives":1,"speakerlabels":true,"smartformatting":false,"lang":"ja-JP","langhidden":"ja-JP","langcustom":"NoCustomisationSetting","langcustomhidden":"","band":"BroadbandModel","bandhidden":"BroadbandModel","password":"","apikey":"","payload-response":false,"streaming-mode":false,"streaming-mute":true,"auto-connect":false,"discard-listening":false,"disable-precheck":false,"default-endpoint":true,"service-endpoint":"https://stream.watsonplatform.net/speech-to-text/api","x":160,"y":140,"wires":[["fc4231d2.713e4"]]},{"id":"21b94dbb.b2d302","type":"switch","z":"f01a4ba5.5e2148","name":"","property":"payload","propertyType":"msg","rules":[{"t":"cont","v":"バルス","vt":"str"},{"t":"else"}],"checkall":"true","repair":false,"outputs":2,"x":330,"y":220,"wires":[["f00139c7.739af8"],["9fe0bcce.8005d"]]},{"id":"9fe0bcce.8005d","type":"debug","z":"f01a4ba5.5e2148","name":"debug : バルス認識エラー","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":570,"y":280,"wires":[]},{"id":"f00139c7.739af8","type":"exec","z":"f01a4ba5.5e2148","command":"echo user | sudo -S shutdown -h now","addpay":false,"append":"","useSpawn":"false","timer":"","oldrc":false,"name":"","x":590,"y":220,"wires":[["a9fbc581.e283c8"],[],[]]},{"id":"fc4231d2.713e4","type":"function","z":"f01a4ba5.5e2148","name":"音声認識結果","func":"msg.payload = msg.transcription;\nreturn msg;","outputs":1,"noerr":0,"x":360,"y":140,"wires":[["21b94dbb.b2d302"]]},{"id":"a9fbc581.e283c8","type":"debug","z":"f01a4ba5.5e2148","name":"debug: バルス認識成功","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":710,"y":140,"wires":[]}]

バルスシステム ver.1

フロー図は下記になります。
バルスと認識したらシャットダウン.png

「speech to text」ノードをダブルクリックし、Watson Speech to TextのAPIキーを入力しています。APIキーは、クレジットなしで無料で使えるIBM Cloud ライトアカウントで使える「Watson Speech to Text」を有効にすることで入手することができます。
watson_stt.PNG

「switch」ノードでは、Watson Speech to Textにおける認識結果が、「バルス」かそうでないか振り分けています。
switchノード.PNG

「execノード」、「echo user | sudo -S shutdown -h now」と表示されている箇所についてです。ダブルクリックしますと、「execノード」編集画面が開きます。
echo のあとの「user」は、Node-REDを実行しているユーザーのパスワードです。ここを各自のパスワードに置き換えます。「echo user | sudo -S shutdown -h now」で、今すぐシャットダウンする処理が実行されます。
execノード.PNG

動作確認

サンプルコードをインポートし、各ノードで必要な値をセットした後、画面右上の「デプロイ」をクリックします。
その後、「microphone」ノードの左端のボタンをクリックし、「バルス」と言いましょう。
再び、「microphone」ノードの左端のボタンをクリックします。Watson Speech to Textにより音声がテキストに変換され、無事「バルス」と認識されていれば、Node-REDを実行しているサーバーがシャットダウンするはずです。

10
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
5