ctwing电信AEP平台对接涂鸦智能云平台python程序源码

项目描述:
将无线倾角传感器、无线电流传感器数据对接到涂鸦云平台。
源代码:

  """    www.daq-iot.com    数采物联网版权所有,非授权禁止商业目的使用 """import base64import hashlibimport hmacimport tracebackimport sslimport paho.mqtt.client as mqttimport jsonimport osimport sslimport timeimport openpyxlimport pandas as pdfrom flask import Flaskfrom flask import requestapp = Flask(__name__)def logintime():    return int(time.time())def datatime():    return int(round(time.time() * 1000))def getdeviceid(m):    file_name = ".\涂鸦云对接目录.xlsx"    file_result = os.path.join(file_name)    wb = openpyxl.load_workbook(file_result)  # 首先获取excel文件生成对象wb 使用openpyxl.load_workbook 方法    lie = pd.DataFrame(pd.read_excel(file_result))    sheet = wb.active    for i in range(1, len(lie) + 2):        cell = sheet.cell(row=i, column=1)        cv = cell.value        if cv ==  m:            dev = sheet.cell(row=i, column=2)            dv = dev.value            return dvdef getdeviceselect(m):    file_name = ".\涂鸦云对接目录.xlsx"    file_result = os.path.join(file_name)    wb = openpyxl.load_workbook(file_result)  # 首先获取excel文件生成对象wb 使用openpyxl.load_workbook 方法    lie = pd.DataFrame(pd.read_excel(file_result))    sheet = wb.active    for i in range(1, len(lie) + 2):        cell = sheet.cell(row=i, column=1)        cv = cell.value        if cv == m:            dev = sheet.cell(row=i, column=3)            dv = dev.value            return dvdef getdevtype(m):    file_name = ".\涂鸦云对接目录.xlsx"    file_result = os.path.join(file_name)    wb = openpyxl.load_workbook(file_result)  # 首先获取excel文件生成对象wb 使用openpyxl.load_workbook 方法    lie = pd.DataFrame(pd.read_excel(file_result))    sheet = wb.active    for i in range(1, len(lie) + 2):        cell = sheet.cell(row=i, column=1)        cv = cell.value        if cv == m:            dev = sheet.cell(row=i, column=4)            dv = dev.value            return dvdef hmac_sha256(key, value):    """    hmacsha256加密    :param key:    :param value: 加密字符串    :return: 加密结果转换为16进制字符串,并大写    """    message = value.encode("utf-8")    return hmac.new(key.encode("utf-8"), message, digestmod=hashlib.sha256).hexdigest()@app.route("/he/data/push/global", methods=['POST'])def he_data_push_global():    try:        print('**** Receive Post Data *****')        data = request.get_data()        data= data.decode("utf-8")        data=data.replace("'",'"')        json_data = json.loads(data)        print(json_data)        IMEI=json_data["IMEI"]        deviceid = getdeviceid(IMEI)        deviceselect = getdeviceselect(IMEI)        if getdevtype(IMEI)=='倾斜':            time1=logintime()            time2=datatime()            # print(json_data)            # data=data[2:-1]            data=json_data["payload"]            # print(data)            data = str(data).replace("'", '"')            data=json.loads(data)            # print(data)            data=data["APPdata"]            # print(str(data))            debs64=base64.b64decode(data)            debs64=str(debs64)[11:-1]            debs64=debs64.replace("{",'{"')            debs64 = debs64.replace(",", '","')            debs64 = debs64.replace(":", '":"')            debs64 = debs64.replace("}", '"}')            debs64=json.loads(debs64)            jiaodu=int(debs64["angle"])/10            dianliang=debs64["BT"]            realdata={            "msgId":"45lkj3551234001",            "time":time2,            "data":{                "jiaodu":{                    "value":int(jiaodu*10),                    "time": time2                },                "dianliang":{                      "value":int(float(dianliang)*10),                      'time': time2                }            }            }        elif getdevtype(IMEI) == '电流':             time1 = logintime()             time2 = datatime()             payload = json_data['payload']['serviceData']             dianliu=payload["IntData2"]             dianlaing=payload["VoltageCur"]             realdata = {                "msgId": "45lkj3551234001",                "time": time2,                "data": {                    "dianliu": {                        "value": dianliu,                        "time": time2                    },                    "dianliang": {                        "value": dianlaing,                        'time': time2                    }                }            }        print(realdata)        TASK_TOPIC = 'tylink/%s/thing/property/report'%deviceid  # 客户端发布消息主题        # print(TASK_TOPIC)        client_id = "tuyalink_%s"%deviceid        username="%s|signMethod=hmacSha256,timestamp=%s,secureMode=1,accessType=1"%(deviceid,time1)        value="deviceId={},timestamp={},secureMode=1,accessType=1".format(deviceid,time1)        password=hmac_sha256(deviceselect,value)        # print(value)        # print(client_id,username,password)        """        client_id是连接到代理。如果client_id的长度为零或为零,则行为为由使用的协议版本定义。如果使用MQTT v3.1.1,        那么一个零长度的客户机id将被发送到代理,代理将被发送为客户端生成一个随机变量。如果使用MQTT v3.1,那么id将是        随机生成的。在这两种情况下,clean_session都必须为True。如果这在这种情况下不会产生ValueError。        注意:一般情况下如果客户端服务端启用两个监听那么客户端client_id 不能与服务器相同,如这里用时间"20190222142358"作为它的id,        如果与服务器id相同,则无法接收到消息        """        client = mqtt.Client(client_id, transport='tcp')        client.username_pw_set(username, password)        client.tls_set(ca_certs=None, certfile=None, keyfile=None, cert_reqs=ssl.CERT_REQUIRED,               tls_version=ssl.PROTOCOL_TLSv1_2, ciphers=None)        client.connect("m1.tuyacn.com", 8883, 60)  # 此处端口默认为1883,通信端口期keepalive默认60        # client.username_pw_set("", "")        # client.connect("127.0.0.1", 1883, 5)        client.loop_start()        """        客户端发布消息        :param message: 消息主体        :return:        """        # publish(主题:Topic; 消息内容)        client.publish(TASK_TOPIC, json.dumps(realdata, ensure_ascii=False))        print(realdata)        print("Successful send message!")        return 'POST SUCCESS'    except:        print(traceback.format_exc())        return repr(Exception)        passif __name__ == '__main__':    app.run(host='0.0.0.0', debug=True, port=8002)

文章知识点与官方知识档案匹配,可进一步学习相关知识

Python入门技能树Web应用开发 Flask100921 人正在系统学习中

发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章