def startmdvr(self): self.mdvrcli = MDVR(self.mdvrid.get(), self.carid.get(), self.ip.get(), int(self.port.get()), self.gps1.get(), self.gps2.get(), self.speed.get(), self.direction.get()) if self.mdvrcli.start() == -1: showerror('ERROR', '无法连接,请检查ip、端口号等配置!!!') else: self.mdvrid.config(state=DISABLED) self.ip.config(state=DISABLED) self.port.config(state=DISABLED) self.start.config(state=DISABLED) self.reset.config(state=DISABLED) self.recover.config(state=DISABLED) for i in self.runtimebutton: i.config(state=NORMAL) self.stoponekeyalarm.config(state=DISABLED) self._trafficfenceidsreflash() self._speedrulereflash()
class GuiMDVR(ShangxcGUI): def __init__(self): super(GuiMDVR, self).__init__() self.root.title('mdvr模拟器') self.root.protocol("WM_DELETE_WINDOW", self._exit) self.frame = [] self.runtimebutton = [] self.config = ConfigParser.ConfigParser() self.config.read('etc/config.ini') self.defaultvalue = {} for i in range(20): self.frame.append(Frame(self.root)) self.frame[i].pack() self.recover = Button() self.userbutton('recover', '恢复出厂设置', 'self.frame[0]', 'self._recover', 'NORMAL') self.reset = Button() self.userbutton('reset', '重置', 'self.frame[0]', 'self._reset', 'NORMAL') self.ip = Entry() self.inputbox('ip', 'ip', 'self.frame[0]', 15, REGIP, '127.0.0.1') self.port = Entry() self.inputbox('port', '端口号', 'self.frame[0]', 5, REGPORT, '9876') self.mdvrid = Entry() self.inputbox('mdvrid', 'MDVR芯片号', 'self.frame[0]', 10, REGMDVRID, '0072001234') self.carid = Entry() self.inputbox('carid', '车牌号', 'self.frame[0]', 7, REGCARID, 'CAR1234') self.gps1 = Entry() self.inputbox('gps1', '经度', 'self.frame[1]', 11, REGJINGDU, '11619.6706') self.gps2 = Entry() self.inputbox('gps2', '纬度', 'self.frame[1]', 10, REGWEIDU, '3959.0540') self.speed = Entry() self.inputbox('speed', '速度', 'self.frame[1]', 6, REGSPEEDANDDIRECTION, '0.00') self.direction = Entry() self.inputbox('direction', '方向', 'self.frame[1]', 6, REGSPEEDANDDIRECTION, '0.00') self.setgps = Button() self.userbutton('setgps', '设置GPS', 'self.frame[1]', 'self.setgpsinfo') self.sendnormalgps = Button() self.userbutton('sendnormalgps', '发送GPS', 'self.frame[1]', 'self._sendnormalgps') self.databaseip = Entry() self.inputbox('databaseip', '数据库IP', 'self.frame[2]', 15, REGIP, '172.16.50.53') self.instancename = Entry() self.inputbox('instancename', '数据库实例名', 'self.frame[2]', 10, REGNO, 'newsima') self.username = Entry() self.inputbox('username', '用户名', 'self.frame[2]', 10, REGNO, 'vms') self.password = Entry() self.inputbox('password', '密码', 'self.frame[2]', 10, REGNO, 'vms') self.password.config(show='*') self.start = Button() self.userbutton('start', '开始', 'self.frame[3]', 'self.startmdvr', 'NORMAL') self.stop = Button() self.userbutton('stop', '停止', 'self.frame[3]', 'self.stopmdvr') self.sendcarid = Button() self.userbutton('sendcarid', '设置并发送车牌号', 'self.frame[3]', 'self._sendcarid') self.selfcheck = Button() self.userbutton('selfcheck', '发送自检', 'self.frame[3]', 'self.sendselfcheck') self.insertvideodata = Button() self.userbutton('insertvideodata', '插入视频数据', 'self.frame[3]', 'self._insertvideodata') self.startonekeyalarm = Button() self.userbutton('startonekeyalarm', '一键报警', 'self.frame[3]', 'self._startonekeyalarm') self.stoponekeyalarm = Button() self.userbutton('stoponekeyalarm', '停止一键报警', 'self.frame[3]', 'self._stoponekeyalarm') self.fencealert = Button() self.userbutton('fencealert', '区域围栏告警', 'self.frame[3]', 'self._fencealert') self.overspeedalert = Button() self.userbutton('overspeedalert', '超速告警', 'self.frame[3]', 'self._overspeedalert') self.subtype = IntVar() self.subtype.set(12) Label(self.frame[4], text='区域告警子类型:').pack(side=LEFT) Radiobutton(self.frame[4], variable=self.subtype, text='越界告警', value=12, command=self.changesubtype).pack(side=LEFT) Radiobutton(self.frame[4], variable=self.subtype, text='围栏内速度告警', value=13, command=self.changesubtype).pack(side=LEFT) self.trafficfenceid = Entry() self.inputbox('trafficfenceid', ' 告警电子围栏编号', 'self.frame[4]', 5, REGPORT, '0') self.inout = IntVar() self.inout.set(1) self.inouttips = Label(self.frame[5], text='进出电子围栏告警:') self.inouttips.pack(side=LEFT) self.inout1 = Radiobutton(self.frame[5], variable=self.inout, text='进电子围栏', value=1) self.inout1.pack(side=LEFT) self.inout2 = Radiobutton(self.frame[5], variable=self.inout, text='出电子围栏', value=0) self.inout2.pack(side=LEFT) self.speedoverlower = IntVar() self.speedoverlower.set(0) self.speedoverlowertips = Label(self.frame[5], text=' 围栏内低速/超速:', fg='gray') self.speedoverlowertips.pack(side=LEFT) self.speedoverlower1 = Radiobutton(self.frame[5], variable=self.speedoverlower, text='低速', value=0, state=DISABLED) self.speedoverlower1.pack(side=LEFT) self.speedoverlower2 = Radiobutton(self.frame[5], variable=self.speedoverlower, text='超速', value=1, state=DISABLED) self.speedoverlower2.pack(side=LEFT) self.minspeed = Entry() self.inputbox('minspeed', '最小速度', 'self.frame[6]', 6, REGSPEEDANDDIRECTION, '0.00') self.maxspeed = Entry() self.inputbox('maxspeed', '最大速度', 'self.frame[6]', 6, REGSPEEDANDDIRECTION, '199.99') self.duringtime = Entry() self.inputbox('duringtime', '持续时间', 'self.frame[6]', 5, REGPORT, '5') self.alarmminspeed = Entry() self.inputbox('alarmminspeed', '告警最小速度', 'self.frame[6]', 6, REGSPEEDANDDIRECTION, '0.00') self.alarmmaxspeed = Entry() self.inputbox('alarmmaxspeed', '告警最大速度', 'self.frame[6]', 6, REGSPEEDANDDIRECTION, '199.99') Label(self.frame[7], text='已设置电子围栏编号:').pack(side=LEFT) self.trafficfenceids = [] for i in range(10): self.trafficfenceids.append(Text(self.frame[7], width=6, height=1, relief=GROOVE, state=DISABLED, bg='lightgray')) self.trafficfenceids[i].pack(side=LEFT) self.trafficfenceidsreflash = Button() self.userbutton('trafficfenceidsreflash', '刷新', 'self.frame[7]', 'self._trafficfenceidsreflash') # Label(self.frame[7], width=0).pack(side=LEFT) self.trafficfenceidsreset = Button() self.userbutton('trafficfenceidsreset', '清空', 'self.frame[7]', 'self._trafficfenceidsreset') Label(self.frame[8], text=' 超速告警参数').pack(side=LEFT) Label(self.frame[8], text=' 是否开启:').pack(side=LEFT) self.speedruleonoff = Label(self.frame[8], relief=RIDGE, width=5) self.speedruleonoff.pack(side=LEFT) Label(self.frame[8], text=' 低速限制:').pack(side=LEFT) self.speedrulemin = Label(self.frame[8], relief=RIDGE, width=5) self.speedrulemin.pack(side=LEFT) Label(self.frame[8], text=' 高速限制:').pack(side=LEFT) self.speedrulemax = Label(self.frame[8], relief=RIDGE, width=5) self.speedrulemax.pack(side=LEFT) Label(self.frame[8], text=' 持续时间:').pack(side=LEFT) self.speedruletime = Label(self.frame[8], relief=RIDGE, width=6) self.speedruletime.pack(side=LEFT) self.speedrulereflash = Button() self.userbutton('speedrulereflash', '刷新', 'self.frame[8]', 'self._speedrulereflash') # Label(self.frame[8], width=0).pack(side=LEFT) self.speedrulereset = Button() self.userbutton('speedrulereset', '清空', 'self.frame[8]', 'self._speedrulereset') self.temperaturetype = IntVar() self.temperaturetype.set(0) Label(self.frame[9], text='温度类型:').pack(side=LEFT) Radiobutton(self.frame[9], variable=self.temperaturetype, text='安全套件温度', value=0).pack(side=LEFT) Radiobutton(self.frame[9], variable=self.temperaturetype, text='发动机温度', value=1).pack(side=LEFT) Radiobutton(self.frame[9], variable=self.temperaturetype, text='车厢内温度', value=2).pack(side=LEFT) self.temperaturealerttype = IntVar() self.temperaturealerttype.set(0) Label(self.frame[9], text=' 告警类别:').pack(side=LEFT) Radiobutton(self.frame[9], variable=self.temperaturealerttype, text='低温告警', value=0).pack(side=LEFT) Radiobutton(self.frame[9], variable=self.temperaturealerttype, text='高温告警', value=1).pack(side=LEFT) self.currenttemperature = Entry() self.inputbox('currenttemperature', '触发时温度', 'self.frame[10]', 7, REGTEMPERATURE, '37.00') self.mintemperature = Entry() self.inputbox('mintemperature', '温度最低值', 'self.frame[10]', 7, REGTEMPERATURE, '0.00') self.maxtemperature = Entry() self.inputbox('maxtemperature', '温度最高值', 'self.frame[10]', 7, REGTEMPERATURE, '99.99') self.temperaturealert = Button() self.userbutton('temperaturealert', '温度异常告警', 'self.frame[10]', 'self._temperaturealert') self.gpsalerttype = IntVar() self.gpsalerttype.set(2) Label(self.frame[11], text=' GPS告警类型:').pack(side=LEFT) Radiobutton(self.frame[11], variable=self.gpsalerttype, text='信号由有效变无效', value=0, state=DISABLED).pack(side=LEFT) Radiobutton(self.frame[11], variable=self.gpsalerttype, text='信号由无效变有效', value=1, state=DISABLED).pack(side=LEFT) Radiobutton(self.frame[11], variable=self.gpsalerttype, text='GPS信号接收机故障', value=2).pack(side=LEFT) self.histime = Entry() self.inputbox('histime', '历史时间', 'self.frame[12]', 13, REGTIME, strftime('%y%m%d %H%M%S')) self.hisgps1 = Entry() self.inputbox('hisgps1', '历史经度', 'self.frame[12]', 11, REGJINGDU, '11619.6706') self.hisgps2 = Entry() self.inputbox('hisgps2', '历史纬度', 'self.frame[12]', 10, REGWEIDU, '3959.0540') self.gpsalert = Button() self.userbutton('gpsalert', 'GPS接收机故障告警', 'self.frame[12]', 'self._gpsalert') self.videoalert = [] for i in range(4): self.videoalert.append(BooleanVar()) Checkbutton(self.frame[13], variable=self.videoalert[i], text='通道%d无信号' % (i+1), onvalue=True, offvalue=False).pack(side=LEFT) self.nonvideo = Button() self.userbutton('nonvideo', '摄像头无信号告警', 'self.frame[13]', 'self._nonvideo') self.sderrorcode = [] for i in range(5): self.sderrorcode.append(StringVar()) Checkbutton(self.frame[14], variable=self.sderrorcode[0], text='存储器不存在', onvalue='00000001', offvalue='').pack(side=LEFT) Checkbutton(self.frame[14], variable=self.sderrorcode[1], text='存储器无法录像', onvalue='00000002', offvalue='').pack(side=LEFT) Checkbutton(self.frame[14], variable=self.sderrorcode[2], text='存储器空间满', onvalue='00000003', offvalue='').pack(side=LEFT) Checkbutton(self.frame[14], variable=self.sderrorcode[3], text='存储器未格式化', onvalue='00000004', offvalue='').pack(side=LEFT) Checkbutton(self.frame[14], variable=self.sderrorcode[4], text='存储器读写异常', onvalue='00000005', offvalue='').pack(side=LEFT) self.sdalert = Button() self.userbutton('sdalert', 'MDVR存储卡错误告警', 'self.frame[14]', 'self._sdalert') self.currentvoltage = Entry() self.inputbox('currentvoltage', '当前电压', 'self.frame[15]', 4, REGVOLTAGE, '10.0') self.minvoltage = Entry() self.inputbox('minvoltage', '最低电压', 'self.frame[15]', 4, REGVOLTAGE, '1.0') self.maxvoltage = Entry() self.inputbox('maxvoltage', '最高电压', 'self.frame[15]', 4, REGVOLTAGE, '36.0') self.voltagealerttype = IntVar() self.voltagealerttype.set(0) Label(self.frame[15], text=' 告警类别:').pack(side=LEFT) Radiobutton(self.frame[15], variable=self.voltagealerttype, text='低电压告警', value=0).pack(side=LEFT) Radiobutton(self.frame[15], variable=self.voltagealerttype, text='高电压告警', value=1).pack(side=LEFT) self.voltagealert = Button() self.userbutton('voltagealert', '电压异常告警', 'self.frame[15]', 'self._voltagealert') Label(self.frame[16], text='自定义指令:').pack(side=LEFT) self.custommessage = Text(self.frame[16], height=2) self.custommessage.pack(side=LEFT) self.sendcustommessage = Button() self.userbutton('sendcustommessage', '发送', 'self.frame[16]', 'self._sendcustommessage') Label(self.frame[18], text='最后接收指令:').pack(side=LEFT) self.lastreceive = Label(self.frame[18],justify=LEFT) self.lastreceive.pack(side=LEFT) self.lastreflash = Button() self.userbutton('lastreflash', '刷新', 'self.frame[18]', 'self._lastreflash') # self.tmp = Button() # self.userbutton('tmp', 'test', 'self.frame[19]', 'self.test', 'NORMAL') def startmdvr(self): self.mdvrcli = MDVR(self.mdvrid.get(), self.carid.get(), self.ip.get(), int(self.port.get()), self.gps1.get(), self.gps2.get(), self.speed.get(), self.direction.get()) if self.mdvrcli.start() == -1: showerror('ERROR', '无法连接,请检查ip、端口号等配置!!!') else: self.mdvrid.config(state=DISABLED) self.ip.config(state=DISABLED) self.port.config(state=DISABLED) self.start.config(state=DISABLED) self.reset.config(state=DISABLED) self.recover.config(state=DISABLED) for i in self.runtimebutton: i.config(state=NORMAL) self.stoponekeyalarm.config(state=DISABLED) self._trafficfenceidsreflash() self._speedrulereflash() def stopmdvr(self): self.mdvrcli.stop() self.mdvrid.config(state=NORMAL) self.ip.config(state=NORMAL) self.port.config(state=NORMAL) self.start.config(state=NORMAL) self.reset.config(state=NORMAL) self.recover.config(state=NORMAL) for i in self.runtimebutton: i.config(state=DISABLED) def setgpsinfo(self): self.mdvrcli.setgps(self.gps1.get(), self.gps2.get(), self.speed.get(), self.direction.get()) def _startonekeyalarm(self): self.mdvrcli.onekeyalarm() self.stoponekeyalarm.config(state=NORMAL) def _stoponekeyalarm(self): self.mdvrcli.stoponekeyalarm() self.stoponekeyalarm.config(state=DISABLED) def sendselfcheck(self): self.mdvrcli.sendselfcheck() def _sendnormalgps(self): self.mdvrcli.sendgps(0) def _trafficfenceidsreflash(self): for i in range(10): self.trafficfenceids[i].config(state=NORMAL) self.trafficfenceids[i].delete(1.0, END) for i in range(len(self.mdvrcli.trafficfenceid)): self.trafficfenceids[i].insert(1.0, self.mdvrcli.trafficfenceid[i]) for i in range(10): self.trafficfenceids[i].config(state=DISABLED) def changesubtype(self): if self.subtype.get() == 13: self.speedoverlowertips.config(fg='black') self.speedoverlower1.config(state=NORMAL) self.speedoverlower2.config(state=NORMAL) self.inout1.config(state=DISABLED) self.inout2.config(state=DISABLED) self.inouttips.config(fg='gray') self.inout.set(1) elif self.subtype.get() == 12: self.speedoverlowertips.config(fg='gray') self.speedoverlower1.config(state=DISABLED) self.speedoverlower2.config(state=DISABLED) self.inout1.config(state=NORMAL) self.inout2.config(state=NORMAL) self.inouttips.config(fg='black') def _fencealert(self): if self.subtype.get() == 12: #print 12 self.mdvrcli.sendV79(self.inout.get(), self.trafficfenceid.get(), 12) elif self.subtype.get() == 13: #print 13 self.mdvrcli.sendV79(self.inout.get(), self.trafficfenceid.get(), 13, self.speedoverlower.get(), self.minspeed.get(), self.maxspeed.get(), self.duringtime.get(), self.alarmminspeed.get(), self.alarmmaxspeed.get()) def _sendcarid(self): self.mdvrcli.carID = self.carid.get() self.mdvrcli.sendonline() def _insertvideodata(self): try: filename = self.mdvrcli.insertvideotodatabase(self.databaseip.get(), self.instancename.get(), self.username.get(), self.password.get()) except: showerror('ERROR', '无法连接,请检查数据库配置!!!') else: showinfo('','已插入视频数据,文件名:%s' % filename) def _speedrulereflash(self): self.speedruleonoff.config(text='开启' if self.mdvrcli.speedrule[0] else '关闭') self.speedrulemin.config(text=self.mdvrcli.speedrule[1]) self.speedrulemax.config(text=self.mdvrcli.speedrule[2]) self.speedruletime.config(text=self.mdvrcli.speedrule[3]) def _overspeedalert(self): self.mdvrcli.sendV70(self.minspeed.get(), self.maxspeed.get(), self.duringtime.get()) def _temperaturealert(self): self.mdvrcli.sendV68(self.temperaturetype.get(), self.currenttemperature.get(), self.mintemperature.get(), self.maxtemperature.get(), self.temperaturealerttype.get()) def test(self): self.mdvrcli.trafficfenceid = ['12345', '23456', '34567', '45678', '56789', '67890', '78901'] self.mdvrcli.speedrule = (True, 0,123,444) def _lastreflash(self): self.lastreceive.config(text=self.mdvrcli.lastreceive) def _gpsalert(self): self.mdvrcli.sendV75(self.gpsalerttype.get(), self.histime.get(), self.hisgps1.get(), self.hisgps2.get()) def _nonvideo(self): if self.mdvrcli.sendV63((self.videoalert[0].get(), self.videoalert[1].get(), self.videoalert[2].get(), self.videoalert[3].get())) == -1: showerror('ERROR', '请至少勾选一个无信号的通道号!!!') def _sdalert(self): errcode = [] for i in self.sderrorcode: if i.get() != '': break else: showerror('ERROR', '请至少勾选一个存储卡错误类型') return -1 for i in self.sderrorcode: if i.get() != '': errcode.append(i.get()) self.mdvrcli.sendV69(errcode) def _voltagealert(self): self.mdvrcli.sendV78(int(float(self.currentvoltage.get())*10), int(float(self.minvoltage.get())*10), int(float(self.maxvoltage.get())*10), self.voltagealerttype.get()) def _exit(self): for i in self.defaultvalue: self.config.set("CONFIG", i, eval('self.%s.get()' % i)) f = open('etc/config.ini', "w+") self.config.write(f) self.config.write(f) f.close() try: self.mdvrcli.stop() except AttributeError: pass self.root.quit() def inputbox(self, name, tips, father, limit, checkrule, defaultvalue='', state='NORMAL'): super(GuiMDVR, self).inputbox(name, tips, father, limit, checkrule, self.config.get('CONFIG', name), state) # super(GuiMDVR, self).inputbox(name, tips, father, limit, checkrule, defaultvalue, state) self.defaultvalue[name] = self.config.get('CONFIG', name) def _sendcustommessage(self): message = self.custommessage.get(1.0, END).strip() self.mdvrcli.sock.send(message) self.mdvrcli.log('send :', message) def _reset(self): if askyesno('', '重置将覆盖当前输入框信息,无法恢复,是否继续??'): for i in self.defaultvalue: exec('self.%s.delete(0, END)' % i) exec('self.%s.insert(0, "%s")' % (i, self.defaultvalue[i])) def _recover(self): if askyesno('','恢复出厂设置将覆盖当前输入框信息,无法恢复,是否继续?'): recover = ConfigParser.ConfigParser() recover.read('etc/config_original.ini') for i in self.defaultvalue: self.defaultvalue[i] = recover.get('CONFIG', i) exec('self.%s.delete(0, END)' % i) exec('self.%s.insert(0, "%s")' % (i, self.defaultvalue[i])) def _trafficfenceidsreset(self): self.mdvrcli.trafficfenceid = [] self._trafficfenceidsreflash() def _speedrulereset(self): self.mdvrcli.speedrule = (False, 0, 0, 0) self._speedrulereflash()