概要
呼び出しブザーと書いているがメールを飛ばすのみ
環境
python3.7.0
raspbian9.4
Raspberry Pi B+
回路
GPIO25及びGNDにそれぞれジャンパーを接続。(ピン名がGPIOxx(で抵抗なしなら)25番以外でもOK)
ジャンパーをリード線に繋げ玄関まで引っ張る。
玄関に引っ張ったリード線にプッシュ式のスイッチをつける。(ものがなかったので選択バサミで代用)
と、プッシュ式のスイッチon/offのみとシンプル構成。
リード線を10m程度曳き回しているので、ノイズ(静電気?)を拾ってそのままだと誤検知をしてしまう。
回路側で処理するのは知識が不足しているのでプログラムで対処している。
プログラム
スイッチのonを検知してメールを飛ばすのみ
スイッチon部分
GPIO.wait_for_edge(pin,GPIO.FALLING)で押された時を検知。
ただし、ノイズを拾ってしまう時があるの。静電気だと一瞬なので0.1秒待ってまだ押されているかを確認している。
確認後visitmail()という関数でメールを飛ばしている。
その後の60秒スリープはブザー連打されると面倒なための処理。
#!/usr/bin/env python3
# coding: utf-8
import time
import RPi.GPIO as GPIO
from mail import visitmail
print("start doorphone moniter")
GPIO.setmode(GPIO.BCM)
pin = 25
GPIO.setup(pin, GPIO.IN,pull_up_down=GPIO.PUD_UP)
try:
while True:
GPIO.wait_for_edge(pin,GPIO.FALLING)
time.sleep(0.1)
if GPIO.input(pin) == GPIO.LOW:
visitmail()
time.sleep(60)
except KeyboardInterrupt:
print("break")
GPIO.cleanup()
メール送信部分
単純にメールを飛ばすのみ。メール送信用パスワードだけ環境変数から読み込み
(mail.py)
#!/usr/bin/env python3
# coding: utf-8
import configparser
from datetime import datetime
from email.mime.text import MIMEText
from smtplib import SMTP
import os
def visitmail():
inifile = configparser.ConfigParser()
inifile.read('./config.ini', 'UTF-8')
ini_host = inifile.get('server', 'host')
ini_port = inifile.get('server', 'port')
ini_from = inifile.get('mail', 'from')
ini_to = inifile.get('mail', 'to')
ini_title = inifile.get('mail', 'title')
with SMTP(host=ini_host, port=ini_port) as smtp:
smtp.starttls()
smtp.login(
user = ini_from,
password = os.environ['MAIL_PASSWORD'],
)
msg = MIMEText(datetime.now().strftime("%Y/%m/%d %H:%M:%S"))
msg['Subject'] = ini_title
msg['To'] = ini_to
msg['From'] = ini_from
smtp.send_message(
from_addr = ini_from,
to_addrs = ini_to.split(','),
msg = msg,
)
(config.ini)
[server]
host = mail.hoge.co.jp
port = 587
[mail]
from = kitamura@hoge.co.jp
to = kitamura@hoge.co.jp,keitaiaddr@ezweb.ne.jp
title = 呼出ブザーが押されました
追記
停止処理でバグを踏んだのでこちらに修正した箇所も入っているソースをのせました。