2019年9月6日金曜日

9月4日

勇・谷口

前回はできなかったが、今回はIFTTTでGoogleHomeに『◯◯の薬飲んだよ』と伝えるとWebhookで小山さんのWebAPIに『◯◯』の情報が送られカレンダーの色とタイトルを書き換えることができた。→GoogleHomeとWebhookの連携ができた
Webhookに与えるJSON形式のパラメタは下記の通り

{
    "timing": "朝"
}
リスト1.IFTTTのWebhookに設定するJSONパラメタ

小山さんのWebAPIを修正すると連携できた。
URLのところに何を入れればよいのか迷っていたが小山さんのWebAPIのURLでよかった。

小山

A2を編集してGoogleHomeに話しかけるとGoogleカレンダーの色とタイトルを変更することが出来た。
このサイトによると、doPostで公開したWebAPIでJSON形式で入力データを取得する際は
var parms = JSON.Parse(e.postpat.getDataAsString());
var timing = params.timing;
と書き込む必要があった。
次回は正規表現を用いてスケジュール(のタイトル)を絞り込み、スケジュールの変更ができるかを確認する。

内田

ついにQRコードリーダー作成は終わり、後はレイアウトを整えるだけとなった。
改行の問題もQRクラスを作成することで解決することが出来た。QRクラスは複数回に分割して読み取ったQRコードのデータを一つにまとめるために考案したクラスである。ソースを下記に示す。
    // QRクラス
    class QR {
      constructor(str) {
          this.data = str;
      }
      get() {
        return this.data.split('\r\n');
      }
      append(str) {
          this.data += str;
      }
    }
リスト.1

まず、起動時に、インスタンスを作成する。
var qr = new QR('');
QRコードを読み込んだら、その都度読み取ったデータ(result.text)を追加する。
qr.append(result.text);
読み取ったデータをサーバへ送るときは、getメソッドを使ってお薬手帳の行単位に文字列配列にしたものを取得してAjaxでサーバへ送信する(QRコードで読み込んだデータの改行コードは\r\nであることに注意)。

平松

settimeoutで設定された時刻(ここでは朝の薬を飲む時刻)になったらGoogleHomeにしゃべらせるというNodejsのプログラムをリスト2に示す。Googleカレンダーの時刻はグリニッジ標準時刻で格納されていることに注意。日本時間はグリニッジ標準時刻よりも9時間進んでいる。グリニッジ標準時刻を引数にDate関数を呼び出すとローカルタイム(日本時間)に変換される。

var url = 'http://192.168.11.39:8091/google-home-notifier';
var webclient = require("request");

var data ={
 "drug_notifies": [
  {
   "title": "朝の薬の時間です",
   "description": "クラビット細粒10% 100mg 3錠",
   "id": "t4s1bi3v05bhvcjp41rr89qulg@google.com",
   "location": "5",
   "startTime": "2019-09-04T04:37:14.000Z",
   "endTime": "2019-08-03T01:01:51.000Z",
   "color": "11"
  },
  {
   "title": "夜の薬の時間です",
   "description": "クラビット細粒10% 100mg",
   "id": "v84ho65ceseoja7257s1moj1o8@google.com",
   "location": "0",
   "startTime": "2019-08-03T09:00:00.000Z",
   "endTime": "2019-08-03T09:30:00.000Z",
   "color": "11"
  }
 ],
 "num_reminder": "5",    // 催促回数
 "taiking_status": "0",    // 服用状況 (0:未服用, 1:服用済)
 "status": "0"        // 0=成功, 1:失敗
}
var startTime = new Date(data.drug_notifies[0].startTime);
var now = new Date();
var df = startTime - now;

setTimeout(function() {
    talk(data.drug_notifies[0].title);
  }, 
  df
);

//
// 発話サーバにメッセージを送る
// HTTPリクエスト(GETメソッド)
//
function talk(message){
 console.log(message);
 webclient.get({
  url: url,
  qs: {
   text: message,
  }
 }, function (error, response, body) {
  if(!error) {
   console.log(body);
  } else {
   console.log('Error:' + error);
  }
 });
}
リスト2.タイマを設定して5秒後に発話サーバへ発話リクエストを送る

0 件のコメント:

コメントを投稿