1階と3階のraspberry piに接続している二酸化炭素濃度計のデータを1分おきにgoogle spread sheetへ記録

自粛生活中にやり始めたスマートホーム化。
仕事部屋(1階)の二酸化炭素濃度とか測ってみたいなと思って、測ってみました。
意外と高かった(1500ppmぐらいはすぐに行く)ので、寝室(3階)の二酸化炭素濃度も計測しています。

#### 前提

- Raspberry piの初期設定が終わっていること
- 二酸化炭素濃度計(MH-Z19C)とジャンパーケーブルが手元にあること
- googleのアカウントを持っていること

https://qiita.com/tosshie/items/d06c9f57ceb340f2d589

#### 事前準備
- 物理的にRaspberry piとMH-Z19Cを接続する (はんだ付け不要、ジャンパーケーブルのメスで接続)
    - ここの絵が一番わかりやすいです
  
https://pypi.org/project/mh-z19/

- ジャンパーケーブルはこんな感じでくっついて送られてきて、こんな感じで裂いてちぎって使います。この写真はメスメス（F-F）のケーブルで、これを使います。

![cable3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/849198/4c98862e-fe39-828f-8d79-66ae899eaddb.png)

- シリアル通信を有効にする
    - 以下のページを参照して実施しています

https://dev.classmethod.jp/articles/raspberry-pi-4-b-mh-z19b-co2/

- raspi-configを実行
    - sudo raspi-config
- 3 Interface Options→P6 Serial Port→
    - Would you like a login sheel to be accessible over serial? -> いいえ
    - Would you like the serial port hardware to be enabled? -> はい
- reboot
    - shutdown -r now



#### データを取得

- ライブラリをインストール（こっちはハイフン）

```
pip3 install mh-z19
```

- 動作を確認(こっちはアンダーバー)

```
sudo python3 -m mh_z19
```

- これで二酸化炭素濃度がとれちゃったはずです。すごくすんなりできてびっくりした記憶があります


#### 1分おきにgoogle spread sheetに記録 (google spread sheet側の設定)

- 基本的に以下のページを参照して実施しました

https://qiita.com/c60evaporator/items/ed2ffde4c87001111c12#python%E3%81%8B%E3%82%89gas%E3%81%AEapi%E3%82%92%E5%8F%A9%E3%81%84%E3%81%A6%E3%82%B9%E3%83%97%E3%83%AC%E3%83%83%E3%83%89%E3%82%B7%E3%83%BC%E3%83%88%E3%81%AB%E3%83%87%E3%83%BC%E3%82%BF%E6%9B%B8%E3%81%8D%E8%BE%BC%E3%81%BF

- google spread sheetで1個ファイルを作成
    - ファイル名は自由に設定、シート名は"test1"とします

- ツール→スクリプトエディタからgoogle apps scriptを開き、以下を貼り付ける
    - 一番上の行にはspreadsheetのIDを入力
        - urlのhttps://docs.google.com/spreadsheets/d/spreadsheetのIDはここです/edit
    - 私は以前のエディタを使用ボタンを押して、旧バージョンのUIでやっています

```
var spreadsheetId = 'スプレッドシートのIDを入れる'

//Postされたデータを受け取り
function doPost(e){
  var data = [      
    e.parameter.Date_Master, // マスター日時     
    e.parameter.Co2_1f, // 1階の二酸化炭素濃度   
    e.parameter.Co2_2f, // 2階の二酸化炭素濃度    
    e.parameter.Co2_3f, // 3階の二酸化炭素濃度
  ];
  //取得したデータをログに記載
  Logger.log(new Date());
  //スプレッドシートへのデータ行書き込み
  addData(e.parameter.DeviceName, data);
  return ContentService.createTextOutput("ok");
}

//スプレッドシートへのデータ行書き込み
function addData(sheetName, data){
  var sheet = SpreadsheetApp.openById(spreadsheetId).getSheetByName(sheetName);
  sheet.appendRow(data);
}

```
- 公開→ウェブアプリケーションとして導入→
    - プロジェクトバージョン: new
    - Execute the app as: Me
    - Who has access to the app: Anyone, even anonymous <<<< ここは変更
- このアプリは確認されていません→詳細を非表示→postAPITest
- current web app URL: ここに出てくるURL(=API key)をメモ（このURLを使ってgoogle spread sheetに書き込みます）

- curlコマンドで実行テスト
    - 以下のコマンドをraspberry piからたたく
    - API keyは↑で出てきたURLです
    - google spread sheetのC列に1000000が入るはずです

```
curl -L https://script.google.com/macros/s/{API key}/exec/exec -F 'DeviceName=test1' -F 'Co2_2f=1000000'
```

#### 1分おきにgoogle spread sheetに記録 (raspberry pi側の設定)

- スクリプトを作成
    - これは1階用。3階用は 'Co2_3f' に値が入るようにする。

```co2.py
import mh_z19
import requests
import datetime
import csv
import pprint

dt_now = datetime.datetime.now()

sanso_node = mh_z19.read()
print(sanso_node)

deviceName = 'test1'
data = {
'DeviceName': deviceName,
'Date_Master': str(dt_now),
'Co2_1f': str(sanso_node['co2']),
'Co2_2f': "",
'Co2_3f': "",
}
url = 'https://script.google.com/macros/s/{API key}/exec'
response = requests.post(url, data=data)
```

- スクリプトを実行して値がgoogle spread sheetに書き込まれることを確認

#### cronの設定

- 以下の設定をします
    - 毎分データを記録

```
* * * * * python /{実際に保存した場所}/co2.py
```

#### 3階用に同じものをもう一つ作る
- 同じ手順を繰り返してください
- google spread sheetには毎分2行ずつ追加されることになります
- 一番簡単にできそうだったので、このやり方にしました



-------

Google Data Portalで見やすく表示できるようにしています

https://qiita.com/tosshie/items/19f87cc86919a0349c0b

https://qiita.com/tosshie/items/3ec7d3efc61c2dddd6ec


2021年3月から始めたスマートホーム化はこちらに一覧化しています（2021年5月時点）

https://qiita.com/tosshie/private/738a85184d6cdaf20b3e