def index(): # 设置微信公众号自定义服务器时,微信会访问此URL,并附带签名等信息参数,此时应根据参数验证token是否正确 # 如果验证正确,将附带参数中的echostr返回给微信服务器即可。 # 也可以不做验证,直接返回echostr。 if request.method == 'GET': query = request.args echostr = query.get('echostr', '') signature = query.get('signature', '') timestamp = query.get('timestamp', '') nonce = query.get('nonce', '') s = [token, timestamp, nonce] s.sort() s = ''.join(s) if hashlib.sha1(s).hexdigest() == signature : return echostr else: return "Inavaliable token." elif request.method == 'PUT': return abort(404) else: # 微信消息是以POST方式,发送给服务器的 # 信息以xml字符串的方式存储在request.data中 # 信息格式见 http://mp.weixin.qq.com/wiki/10/79502792eef98d6e0c6e1739da387346.html xml_recv = ElementTree.fromstring(request.data) # ToUserName 即 公共号的openid ToUserName = xml_recv.find('ToUserName').text # FromUserName 即 发送者的openid FromUserName = xml_recv.find('FromUserName').text # 信息发送时间 CreateTime = str(int(time.time())) # 信息原始内容 orgContent = xml_recv.find('Content').text # 解析消息,并识别出其中的指令 if orgContent == u'关闭LED' or orgContent == u'0': breath.set(0) Content = u'关闭LED' elif orgContent == u'打开LED' or orgContent == u'1': breath.set(100) Content = u'打开LED' else: Content = u'''你好,我是小派,一个运行在树莓派上的智能机器人。 我目前只会执行以下任务: 0. 关闭LED 1. 打开LED ''' # 生产消息返回给发送者 rsp = '''<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[%s]]></Content> </xml>''' % (FromUserName, ToUserName, CreateTime, Content) return rsp
def LED(): if request.method == 'GET': return "Hello LelylanLED!" elif request.method == 'PUT': # 解析lelylan发过来的参数 properties = request.json['properties'] id0 = properties[0]['id'] value0 = properties[0]['value'] # LED on/off 的ID if id0 == ID_LED_ONOFF: # 根据value值判断LED动作 if value0 == VAL_LED_ON: breath.set(100) elif value0 == VAL_LED_OFF: breath.set(0) else: abort(404) else: abort(404) return value0
def put(self, led_id): if led_id != 0: abort(404) # 获取操作数据value, value = request.form['value'] # 校验指令,如果指令正常则驱动LED,并保存状态 if value == u'on': led0_st[0] = value breath.set(100) elif value == u'off': led0_st[0] = value breath.set(0) else: try: led0_st[0] = int(value) if led0_st[0] < 0: led0_st[0] = 0 elif led0_st[0] > 100: led0_st[0] = 100 breath.set(led0_st[0]) except ValueError: return "Unavailable led status %r" % value return led0_st[0]