1階と3階のraspberry piに接続している二酸化炭素濃度計のデータを1分おきにgoogle spread sheetへ記録
自粛生活中にやり始めたスマートホーム化。
仕事部屋(1階)の二酸化炭素濃度とか測ってみたいなと思って、測ってみました。
意外と高かった(1500ppmぐらいはすぐに行く)ので、寝室(3階)の二酸化炭素濃度も計測しています。
前提
- Raspberry piの初期設定が終わっていること
- 二酸化炭素濃度計(MH-Z19C)とジャンパーケーブルが手元にあること
- googleのアカウントを持っていること
事前準備
- 物理的にRaspberry piとMH-Z19Cを接続する (はんだ付け不要、ジャンパーケーブルのメスで接続)
- ここの絵が一番わかりやすいです
- ジャンパーケーブルはこんな感じでくっついて送られてきて、こんな感じで裂いてちぎって使います。この写真はメスメス(F-F)のケーブルで、これを使います。
- シリアル通信を有効にする
- 以下のページを参照して実施しています
- 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側の設定)
- 基本的に以下のページを参照して実施しました
-
google spread sheetで1個ファイルを作成
- ファイル名は自由に設定、シート名は"test1"とします
-
ツール→スクリプトエディタからgoogle apps scriptを開き、以下を貼り付ける
- 一番上の行にはspreadsheetのIDを入力
- 私は以前のエディタを使用ボタンを押して、旧バージョンの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で見やすく表示できるようにしています
2021年3月から始めたスマートホーム化はこちらに一覧化しています(2021年5月時点)
Author And Source
この問題について(1階と3階のraspberry piに接続している二酸化炭素濃度計のデータを1分おきにgoogle spread sheetへ記録), 我々は、より多くの情報をここで見つけました https://qiita.com/tosshie/items/fe79368c6ef75df3736c著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .