挙手は控えめに

主に趣味のことを気の向くまま書いています。

Google Homeで子供のトイレ回数をカウントする

※2019/3/24 文言修正

 

久しぶりの更新。。。

 

とある理由で子供のトイレ回数を把握する必要があったため、

家にあるGoogle Home Miniを利用して、Googleドライブのスプレッドシート

トイレ回数を日毎に書き込んでくれる仕組みを作ってみました。

 

仕組みはこんな感じ。↓

  1. Google Homeに「トイレしたよ」的なことを話しかけ、IFTTT経由でGoogleスプレッドシートのカウント用シートに記録
  2. 毎晩、カウント用シートから集計し記録用シートへ書き込み

ではやってみましょう。

 

 

0.Googleスプレッドシートの準備

今回は、以下の2つのスプレッドシートを利用します。

  • カウント用シート...Google Homeからの都度書き込み用。作業用。
  • 記録用シート...カウント用シートの集計用。こっちが本丸。

というわけで、スプレッドシートを2つ作ります。

f:id:ne-go_00:20180924172159p:plain

カウント用は何もしません。作りっぱなし。

記録用は以下のような感じで、日毎のトイレ回数が分かるようにしました。

f:id:ne-go_00:20200324155731p:plain

 

1.Google Home→IFTTT→Googleスプレッドシートの連携作業

まず、Google Homeに話しかけたら、

Googleスプレッドシートのカウント用シートに書き込みがされるようにします。

これはIFTTTで設定。

なお、私は「アンパンマン」と話しかけると書き込まれるようにしました。

子供が遊ぶ可能性もあるので、このあたりはお好みでどうぞ。

 

thisにはGoogle AssistantSay a simple phraseを選択し、以下のように設定。

f:id:ne-go_00:20180924173943p:plain

 

thatにはGoogle SheetsAdd row to spreadsheetを選択し、以下のように設定。

カウント用のスプレッドシートを設定し、「おしっこ」と書き込まれるようにしました。

フォルダパスは、IFTTTフォルダに作成したので指定なし。

f:id:ne-go_00:20180929133856p:plain

以上で、IFTTTでの設定が完了。

 

2.Googleスプレッドシートでの集計作業

ここでは、カウント用シートに書き込まれた「おしっこ」の数を集計し、

記録用シートに日毎に書き込むためのスクリプトを作成します。

Google Driveにて記録用シートを開き、メニューの

ツールスクリプトエディタ で以下のようなスクリプトを作成しました。

 


function main(){
  //カウント用・記録用スプレッドシートの取得
  var count_spreadsheet =  SpreadsheetApp.openById('カウント用スプレッドシートのID');
  var record_spreadsheet = SpreadsheetApp.openById('記録用スプレッドシートのID');
  
  //カウント用・記録用シートの取得
  var count_sheet = count_spreadsheet.getSheetByName('カウント用シート名');
  var record_sheet = record_spreadsheet.getSheetByName('記録用シート名');
  
  //カウント対象の単語の設定
  var sho = "おしっこ";
  
  //単語の数をカウント
  var sho_count = ToiletCount(count_sheet,sho);
  
  //カウントした数を記録
  RecordToSheet(record_sheet,3,sho_count);
  
  //カウント用シートをクリア
  ClearSheet(count_sheet);
}


//sheet内にあるstringの数を返す関数
function ToiletCount(sheet,string) {
  var count = 0;  
  
  //カウント
  for(var c=1; c < 15; c++){
      var string_kari = sheet.getRange(1,c).getValue();
    if(string_kari == string){
        count = count + 1;
    }
  }
  return count;
}

//sheetの今日の日付の行のcolumnに、countを入れる関数
function RecordToSheet(sheet,column,count){
  
  //今日の日付を取得
  var today = Utilities.formatDate(new Date(), 'Asia/Tokyo', "yyyy/MM/d");
  
  //最終行の位置および最終行の日付を取得
  var lastrow = sheet.getLastRow();
  var lastdate = sheet.getRange(lastrow, 2).getValue();
  var lastday = Utilities.formatDate(lastdate, 'Asia/Tokyo', "yyyy/MM/d");
  
  //最終行の日付が空白なら今日の日付をセット
  //最終行が空白でなく、かつ日付が今日じゃないなら次の行に今日の日付をセット
  if (lastday == ""){
    sheet.getRange(lastrow, 2).setValue(today);
  }else if (lastday != today){
    lastrow = lastrow +1;
    sheet.getRange(lastrow, 2).setValue(today);
  }
  
  sheet.getRange(lastrow,column).setValue(count);
}

//sheetをクリアする関数
function ClearSheet(sheet){
  sheet.clear();
}

 

スクリプトを作ったら、メニューの

編集現在のプロジェクトのトリガー にて

以下のように設定。

毎日深夜に集計作業が行われるようにしました。

 

f:id:ne-go_00:20180929141616p:plain

 

以上で作業は完了です。お疲れさまでした。

カウント用シートができてしまうのがちょっと微妙な感じ。。。

何かいいやり方はないものか。。。

あと初めてソースコードをブログで載せてみましたが、

フォントとか微妙すぎるので気が向いたら直します。

 

参考にさせて頂いたページ

技術ブログの「ソースコード」表示を効果的にカスタマイズする方法 | maesblog

Google Homeに話しかけて娘のおむつ交換を記録する