2011年8月12日金曜日

犬の様子を定期的にメールで送信

今回はWEBCAMで犬の様子を監視するUSB 温度計 HID Temperを使って部屋の温度を測るで紹介したWEBCAMで撮った写真、Temperで取得した部屋の温度を定期的にメールで送信する方法をご紹介したいと思います。メールで送信することで外出先でも部屋の様子を定期的に知ることができ、安心です。

今回はPythonを使ってgmail経由で送信したいと思います。

最初に写真撮影を行います。photo.jpgに保存します。

    os.system('fswebcam -p YUYV -S 10  photo.jpg')

次に温度の計測ですが、デバイスが不安定で稀に取得に失敗するようなのでリトライをかけています。10回失敗したら諦めます。


    ret = 1
    count = 0
    output = ''
    while ret != 0:
        ret,output = commands.getstatusoutput('pcsensor')
        count+=1                                                                                                              
        if count > 10:
            ret = 0
            output = 'failed to get temperature from USB device.'
        time.sleep(1)

温度情報はメールのタイトルとBodyにも入れ、写真はメール添付します。


  from_addr = 'from@gmail.com'
  to_addr = 'to@gmail.com'
  title = output
  body = 'Hello, \nThis is hourly report mail\n'
  body += output
  msg = create_message(from_addr, to_addr, title, body, 'utf-8','photo.jpg')
  send_gmail(from_addr, to_addr, msg)


メッセージ作成処理は下記のようにやりました。

 def create_message(from_addr, to_addr, subject, body, encoding, image_path):                                                  
      msg = MIMEMultipart()
      msg['Subject'] = Header(subject, encoding)
      msg['From'] = from_addr
      msg['To'] = to_addr
      msg['Date'] = formatdate() 
      body = MIMEText(body, 'plain', encoding)
      msg.attach(body) 
      fp = file('%s' % image_path, 'rb')
      img = MIMEImage(fp.read(), 'jpeg', filename='%s' % image_path)
      img.add_header("Content-Type", "attachment", filename='%s' % image_path) 
      fp.close()
      msg.attach(img)
      return msg

一応gmail送信部分も。

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

以上でスクリプトは完成です。あとはcronに登録して定期的に実行をしてください。僕は9時〜18時の間に1時間おきに送信しています。
スマートフォンをお使いであればgmailを使うと簡単に確認できます。




ご覧いただきありがとうございます。よろしければワンクリックお願いします。
 ↓
  人気ブログランキングへ

0 件のコメント:

コメントを投稿