123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 |
- # coding=utf-8
- import os
- import sys
- from PyQt5.QtWidgets import QApplication, QMainWindow, QMessageBox
- from PyQt5.QtCore import Qt, QDateTime
- from ctypes import *
- from DeviceControlUI import Ui_MainWindow
- from NetSDK.NetSDK import NetClient
- from NetSDK.SDK_Callback import fDisConnect, fHaveReConnect
- from NetSDK.SDK_Enum import EM_DEV_CFG_TYPE, EM_LOGIN_SPAC_CAP_TYPE
- from NetSDK.SDK_Struct import LOG_SET_PRINT_INFO, NET_TIME, C_LDWORD, C_LLONG, NET_IN_LOGIN_WITH_HIGHLEVEL_SECURITY, NET_OUT_LOGIN_WITH_HIGHLEVEL_SECURITY, CB_FUNCTYPE
- file = "d:/log.log"
- @CB_FUNCTYPE(c_int, c_char_p, c_uint, C_LDWORD)
- def SDKLogCallBack(szLogBuffer, nLogSize, dwUser):
- try:
- with open(file, 'a') as f:
- f.write(szLogBuffer.decode())
- except Exception as e:
- print(e)
- return 1
- class MyMainWindow(QMainWindow, Ui_MainWindow):
- def __init__(self, parent=None):
- super(MyMainWindow, self).__init__(parent)
- self.setupUi(self)
- # 界面初始化
- self._init_ui()
- # NetSDK用到的相关变量和回调
- self.loginID = C_LLONG()
- self.m_DisConnectCallBack = fDisConnect(self.DisConnectCallBack)
- self.m_ReConnectCallBack = fHaveReConnect(self.ReConnectCallBack)
- # 获取NetSDK对象并初始化
- self.sdk = NetClient()
- self.sdk.InitEx(self.m_DisConnectCallBack)
- self.sdk.SetAutoReconnect(self.m_ReConnectCallBack)
- # 初始化界面
- def _init_ui(self):
- self.Login_pushButton.setText('登录(Login)')
- self.IP_lineEdit.setText('172.23.29.53')
- self.Port_lineEdit.setText('37777')
- self.Name_lineEdit.setText('admin')
- self.Pwd_lineEdit.setText('admin123')
- self.setWindowFlag(Qt.WindowMinimizeButtonHint)
- self.setWindowFlag(Qt.WindowCloseButtonHint)
- self.setFixedSize(self.width(), self.height())
- self.Login_pushButton.clicked.connect(self.login_btn_onclick)
- self.OpenLog_pushButton.clicked.connect(self.openlog_btn_onclick)
- self.CloseLog_pushButton.clicked.connect(self.closelog_btn_onclick)
- self.GetTime_pushButton.clicked.connect(self.gettime_btn_onclick)
- self.SetTime_pushButton.clicked.connect(self.settime_btn_onclick)
- self.Restart_pushButton.clicked.connect(self.restart_btn_onclick)
- def login_btn_onclick(self):
- if not self.loginID:
- ip = self.IP_lineEdit.text()
- port = int(self.Port_lineEdit.text())
- username = self.Name_lineEdit.text()
- password = self.Pwd_lineEdit.text()
- stuInParam = NET_IN_LOGIN_WITH_HIGHLEVEL_SECURITY()
- stuInParam.dwSize = sizeof(NET_IN_LOGIN_WITH_HIGHLEVEL_SECURITY)
- stuInParam.szIP = ip.encode()
- stuInParam.nPort = port
- stuInParam.szUserName = username.encode()
- stuInParam.szPassword = password.encode()
- stuInParam.emSpecCap = EM_LOGIN_SPAC_CAP_TYPE.TCP
- stuInParam.pCapParam = None
- stuOutParam = NET_OUT_LOGIN_WITH_HIGHLEVEL_SECURITY()
- stuOutParam.dwSize = sizeof(NET_OUT_LOGIN_WITH_HIGHLEVEL_SECURITY)
- self.loginID, device_info, error_msg = self.sdk.LoginWithHighLevelSecurity(stuInParam, stuOutParam)
- if self.loginID != 0:
- self.setWindowTitle('设备控制(DeviceControl)-在线(OnLine)')
- self.Login_pushButton.setText('登出(Logout)')
- else:
- QMessageBox.about(self, '提示(prompt)', error_msg)
- else:
- result = self.sdk.Logout(self.loginID)
- if result:
- self.setWindowTitle("设备控制(DeviceControl)-离线(OffLine)")
- self.Login_pushButton.setText("登录(Login)")
- self.loginID = 0
- def openlog_btn_onclick(self):
- log_info = LOG_SET_PRINT_INFO()
- log_info.dwSize = sizeof(LOG_SET_PRINT_INFO)
- log_info.bSetFilePath = 1
- log_info.szLogFilePath = os.path.join(os.getcwd(), 'sdk_log.log').encode('gbk')
- log_info.cbSDKLogCallBack = SDKLogCallBack
- result = self.sdk.LogOpen(log_info)
- if not result:
- QMessageBox.about(self, '提示(prompt)', self.sdk.GetLastErrorMessage())
- def closelog_btn_onclick(self):
- result = self.sdk.LogClose()
- if not result:
- QMessageBox.about(self, '提示(prompt)', self.sdk.GetLastErrorMessage())
- def gettime_btn_onclick(self):
- time = NET_TIME()
- result = self.sdk.GetDevConfig(self.loginID, int(EM_DEV_CFG_TYPE.TIMECFG), -1, time, sizeof(NET_TIME))
- if not result:
- QMessageBox.about(self, '提示(prompt)', self.sdk.GetLastErrorMessage())
- else:
- get_time = QDateTime(time.dwYear, time.dwMonth, time.dwDay, time.dwHour, time.dwMinute, time.dwSecond)
- self.Time_dateTimeEdit.setDateTime(get_time)
- def settime_btn_onclick(self):
- device_date = self.Time_dateTimeEdit.date()
- device_time = self.Time_dateTimeEdit.time()
- deviceDateTime = NET_TIME()
- deviceDateTime.dwYear = device_date.year()
- deviceDateTime.dwMonth = device_date.month()
- deviceDateTime.dwDay = device_date.day()
- deviceDateTime.dwHour = device_time.hour()
- deviceDateTime.dwMinute = device_time.minute()
- deviceDateTime.dwSecond = device_time.second()
- result = self.sdk.SetDevConfig(self.loginID, int(EM_DEV_CFG_TYPE.TIMECFG), -1,
- deviceDateTime, sizeof(NET_TIME))
- if not result:
- QMessageBox.about(self, '提示(prompt)', self.sdk.GetLastErrorMessage())
- def restart_btn_onclick(self):
- result = self.sdk.RebootDev(self.loginID)
- if not result:
- QMessageBox.about(self, '提示(prompt)', self.sdk.GetLastErrorMessage())
- else:
- QMessageBox.about(self, '提示(prompt)', '重启成功(restart succeed)')
- # 实现断线回调函数功能
- def DisConnectCallBack(self, lLoginID, pchDVRIP, nDVRPort, dwUser):
- self.setWindowTitle("设备控制(DeviceControl)-离线(OffLine)")
- # 实现断线重连回调函数功能
- def ReConnectCallBack(self, lLoginID, pchDVRIP, nDVRPort, dwUser):
- self.setWindowTitle('设备控制(DeviceControl)-在线(OnLine)')
- # 关闭主窗口时清理资源
- def closeEvent(self, event):
- event.accept()
- if self.loginID:
- self.sdk.Logout(self.loginID)
- self.sdk.Cleanup()
- if __name__ == '__main__':
- app = QApplication(sys.argv)
- my_wnd = MyMainWindow()
- wnd = my_wnd
- my_wnd.show()
- sys.exit(app.exec_())
|