窓が開いているかどうかをモニターする仕組みを作ってみました。
窓が開いているか閉まっているかをgoogle spreadsheetに書き込みます。
前提
- raspberry piの初期設定が終わっていること
- 今回はraspberry pi zero WHを使っています
- HDMIの変換コネクタとUSBの変換コネクタを使った以外はraspberry pi 4 model Bと同じやり方で初期設定しています
- 電源とキーボードでコネクタが埋まってしまうのでマウスがなくて不便ですが、TabとSpaceを駆使して入力しました
- 開閉センサーを購入していること
- ブレッドボードがあること
- ジャンパーケーブルがあること(オス-メス * 2本)
開閉センサーは、これを使っています。
マグネットスイッチAMS-10C
https://www.amazon.co.jp/dp/B00NOUSVGS
ケーブル接続
- ラズベリーパイの6番ピン(GND)に黒いケーブルのメスをつなぐ
- ラズベリーパイの12番ピン(GPIO18)に白いケーブルのメスをつなぐ
- ブレッドボードの5eに黒いケーブルのオスをつなぐ
- ブレッドボードの1eに白いケーブルのオスをつなぐ
- センサーのケーブルを1aと5aにつなぐ
※ 下の絵では白のケーブルは紫で書いています
- このページを参照しながらやりました
https://jellyware.jp/kurage/raspi/daiso_sensorlight.html
スクリプト作成
↑のページに記載されているプログラムをコピペして、sensor.pyで保存
※ ↓のプログラムではsleepを1秒に長くしています
sensor.py
import time
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(18,GPIO.IN,pull_up_down=GPIO.PUD_UP)
sw_status = 1
while True:
try:
sw_status = GPIO.input(18)
if sw_status == 0:
print("Close")
else:
print("Open!")
time.sleep(1)
except:
break
GPIO.cleanup()
print("end")
スクリプト実行
- センサーが近づいているとClose、離れているとopen!が出力されるはずです
$ sudo python sensor.py
Close
Close
Close
Close
Close
Open!
Open!
Open!
Open!
Open!
Open!
Open!
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.Mado_1F_north,
e.parameter.Mado_2F_north,
e.parameter.Mado_2F_south,
];
//取得したデータをログに記載
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のB列に1000000が入るはずです
curl -L https://script.google.com/macros/s/{API key}/exec/exec -F 'DeviceName=test1' -F 'Mado_1F_north=1000000'
1分おきにgoogle spread sheetに記録 (raspberry pi側の設定)
- スクリプトを作成
- これは1階北側用。他の場所にするときは、"Mado_1F_north"を変更する。
mado_status.py
import time
import RPi.GPIO as GPIO
import requests
import datetime
import csv
import pprint
dt_now = datetime.datetime.now()
GPIO.setmode(GPIO.BCM)
GPIO.setup(18,GPIO.IN,pull_up_down=GPIO.PUD_UP)
sw_status = 1
sw_status = GPIO.input(18)
if sw_status == 0:
mado_status = "Close"
else:
mado_status = "Open!"
GPIO.cleanup()
print(mado_status)
deviceName = 'test1'
data = {
'DeviceName': deviceName,
'Date_Master': str(dt_now),
'Mado_1F_north': str(mado_status),
}
url = 'https://script.google.com/macros/s/{API key}/exec'
response = requests.post(url, data=data)
- スクリプトを実行して値がgoogle spread sheetに書き込まれることを確認
cronの設定
- 以下の設定をします
- 5分おきにデータを記録
*/5 * * * * python /{実際に保存した場所}/mado_status.py
設置
窓に設置します。
- Open! の時
- Close の時
他の窓の分を作成
- 他の窓の分のセットを作成します
ポータルでの開閉状態の表示もできるようにしています
2021年3月から始めたスマートホーム化はこちらに一覧化しています(2021年7月時点)