Ejemplo n.º 1
0
 def obd_drive_start(self, driving_order, start_time):
     """OBD行程开始信息,OBD的f3id为a0
     行程序号(8)+开始时间(8)
     """
     driving_msg = "a00901" + jctool.to_hex(
         driving_order, 8) + jctool.to_hex(start_time, 8)
     return driving_msg
Ejemplo n.º 2
0
 def add_yw(self, id, sign, high_AD, temp1, temp2, add, seep, all, ratio,
            high):
     '''
     组装液位传感器数据
     :param id: 液位传感器id(41-44,47-4e,对应65-68,71到78)
     :param sign:(0-普通,1-重要)
     :param high_AD:液位高度ad值
     :param temp1:液温,0.1K
     :param temp2:环温,0.1K
     :param add:加油量,0.1L
     :param seep:漏油量,0.1L
     :param all:液量,0.1L
     :param ratio:液位百分比,0.1%
     :param high:液位高度,0.1mm
     :return:液位传感器报文
     '''
     temp1 = float(temp1) * 10
     temp2 = float(temp2) * 10
     add = float(add) * 10
     seep = float(seep) * 10
     all = float(all) * 10
     ratio = float(ratio) * 1000
     """
     13版和19版本相同:{外设ID+}数据长度(b)+重要数据标识(b)+AD值(b3)+液体温度(DWORD)+环境温度(DWORD)+加油量(DWORD)+漏油量(DWORD)+液体量(DWORD)+液位百分比(DWORD)+液位高度(DWORD)
     """
     data=jctool.to_hex(id,2)+"20"+jctool.to_hex(sign,2)+jctool.to_hex(high_AD,6)+jctool.to_hex(temp1,8)+\
          jctool.to_hex(temp2,8)+jctool.to_hex(add,8)+jctool.to_hex(seep,8)+jctool.to_hex(all,8)+\
         jctool.to_hex(ratio,8)+jctool.to_hex(high,8)
     return data
Ejemplo n.º 3
0
 def add_jz(self, dm, dbm):
     '''基站定位
     :param dm: 定位模式,0-4
     :param dbm: 信号强度,dbm
     :return:
     '''
     data="08240000000000"+jctool.to_hex(dm,2)+"01014543010101CC05500000589000260022"+\
          jctool.to_hex(dbm,2)+"00C003A405080000000000"
     return data
Ejemplo n.º 4
0
 def add_wio(self, sign, m, zt, yzt):
     """拓展io"""
     n = (int(m + 32) / 32) + 1
     a = 4 * n * 2
     da = jctool.to_hex(sign, 2) + jctool.to_hex(
         m, 2) + "00" + jctool.to_hex(n, 2) + jctool.to_hex(zt, a)
     len = len(da) / 2 + 1
     data = "id" + jctool.to_hex(len, 2) + da
     return data
Ejemplo n.º 5
0
 def add_lc(self, id, lc, sp):
     '''
     组装里程传感器数据
     :param lc:累计里程,0.1KM
     :param sp:车速,km/h
     :return:里程传感器报文
     '''
     lc = float(lc) * 10
     data = jctool.to_hex(id, 2) + "08" + jctool.to_hex(
         lc, 8) + jctool.to_hex(sp, 8)
     return data
Ejemplo n.º 6
0
 def add_ZW_zdaq(
     self,
     id,
     mobile='00000000013300000048'
 ):  # pdict, sichuandict, deviceid, port, tire_pressure=3, tire_temp=35, tire_electric=50,):
     alarmID = "00000001"  # 报警ID(DWORD)
     alarmType = [
         '00000001', '00000002', '00000004', '00000008', '00000016',
         '00000032', '00000064', '00000128', '00000256', '00000512',
         '00131072', '00262144'
     ]
     alarmTypeb = [
         'E100', 'E101', 'E102', 'E103', 'E104', 'E105', 'E106', 'E107',
         'E108', 'E109', 'E117', 'E118'
     ]
     alarmType1 = [
         '00000001', '00000002', '00000004', '00000008', '00000016',
         '00000032', '00000064', '00000128', '00131072', '00262144',
         '00524288'
     ]
     alarmTypeb1 = [
         'E200', 'E201', 'E202', 'E203', 'E204', 'E205', 'E206', 'E207',
         'E217', 'E218', 'E219'
     ]
     alarmType2 = ['0001', '0002', '0004']
     alarmTypeb2 = ['E400', 'E401', 'E402']
     alarmTypeb3 = ['01', '02', '04', '08', '16', '32', '64']
     ti = time.strftime("%y%m%d%H%M%S", time.localtime())
     if id == 225:  # 前向监测系统,225-231
         # i = random.randint(0,11)
         data = alarmID + alarmType[
             0] + "020202020201" + mobile + alarmTypeb[0] + ti + "010100"
     elif id == 226:  # 前向监测系统
         j = random.randint(0, 10)
         data = alarmID + alarmType1[j] + "020201" + mobile + alarmTypeb1[
             j] + ti + "010100"
     elif id == 227:  # 轮胎气压监测系
         m = random.randint(0, 6)
         data = "01000001" + "00" + alarmTypeb3[m] + "000100020200"
     elif id == 228:  # 盲区监测系统
         k = random.randint(0, 2)
         data = alarmType2[k] + "01" + mobile + alarmTypeb2[
             k] + ti + "010100"
     elif id == 229:  # 原车数据;      正常情况下只用0xE5,如果数据字节数超过255个字节,则后续数据流值放在附加信息0xE6中(229-230)
         data = "0001" + "0647" + "01"
     elif id == 231:  # 终端分析上报
         data = "0178776500000000"
     else:
         print "无中位标准主动安全数据", id
         data = ""
     lent = len(data) / 2
     # 组装为信息并返回
     ZW_zddata = jctool.to_hex(id, 2) + jctool.to_hex(lent, 2) + data
     return ZW_zddata
Ejemplo n.º 7
0
 def add_additional(self, id, size, information):
     '''
         组装附加信息
         :param id: 附加信息ID
         :param size: 附加信息长度
         :param information: 附加信息
         :return: 组装的附加信息
                        '''
     data = jctool.to_hex(id, 2) + jctool.to_hex(size, 2) + jctool.to_hex(
         information, size * 2)
     return data
Ejemplo n.º 8
0
 def add_zio(self, k0, k1, k2, k3):
     '''自带io
     获取自带开关状态,最多4个(0-断开,1-闭合,2-无接口)
     :param k0:
     :param k1:
     :param k2:
     :param k3:
     :return:自带io报文
     '''
     data = "9004" + jctool.to_hex(k0, 2) + jctool.to_hex(
         k1, 2) + jctool.to_hex(k2, 2) + jctool.to_hex(k3, 2)
     return data
Ejemplo n.º 9
0
 def add_f3_data(self, num, data_body, c):
     '''组装传感器信息组合f3信息,把各个传感器信息打包成f3附加信息
     :param num:传感器数量
     :param data_body: 传感器信息body
     :param c :当F3附加消息超过255时,进行F3附加信息拆分,值从3开始依次递增
     :return: f3附加信息
     '''
     f3data = ""
     if num != 0:
         lent = len(data_body) / 2 + 1  #计算f3附加消息长度
         f3data = "F" + str(c) + jctool.to_hex(lent, 2) + jctool.to_hex(
             num, 2) + data_body  #组装为f3信息
     return f3data
Ejemplo n.º 10
0
 def footfall_info(self, mobile, starttime, endtime, getonnum, getoffnum,
                   version):
     """
     :param starttime:
     :param endtime:
     :param getonnum:
     :param getoffnum:
     :return:
     """
     dbody = str(starttime) + str(endtime) + jctool.to_hex(
         getonnum, 4) + jctool.to_hex(getoffnum, 4)
     hhead = self.data_head(mobile, 4101, dbody, 1, version)
     data = self.add_all(hhead + dbody)
     return data
Ejemplo n.º 11
0
 def add_yh(self, id, oilsp, oiltemp, tio, times):
     '''
     获取油耗传感器报文
     :param id: 油耗传感器id(45,46,对应69,70)
     :param oilsp:累计油耗,0.01L
     :param oiltemp:油箱温度,0.1K
     :param tio:瞬时油耗,0.01L
     :param times:累计时间,0.1H
     :return:油耗传感器报文
     '''
     oilsp = float(oilsp) * 100
     oiltemp = float(oiltemp) * 10
     tio = float(tio) * 100
     times = float(times) * 10
     data=jctool.to_hex(id,2)+"10"+jctool.to_hex(oilsp,8)+jctool.to_hex(oiltemp,8)+jctool.to_hex(tio,8)+\
         jctool.to_hex(times,8)
     return data
Ejemplo n.º 12
0
 def add_zdjc(self, id, alarm_id, vehicle_status, tio, times):
     '''
     获取终端及车辆信息检测报文
     :param id: 终端信息检测id(0X50,对应80)
     :param alarm_id:报警标识
     :param vehicle_status:车辆状态
     :param tio:
     :param times:
     :return:终端及车辆信息检测报文
     '''
     data0 = jctool.to_hex(
         alarm_id, 4) + "00000111" + "00" + "00" + jctool.to_hex(
             vehicle_status,
             4) + "0011" + "0001000100010002" + "000000000000"
     size = len(data0) / 2
     data = jctool.to_hex(id, 2) + jctool.to_hex(size, 2) + data0
     return data
Ejemplo n.º 13
0
 def data_jq_body(self, zcres, version):
     '''
     从注册响应获取鉴权码,即鉴权报文body
     :param zcres: 注册时的响应,响应报文需处理为末端不带空格
     :param version:协议版本,1表示808-2019,0表示808-2013
     :return: 鉴权报文body,即鉴权码
     '''
     if version == 1:
         a = str(zcres)
         a = jctool.dd(a)
         a = a[40:-4]
         body = jctool.to_hex(len(a) / 2, 2) + a + jctool.to_hex(
             0, 30) + jctool.to_hex(0, 40)
     else:
         a = str(zcres)
         a = jctool.dd(a)
         a = a[32:-4]
         body = a
     return body
Ejemplo n.º 14
0
 def data_zc_body(self, deviceid, vnum, version):
     '''
     组装注册报文body
     :param deviceid: 设备号,7位数字字母
     :param vnum: 标准7位车牌号
     :param version:协议版本,1表示808-2019,0表示808-2013
     :return: 注册报文body
     '''
     if version == 0:
         body = jctool.to_hex(13, 4) + jctool.to_hex(
             1100, 4) + jctool.to_hex(0, 10) + jctool.to_hex(
                 0, 40) + jctool.get_id(deviceid) + jctool.to_hex(
                     2, 2) + jctool.get_vnum(vnum)
     else:
         while len(deviceid) < 30:
             deviceid = "0" + deviceid
         body = jctool.to_hex(13, 4) + jctool.to_hex(
             1100, 4) + jctool.to_hex(0, 22) + jctool.to_hex(
                 0, 60) + jctool.get_id(deviceid) + jctool.to_hex(
                     2, 2) + jctool.get_vnum(vnum)
     return body
Ejemplo n.º 15
0
 def driver_information(self,
                        mobile,
                        statu,
                        result,
                        name,
                        qualification,
                        institutions,
                        version=0,
                        ti=0):
     """组装驾驶员信息采集上报0702
     :param mobile:手机号
     :param statu:状态
     :param result: IC 卡读取结果
     :param name:驾驶员姓名
     :param qualification: 从业资格证编码
     :param institutions:发证机构名称
     :param version:协议版本,1表示808-2019,0表示808-2013
     :return:返回组装后的驾驶员信息
     """
     if ti == 0:
         ti = time.strftime("%y%m%d%H%M%S", time.localtime())  #插卡/拔卡时间
     else:
         ti = ti
     dnlength = len(jctool.character_string(name)) / 2  #驾驶员姓名长度
     znlength = len(jctool.character_string(institutions)) / 2  #发证机构名称长度
     dbody0 = jctool.to_hex(statu, 2) + str(ti)  #拔卡上传信息
     dbody = dbody0 + jctool.to_hex(result, 2) + jctool.to_hex(
         dnlength,
         2) + jctool.character_string(name) + jctool.character_string(
             qualification, 20) + jctool.to_hex(
                 znlength, 2) + jctool.character_string(
                     institutions) + "20200908"  #插卡上传信息
     if statu == 2:
         dbody = dbody0
     elif statu == 1 and version == 1:
         dbody = dbody + jctool.character_string(qualification, 20)
     hhead = self.data_head(mobile, 1794, dbody, 1, version)
     data = self.add_all(hhead + dbody)
     return data
Ejemplo n.º 16
0
 def add_wd(self, id, sign, temp, times, warn=0):
     '''温度传感器报文
     :param id: 温度传感器id(21-25对应33-37)
     :param sign: 重要数据标识(0-普通,1-重要)
     :param temp:温度值,0.1K
     :param times:状态持续时间,s
     :param warn:高低温告警(1-高温,2-低温,其他-无)
     :return:温度传感器报文
     '''
     if int(warn) == 1:
         wa = "00010000"
     elif int(warn) == 2:
         wa = "00000001"
     else:
         wa = "00000000"
     temp = float(temp) * 10
     """
     13版和19版本相同:{外设ID+} 数据长度(b)+重要数据标识(b)+温度值(b3)+超出阈值持续时间(DWORD)+高低温报警(DWORD)
     """
     data = jctool.to_hex(id, 2) + "0C" + jctool.to_hex(
         sign, 2) + jctool.to_hex(temp, 6) + jctool.to_hex(times, 8) + wa
     return data
Ejemplo n.º 17
0
    def Position_New(self,
                     messageid,
                     number=0,
                     type=0,
                     alarm=0,
                     status=0,
                     jin=0,
                     wei=0,
                     high=0,
                     speed=0,
                     ti=0,
                     direction=0,
                     f3body=-1,
                     answer_number=0000):
        '''
       组装位置信息,通过messageid判断是发单条位置还是发批量位置信息
        :param messageid :消息ID
        :param number:数据项个数,批量位置信息时有效(1796)
        :param type:位置数据类型,批量位置信息时有效(1796)
        :param alarm: 报警标志位,传入0默认无报警,十进制数
        :param status: 状态位,传入0默认定位,acc开,十进制数
        :param jin:经度
        :param wei: 纬度
        :param high:高度
        :param speed:速度
        :param ti:时间,0默认当前时间
        :param direction:方向
        :param meliage:里程,值为-1时表示不组装里程数据
        :param answer_number:应答流水号,ID为513时有效
        :return:位置报文基本信息
        '''
        #转化单位和格式
        jin = float(jin) * 1000000
        wei = float(wei) * 1000000
        speed = float(speed) * 10
        if f3body == -1:
            f3body = ""
        data0 = jctool.to_hex(alarm, 8) + jctool.to_hex(
            status, 8) + jctool.to_hex(wei, 8) + jctool.to_hex(
                jin, 8) + jctool.to_hex(high, 4) + jctool.to_hex(
                    speed, 4) + jctool.to_hex(direction, 4)
        # ti如果传入0,表示取当前系统时间
        if int(ti) == 0:
            ti = time.strftime("%y%m%d%H%M%S", time.localtime())

        if messageid in (512, 2050, 1796):
            body = data0 + str(ti) + f3body  #+ meliage + f3body
            return body
        elif messageid in (513, 1280):
            body = answer_number + data0 + str(ti) + f3body
            return body
        else:
            print "消息ID有误,请输入位置消息ID 512或1796"
Ejemplo n.º 18
0
 def add_zz(self,
            id,
            sign,
            dw,
            zt,
            cs,
            zl,
            zzzl,
            ad1,
            ad2,
            ad3,
            datalen='18'):
     '''
     组装载重传感器报文
     :param id: 传感器id(70,71,对应112,113)
     :param sign:重要数据标识0-普通,1-重要
     :param dw:重量单位,单位:0-0.1Kg;1-1kg;2-10kg;3-100kg;4-255 保留
     :param zt:载重状态,01-空载; 02-满载; 03-超载; 04-装载; 05-卸载;06-轻载;07-重载
     :param cs:装载次数0-255
     :param zl:载荷重量
     :param zzzl:装载卸载重量
     :param ad1:ad值
     :param ad2:原始ad值
     :param ad3:浮动零点
     :return:
     '''
     if int(datalen) < 10:
         datalen = "0" + str(int(datalen))
     else:
         datalen = str(int(datalen))
     data = jctool.to_hex(
         id, 2) + str(datalen) + jctool.to_hex(sign, 4) + jctool.to_hex(
             dw, 2) + jctool.to_hex(zt, 2) + "0000" + jctool.to_hex(
                 cs, 4) + "0000" + jctool.to_hex(zl, 4) + jctool.to_hex(
                     zzzl,
                     4) + jctool.to_hex(ad1, 4) + "0000" + jctool.to_hex(
                         ad2, 4) + "0000" + jctool.to_hex(ad3, 4)
     return data
Ejemplo n.º 19
0
 def add_sd(self, id, sign, hum, times, warn=0):
     '''
     湿度传感器报文
     :param id: 湿度传感器id(26-2a对应38-42)
     :param sign:重要数据标识(0-普通,1-重要)
     :param hum:湿度,0.1%
     :param times:超出阀值持续时间,s
     :param warn:湿度报警(1上限,2下限,其他-无)
     :return:湿度传感器报文
     '''
     if int(warn) == 1:
         wa = "00010000"
     elif int(warn) == 2:
         wa = "00000001"
     else:
         wa = "00000000"
     hum = float(hum) * 10
     """
     13版和19版本相同:{外设ID+} 数据长度(b)+重要数据标识(b)+湿度值(b3)+超出阈值持续时间(DWORD)+湿度报警(DWORD)
     """
     data = jctool.to_hex(id, 2) + "0C" + jctool.to_hex(
         sign, 2) + jctool.to_hex(hum, 6) + jctool.to_hex(times, 8) + wa
     return data
Ejemplo n.º 20
0
    def add_JB_zdaq(self, id):

        alarmID = ['1001','1002','1003','1004','1005','1006','1007','2001'\
                     '2002','2003','2004','2005','2006','2007','2008','2009']
        alarmID2 = ['3001', '3002', '3003', '3004']  #报警类型 alarmid ,alarmid2
        alarmlevel = ['01', '02,', '03']  #报警级别
        typeofattachment = ['01', '02', '03']  #附件类型

        ti = time.strftime("%y%m%d%H%M%S", time.localtime())
        print ti

        if id == 81:  #智能视频监控报警
            i = random.randint(0, 14)
            # k = random.randint(0,2)
            # i = 0
            # while i < len(alarmID):
            #     print(alarmID[i])
            #     i += 1
            # for i in alarmID:
            data = alarmID[i] + alarmlevel[
                0] + ti + ti + '01' + "01010101020202" + typeofattachment[
                    0] + "00000100"
        elif id == 82:  #设备失效报警
            # # j = random.randint(0,2)
            # j = 0
            # while j < len(alarmID2):
            #     print(alarmID2[j])
            #     j += 1
            data = alarmID2[0] + ti

        else:
            print "无北京标准主动安全数据", id
            data = ""
        lent = len(data) / 2
        # 组装为信息并返回
        JB_zddata = jctool.to_hex(id, 2) + jctool.to_hex(lent, 2) + data
        return JB_zddata
Ejemplo n.º 21
0
 def add_dljc(self, id, data_id, alarm_id, terminal_power, traffic_volume,
              refrigerated_capacity, communication_type, operator):
     '''
     获取电量检测报文
     :param id: 终端信息检测id(0X4F,对应79)
     :param data_id:数据标识
     :param alarm_id:报警标识
     :param terminal_power:电量
     :param traffic_volume:行车电量
     :param refrigerated_capacity:冷藏电量
     :return:电量检测检测报文
     '''
     data0 = jctool.to_hex(data_id, 2) + jctool.to_hex(
         alarm_id, 2) + jctool.to_hex(terminal_power, 4) + jctool.to_hex(
             traffic_volume, 4) + jctool.to_hex(
                 refrigerated_capacity, 4) + jctool.to_hex(
                     communication_type, 2) + jctool.to_hex(operator,
                                                            2) + "0011"
     size = len(data0) / 2
     data = jctool.to_hex(id, 2) + jctool.to_hex(size, 2) + data0
     return data
Ejemplo n.º 22
0
 def add_zf(self, id, sign, zts, fx, xs, times, li, xtimes):
     '''
     组装正反转传感器报文
     :param sign:重要数据标识(0-正常,2-重要)
     :param zt:旋转状态(1-停止,2-运转)
     :param fx:旋转方向(1-顺,2-逆)
     :param xs:旋转速度r/min
     :param times:累计运行时间,0.1h
     :param li:累计脉冲数量
     :param xtimes:旋转方向持续时间,1min
     :return:正反转传感器报文
     '''
     times = float(times) * 10
     data = jctool.to_hex(id, 2) + "18" + jctool.to_hex(
         sign, 2) + jctool.to_hex(zts, 6) + jctool.to_hex(
             fx, 8) + jctool.to_hex(xs, 8) + jctool.to_hex(
                 times, 8) + jctool.to_hex(li, 8) + jctool.to_hex(
                     xtimes, 8)
     return data
Ejemplo n.º 23
0
    def add_wifi(self, id, ver, softver, electric, csq, groupnum, mac,
                 wifi_sign):
        # 13代表数据长度,16进制
        mac = '010082400000'
        wifi_sign = 0
        csq = 31
        data = jctool.to_hex(id, 2) + "13" + jctool.to_hex(ver, 2) + jctool.to_hex(softver,16) + jctool.to_hex(electric, 2) + \
               jctool.to_hex(csq, 2) + jctool.to_hex(groupnum, 2) + str(mac) + jctool.to_hex(wifi_sign, 2)

        #     data=hexcovert.to_hex(id,2)+"0C"+hexcovert.to_hex(ver,2)+hexcovert.to_hex(softver,16)+hexcovert.to_hex(electric,2)+\
        #          hexcovert.to_hex(csq,2)+hexcovert.to_hex(grouopnum,2)
        # print mac
        # print data
        return data
Ejemplo n.º 24
0
 def add_gs(self, id, fs, ztt, ztime, bd, sj, gslen='0C'):
     '''
     组装工时传感器数据
     :param id:工时传感器id(80,81,对应128,129)
     :param fs:工时检测方式(0-电压,1-油耗阈值,2-油耗波动)
     :param zt:工作状态(0-停机,1-工作)
     :param ztime:当前状态持续时长s
     :param bd:波动值(0.1v或0.01L/h)
     :param sj:工时数据(0.1V或0.01L/H)
     :return:工时传感器数据
     '''
     data = jctool.to_hex(id, 2) + str(gslen) + jctool.to_hex(
         fs, 4) + jctool.to_hex(ztt, 4) + jctool.to_hex(
             ztime, 8) + jctool.to_hex(bd, 4) + jctool.to_hex(sj, 4)
     return data
Ejemplo n.º 25
0
 def add_ly(self, id, count, UUID, signal, distance, battery):
     '''
     组装蓝牙数据
     :param id:外设ID
     :param count:数据组数
     :param UUID:蓝牙信标设备 UUID
     :param signal:蓝牙信标信号强度
     :param distance:终端与蓝牙信标设备的距离
     :param Battery:蓝牙信标设备电池电量
     :return:蓝牙报文
     '''
     data0 = jctool.get_id(UUID) + jctool.to_hex(signal, 2) + jctool.to_hex(
         distance, 4) + jctool.to_hex(battery, 2)  #jctool.to_hex(UUID,64)
     data = data0
     while count > 1:
         count = count - 1
         data = data + data0
     size = len(data) / 2 + 1
     data = jctool.to_hex(id, 2) + jctool.to_hex(size, 2) + jctool.to_hex(
         count, 2) + data
     return data
Ejemplo n.º 26
0
 def data_tc_body(self, num, data):
     # 组装obd透传0900body
     body = "FA" + jctool.to_hex(num, 2) + "A0" + data
     return body
Ejemplo n.º 27
0
    def data_head(self,
                  mobile,
                  newid,
                  data,
                  xulie=1,
                  version=0,
                  num1=0,
                  totalpack=0):
        '''
        组装消息头
        :param mobile: 手机号
        :param newid:消息id,如0100,0200
        :param data:消息体,包括基本信息,附加信息,f3信息
        :param xulie:消息流水号,默认0000
        :param version:协议版本,1表示808-2019,0表示808-2013
        :param num1:第几个分包
        :param totalpack:分包总数
        :return:对应消息id的消息头信息

        '''
        lenth = len(data) / 2
        num = num1 + 1
        if version == 0:
            while len(mobile) < 12:
                mobile = "0" + mobile
            if totalpack == 0:
                head = jctool.to_hex(newid, 4) + jctool.to_hex(
                    lenth, 4) + str(mobile) + jctool.to_hex(xulie, 4)
            else:  ##如果分包数不为0
                lenth = lenth + 8192  # 加上分包位的值,13位为1
                head = jctool.to_hex(newid, 4) + jctool.to_hex(
                    lenth,
                    4) + str(mobile) + jctool.to_hex(xulie, 4) + jctool.to_hex(
                        totalpack, 4) + jctool.to_hex(num, 4)
        elif version == 1:
            while len(mobile) < 20:
                mobile = "0" + mobile
            if totalpack == 0:
                head = jctool.to_hex(newid, 4) + jctool.to_hex(
                    4, 1) + jctool.to_hex(lenth, 3) + jctool.to_hex(
                        version, 2) + str(mobile) + jctool.to_hex(xulie, 4)
            else:
                lenth = lenth + 24576  # 加上分包位的值 14、13位为1
                head = jctool.to_hex(
                    newid, 4) + jctool.to_hex(lenth, 4) + jctool.to_hex(
                        version, 2) + str(mobile) + jctool.to_hex(
                            xulie, 4) + jctool.to_hex(
                                totalpack, 4) + jctool.to_hex(num, 4)
        return head
Ejemplo n.º 28
0
 def add_base(self, id, basever, report_frequency, position_mode, time_num,
              start_time, info_status, info_groupnum, mcc, sid, lac_nid,
              cell_bid, bcch, bsic, dbm, c1, c2, txp, rla, tch, ta, rxq_sub,
              rxq_full):
     data = jctool.to_hex(id, 2) + "24" + jctool.to_hex(basever, 2) + jctool.to_hex(report_frequency,8) + jctool.to_hex(position_mode, 2) + \
            jctool.to_hex(time_num, 2) + str(int(start_time)) + jctool.to_hex(info_status, 2) + jctool.to_hex(info_groupnum, 2) + \
            jctool.to_hex(mcc, 4) + jctool.to_hex(sid, 4) + jctool.to_hex(lac_nid, 4) + jctool.to_hex(cell_bid, 4) + jctool.to_hex(bcch, 4) + \
            jctool.to_hex(bsic, 4) + jctool.to_hex(dbm, 2) + jctool.to_hex(c1, 4) + jctool.to_hex(c2,4) + jctool.to_hex(txp, 2) + \
            jctool.to_hex(rla, 2) + jctool.to_hex(tch, 4) + jctool.to_hex(ta, 2) + jctool.to_hex(rxq_sub,2) + jctool.to_hex(rxq_full, 2)
     # print data
     return data
Ejemplo n.º 29
0
    def add_zdaq(self,
                 id,
                 pdict,
                 sichuandict,
                 deviceid,
                 port,
                 tire_pressure=3,
                 tire_temp=35,
                 tire_electric=50,
                 mobile='00000000013300000048'):
        ''' 川冀标主动安全数据
        :param id: 外设ID(100、101、102、103、112、113)
        :param port:监控对象协议对应端口号
        :param sign:标志状态
        :param event:报警、事件类型
        :param level:报警级别
        :param deviate:偏离类型
        :param road_sign:道路标志识别类型
        :param fatigue:疲劳程度
        :param jin:经度
        :param  wei:纬度
        :param high:高程
        :param speed:速度
        :param zstatus:状态
        :param deviceid:报警中的终端ID字段
        :param attach_Count:报警中的附件数量
        :param tire_num :胎压报警/事件列表总数
        :param tire_loc: 报警轮胎位置
        :param tire_alarm_type:胎压报警/事件类型,2:胎压过高,4:胎压过低,8:胎温过高,16:传感器异常,32:胎压不平衡,64:慢漏气,128:电池电量低
        :param tire_pressure :胎压
        :param tire_temp :胎温
        :param tire_electric:电池电量

        '''

        jin = float(pdict['jin']) * 1000000
        wei = float(pdict['wei']) * 1000000
        ti = time.strftime("%y%m%d%H%M%S", time.localtime())
        # date = datetime.datetime.strptime('2019-08-08 09:00:00', "%Y-%m-%d %H:%M:%S")
        # ti = date.strftime("%y%m%d%H%M%S")
        alarm = jctool.get_id(deviceid) + str(ti) + "00" + jctool.to_hex(
            sichuandict['attach_Count'], 2) + "00"
        data0 = jctool.to_hex(pdict['speed'], 2) + jctool.to_hex(
            pdict['high'], 4) + jctool.to_hex(
                wei, 8) + jctool.to_hex(jin, 8) + str(ti) + jctool.to_hex(
                    sichuandict['zstatus'], 4) + alarm
        tire_alarm_info = jctool.to_hex(sichuandict['tire_num'], 2) + ""
        alarmID = "00000001"  #报警ID(DWORD)
        # 驾驶辅助功能报警信息
        if id == 100:
            data = alarmID+jctool.to_hex(sichuandict['sign'], 2)+jctool.to_hex(sichuandict['event'], 2)+ jctool.to_hex(sichuandict['level'], 2) + jctool.to_hex(pdict['speed'], 2) + "09"+jctool.to_hex(sichuandict['deviate'], 2)\
                   + jctool.to_hex(sichuandict['road_sign'], 2)+"00" + data0
        # 驾驶员行为监测功能报警信息
        elif id == 101:
            data = alarmID + jctool.to_hex(
                sichuandict['sign'], 2) + jctool.to_hex(
                    sichuandict['event'], 2) + jctool.to_hex(
                        sichuandict['level'], 2) + jctool.to_hex(
                            sichuandict['fatigue'], 2) + "00000000" + data0
        # 激烈驾驶报警信息
        elif id == 112:
            data = alarmID + jctool.to_hex(
                sichuandict['sign'], 2) + jctool.to_hex(
                    sichuandict['event'], 2) + "0009" + "0008" + "0008" + data0
        # 轮胎状态监测报警信息
        elif id == 102:
            if port == 6998:  #浙标中盲区监测对应外设ID为66
                data = alarmID + jctool.to_hex(
                    sichuandict['sign'], 2) + jctool.to_hex(
                        sichuandict['event'], 2) + data0
            else:
                while sichuandict['tire_num'] > 0:
                    tire_alarm_info += jctool.to_hex(
                        sichuandict['tire_loc'], 2) + jctool.to_hex(
                            sichuandict['tire_alarm_type'], 4) + jctool.to_hex(
                                tire_pressure, 4) + jctool.to_hex(
                                    tire_temp, 4) + jctool.to_hex(
                                        tire_electric, 4)
                    sichuandict['tire_loc'] += 1
                    sichuandict['tire_num'] -= 1
                data = alarmID + jctool.to_hex(sichuandict['sign'],
                                               2) + data0 + tire_alarm_info

        # 盲区监测报警信息
        elif id == 103:
            data = alarmID + jctool.to_hex(sichuandict['sign'],
                                           2) + jctool.to_hex(
                                               sichuandict['event'], 2) + data0
        # 卫星定位系统报警信息
        elif id == 113:
            data = alarmID + "0001000900" + data0
        #不按规定上下客及超员检测报警信息
        elif id == 104:
            data = alarmID + jctool.to_hex(
                sichuandict['sign'], 2) + jctool.to_hex(
                    sichuandict['event'], 2) + jctool.to_hex(
                        sichuandict['level'], 2) + "0000000000" + data0
        else:
            print "无主动安全数据", id
            data = ""
        lent = len(data) / 2 + 1
        # 组装为信息并返回
        zddata = jctool.to_hex(id, 2) + jctool.to_hex(lent, 2) + data
        return zddata
Ejemplo n.º 30
0
 def position(self,
              mobile,
              messageid,
              number,
              type,
              alarm,
              status,
              jin,
              wei,
              high,
              speed,
              ti,
              direction,
              extra_info,
              zd_body,
              F3data,
              version=0,
              answer_number=0000):
     """组装位置信息0200或0704或0201
     :param mobile:手机号
     :param messageid:消息ID
     :param number: 数据项个数,批量位置信息时有效(1796)
     :param type:位置数据类型,批量位置信息时有效(1796)
     :param zd_body: 主动安全信息
     :param F3data:F3信息
     :param version:协议版本,1表示808-2019,0表示808-2013
     :param answer_number:应答流水号
     :return:返回组装后的位置信息
     """
     attach = str(extra_info) + zd_body + F3data
     if messageid == 2050:
         """应答流水+多媒体数据总项数+检索项{多媒体ID(dword)+多媒体类型(b)+通道ID(b)+事件项编码(b)+位置}"""
         gpsbody = answer_number + "0001" + "00000001" + "020707" + self.Position_New(
             messageid, number, type, alarm, status, jin, wei, high, speed,
             ti, direction, -1, answer_number)
     elif messageid == 1796:
         body = ""
         NO = number
         if ti != 0:
             detester = "2019-08-15 09:00:00"
             date = datetime.datetime.strptime(detester,
                                               "%Y-%m-%d %H:%M:%S")
             second = 30
             timelist = []
             for i in range(0, NO):  # 120表示1小时
                 time1 = (date + datetime.timedelta(seconds=second)
                          ).strftime("%y%m%d%H%M%S")
                 timelist.append(time1)
                 second += 30
             for j in range(0, NO):
                 gpsbody = self.Position_New(messageid, number, type, alarm,
                                             status, jin, wei, high, speed,
                                             timelist[j], direction, attach,
                                             answer_number)
                 lenth = len(gpsbody) / 2
                 data = jctool.to_hex(lenth, 4) + gpsbody
                 NO -= 1
                 body = data + body
                 if NO == 0:
                     gpsbody = jctool.to_hex(number, 4) + jctool.to_hex(
                         type, 2) + body
                     break
         elif ti == 0:
             while NO != 0:
                 gpsbody = self.Position_New(messageid, number, type, alarm,
                                             status, jin, wei, high, speed,
                                             ti, direction, attach,
                                             answer_number)
                 lenth = len(gpsbody) / 2
                 data = jctool.to_hex(lenth, 4) + gpsbody
                 NO -= 1
                 body = data + body
                 time.sleep(2)
             gpsbody = jctool.to_hex(number, 4) + jctool.to_hex(type,
                                                                2) + body
     else:
         gpsbody = self.Position_New(messageid, number, type, alarm, status,
                                     jin, wei, high, speed, ti, direction,
                                     attach, answer_number)
     return gpsbody