何とか、動作するところまで来ました。
しかし、問題が2つあります。
1つ目の問題は、スキルのキーワードに普通の言葉や交通機関名を使うと、
自作のスキル関数に繋がらない事です。使うと、「そのスキルは、まだ
サポートしていません」とか言って終わります。
仕方ないので、前回のURLで参考にした「ゴミの日」を使っています。
使い方は、以下の感じになります。

私   :アレクサ、「ゴミの日」を開いて、新宿
アレクサ:新宿行きの平日ダイヤは、10時16分、10時30分、10時39分、です。
     新宿行きの平日ダイヤは、10時16分、10時30分、10時39分、です。
(注:聞き逃すので2回繰り返している)

まあ、「ゴミの日」をユニークな固有名詞にすれば良いように思います。

2つ目の問題は、このスキルを公開できない事です。(本質的な問題)
現在は、テスト者に自分だけを登録していますが、90日の期限が有ります。
テスト期間を更新すれば良いような気がしますが、どうなんだろう?
このあたりが、まだ未完成な感じがしますね。

とりあえず、以下に基本的な情報を書き留めておきます。
まずは、Amazon 開発者コンソールのスキル側の設定です。
<2018/02/10 16:00:コピーミス等があったので修正>
インテントスキーマ
{
  "intents": [
    {
      "slots": [
        {
          "name": "Destination",
          "type": "LIST_OF_DEST"
        }
      ],
      "intent": "GetNewFactIntent"
    }
  ]
}

カスタムスロットタイプ
タイプ:
LIST_OF_DEST

値:
新宿
しんじゅく
小田原
おだわら

サンプル発話
GetNewFactIntent {Destination} ゴミの日
GetNewFactIntent {Destination} ごみの日

続いて、AWSのLambda側のスキル関数(Python3.6)です。
これだけの規模のスキルはWebに無かったのですが、特に問題なく動作しました。
<2018/01/27 9:00:休日ダイヤの処理にケアレスミスが有ったので修正>
<2018/01/28 21:00:同様処理を共通化してコードを縮小>
<2018/01/31 9:30:再度、同様処理を共通化してコードを縮小>
import datetime

list_holiday = [101,108,211,212,321,429,430,503,504,505,
                716,811,917,923,924,1008,1103,1123,1223,1224]

list_sinjuku_h = [528,
                  601,612,621,630,641,650,659,
                  710,720,730,739,759,
                  806,819,831,840,848,859,
                                   省略
                  1910,1922,1931,1949,1956,
                  2017,2029,2040,
                  2101,2110,2118,2131,2140,
                  2207,2227]

list_sinjuku_w = [524,538,548,558,
                  612,620,633,641,648,659,
                  707,713,720,727,734,749,754,
                  808,816,825,836,844,852,
                                    省略
                  1905,1914,1938,1948,
                  2008,2016,2036,2048,2059,
                  2118,2133,2143,
                  2208,2221,2236,
                  2320]

list_odawara_h = [603,620,644,657,
                  713,731,743,755,
                  808,818,830,837,845,854,
                                   省略
                  2113,2120,2133,2141,2148,2159,
                  2211,2220,2232,2246,2256,
                  2307,2327,2348,
                  2418,2447]

list_odawara_w = [539,
                  604,616,641,656,
                  712,728,742,753,
                  802,814,824,833,844,856,
                                   省略
                  2109,2121,2134,2150,
                  2207,2222,2236,2249,
                  2308,2331,2349,
                  2429,2448]

def henkan(time):
    time_str = "0000" + str(time)
    time_str = time_str[-4:]
    answer = "、" + time_str[0:2] + "時" + time_str[2:4] + "分"
    return answer

def search(jikan, list):
    flag = False
    for x in range(0, len(list)):
        densha = list[x]
        if densha > jikan :
            flag = True
            break
       
    if x <= (len(list)-1):
        answer = henkan(list[x])
    if x <= (len(list)-2):
        answer = answer + henkan(list[x+1])
    if x <= (len(list)-3):
        answer = answer + henkan(list[x+2])
    if flag:
        answer = answer + "です。"
    else:
        answer = "、でんしゃがありません。"
    return answer

def lambda_handler(event, context):
    intent = event['request']['intent']
    value = intent['slots']['Destination']['value']

    gmtTime = datetime.datetime.today()
    dt0 = gmtTime + datetime.timedelta(hours=9)
    date = dt0.month * 100 + dt0.day
    if (date in list_holiday) or (dt0.weekday() > 4):
        holiday = True
    else:
        holiday = False

    dt1 = gmtTime + datetime.timedelta(hours=9) + datetime.timedelta(minutes=14)
    jikan = dt1.hour * 100 + dt1.minute

    if (value == '新宿') or (value == 'しんじゅく'):
        if holiday:
            result = "新宿行きの休日ダイヤは" + search(jikan, list_sinjuku_h)
        else:
            result = "新宿行きの平日ダイヤは" + search(jikan, list_sinjuku_w)
        result = result + result
    elif (value == '小田原') or (value == 'おだわら'):
        if holiday:
            result = "小田原行きの休日ダイヤは" + search(jikan, list_odawara_h)
        else:
            result = "小田原行きの平日ダイヤは" + search(jikan, list_odawara_w)
        result = result + result
    else:
        result = "行き先を指定してください。"

    response = {
        'version': '1.0',
        'response': {
            'outputSpeech': {
                'type': 'PlainText',
                'text': result
            }
        }
    }
    return response


 2018_01_26


前回、現在時間が得られないと書きましたが、1時間?位経つと時間が変化しました。
しかし、次の電車時間を知りたいので、これでは使えません。

あれこれ探していると、WebにPython3.6でスキル関数を書いたという、以下が有りました。
http://tech.mof-mof.co.jp/blog/amazon-echo-alexa-skill-trash-day.html

これを参考にすると、私の環境でもPython3.6が、あっさり動作しました。
Python3.6での現在時間は、以下のコードで得られます。

import datetime
gmtTime = datetime.datetime.today()
dt = gmtTime + datetime.timedelta(hours=9)
jikan = str(dt.hour) + '時' + str(dt.minute) + '分'

これを実行すると、リアルな現在時間が得られました。
あともう少しです。


 2018_01_25


その後の状況を備忘録として残します。
まず、最近以下の本が出版されたので、入手しました。

AIspeaker.jpeg

しかし、今のところ、あまり役に立っていません。
唯一、自分のPCにデバッグ環境を構築する手順が参考になりました。

ただし、プログラミング言語はPythonでしたので、Pythonのサンプルを探してみると、
以下が有りました。
https://qiita.com/osa9/items/e2cc6318b7ed736ac6ff

以前のはJavaScript?をNode.js環境で動作?させていたが、これはPythonだけで動作するらしい?
ちなみに、このURLは、近くのバス停にバスが到着するまでの時間を発話する処理が
書かれています。
これを、自分のPC環境で動作させようとしましたが、うまくいきません。
結局、以下のおまじないで動作できました。

①本には、Python2.xをインストールせよと有ったが、バス停サンプルは
  Python3.xでないと動かなかった。
②Python3.xのインストールだけではだめで、「pip3 install beautifulsoup4」も必要だった。
③プログラムの実行は、以下の手順。
 ・Python3.xのShellを立ち上げ
 ・バス停サンプルの本体「alexa_bus.py」をOpenすると、「alexa_bus.py」の編集画面表示
 ・「alexa_bus.py」の編集画面で、Run⇒Run Module (F5でも可)

実行結果は、以下のようになりました。
alexa_bus.jpg


問題なのは、これをアレクサ君に発話させる方法が不明な事で、
まだ、サーバー上で動作するスキルの関数をPythonで構築できていません。
購入した本には、サーバーを有料でレンタルする必要があるらしいのだが、
AmazonのAWSコンソールを使うと出来る様に見える。

なお、前回以下の処理を入れれば完成と思ったけれど、
①電車時間をテキストから配列に格納する
②現在時間を求める
③現在時間+所要時間を求める
④③の時間以降の新宿行き電車時間を3つ発話する

肝心の②が出来ない。
正確に言うと、以下で出来たのだけど、時間が変化しない。
何故か、常にプログラム更新時間が返って来るようです。
var dt = new Date();
var hours = dt.getHours();
var newhours = hours.toString();

うーん、ここ数日の作業は、3年近くやっていた仕事に似ているなあ。



 2018_01_23


あと半年も待てないので、スキル開発の方法をWebで探してみました。
以下のURLに、参考になる情報が記述されていました。

http://techblog.kayac.com/lets-make-alexa-skill-2017

これに全ての手続きが書かれていませんが、色々想像して、
なんとか同じスキルを自宅のアレクサ君にやらせることが出来ました。
このスキルで出来ることは、以下のようになります。
 私:「アレクサ、むすんでひらいて、てをうってむすんで」
 アレクサ:「またひらいて、てをうって、そのてをうえに」

やりたいことは簡単なのに、結構複雑な仕掛けになっていて、
参考情報が無いと全くできませんね。

この環境を元に、改造してみました。
まず、「またひらいて、てをうって、そのてをうえに」を
「あ、い、う、え、お」に変えてみると、発話の変更が簡単にできました。
この部分はプログラム処理なので、ここを弄れば電車時間を発話出来そうです。

次に、「アレクサ、むすんでひらいて、てをうってむすんで」を
「アレクサ、でんしゃじかん、しんじゅく」に変えてみましたが、
うまく反応しません。

一晩考えて、元々の指定が、以下であることに気が付きました。
「アレクサ、むすんで、をひらいて、てをうってむすんで」
つまり、「むすんで」がスキルの呼び出し名で、
その後に「を開いて」とか「を操作して」とかのキーワードが必要でした。

そこで、「アレクサ、でんしゃじかん、をひらいて、しんじゅく」にしたら、
あっさり「あ、い、う、え、お」がかえってきました。

後は、プログラム部分に以下の処理を入れれば完成です。
①電車時間をテキストから配列に格納する
②現在時間を求める
③現在時間+所要時間を求める
④③の時間以降の新宿行き電車時間を3つ発話する
⑤最後のWordが「おだわら」の場合は、④の電車時間を小田原行きにする

ただ、プログラミング言語仕様が良く判らないので、まだまだ掛かります。
ところで、同じことは、プログラムを作ればPCやスマホでもできますが、
言葉だけで指示できるのは非常に楽ですし、AIロボットと話しているみたいで
面白いです。



 2018_01_19


アマゾンからアレクサの招待状が届いたので、ぽちっとしました。
Alexa.jpg
が、・・・これは・・・まだ・・・発展途上の製品だなあ。
まず、WiFi設定が、何故かPCから何度やっても出来なかった。
Web情報ではネットワーク設定がどうとか、US amazonのアカウントがあるとどうとか、
色々あったが、AndroidのAlexaアプリで設定すると簡単らしい。

早速試したが、まずAndroidとAlexaを接続するところまでは同じ、
その後でAlexaのWifi設定になってパスワードを入れて完了した。
ただ、AlexaのWifi設定画面には、一瞬出るメッセージに反応しないと
ダメだった。これって、普通の人には簡単に越えられない壁だと思う。

次に使い勝手だが、使える「スキル」が少ないし、
①たいがいは、長い言葉で指定しないといけないので、めんどくさい
②固有名詞は良く聞き間違える
③ルーチン設定で、複数の「スキル」を文字で指定できるが、
 これに使える「スキル」が少なすぎる。
④プログラミングで「スキル」開発できるらしいが、
 まだ情報が少なくて、なかなか難しい。
という事で使えない・・・・

ただし、上記は半年もすれば解決するだろうと思う。
とりあえず、今のところ使っているのは、
アレクサ、ラジコ
アレクサ、今日の天気
アレクサ、今日のニュース
アレクサ、音楽かけて
くらいです。

自分が追加したいのは、近所の駅の次の電車の時間の読み上げです。
使い方は、「アレクサ、新宿行き」ってやると、
「現在時間+駅までの所要時間」後の電車時間を3つくらいまで読み上げる感じです。

隠しの自作ホームページを作って、そっち側で難しい処理をやっておけば、
アレクサ側の文字処理が簡単になるので、その方向で考え中です。

あと、新しい家のX社製エアコンは、アレクサで制御できるらしいので、
「アレクサ、エアコン、24度」ってやれるらしい。

IoTってのは、こうやって実感するだろうか?



 2018_01_18



03  « 2018_04 »  05

SUN MON TUE WED THU FRI SAT
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 - - - - -

アクセスカウンタ

プロフィール

WG管理人

Author:WG管理人
鉱物結晶研究家

検索フォーム

ブロとも申請フォーム

QRコード

QR




pagetop