DeviceControlDemo.py 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. # coding=utf-8
  2. import os
  3. import sys
  4. from PyQt5.QtWidgets import QApplication, QMainWindow, QMessageBox
  5. from PyQt5.QtCore import Qt, QDateTime
  6. from ctypes import *
  7. from DeviceControlUI import Ui_MainWindow
  8. from NetSDK.NetSDK import NetClient
  9. from NetSDK.SDK_Callback import fDisConnect, fHaveReConnect
  10. from NetSDK.SDK_Enum import EM_DEV_CFG_TYPE, EM_LOGIN_SPAC_CAP_TYPE
  11. 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
  12. file = "d:/log.log"
  13. @CB_FUNCTYPE(c_int, c_char_p, c_uint, C_LDWORD)
  14. def SDKLogCallBack(szLogBuffer, nLogSize, dwUser):
  15. try:
  16. with open(file, 'a') as f:
  17. f.write(szLogBuffer.decode())
  18. except Exception as e:
  19. print(e)
  20. return 1
  21. class MyMainWindow(QMainWindow, Ui_MainWindow):
  22. def __init__(self, parent=None):
  23. super(MyMainWindow, self).__init__(parent)
  24. self.setupUi(self)
  25. # 界面初始化
  26. self._init_ui()
  27. # NetSDK用到的相关变量和回调
  28. self.loginID = C_LLONG()
  29. self.m_DisConnectCallBack = fDisConnect(self.DisConnectCallBack)
  30. self.m_ReConnectCallBack = fHaveReConnect(self.ReConnectCallBack)
  31. # 获取NetSDK对象并初始化
  32. self.sdk = NetClient()
  33. self.sdk.InitEx(self.m_DisConnectCallBack)
  34. self.sdk.SetAutoReconnect(self.m_ReConnectCallBack)
  35. # 初始化界面
  36. def _init_ui(self):
  37. self.Login_pushButton.setText('登录(Login)')
  38. self.IP_lineEdit.setText('172.23.29.53')
  39. self.Port_lineEdit.setText('37777')
  40. self.Name_lineEdit.setText('admin')
  41. self.Pwd_lineEdit.setText('admin123')
  42. self.setWindowFlag(Qt.WindowMinimizeButtonHint)
  43. self.setWindowFlag(Qt.WindowCloseButtonHint)
  44. self.setFixedSize(self.width(), self.height())
  45. self.Login_pushButton.clicked.connect(self.login_btn_onclick)
  46. self.OpenLog_pushButton.clicked.connect(self.openlog_btn_onclick)
  47. self.CloseLog_pushButton.clicked.connect(self.closelog_btn_onclick)
  48. self.GetTime_pushButton.clicked.connect(self.gettime_btn_onclick)
  49. self.SetTime_pushButton.clicked.connect(self.settime_btn_onclick)
  50. self.Restart_pushButton.clicked.connect(self.restart_btn_onclick)
  51. def login_btn_onclick(self):
  52. if not self.loginID:
  53. ip = self.IP_lineEdit.text()
  54. port = int(self.Port_lineEdit.text())
  55. username = self.Name_lineEdit.text()
  56. password = self.Pwd_lineEdit.text()
  57. stuInParam = NET_IN_LOGIN_WITH_HIGHLEVEL_SECURITY()
  58. stuInParam.dwSize = sizeof(NET_IN_LOGIN_WITH_HIGHLEVEL_SECURITY)
  59. stuInParam.szIP = ip.encode()
  60. stuInParam.nPort = port
  61. stuInParam.szUserName = username.encode()
  62. stuInParam.szPassword = password.encode()
  63. stuInParam.emSpecCap = EM_LOGIN_SPAC_CAP_TYPE.TCP
  64. stuInParam.pCapParam = None
  65. stuOutParam = NET_OUT_LOGIN_WITH_HIGHLEVEL_SECURITY()
  66. stuOutParam.dwSize = sizeof(NET_OUT_LOGIN_WITH_HIGHLEVEL_SECURITY)
  67. self.loginID, device_info, error_msg = self.sdk.LoginWithHighLevelSecurity(stuInParam, stuOutParam)
  68. if self.loginID != 0:
  69. self.setWindowTitle('设备控制(DeviceControl)-在线(OnLine)')
  70. self.Login_pushButton.setText('登出(Logout)')
  71. else:
  72. QMessageBox.about(self, '提示(prompt)', error_msg)
  73. else:
  74. result = self.sdk.Logout(self.loginID)
  75. if result:
  76. self.setWindowTitle("设备控制(DeviceControl)-离线(OffLine)")
  77. self.Login_pushButton.setText("登录(Login)")
  78. self.loginID = 0
  79. def openlog_btn_onclick(self):
  80. log_info = LOG_SET_PRINT_INFO()
  81. log_info.dwSize = sizeof(LOG_SET_PRINT_INFO)
  82. log_info.bSetFilePath = 1
  83. log_info.szLogFilePath = os.path.join(os.getcwd(), 'sdk_log.log').encode('gbk')
  84. log_info.cbSDKLogCallBack = SDKLogCallBack
  85. result = self.sdk.LogOpen(log_info)
  86. if not result:
  87. QMessageBox.about(self, '提示(prompt)', self.sdk.GetLastErrorMessage())
  88. def closelog_btn_onclick(self):
  89. result = self.sdk.LogClose()
  90. if not result:
  91. QMessageBox.about(self, '提示(prompt)', self.sdk.GetLastErrorMessage())
  92. def gettime_btn_onclick(self):
  93. time = NET_TIME()
  94. result = self.sdk.GetDevConfig(self.loginID, int(EM_DEV_CFG_TYPE.TIMECFG), -1, time, sizeof(NET_TIME))
  95. if not result:
  96. QMessageBox.about(self, '提示(prompt)', self.sdk.GetLastErrorMessage())
  97. else:
  98. get_time = QDateTime(time.dwYear, time.dwMonth, time.dwDay, time.dwHour, time.dwMinute, time.dwSecond)
  99. self.Time_dateTimeEdit.setDateTime(get_time)
  100. def settime_btn_onclick(self):
  101. device_date = self.Time_dateTimeEdit.date()
  102. device_time = self.Time_dateTimeEdit.time()
  103. deviceDateTime = NET_TIME()
  104. deviceDateTime.dwYear = device_date.year()
  105. deviceDateTime.dwMonth = device_date.month()
  106. deviceDateTime.dwDay = device_date.day()
  107. deviceDateTime.dwHour = device_time.hour()
  108. deviceDateTime.dwMinute = device_time.minute()
  109. deviceDateTime.dwSecond = device_time.second()
  110. result = self.sdk.SetDevConfig(self.loginID, int(EM_DEV_CFG_TYPE.TIMECFG), -1,
  111. deviceDateTime, sizeof(NET_TIME))
  112. if not result:
  113. QMessageBox.about(self, '提示(prompt)', self.sdk.GetLastErrorMessage())
  114. def restart_btn_onclick(self):
  115. result = self.sdk.RebootDev(self.loginID)
  116. if not result:
  117. QMessageBox.about(self, '提示(prompt)', self.sdk.GetLastErrorMessage())
  118. else:
  119. QMessageBox.about(self, '提示(prompt)', '重启成功(restart succeed)')
  120. # 实现断线回调函数功能
  121. def DisConnectCallBack(self, lLoginID, pchDVRIP, nDVRPort, dwUser):
  122. self.setWindowTitle("设备控制(DeviceControl)-离线(OffLine)")
  123. # 实现断线重连回调函数功能
  124. def ReConnectCallBack(self, lLoginID, pchDVRIP, nDVRPort, dwUser):
  125. self.setWindowTitle('设备控制(DeviceControl)-在线(OnLine)')
  126. # 关闭主窗口时清理资源
  127. def closeEvent(self, event):
  128. event.accept()
  129. if self.loginID:
  130. self.sdk.Logout(self.loginID)
  131. self.sdk.Cleanup()
  132. if __name__ == '__main__':
  133. app = QApplication(sys.argv)
  134. my_wnd = MyMainWindow()
  135. wnd = my_wnd
  136. my_wnd.show()
  137. sys.exit(app.exec_())