寒さが募るこの時期、部屋を開けずにエアコンを常時使用することが日常となってから、部屋の二酸化炭素濃度が気になりだしたので、ラズペリーパイで二酸化炭素を計測してみることにした。
用意したもの
-
- Raspberry Pi4
- 二酸化炭素センサー(MH-Z19B)
- ジャンパーコード
リンク
$ sudo pip3 install mh-z19 $ sudo python3 -m mh_z19 {"co2":575}
上記のようにCO2濃度が出力されれば、二酸化炭素計測モジュールは動作したと確認できます。
PaythonからGASのAPIで二酸化炭素濃度をスプレッドシートに書き込み
GoogleスプレッドシートのGASの設定
-
-
- Googleスプレッドシートを開きます。
- シート名はデバイス名(DeviceName)と同一にします。
- デバイス名が「CO2」の場合はシート名も「CO2」
- スプレッドシートのURLのIDをコピペします。
- 拡張機能 > Apps Script をクリックします。
- 「以前のエディタ」を使用をクリックします。
- 下記コードを書きます。
-
//保存先のシートを取得 var spreadsheetId = 'XXXXXXXXXXXXXXXXXXQ68OcXXXX(手順3のスプレッドシートのID)' //Postされたデータを受け取る function doPost(e){ var data = [ e.parameter.Date_Master, // マスター日時 e.parameter.co2_room, // 部屋の二酸化炭素濃度 ]; //取得したデータをログに記載 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); }
-
- コードを入力後、保存ボタンをクリックします。
- 保存ボタンクリック後、プロジェクト名の入力画面になるので、任意のプロジェクト名を入力して[OK]をクリックします。「二酸化炭素計測」と入力しました。
- メニューから[公開]>[ウェブアプリケーションとして導入]をクリックします。
- [Deploy]をクリックします。
- [current web app URL]: ここに表示されたURL(=API key)をコピーします。(このURLを使ってGoogle Spread Sheetに書き込みします。)
- curlコマンドでGoogle Spread Sheetに書き込みができるか確認します。
-
- ラズペリーパイにSSH接続し、curlコマンドを実行します。
- Google Spread SheetのB列に500が表示されればAPIを使用して書き込みができることを確認したことになります。
-
$ curl -L https://script.google.com/macros/s/[current web app URL]/exec -F 'DeviceName=CO2' -F 'co2_room=500'
-
-
Pythonで二酸化炭素濃度を取得し、Googleスプレッドシートに出力
- Pythonで二酸化炭素濃度を取得するスクリプト(co2.py)を作成
-
import mh_z19 import requests import datetime import csv import pprint dt_now = datetime.datetime.now() co2_concentration = mh_z19.read() print(co2_concentration) deviceName = 'CO2' data = { 'DeviceName': deviceName, 'Date_Master': str(dt_now), 'co2_room': str(co2_concentration['co2']) } url = 'http://script.google.com/macros/s/(current web app URL/exec' response = requests.post(url, data = data)
-
- Python を実行してGoogle Spread Sheetに日時と二酸化炭素濃度が出力されることを確認します。
-
$ sudo python3 co2.py
-
- Googleスプレッドシートに下記実行結果が出力すればOKです。
cron で定期実行
Python でGoogleスプレッドシートに二酸化炭素濃度を出力するスクリプトをcronで定期実行させます。
- crontab -e を実行して定期実行するcronを作成します。
-
sudo crontab -e
-
- 検証用に毎分実行するよう作成します。
-
* * * * * /usr/bin/python3 /[co2.pyが保存されているファイルパス]
-
- co2.py が/home/user_a/co2 のフォルダにある場合のサンプル
-
* * * * * /usr/bin/python3 /home/user_a/co2/co2.py
-
- 1分ごとに実行され二酸化炭素濃度がGoogleスプレッドシートに出力されればOKです。
-
- 希望の間隔で二酸化炭素濃度を計測します。ここでは15分ごとと設定しました。
-
*/15 * * * * /usr/bin/python3 /home/user_a/co2/co2.py
-
- 取得した二酸化炭素濃度のデータをグラフにします。
- A列、B列を選択し、[挿入]>[グラフ]をクリックします。
- 設定後、折れ線グラフで表示されます。
まとめ
- 上記で部屋の二酸化炭素濃度を知ることができ、空気を換気するタイミングを知ることができるようになりました。
- 換気をすると徐々に二酸化炭素濃度が低下している様子が確認できます。
- 寒い冬なにかと室内にこもりがちですが、二酸化炭素濃度を定期的に観測し、換気をすることが良いと思います。
コメント