Personal tools
You are here: Home Lights on Zope Raspberry Pi 3で侵入者を発見
« July 2017 »
Su Mo Tu We Th Fr Sa
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31          
Recent entries
Python Anywhere seko 2016-11-19
帯状疱疹 seko 2016-11-18
Chromebook購入 seko 2016-11-03
マカロニさん めざせデータサイエンティスト seko 2016-11-02
脳波計muse 購入 seko 2016-09-04
フェルデンクライスメソッド227回目  seko 2016-08-27
EXCELマクロ タスクが残っていてTypeNameとShell.Applicationを使って起動済みのIEが探せない seko 2016-04-19
pythonでNITE 化学物質総合情報提供システムへアクセス seko 2016-04-19
Raspberry Pi 3で侵入者を発見 seko 2016-04-03
Raspberry Pi 3 OSのインストール seko 2016-04-02
Docker コンテナをexportするpythonスクリプト seko 2016-03-31
Effective Python ―Pythonプログラムを改良する59項目 seko 2016-03-30
確かな力が身につくPython「超」入門 鎌田 正浩 (著) seko 2016-03-29
pythonでバブルソート seko 2016-03-24
Recent trackbacks
『必笑小咄のテクニック』 米原万里 じゅうのblog 2016-04-26
まんが 哲学入門 天竺堂の本棚 2014-02-24
史上最強の哲学入門 東洋の哲人たち 天竺堂の本棚 2014-02-19
「本屋さんで待ち合わせ」三浦しをん 粋な提案 2013-10-01
PythonでCPUの数を調べる。 ヲドリテヒヅル 2012-12-03
ぼくはお金を使わずに生きることにした 紹介 感想 わかめになりたい 2011-12-02
au の HTC EVO がなかなか良かった話 tdtshのブログ 2011-05-25
逆転経済の反響 世界一のバイヤーになってみろ!!坂口孝則の本棚と雑文 2010-12-27
Who Moved My Cheese? 大学生の気ままな書評 おすすめ和書・洋書! 2010-10-30
sekoさんちからPOSTがあったけど・・・ PapaBlog 2010-09-12
Squid(キャッシュサーバーモード)を試してみる PapaBlog 2010-08-25
Apache 2.2のキャッシュ機能を使ってみる PapaBlog 2010-08-08
愛と資本主義 中村うさぎ ばみの乱読日記 と猫雑貨。 2010-08-07
Flowplayerがバージョンアップしてスッキリしていた PapaBlog 2010-06-06
 
Document Actions

Raspberry Pi 3で侵入者を発見

by seko posted at 2016-04-03 16:22 last modified 2016-04-04 21:47

昨日何年かぶりに、秋葉原の秋月電子にいって、焦電型赤外線(人感)センサーモジュールを買ってきました。このセンサーは人の動きを検知します。人がいても動かなければ検出はされません。

http://akizukidenshi.com/img/goods/L/M-09002.jpg

http://akizukidenshi.com/catalog/g/gM-09002/

これをRaspberry Pi 3につないで、部屋に侵入者があったらgmailで知らせるpythonスクリプトを書きました。 15分間に動きを5回以上検知したら、メールを送ります。またWebサーバを立ち上げてあるので、ブラウザからも状況が確認できます。

なお、gmailのセキュリティが強化されたため、このスクリプトを動かすには、「安全性の低いアプリの許可を有効」にする必要がありました。通知専用のgmailアカウントを作ったほうが良さそうです。

https://myaccount.google.com/security?hl=ja

接続方法はこちらの通りです。 http://qiita.com/aryoa/items/72c40f241f868e25eb71

# -*- coding: utf-8 -*-
import RPi.GPIO as GPIO
from time import sleep
#import SimpleHTTPServer
#import SocketServer
import subprocess
import datetime
import os
import codecs
import smtplib
from email.MIMEText import MIMEText
from email.Header import Header
from email.Utils import formatdate

def send(from_addr, to_addr, msg):
    # defalt localhost:25
    s = smtplib.SMTP()
    s.sendmail(from_addr, [to_addr], msg.as_string())
    s.close()

def send_via_gmail(from_addr, to_addr, msg):
    s = smtplib.SMTP('smtp.gmail.com', 587)
    s.ehlo()
    s.starttls()
    s.ehlo()
    s.login('xxxxxx@gmail.com', 'passwd')
    s.sendmail(from_addr, [to_addr], msg.as_string())
    s.close()


def create_message2(from_addr, to_addr, subject, body, encoding):
    # create MIME document 'text/plain; charset="encoding"'
    msg = MIMEText(body, 'plain', encoding)
    msg['Subject'] = Header(subject, encoding)
    msg['From'] = from_addr
    msg['To'] = to_addr
    msg['Date'] = formatdate()
    return msg

def create_indexhtml(mypath,body):
    print mypath , body
    o = codecs.open(os.path.join(mypath,'index.html'), 'w', 'utf-8')
    o.write(body)
    o.close()


### Main ###
from_addr = 'xxxxxx@gmail.com'
to_addr = 'xxxxxx@gmail.com'

threshold = 5 # per 15min
mypath = os.getcwd(

# start httpd
cmd = "python -m SimpleHTTPServer 8000"
proc = subprocess.Popen(cmd,
    shell = True,
    stdin = subprocess.PIPE,
    stdout = subprocess.PIPE,
    stderr = subprocess.PIPE)

GPIO.setmode(GPIO.BCM)
GPIO.setup(18, GPIO.IN)
try:
    cnt = 0
    sendflag = 0
    while True:
        cnt = cnt +  GPIO.input(18)
        print cnt
        if (sendflag == 0) and (cnt > threshold):
            body = nowtime.strftime("%Y/%m/%d %H:%M:%S") + u" 現在、部屋に人がいます"
            msg = create_message2(from_addr, to_addr, u'侵入者あり', body, 'ISO-2022-JP')
            send_via_gmail(from_addr, to_addr, msg)
            create_indexhtml(mypath,body)
            print body
            sendflag = 1
        sleep(1)
        nowtime = datetime.datetime.now()
        if nowtime.minute in [0, 15, 30, 45] and nowtime.second < 3:
            if sendflag == 0:
                body = nowtime.strftime("%Y/%m/%d %H:%M:%S") + u" 現在、誰もいません"
                create_indexhtml(mypath,body)
            cnt = 0
            sendflag = 0
except KeyboardInterrupt:
    pass

GPIO.cleanup()
Category(s)
python
tools
The URL to Trackback this entry is:
http://lightson.dip.jp/blog/seko/3681/tbping
Add comment

You can add a comment by filling out the form below. Plain text formatting.

(Required)
(Required)
(Required)


Powered by Plone, the Open Source Content Management System

This site conforms to the following standards: