고통 스러움을 너무 많이 마시는 것을 GoogleHome에 확인하십시오.

소개



Google Home, IFTTT, Google 스프레드시트를 사용하여 자체 음성 명령을 사용하여 로그를 기록합니다.
를 읽고 있고, 통증과 같은 통복적인 약(하루 n회까지, 전회부터 n시간 이상 경과 후 복용 가능)의 체크에 사용할 수 없는 것이라고 작성해 보았다.

Google 스프레드시트에 행 추가 IFTTT 레시피



「this」도 「that」도 평소의 순서

Google 스프레드시트 콘텐츠




항상 날짜 정보는 마지막 행에 일단 기록됩니다.

복용 체크



addDate.js
function addDate() {
  setDate(1, "yyyy/M/d");
  setDate(2, "H:m:s");
  checkDate();
}

날짜와 시간을 셀에 설정한 후 checkDate()를 호출하도록 추가했습니다.

checkDate.js
function checkDate() {
// 宣言
  var lineUrl = "https://maker.ifttt.com/trigger/drug_log/with/key/xxxxxxxx?value1=";
  var googleurl = "https://xxxxxxxx.ngrok.io/google-home-notifier";
  var ansText;

  searchDate(dateRows);//当日と同一日セルの取得

  switch (dateRows.length) {
    case(1):
      ansText = "服用可能です(本日一回目)"
      break

    case(2):
      var dates2 = sheet.getRange(1, 2, lastrow).getValues()
      var m1 = Moment.moment(dates2[dates2.length - 2][0])
      var m2 = Moment.moment(dates2[dates2.length - 1][0])
      var m3 = m2.diff(m1, 'h', false)
      var m4 = 4 - m3

      if (m3 < 4) {
        // 一定時間以上経過していない場合はrowを削除
        sheet.deleteRow(lastrow)
        ansText ="四時間以上間を開けて服用しましょう。あと" + m4 + "時間経過後服用できます"
      } else {
        ansText ="服用可能です(本日二回目)"
      }
      break

    case(3):
      ansText = "服用は一日二回までです。"
      break

    default:
      sheet.deleteRow(lastrow)
      ansText = "服用は一日二回までです。"
      break
  }

  // LINE 
  UrlFetchApp.fetch(lineUrl + ansText);
\
  // GoogleHome
  var payload =
    {
       "text" : ansText
     };
  var options =
    {
      "method" : "post",
      "payload" : payload
    };
  var response = UrlFetchApp.fetch(googleurl, options);

}
  • 당일 행 번호 배열이 하나뿐이면 첫 번째 메시지
  • 2개라면 1회째와 2회째의 시간차를 구(시 이하 잘라)
  • 4 시간 미만이면 경고 메시지, 마지막 줄 삭제
  • 4 시간 이상이면 두 번째 메시지

  • 세 번째 경우 오류 메시지
  • 4번째 이상이라면 에러 메세지, 최종행을 삭제
    판정 및 행 조작을 수행 한 후 LINE Notifify 및 google-home-notifier로 보냅니다.

    searchDate.js
    function searchDate(dateRows) {
      var tDate = formatDate(new Date(), "yyyy/M/d");
      lastrow = sheet.getLastRow();
      var dates = sheet.getRange(1, 1, lastrow).getDisplayValues(); 
    
      for(var lr = lastrow; lr >= 1; lr--){
       if(dates[lr - 1] == tDate){
          dateRows.push(lr);
        }
     }
    
      return dateRows;
    }
    

    오늘 날짜를 검색하고 날짜 행과 일치하는 행 번호를 배열에 추가합니다.
    셀에 표시하고 있는 내용을 취득하기 위해서 getValues() 대신 getDisplayValues()

    이번에 빠진 곳


  • MakerChannel에 건네주는 것은 LINE Notifify의 키가 아니고 Webhooks의 키
  • google-home-notifier의 example.js를 사용한다면 말하고 싶은 문자는 "payload": { "text": "hokehoge"}와 중첩됩니다 클래스 UrlFetchApp

  • 미래를 향해


  • 소스를 리팩토링하고 싶습니다
  • Google Home에 말을 걸면 Google Home에 회신하고 Google Assistant에 입력하면 LINE에 회신으로 나누고 싶습니다

  • 결론



    최근 IFTTT에서 Google 스프레드 시트 행을 추가하는 대신 셀 값을 덮어 쓰고 업데이트 할 수있는 기능이 추가되었습니다. 셀 값으로 검색하고 결과를 반환하여 셀 값을 지울 수 있습니다.

    좋은 웹페이지 즐겨찾기