排尿・排便カウンターを作った話

どうも。月曜日から検査入院中の僕です。

f:id:akulog:20140513205903j:plain

朝から大量に採血されて恐縮です。

更新履歴

  • 2014/05/14 排泄区分に「導尿」を追加。細かい修正。要スクリプトの更新(コピペ上書きでOK)
  • 2014/05/14 処理後にクリアせずに履歴を残す様に修正

f:id:akulog:20140514192320p:plain

入院ライフハック

さて、入院ライフを少しでも楽に?もしくは退屈凌ぎになんかプログラム書くか的なところで、毎朝看護師さんに起こされて…

ときふじさん、昨日のおトイレ、何回しました?

と質問されるワケで、これはイチイチ排泄回数なんてカウントしてないぜベイビーということでGoogleドライブのフォームとGoogle Apps Scriptを使って「排尿・排便カウンター」というものを作ってみました。

iPhoneSafariから見たイメージ

f:id:akulog:20140513210304j:plain

使い方は「排泄区分」を「排尿」もしくは「排便」から選択(2014/05/14 排泄区分に「導尿」を追加しました!)してコメントがあれば適当に入力して送信するだけ。あとは決められた時間になると自動的に集計して以下の様なメールを送ります。

f:id:akulog:20140513220617p:plain

Googleドライブのフォームを作ろう

f:id:akulog:20140513210803p:plain

f:id:akulog:20140513210953p:plain

フィールド「排泄区分」の作成

f:id:akulog:20140514171937p:plain

フィールド「コメント」の作成

※ なくてもOK(というかスクリプトでこのフィールドを使っていないwwww) フィールドの追加を行う

f:id:akulog:20140513212345p:plain

とりあえず以下の通りとする。(いらないんだけど…)

f:id:akulog:20140513212016p:plain

データの保存先をスプレッドシートにしちゃう

f:id:akulog:20140513212617p:plain

なにも考えず「作成」する

f:id:akulog:20140513212838p:plain

するとこんなヤツが作成される。

f:id:akulog:20140513212934p:plain

中を開くと…

f:id:akulog:20140513212946p:plain

フォームから収集されるデータがこのスプレッドシートに溜まっていくということ。

フォームのURLは?

f:id:akulog:20140513213431p:plain

f:id:akulog:20140513213439p:plain

スプレッドシートスクリプトを仕込む

先ほど保存先として作成したコイツを開く。

f:id:akulog:20140513212934p:plain

ツール→スクリプトエディタをクリックして空のスクリプトを作成します。

f:id:akulog:20140513213906p:plain

おもむろに、そしてがむしゃらに以下のコードをコピペしてください。そしておもむろにMacなあなたはCmd + Sを、そしてWindowsなあなたはCtrl + Sをして保存しましょう。(ついでにスクリプトの名前も適当に…)

function reportExcretion() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var rows = sheet.getDataRange();
  var numRows = rows.getNumRows();
  var values = rows.getValues();
  
  var urination = 0;       // 排尿回数
  var defecation = 0;      // 排便回数
  var catheterization = 0; // 導尿回数
  
  var lastRowCount = 1;    // 前回処理した行
  // 前回の続きの行数をセット
  if(sheet.getRange("D1").getValue() != ""){
    lastRowCount = parseFloat(sheet.getRange("D1").getValue());
  }  
  
  // 排泄区分でカウントアップ(集計)
  for (i = lastRowCount; i <= values.length; i++){
    if(typeof values[i] !== "undefined"){
      switch(values[i][1]){
        case "排尿": urination++;break;
        case "排便": defecation++;break;
        case "導尿": catheterization++;break;
        default:break;
      }
    }
  }
  // 行を記録
  sheet.getRange("D1").setValue(values.length);
  
  // 1桁の数字を0埋めで2桁にする
  var toDoubleDigits = function(num) {
    num += "";
    if (num.length === 1) {
      num = "0" + num;
    }
    return num;     
  };

  // 集計結果が0以上ならメール通知  
  if(urination + defecation + catheterization > 0){
    var thisDate = new Date();
    var thisYYYY = thisDate.getFullYear();
    var thisMM = toDoubleDigits(thisDate.getMonth()+1);
    var thisDD = toDoubleDigits(thisDate.getDate());
    var thisHH = toDoubleDigits(thisDate.getHours());
    var thisMin = toDoubleDigits(thisDate.getMinutes());
    var thisSS = toDoubleDigits(thisDate.getSeconds());  
    var thisDateStr = thisYYYY.toString() + "/" + thisMM.toString() + "/" + thisDD.toString() + " " + thisHH.toString() + ":" + thisMin.toString() + ":" + thisSS.toString();
    var recipient = Session.getActiveUser().getEmail();
    var subject = "排尿・排便カウンター " + thisDateStr;
    var body = "排尿:" + urination + "\n排便:" + defecation + "\n導尿:" + catheterization;
    MailApp.sendEmail(recipient, subject, body);
    Logger.log("排尿:" + urination);
    Logger.log("排便:" + defecation);
    Logger.log("導尿:" + catheterization);
    Logger.log(thisDateStr);
  }
  
};
承認してやりましょう(初回実行のみ)

初回だけ実行承認処理が必要です。やっちゃってください。

f:id:akulog:20140513214706p:plain

すると承認確認画面が出るので認証しちゃいましょう。

f:id:akulog:20140513214902p:plain

f:id:akulog:20140513214911p:plain

タスクを仕込む

大体、看護師さんが起こしに来るのが僕の場合朝の7:00〜8:00くらいなのでその1時間前くらいに前日の排尿・排便を集計してくれたらいいので…

f:id:akulog:20140513215756p:plain

f:id:akulog:20140513215806p:plain

f:id:akulog:20140513215815p:plain

それではお楽しみください

トイレで用を足しながらおもむろにフォームのURLから入力していきましょう!!

Google Apps Scriptクイックリファレンス

Google Apps Scriptクイックリファレンス

© 2013 ときさんブログ all rights reserved.