2011年9月25日日曜日

DS18B20とmbedでデジタル温度計を試作(2)


実際の環境で使えるように改良。
・温度センサーを3.5ミニプラグに収めてみた。
ブレッドボードに刺さっている3.5ミニジャックはスイッチサイエンスのオーディオジャック+ピッチ変換基板のセットです。
・GAE以外にもPachubeにデータを送信するようにした。
・PachubeのトリガーでGAEを叩いてメールを送信するようにした。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# gae_ds18b20.py 2011.9.25
import logging
import datetime
from django.utils import simplejson
from google.appengine.api import app_identity
from google.appengine.api import mail
from google.appengine.ext import webapp
from google.appengine.ext.webapp.mail_handlers import InboundMailHandler
from google.appengine.ext.webapp.util import run_wsgi_app
from google.appengine.ext import db
import owner_cfg

class ds18b20(db.Model):
    realTemp = db.FloatProperty()
    created = db.DateTimeProperty(auto_now_add=True)
    @property
    def created_jst(self): # 日本時間(テンプレートエンジン用)
        return self.created + datetime.timedelta(hours=9)

class ApiHandler(webapp.RequestHandler):
    def get(self, realTemp):
        data = ds18b20()
        data.realTemp = float(realTemp);
        data.put()
        self.response.out.write("RealTemp: %s" % realTemp)

class EmailHandler(InboundMailHandler):
    def receive(self, mail_message):
        message = mail.EmailMessage()
        message.sender = "ds18b20@" + app_identity.get_application_id() + ".appspotmail.com"
        message.to = mail_message.sender
        message.subject = u"DS18B20"
        query = ds18b20.all()
        data = query.order("-created").get()
        message.body = u"RealTemp: %f" % data.realTemp
        message.send()

class TriggerHandler(webapp.RequestHandler):
    def post(self, param):
        json_str = self.request.get('body')
        logging.info(json_str)
        obj = simplejson.loads(json_str)
        logging.info(obj)
        message = mail.EmailMessage()
        message.sender = "ds18b20-trigger@" + app_identity.get_application_id() + ".appspotmail.com"
        message.to = owner_cfg.to
        message.bcc = owner_cfg.bcc
        message.subject = u"DS18B20 TRIGGER %s" % param
        message.body = json_str
        message.send()

application = webapp.WSGIApplication([
    ('/ds18b20/api/(.+)', ApiHandler),
    ('/ds18b20/trigger/(.*)', TriggerHandler),
    EmailHandler.mapping(),
], debug=True)

def main():
    run_wsgi_app(application)

if __name__ == '__main__':
    main()

---

0 件のコメント: