IoTをつくり、Googleスプレッドシートで家の室温変化のグラフを公開する（後編）

![graph2.jpg](https://qiita-image-store.s3.amazonaws.com/0/12939/6284cf99-b6bf-444a-cb30-3118eccf6f3a.jpeg)

![IMG_2893.JPG](https://qiita-image-store.s3.amazonaws.com/0/12939/67041ce0-f4d6-cbf1-c214-3ba400cea7d0.jpeg)


![Untitled (Network diagram)1.png](https://qiita-image-store.s3.amazonaws.com/0/12939/1e4525a0-9775-dce8-6966-fc11fe8037cd.png)

前回です：

[LittleBitsを使ったIoTをつくり、家の室温変化のグラフをインターネットから見る（前編） - Qiita](http://qiita.com/weed/items/c6b59a26eab1799d6eb3)

追記：

- [WebAPI - Swaggerを使ってインタラクティブなWeb APIドキュメントをつくる - Qiita](http://qiita.com/weed/items/539f6bbade6b75980468)
- [GoogleスプレッドシートのGASを、アクセストークンなどの情報を隠してGitHubにプッシュする - Weed.nagoya｜四日市の画像処理プログラマ](http://www.weed.nagoya/entry/2015/08/11/173109)
- [Googleスプレッドシートからメールを送る　JavaScriptはやめたはずなのに・・・ - Weed.nagoya｜四日市の画像処理プログラマ](http://www.weed.nagoya/entry/2015/08/10/180121)
- [自宅のIoT温度計にツイート通知機能をつけました　便利！感謝！ - Weed.nagoya｜四日市の画像処理プログラマ](http://www.weed.nagoya/entry/2015/08/18/110224)
- [IoT温度計から送られてくるメールに気温グラフを添付する - Weed.nagoya｜四日市の画像処理プログラマ](http://www.weed.nagoya/entry/2015/08/19/174329)
- [Googleスプレッドシートの表示形式をGoogle Apps Scriptで指定する　で、グラフを見やすくする - Weed.nagoya｜四日市の画像処理プログラマ](http://www.weed.nagoya/entry/2015/08/21/150351)

### Googleスプレッドシートから室温取得

Googleスプレッドシートから室温を取得してみましょう。

スプレッドシートを新規作成し、「ツール」→「スクリプトエディタ」→「空のプロジェクト」を選びます。すると、**コード.gs**が表示されます。これを以下のように編集します：

```js:コード.gs
function myFunction() {
  var response = UrlFetchApp.fetch(
    "https://thermometer-cloudbit-p150705.herokuapp.com/"
  );
  response = response.toString();
  response = response.replace("data:", "");
  var json = JSON.parse(response);
  Browser.msgBox(json.percent);
}
```

これを実行すると、スプレッドシートの方にダイアログボックスが表示されます。そのときの室温が表示されています。

あとは「挿入」→「図形描画」でボタンを作り、ボタンにマウスカーソルを合わせてドロップダウンリストから「スクリプトを割り当て」→「myFunction」でOKです。

これで、ボタンを押すと室温が表示されます。

![150708-寝室の温度2_-_Google_スプレッドシート.jpg](https://qiita-image-store.s3.amazonaws.com/0/12939/c9c58254-6dab-6fb6-6e5e-25d7e389b64e.jpeg)

### 新しいデータを新しい行として追記

次に、室温を取得するたびに新しい行が追加されてそこにデータが書き込まれるようにしてみましょう。

```js:コード.gs
function getPercent() {
  // 電圧（室温）を取得する
  var response = UrlFetchApp.fetch(
    "https://thermometer-cloudbit-p150705.herokuapp.com/"
  );
  var json = JSON.parse(response.toString().replace("data:", ""));
  return json.percent;
}  

function insertData() {
  // 新しいデータを追記する
  var temperature = getPercent();
  var datetime = new Date();
  var sheet = SpreadsheetApp.getActiveSheet();
  sheet.appendRow([datetime, temperature]);
}
```

あとは「挿入」→「図形描画」でボタンを作り、ボタンにマウスカーソルを合わせてドロップダウンリストから「スクリプトを割り当て」→「insertData」でOKです。

これで、ボタンを押すと室温が追記されます。

![150708-寝室の温度2_-_Google_スプレッドシート2.jpg](https://qiita-image-store.s3.amazonaws.com/0/12939/30466b75-b7f1-ac4d-de2f-33c5294d7bd3.jpeg)

### グラフの作成と公開

それではこのデータをグラフにしましょう。「挿入」→「グラフ」です。

![150708-寝室の温度2_-_Google_スプレッドシート3.jpg](https://qiita-image-store.s3.amazonaws.com/0/12939/10d21e27-d209-7d74-1616-49318b6f1e44.jpeg)

グラフ右上隅のドロップダウンメニューから「グラフを公開」を選びます。普通に公開すると、こんな感じになります。

![graph1.jpg](https://qiita-image-store.s3.amazonaws.com/0/12939/1bdae848-33d5-0936-f799-ff20037f2685.jpeg)

横向けにするといい感じ。

![graph2.jpg](https://qiita-image-store.s3.amazonaws.com/0/12939/28755eb6-2143-76dd-6444-eb44b2b13048.jpeg)

### スクリプトの定期実行

後はスクリプトを定期実行させるだけです。これは簡単です。まず、スクリプトエディタの時計のアイコンをくりっきします。

![150708-寝室の温度2.jpg](https://qiita-image-store.s3.amazonaws.com/0/12939/975ae50b-0ab0-16e3-d603-f1a37832ee2f.jpeg)

で、こんな感じで設定します。

![150708-寝室の温度21.jpg](https://qiita-image-store.s3.amazonaws.com/0/12939/3282ce59-6430-2810-062b-46b4c1d018d2.jpeg)

### 実物

実物はこちらです：

- [スプレッドシート](https://docs.google.com/spreadsheets/d/15rColLiuu3vMk4yl3Yo2kLIJNWxNeGCE9yQC42RC5g8/edit?usp=sharing)
- [公開したグラフ](https://docs.google.com/spreadsheets/d/15rColLiuu3vMk4yl3Yo2kLIJNWxNeGCE9yQC42RC5g8/pubchart?oid=1582963391&format=image)

できました。完成です。

### 感想

感想としては・・・

|分野|テクノロジー|感想|評価|
|---|----------|---|---|
|ハードウェア|LittleBits|超使いやすい。箱から取り出して5分で動く。感動。|◎|
|Web API 1|Sinatra|HTTP GETで連続的にデータが返ってくるのを処理するには**rest-client**のようなラッパーライブラリではできなくて地道に**net/http**で書かなければならなかった。まあでもRubyはなんとなく書いても動くのが楽しい。|○|
|Web API 2|Heroku|プッシュがけっこう詰まった。ヘルプしていただいたおかげでつくることができた。**rackup**が鉄板の模様。|△|
|データの格納1|JavaScript|文字列からJSONオブジェクトをつくるのに詰まった。これはJavaScriptが融通のきかない性質であるためで、対処を見つけるのが大変だった。|×|
|データの格納2|Google App Script|非同期処理が普通に書けるしリファレンスが充実しているので使いやすかった。|○|
|グラフの公開|Googleスプレッドシート|超お手軽。GUIベースですぐできる。素晴らしい。|◎|

---
ブログやってます：http://weed.nagoya