Raspberry Piで部屋の温度を可視化する

## 目的
- Raspberry Piを使って何かしたい！
- 家の中がどれだけ寒いか知りたい！

## やりたいこと

![やりたいこと](https://qiita-image-store.s3.amazonaws.com/0/225856/c1b50745-2c83-0a2b-75eb-4fc03522a0aa.png)

1. Raspberry Piで部屋の温度を測定する
2. IFTTT経由でGoogleスプレッドシートに温度を記録する
3. 部屋の温度変化をグラフ化する

## 用意したもの
### Raspberry Pi
- Raspberry Pi 3 MODEL B
  - 家電量販店で購入、ケースも一緒に

### 温度センサー
- DHT11 温湿度センサー
<img src="https://qiita-image-store.s3.amazonaws.com/0/225856/f3e6eb94-6d68-1755-c2dc-7cf8cd900135.png" width=50%>

    - OSOYOO(オソヨー) の電子工作キットにあったセンサーを使用
        - http://osoyoo.com/ja/2017/07/18/dht11-temperature-humidity-sensor-module/
        - いろいろなセンサーが欲しかったのでセットを購入
            - https://www.amazon.co.jp/gp/product/B01M6ZFNSS/ 
    - Amazonなどで単品でも売ってるようです

- ジャンパワイヤー
    - Raspberry Piとセンサーをつなぐために使用
    - 今回はセンサーとGPIOを直接つないだので、オス-オスを３本使用した

### Googleスプレッドシート
- https://www.google.com/intl/ja_jp/sheets/about/
- 受信したデータの記録場所として使用
- 可視化も簡単にできるので便利！

### IFTTT
- https://ifttt.com
- レシピを設定し、Raspberry PiとGoogleスプレッドシートをつなぐ

## セットアップ

### 1. 温湿度センサーをセットアップ
<img src="https://qiita-image-store.s3.amazonaws.com/0/225856/b2096554-90c9-04d5-e912-ae26b0e37e46.jpeg" width=50%>

- 下記のドキュメントを参考にセットアップする
    - http://osoyoo.com/ja/2017/04/14/raspberrypidht11/
- 今回はPythonのソースコードを使用
    - **dht11-test.py**の25,26行目のインデントがおかしいので修正する
![修正箇所](https://qiita-image-store.s3.amazonaws.com/0/225856/925adfa4-b087-c03e-420e-776b8ff570b3.png)
- 温度・湿度が測定できた :thumbsup: 

```
$ python dht11-test.py
Temperature =  22 C  Humidity =  35 %
Temperature =  22 C  Humidity =  35 %
Temperature =  0 C  Humidity =  0 %
Temperature =  22 C  Humidity =  36 %
Temperature =  0 C  Humidity =  0 %
Temperature =  22 C  Humidity =  36 %
```
たまに "0 C" や "0 %" となっているのは無視してOK
↓ [OSOYOOのドキュメント](http://osoyoo.com/ja/2017/04/14/raspberrypidht11/)をから抜粋
> ラズパイはDHT11の信号を読み取れる時、マイクロ秒のリアルタイム・タイミングが必要ですが、ラズパイでのOS、Raspbianはリアルタイムシステムではないので、正しくチェックできない時は、データが紛失しました。

### 2. IFTTTのWebhookをセットアップ
- IFTTTのWebhooksを使う
    - https://ifttt.com/maker_webhooks
- 「Documentation」をクリック
![image.png](https://qiita-image-store.s3.amazonaws.com/0/225856/f66ac0bc-eb01-f478-5e56-616fcb9116a7.png)
- アクセスで使うKeyが発行される
![image.png](https://qiita-image-store.s3.amazonaws.com/0/225856/acb3ee0b-1054-d211-0d76-c4fadd04194f.png)
{event}を切り替えることで、IFTTTのトリガーを切り替えられる  
パラメータは３つまで指定できる（value 1,2,3）


### 3. IFTTTのレシピを作成
- 新しいレシピを作る
    - https://ifttt.com/create
- **this**をクリックし、トリガーを設定する
![thisをクリック](https://qiita-image-store.s3.amazonaws.com/0/225856/3484ebb5-4e00-f62d-e69a-1c89d1c7eb99.png)
    - "Webhoocks"を検索しクリック
![Webhoocksを検索](https://qiita-image-store.s3.amazonaws.com/0/225856/d85dbafe-c8d5-54af-8164-fb5c00fb8bab.png)
    - 「Receive a web request」をクリック
    - 「Event Name」に任意の文字列を入力し、「Create trigger」をクリック  
今回は "temperature" と入力  
![トリガーとなるEvent名を設定](https://qiita-image-store.s3.amazonaws.com/0/225856/02031c79-5ef5-f5a3-37dc-6ebb68f0bb2e.png)
- **that**をクリックし、アクションを設定する
![thatをクリック](https://qiita-image-store.s3.amazonaws.com/0/225856/ab9f848b-34c4-5e8a-a76b-40cf9929578a.png)
    - "Google Sheets"を検索しクリック
![Google Sheetsを検索](https://qiita-image-store.s3.amazonaws.com/0/225856/d40d3c84-93ef-1977-a916-af6ce04d6066.png)
    - 「Connect」をクリックし、Googleアカウントの許可を与える
    - 「Add row to spreadsheet」を選択  
時間ごとのデータを蓄積したいのでこちらを使う
![actionを選択](https://qiita-image-store.s3.amazonaws.com/0/225856/008de27e-9822-ccb1-18f6-df5086477c7d.png)
    - actionの情報を追加していく  
    ![Complete action fields](https://qiita-image-store.s3.amazonaws.com/0/225856/7442d237-73e4-a0d9-5b8a-d7bc2eb62440.png)
        - **Spreadsheet name**  
          スプレッドシートの名前を指定 （存在しなければ作成される）
        - **Formatted row**  
          スプレッドシートに出力されるフォーマットを指定  
          IFTTTのWebhookで指定するvalue1,2,3が指定できる
        - **Drive folder path**  
          GoogleDrive内のパスを指定
    - このように設定、問題なければ「Create action」をクリック
    ![設定内容](https://qiita-image-store.s3.amazonaws.com/0/225856/643ce89a-ab89-a44c-2031-2fee8dec42e4.png)
- 設定が完了したら、レシピ名を修正して「Finish」をクリック
![レシピの名前を設定](https://qiita-image-store.s3.amazonaws.com/0/225856/e629093b-e74f-2ff5-70ce-c3fac2807940.png)
これでレシピが完成！
![レシピ完成](https://qiita-image-store.s3.amazonaws.com/0/225856/570c2785-ba02-f7df-440b-db92cbfe5529.png)
- テストしてみる  
Keyを取得したページで簡単にテストができる  
![image.png](https://qiita-image-store.s3.amazonaws.com/0/225856/5a3755a3-53f2-e8b0-c625-9bd846439c0c.png)
    - スプレッドシートを見てみる  
      ファイルができてる :file_folder:   
![GoogleDriveの中身](https://qiita-image-store.s3.amazonaws.com/0/225856/7a5ba5d0-5ddb-8c2b-c2d1-ef6098d70ab6.png)
データも入っている :smile:   
![スプレッドシートの中身](https://qiita-image-store.s3.amazonaws.com/0/225856/44f7e8fc-eabf-45a7-31f3-e126efb9c584.png)
 
### 4. Googleスプレッドシートに温度・湿度を追加

- 測定した温度と湿度の情報を 2で準備したWebhookで指定する  
湿度も取れるので一緒に追加する

|設定項目|設定内容|備考|
|---|---|---|
|**value1**|測定日時|グラフ化しやすいフォーマットで追加|
|**value2**|温度 |
|**value3**|湿度 ||

- 下記のリクエストを参考に、温度・湿度を測定するプログラム内でデータを送る  

```
curl -X POST -H "Content-Type: application/json" -d '{"value1":"2018/01/06 0:03:03","value2":"24","value3":"33"}' https://maker.ifttt.com/trigger/temperature/with/key/{Key}

# {key} : IFTTTのWebhookのKeyを指定
```
- こんな感じで登録される　（１行目は見やすいようにするため追加）
![スプレッドシートのデータ](https://qiita-image-store.s3.amazonaws.com/0/225856/8bdafd9f-2ad9-4352-7e76-4014576fa057.png)

- 登録されたデータを使ってグラフ化する 
スプレッドシートなので簡単にグラフが作れる！これは便利 :thumbsup: 
![温度グラフ](https://qiita-image-store.s3.amazonaws.com/0/225856/c87e6bae-13eb-a9f1-5e1f-34233ccf0509.png)


## プラスαでやりたいこと

- 温度測定処理をサービス化
    - systemdを使ってサービスに追加していく

- IFTTTで他のものと連携できないか調べる
    - 一定温度に達したら通知
    - 寒くなったら自動でエアコンをつける  
     などなど

## 参考文献

- OSOYOO(オソヨー)のチュートリアル
    - http://osoyoo.com/ja/2017/04/14/raspberrypidht11/
- 使用したフリー素材サイト
    - http://icooon-mono.com/