実際の環境で使えるように改良。
・温度センサーを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 件のコメント:
コメントを投稿