2019年11月27日水曜日

実証実験5.6.7日目

だいぶGoogleHomeにも慣れてきて、毎日問題なく使えている。
が、たまに「お薬飲んだよ」などと正しい言葉でGoogle Homeに話しかけておらず反応しないことが最終日にもあった。
少し待っての機能があるためその機能がとてもいいと被験者が言っていた。
被験者は高血圧の薬を飲んでいるため、音声で喋って数値を記録できたらいいと言っていた。

2019年11月26日火曜日

ngrokがURLを払い出していなかった!?

久しぶりにngrokをチェックしていたらhttpのURLが払い出されていないことが発覚した。そこで、example.jsのログ(~/pill-reminder/log/example*)を見てみると リスト1のようになっていた。

2019-11-20 12:26:53.814:     undefined/google-home-notifier
2019-11-20 12:26:53.814: GET example:
2019-11-20 12:26:53.815: curl -X GET undefined/google-home-notifier?text=Hello+Google+Home
2019-11-20 12:26:53.815: POST example:
2019-11-20 12:26:53.816: curl -X POST -d "text=Hello Google Home" undefined/google-home-notifier
2019-11-20 12:26:53.820: sendNgrokUrl(undefined/google-home-notifier)
2019-11-20 12:26:55.369: ****** sendNgrokUrl 成功 ******
2019-11-20 12:26:55.446: Google HomeのIPアドレス:
リスト1.example.jsのログ

なんと、11/20の時点でngrokはURLの払い出しに失敗していたのだ!
それに今日の今日まで気が付かなかった。設定ファイル(pill-reminder)も ngrokのURLが
undefined/google-home-notifier
のままになっている。おかしいな・・・。被験者宅に設置したときチェックしたはずなのに・・・。

foreverコマンドを入力してexample.jsをいったん止めて、再び起動した。ngrokダッシュボードではhttpのURLが表示されたが設定ファイルはundefinedのまま。example.jsのログを見てもちゃんとURLが払い出されているし・・・。そこで、もう一度exampleを停止してから起動。今度は最初からundefined。ngrokのダッシュボードで残っていたhttpのURLをクリックしてゾンビを消してから再びexample.jsを落として立ち上げると今度はうまくいった。ngrokのダッシュボードにも設定ファイルにもログにも払い出されたhttpのURLが出ている。

一体何が悪かったのだろう?
今回のトラブルを整理すると次のようになる。
  1. 被験者宅に機器を設定していた段階でngrokはhttpのURLを払い出していなかった
  2. したがって設定ファイルはundefinedのままだった(と思われる)
  3. それに気づいた今日、一度example.jsを落として再び立ち上げたが設定ファイルに反映されなかった
  4. 2度目の停止・立ち上げではundefinedのままだった
  5. ngrokダッシュボードでURLゾンビをけしてから3度目の停止・立ち上げを行うと今度はうまくいった
これはこれまでにも経験的に感じていたことだが、何かのタイミングでngrokがURLを払い出してくれないことがある。
その一つとしてngrokダッシュボードにゾンビが残っているケースがある。ダッシュボードからURLをクリックしてゾンビを消すと次からは払い出しがうまくいくような気がする。もしかして今回も第2クールの時のURLがゾンビとして残っていたのだろうか?それを見てうまく払い出されたと勘違いしていたのだろうか?
とにかくngrokは要注意である。





2019年11月24日日曜日

実証実験4日目

実証実験4日目

この日は日曜日ということでいつもよりも起きる時間が遅いため、前日にカレンダーの時間をずらしておいた。
平日と休日では起床時間が違うという人も多いと思うので毎回手直しするのは少し面倒だと感じた。

2019年11月23日土曜日

実証実験3日目

今日は祝日のため、いつもは6:15に設定していた朝食後の服薬アナウンスを7:30に変更していた(開始時刻:7:30、終了時刻:8:00)。しかし、応答がなく30分を経過した。ところが30分経過した後に応答したため「時間外で無視する」となってしまった。これは、応答時刻がGoogleカレンダーの予定(イベント)の開始~終了時刻の範囲外にあるときにこうなるようにしていたためである。AIスピーカーは5分おきに催促するようになっているので、このような問題が発生しないようにするためには、予定は1時間枠で取る必要がある。

暫定的に手作業で予定の時間枠を1時間に変更した。


この日は家族で泊まりの旅行があったため、起床時間を1時間程度ずらしていた。
しかし、その時間よりも薬を飲む時間が遅くなってしまい時間外になってしまった。
泊まりということでGoogleHomeを持っていけないため、私のGoogleassistantのアプリで服薬の回答をした。

今回のように予定の時間よりも薬を飲む時間がずれていて、それがわかっている時にはわざわざカレンダーの時間を変更しておいたほうがいいのかが分からないためそのままにした。

2019年11月22日金曜日

実証実験2日目

実証実験2日目
今日はご飯を食べる時間が少し遅く、ご飯を食べ終わる前に服薬を促す形になった。
5分に1回いわれるのがうるさく感じたらしい。
そのため、「少し待って」の機能を使用し、時間をずらした。この機能はとても便利でいいと言っていた。

2019年11月21日木曜日

実証実験1日目

実証実験1日目

用法:朝食後
設定時刻:6:15

今日から実証実験がスタートした。
音声一つでできるため簡単に問題なくできた。
だが、最初に「OK,Google」というのを忘れていて、反応しないため「あれ?」となったそう。
天気や他のことも聞くことができるためいいねと言っていた。
今のところ、不満や問題点はない。

2019年11月20日水曜日

実証実験第3クール

明日から実証実験の第3クールを11/27までの1週間開始する。そのために本日被験者宅にシステム一式を設置した。もっとも手間取ったのはGoogleHomeの設定だった。高齢者の誰もがGoogleHomeに精通しているわけではないので、これについては高齢者でも設置・設定できるような簡単なマニュアルが必要と感じた。

次に、ベアボーンの設定については今回はトラブルなく接続できた。その後の設定作業は
  1. GoogleHomeのIPアドレスをスマホアプリで調べてGoogleスプレッドシート(pill-reminder)へ記入する
  2. 発話依頼プログラム(pill-reminder.js)を起動する
の2点である。
ところがこれらを行っても、時刻になったにもかかわらずGoogleHomeは喋らなかった。原因は発話PUSHサーバがスプレッドシートに設定したGoogleHomeのIPアドレスを読み込んでいなかったからである。
本来は先に上記1をやってからベアボーンサバを起動すべきだった。今回は、いったん発話PUSHサーバを停止後、再度起動することによって対応した。
# cd /home/mtanaka/pill-reminder
# forever stop example.js
# forever start example.js

2019年11月19日火曜日

実験6日目、7日目

間が空いてしまったが結果である。  

6日目

・結果としてはすべて済になっていた。
しかし、朝ゼミの教員から連絡がなければ
ベアボーンのコンセントが抜けていたことに気づけなかったと思う。

7日目

・結果としては夜以外は済になっていた。
ただ、「寝る前の薬飲んだよ」を「夜の薬飲んだよ」と何度も話しかけていたため
夜は工夫する必要があるかと思われる。
・また、「ちょっと待って」と話しても10分延ばされなかったので
3回目の実証実験で確認できたらと思う。

【コメント】


「ちょっと待って」ではなく「少し待って」です。こういった表現の揺らぎに対してIFTTTでは3パターンしか登録できないので問題がありますね。
入力された音声を自然言語処理で近い表現に変換できるといいですね。今後の課題に加えましょう。

2019年11月16日土曜日

瀬戸内医療情報ネットワーク勉強会

瀬戸内医療情報ネットワーク勉強会に参加して研究成果を発表しました。


発表を終えて、その日はホンマチバルで打ち上げです。











料理はどれも彩り豊かでおいしかったです。極めつけはこれです。



2019年11月13日水曜日

11/12

今日は、瀨戸ネット前最後のゼミということで最終調節を行った。
実際に発表の時間を測り、少し長かったため不要な部分を削り、時間内に収めれるように修正した。本番の質問対策のプリントを先生に作っていただいたため、それらにも目を通し、自分たちでもほかの質問が来た場合に備える準備をした。

本番は成功するように頑張りたいと思う。

発話PUSHプログラムのログ

発話PUSHプログラム example.js のログが取れていなかった。ログをとるシェルスクリプトにおいて、ログファイル名を取得すべく forever list コマンドを実行しているが、絶対パス指定をしていなかったのが原因だったのかもしれないと思い、絶対パス指定に修正した。これで様子を見てみることにした。
#!/bin/sh

log_file1=`/usr/local/bin/forever list | grep root | /usr/bin/awk '{print $8}'`
log_file2=$(/usr/bin/printf $log_file1 | /bin/sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g")
cp $log_file2 /home/mtanaka/pill-reminder/log/example_`date "+%Y%m%d"`.log
echo '' > $log_file2
リスト1.発話PUSHプログラムのログ取得シェル/root/log-backup.sh

この修正でもダメだった。crontab -e の設定がまずいのかと思い、以下のようにシェルスクリプトの前に/bin/bashを付けてみた。 
0 1 * * * /bin/bash /root/log-backup.sh
これで様子を見てみる。

この方法でもダメだった。そこで、「Cronの使い方とテクニックと詰まったところ」にしたがって /etc/cron.d/内に下記の内容のファイルlog-backupを作成してcronを再起動した。
# /etc/cron.d/log-backup: crontab entries for the pill-reminder package

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

0 1    * * *   root    /root/log-backup.sh >> /root/log-backup.log 2>> /root/log-backup.err
リスト2./etc/cron.d/log-backup

これで成功した。

2019年11月12日火曜日

プログラムの修正


無応答時の処理変更


  1. 現在、薬を飲んでくださいの呼びかけに対して応答がない場合、LINEへの通知を5回おこなっているが、1回のみとする。
  2. また、薬を飲んでくださいの呼びかけ間隔が1分になっているが5分にする。
上記1の修正はGASの「A3」、上記2の修正はpill-reminder.jsで、いずれもマイナー修正である。

トラブル発生

【現象】


  • 午前5時半ごろ、Teratermでベアボーンサーバに接続したところ、接続できない。
  • ngrokのダッシュボードを確認したところtunnelsが何も表示されていない。
  • 昨夜の午後10時に就寝前のお薬通知は行っている(GoogleカレンダーとGASのログで確認)。

【考えられる原因】


  • 昨日、example.jsのログを取得するスクリプト/root/log-backup.shを修正した。その影響か?
  • ベアボーンサーバが落ちている。

【確認事項】


①ベアボーンサーバーの電源は入っているか(LEDは点灯しているか)?
②入っていなければ電源を入れる。
③入っていたら
・朝のお薬の通知はあったか?
・「昼の薬を飲んだよ」と話しかけたら、「時間外なので無視する」と返答があったか?
④電源を長押しして電源を切り、再度電源を入れて
・「昼の薬を飲んだよ」と話しかけ、「時間外なので無視する」との返答があることを確認する。

【復旧】


午前8時9分にサーバー起動で復旧。ログを見ると前日午後9時17分を最後にログが途絶えている。10時にお薬服用の通知は出しているようなので、その後に何かあったものと思われる。

【原因判明】


電源が抜け落ちていたため。

2019年11月11日月曜日

実験5日目

所感

・結果は昼の薬のみ(応答無)であとは(済)になっていた。
これは家に被験者がいなかったためなので問題はない。
LINEにもそれぞれ通知がきていたので動きに問題はないと思われる。
・GoogleHomeが5回以上催促を始めると10回目まで毎回LINEに通知がきているが10回目だけでいいと思う。
被験者の家族も頻繁にLINEに通知がくるとうっとおしく、通知オフにしてしまう可能性があるのでつ通知は最低限にしたほうがいいのではないだろうか。

実験4日目

所感

結果は全て(済)に変更されLINEにも通知がきており問題なかった。

2019年11月10日日曜日

実験3日目

所感

・結果は朝と夜は(済)に変わっていたが昼と就寝前は(応答無)であった。
どちらも服用者が家にいなかったことが理由で、「昼の薬の時間です」などは2階の自室まで響いてきた。(設置場所は1階)
そのため催促は問題なく行なわれていると思われる。
・服用者が催促を聞き取れていなくても、家族がGoogleHomeの声を聞いていることで薬を飲んだか気にすると思うので、そうしたところもAIスピーカーが催促をするこのシステムのメリットなのかと思った。

2019年11月9日土曜日

実験2日目

所感

・8日の結果は全て(済)になっていた。問題なく服薬が行われたことがわかる。
・被験者が寝ぼけていた時、「OKGoogle薬飲んだよ」などと「夜の」を短縮して呼びかけていた。
もちろんGoogleHomeは理解できないので「わかりません」と返ってくる。

このような呼びかけが異なって上手くいかなかった時、お年寄りは再度、「OKGoogle薬飲んだよ」と呼びかけるかもしれない。
そうするとまた「わかりません」と返されので、GoogleHomeが壊れたのではないかなど勘違いされるケースもでてくるのではないかと思った。

今回は自分が被験者の近くにいたため呼びかけが異なっていることを説明できたが、お年寄りの場合は説明できる家族が近くにいるとは限らない。
そのためもっとGoogleHomeが反応してくれるように言葉を登録しなければいけないと思った。

11月10日追記---
「OKGoogle薬飲んだよ」からカレンダーを書き変えることは困難なので、「OKGoogle薬飲んだよ」と呼びかけがあったときにはその時間帯を読み取って、「もう一度OKGoogle夜の薬飲んだよと言ってください」と再度服用者に呼びかけをするように促せばいいのではないかと思った。

2019年11月8日金曜日

今日から2回目の実証実験を開始します

はじめに


原因は分かりませんがベアボーンの接続が上手くいったので本日から服薬管理システムの実証実験を行っていきます。

GoogleHomeはリビングの机の上に音量最大で設置しています。

 

実験の設定


以下の設定で実験を行う。
  • 処方内容:
    • クラビット細粒10% 100mg(レボフロキサシンとして) 3g 1錠
      用法:1日3回毎食後と就寝前
  • 投与期間:毎日
  • 服用時間:朝=7:00、昼=12:00、夜=19:00、就寝前=22:00

所感


・ 結果としては朝のみ(済)になっていましたが昼から就寝前までは(応答無)でした。
これは被験者が昼は外出、夜は料理中、就寝前の時間は駅まで家族を迎えに行っていたためです。
リビングとキッチンは近いのですが揚げ物を揚げていたため音は一切聞こえていなかったそうです。

薬を催促するタイミングに利用者がGoogleHomeの近くにいるとは限らないため問題であると感じました。

この問題に対しての解決策としては現在はしておりませんがやはりスマホにも通知をし、薬を飲んでから、Googleアシスタントに「薬飲んだよ」と話かけて(服用済)に変更することがいいと思います。
また、現在は5分おきに催促して5回繰り返したら終わりですが、1時間後にもう1度催促してはどうかと思いました。(ただし服薬するのが食後から1時間後でもいいのかは分からない。)

2019年11月6日水曜日

ベアボーンがつながった!実証実験第2弾スタート

ベアボーンサーバをチェックして、もう一度被験者宅に設置したところ、今度はつながった!
ngrokで外部からsshもできるし、ngrokダッシュボードでURLも確認できた。
さらに、時間外に薬を飲んだ旨話しかけるとちゃんと時間外なので無視するとの返答もあった。これで間違いなくすべてがうまく行っている。
昨日つながらなかった原因は不明。明日から1週間実験を行う。

実証実験でベアボーンサーバがネットにつながらない

実証実験のため,2番目の被験者宅にベアボーンサーバを設置し,WiFiルータに接続したが,サーバにpingが通らない。

図1.サーバにpingが通らない

LANケーブルを交換したり,WiFiルータのポートを替えてみたり,ベアボーンサーバの電源のオン/オフをしたり,考えられることはいろいろやってみたがダメだった。あとはベアボーン自体が動いていないか,Wifiルータが特殊な設定になっているかしか考えられない。

図2.Wifiルータ(Aterm WG1800HP2)


諦めてベアボーンを撤収して確認することにした。

2019年11月5日火曜日

本日の作業

11/16(土)の瀬戸内ネットワーク学会で発表するパワーポイントを作成した。
前回のゼミの時にデモンストレーションの動画を撮ったが3分以上あったので撮り直して1分30秒程に短縮して、良いものが出来たと思う。



同時進行で卒業論文も作成した。
AIスピーカーに薬を飲んだことを言うとAIスピーカーが応答するのだがゼミ員の1名だけ声の反応が鈍かった。GoogleHomeの声認識に問題があるのかよく分からなかった。

次回のゼミは、岡山・倉敷の薬局100件にお薬手帳にQRコードが記載されているのかどうかの調査結果をゼミ員で合わせて。統計を取る。
瀬戸内ネットワーク学会に向けて発表の通しも出来たらと思う。

2019年11月3日日曜日

ベアボーンが再起動しない

ベアボーンサーバを
shutdown -r now
で再起動したが,立ち上がらない。

電源長押しで強制的に落とし,再度電源を投入して起動後,再び上記コマンドを入力して再起動した。今度は無事に再起動できた。

長時間起動させたあとで上記コマンドを入力した場合に再起動しないような気がする。あるいは,再起動に時間がかかっているだけなのかもしれない。

2019年11月2日土曜日

発話PUSHプログラム(example.js)がngrokからURLを取得できない

発話PUSHプログラム(example.js)起動時、ngrok.connect関数で下記のエラーが発生した。
Error: connect ECONNREFUSED 127.0.0.1:4041
リスト1.ngrok.connectで発生したエラー

このエラーはこれまでもしばしば遭遇してきたもので、原因はよくわからない。今回は何度再起動してもエラーが解消しないので、パラメタの
region: 'ap'
を削除して再起動すると無事URLが払い出された。
これまでも、ngrokのStatus画面に残っていたURLのゾンビを消すことでこのエラーを解消できることがあったが、今回のは初めてである。

原因がわからないとまた同じような現象に遭遇することがあるかもしれない。

ベアボーンサーバがrebootできない


Teratermからベアボーンサーバに接続して"sudo reboot"したが、再起動できないという現象が発生した。仕方なく電源を強制的に落として再度スイッチを入れた。以前にも"sudo halt"がだめで"sudo shutdown -h now"を使ってシャットダウンしたことがあった。
調べると、再起動は"shutdown -r now"と入力するらしい。 しかし、この記事によれば、"halt"も"reboot"も問題ないとのことだが・・・。タイミングでおかしくなったりするものだろうか?

カレンダーが済にならない


現象


AIスピーカーの「昼の薬を飲んでください」の発話 に対して「昼のお薬飲んだよ」と回答し,AIスピーカーから「カレンダーに記録する」との応答があったにもかかわらず,カレンダーの色は赤のまま(「未」のまま)で,かつ,AIスピーカーが「昼の薬を飲んでください」を言い続ける。

考えられる原因


IFTTTでWebhooksが失敗しているか,GASが正しく機能しなかった。
またまた慌ててログを消したため,調査ができない。次回からログは消すのではなく,必ずバックアップを取ること!