2018年4月17日火曜日

WindowsにAmazon Alexaをインストールする

本記事はalexa-avs-sample-appを動かすメモです。

2018年4月現在は、MSYS2上にインストールする方法がありますので
そちらを参照するといいかもしれません。

【元記事】

【修正するファイル】・samples/companionService/config.js
・samples/javaclient/config.json
・samples/javaclient/pom.xml
・samples/javaclient/ssl.cnf


ではスタートです。

Step1.Amazon developerにログインしてAVSデバイスを追加
ProductID、ClientID、ClientSecretキーを取得する。


Step2.サンプルプログラムをダウンロードする。
例:c:\project\alexsaフォルダに展開する場合、
DOSプロンプト上でクローンするフォルダに移動してから
> c:
> cd \project
> mkdir alexsa
> cd alexsa
> git clone https://github.com/alexa/alexa-avs-sample-app.git


Step3.依存アプリのインストール
・VLCをインストール http://www.videolan.org/
 環境変数に登録する
 例:
  環境変数名:VLC_PATH
  パス:C:\Program Files(x86)\VideoLAN\VLC

・Node.jsをインストール
 https://nodejs.org/en/download/


・Movenをインストール
 https://maven.apache.org/download.cgi
 ※環境パスを登録する事
 例:JAVA_HOME=C:\Program Files\Java\jdk1.8.0_162


Step4.SSL証明書を生成する
・OpenSSLをインストール
 http://slproweb.com/products/Win32OpenSSL.html
環境変数「Path」に「Bin」フォルダを登録する。
例「C:\tool\OpenSSL-Win64\bin」
・[C:\project\alexa\alexa-avs-sample-app\samples\javaclient]を編集する
YOUR_****の部分を全て変更する
countryName = JP
stateOrProvinceName = Tokyo
localityName = Nakano-Ku
organizationName = NA
organizationalUnitName = NA

・DOSプロンプト上でGenerate.batを起動する。
ここで適当な
プロダクトID、シリアルナンバー、パスワードを入力する。
例:
ProductID:Dispatcher
SerialNumber:123456
Password:1234
ちゃんとうまく証明書が生成できれば
「1 個のファイルをコピーしました」
というのが表示される。

・設定ファイルに生成した証明書の参照パスを設定する。

「c:\project\alexa\alexa-avs-sample-app\samples\companionService\config.js」を開き、
 sslKey: 'C:\\project\\alexa\\alexa-avs-sample-app\\samples\\javaclient\\certs\\server\\node.key',
 sslCert: 'C:\\project\\alexa\\alexa-avs-sample-app\\samples\\javaclient\\certs\\server\\node.crt',
 sslCaCert: 'C:\\project\\alexa\\alexa-avs-sample-app\\samples\\javaclient\\certs\\ca\\ca.crt',
 "products":"Dispatcher" : ["Dispatcher"],
を入力する。


「C:\project\alexa\alexa-avs-sample-app\samples\javaclient\config.json」を開き、
    "productId":"Dispatcher",
    "dsn":"123456",
    "provisioningMethod":"companionService",
 "clientId":"*********",
 "clientSecret":"*********",
 "locale":"ja-JP"
 "sslKeyStore":"C:\\project\\alexa\\alexa-avs-sample-app\\samples\\javaclient\\certs\\server\\jetty.pkcs12",
 "sslClientKeyStore":"C:\\project\\alexa\\alexa-avs-sample-app\\samples\\javaclient\\certs\\client\\client.pkcs12",
 "sslClientKeyStorePassphrase":"1234",
 "sslCaCert":"C:\\project\\alexa\\alexa-avs-sample-app\\samples\\javaclient\\certs\ca\\ca.crt"


「clientID」「clientSecret」は最初のAVS登録時の情報で
「sslClientKeyStorePassphrase」は証明書作成時に入力したパスワードになります。
「products」はKey:Value型になっていて
 KeyはAVS登録時のProductIDで、
 ValueはSSL証明書作成時に入力したProductIDになります。


「C:\project\alexa\alexa-avs-sample-app\samples\javaclient\」を開き
17行目付近にある部分を下記のように編集
8.1.12.v20180117


・AndroidスマホにAmazonAlexaアプリをインストールする
 https://play.google.com/store/apps/details?id=com.amazon.dee.app&hl=ja&rdid=com.amazon.dee.app


Step5.ビルドと実行、そしてNode.jsサーバによる認証
Dosプロンプト上で
> c:
> cd project\alexa\alexa-avs-sample-app\samples\companionService
> npm install
> npm start
別のDosプロンプト上で
> c:
> cd project\alexa\alexa-avs-sample-app\samples\examples\javaclient
> mvn validate
> mvn install
> mvn exec:exec
を実行する。
これでJAVAアプリが起動する。
クラウドとやり取りするのは1つめのコンパニオン
GUIは2つ目のjavaアプリ
という2構成になっています。



ブラウザで「https://developer.amazon.com/lwa/sp/overview.html」を開き
最初に作成したAVSデバイスを選択して
Consent Privacy Notice URLは暫定のURLでも張り付けておく。

cd project\alexa\alexa-avs-sample-app\samples\companionService


【インストール時に引っかかった事】
設定ファイルで未記入の所でエラー。(エラーが出なくなるまで項目を埋めていった)
Jsonファイルの構文にひっかかった。(\\が2つになっていない箇所があった)
JAVAコンパイラが見つからなかった(パスの問題)
VLCのバージョンが32bitでDLL読込み失敗した(64bitのものにインストールし直した)
Localhostを127.0.0.1に直さないと動かない。


【まとめ】
以上の手順をこなせば、Alexaが動作する所まで確認できます。

構成は、
GUIがフロントエンド(JAVA)で
バックエンド(Javascript)にコンパニオンがいます。

動作の流れは、
GUIからログインを行うと、コンパニオンを仲介してAWSにアクセスして認証を通します。
Amazonアカウントのログイン完了後、
OKであればシークレットキーが届いて、これでアレクサと接続状態になります。
ダメな場合は400とかエラーコードが返ってきます。

接続状態の時にアレクサに話しかけてAlexsaスキルを発動すると、
対応する接続中のデバイスに対してNotificationが届きます。

これでESP32でLチカとかもできちゃいますね!
コメントを投稿

Androider