python连接mysql模拟数据

本文详细解读了设备数据流1ACFFC1D的结构,包括报头、设备类型、ID、数据类型、命令字和参数处理,最后将其转换为数据库记录并插入到deviceinfo_Translation表中。涉及的技术包括hex操作、校验字计算和数据库操作。
摘要由CSDN通过智能技术生成
Header设备类型设备ID数据类型命令字参数长度参数校验字Tail
1ACFFC1D01FFFFFFFFFFFFFFFFFFFFFFFF04010101FF2EE9C8FD

data_DealWith.py

strs="1ACFFC1D 01 FFFFFFFFFFFFFFFFFFFFFFFF 04 01 01 01 07 2EE9C8FD"   #模拟完全数据流
# strs="1ACFFC1D 01 FFFFFFFFFFFFFFFFFFFFFFFE 04  02 2EE9C8FD"  #模拟命令字、参数长度、参数缺失
strs_list=strs.replace(" ","")

header=strs_list[0:8]                      #报头
deviceType=strs_list[8:10]                  #设备类型
deviceID=strs_list[10:34]                   #设备ID
dataType = strs_list[34:36]                 # 数据类型

if(len(strs_list[36:])==10):                #判断数据帧的参数长度、参数字段是否存在,判断依据:数据类型后字符串长度是否仅仅满足校验字和报尾的长度。

    command = 'FF'  # 命令字
    parameterLength = ''  # 参数长度
    parameters = ''
else:                                       #命令字、参数长度、参数都是从前往后截取
    command=strs_list[36:38]                    #命令字
    parameterLength=strs_list[38:40]            #参数长度
    parameters=strs_list[40:42]                 #参数

checkWord=strs_list[-10:-8]                 #校验字 从后往前截取,先将设备类型、设备ID、数据类型、命令字、参数长度、参数累加和累加和的低八位(有问题)
checkWord_first=str(hex(int(deviceType,16)+int(deviceID, 16)+int(dataType,16)+int(command,16)+int(parameterLength if parameterLength!="" else "0",16)+int(parameters if parameters!="" else "0",16)))
checkWord_final=checkWord_first[-2:]           #校验字计算为2个16进制=1个字节

tail=strs_list[-8:]                         #报尾
if(checkWord_final==checkWord):             #判断接收到的校验字checkWord是否等于计算后的校验字checkWord_final
    # 数据翻译
    # 设备类型
    deviceType_list = {'01': '应急灯具', '02': '逃生标识', '03': '烟雾报警器', '55': '网关设备'}
    deviceType = deviceType_list.get(deviceType)

    # 命令字
    parameters_list=""
    if dataType == '03':
        if command == '01':
            parameters_list = {'0': '停止测试', '1': '开始测试'}
        elif command == '02':
            parameters_list = {'0': '关闭', '1': '打开','2':'闪烁'}
        elif command == '05':
            parameters_list = {'0': '停止功能测试', '1': '开始功能测试'}
        elif command == '09':
            parameters_list = {'00': '充电亮灯', '01': '充电灭灯'}
    elif dataType == '04':
        if command == '01':
            parameters_list = {'0': '停止测试', '1': '测试开始','2':'电池非充满状态,现在不能进行测试'}
        elif command == '02':
            parameters_list = {'1': '打开','2':'闪烁'}
        elif command == '05':
            parameters_list = {'0': '测试停止', '1': '测试中'}
        elif command == '08':
            parameters_list = {'0': '断电恢复,但条件不允许进入任何测试', '1': '断电恢复,条件允许进入功能检测', '2': '断电恢复,条件允许进入寿命检测'}
        elif command == '09':
            parameters_list = {'00': '充电亮灯', '01': '充电灭灯'}

    parameters=parameters_list.get(parameters.lstrip("0"))

    # 命令字或状态帧
    command_list = ''
    if (dataType == '03'):
        command_list = {'01': '寿命测试开始开关', '02': '应急电源开关', '03': '应急灯具闪烁测试', '04': '查询应急设备状态', '05': '开始功能测试',
                        '09': '充电时亮灯或灭灯'}
    elif dataType == '04':
        command_list = {'01': '寿命测试状态', '02': '应急电源开关状态', '03': '应急灯具闪烁测试状态', '04': '应急电源状态', '05': '功能测试状态',
                        '06': '初始ZigBee设备', '07': '检测过程中发现断电,设备退出检测', '08': '断电恢复', '09': '充电时亮灯或灭灯'}
    command = command_list.get(command)

    # 数据类型
    dataType_list = {'01': '登录帧', '02': 'heartbeat帧', '03': '命令字', '04': '状态帧'}
    dataType = dataType_list.get(dataType)
else:
    exit()

mysqlConnect.py(电脑里有mysql,所以暂时用mysql模拟)

#!/usr/bin/python
# -*- coding: UTF-8 -*-
from mysqlTest.data_DealWith import *
import MySQLdb
# 打开数据库连接
db = MySQLdb.connect("localhost", "root", "11111", "zzw", charset='utf8')

# 使用cursor()方法获取操作游标
cursor = db.cursor()

# SQL 插入语句
sql = """INSERT INTO deviceinfo_Translation(Header,Device_Type, Device_ID, Data_Type, Command,Parameter_length,Parameters,Check_word,Tail)
         VALUES ('"""+header+"""','"""+deviceType+"""','"""+deviceID+"""','"""+dataType+"""','"""+command+"""','"""+parameterLength+"""','"""+parameters+"""','"""+checkWord+"""','"""+tail+"""')"""
try:
   # 执行sql语句
   print(sql)
   cursor.execute(sql)
   # 提交到数据库执行
   db.commit()
except:
   # Rollback in case there is any error
   msg=db.rollback()

# 关闭数据库连接
db.close()

经过翻译后的数据插入:

在这里插入图片描述

未经翻译后的数据插入:

在这里插入图片描述

数据库的表模拟设计

字段名字段类型备注
Headervarchar(10)报头
Device_Typevarchar(20)设备类型
Device_IDvarchar(30)设备ID
Data_Typevarchar(10)数据类型
Commandvarchar(10)命令字
Parameter_Lengthvarchar(4)参数长度
Parametersvarchar(100)参数
Check_Wordvarchar(4)校验字
Tailvarchar(10)报尾
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值