Personal tools
You are here: Home Lights on Zope Raspberry Pi 3で侵入者を発見
« November 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    
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
シャネルバッグコピー シャネルバッグコピー 2017-11-14
ブランドコピー ブランドコピー 2017-11-14
スーパーコピー代引き スーパーコピー代引き 2017-11-11
ウブロスーパーコピー ウブロスーパーコピー 2017-11-11
スーパーコピーブランド激安通販専門店シャネルバッグコピー品 スーパーコピーブランド激安通販専門店シャネルバッグコピー品 2017-11-08
ブランド財布コピー ブランド財布コピー 2017-11-07
ルイヴィトンダミエバッグコピー ルイヴィトンダミエバッグコピー 2017-11-07
ブランドスーパーコピー ブランドスーパーコピー 2017-11-06
ルイヴィトン 財布カンコク コピー ルイヴィトン 財布カンコク コピー 2017-11-05
エルメスバーキンバッグ エルメスバーキンバッグ 2017-11-01
ジェイコブ時計 ジェイコブ時計 2017-10-31
ブランドコピー激安販売通販 ブランドコピー激安販売通販 2017-10-30
偽ブランド時計 偽ブランド時計 2017-10-30
シャネル時計 シャネル時計 2017-10-20
 
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: