Esempio n. 1
0
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
Esempio n. 2
0
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
Esempio n. 3
0
    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]