device_simulate.py 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. # -*- coding: utf-8 -*-
  2. # !/usr/bin/env python
  3. import datetime
  4. import os
  5. import simplejson as json
  6. import threading
  7. from gevent import socket
  8. import struct
  9. from contextlib import closing
  10. import time
  11. def get_bytes_from_str(strMsg):
  12. result = bytes()
  13. if len(strMsg) % 2 != 0:
  14. return None
  15. for ii in range(len(strMsg) / 2):
  16. temp = int('%s%s' % (strMsg[2 * ii], strMsg[2 * ii + 1]), 16)
  17. result += struct.pack('B', temp)
  18. return result
  19. gclient = None
  20. server = 'localhost'
  21. port = 8770
  22. def print_info():
  23. while True:
  24. try:
  25. global gclient
  26. if not gclient:
  27. time.sleep(2)
  28. continue
  29. data = gclient.recv(1024) # 这里是字节1k
  30. if not data:
  31. time.sleep(0.5)
  32. continue
  33. data = data.decode()
  34. print("receive msg:", data)
  35. # 根据服务器下发的指令,构造回复指令
  36. cmdType = data[10:12]
  37. if cmdType == '12': # 读取实时监测数据
  38. sendMsg = '68401A0300130000000000000000000000000000000055031412782305010001010200000000000000000000000000000000000000000000000000000000000000005C7A'
  39. elif cmdType == '34': # 运营平台远程控制启机
  40. sendMsg = '681E1A03003332010200000000111511161555350260320102000000010101008643'
  41. elif cmdType == '36':
  42. sendMsg = '680E1A030035320102000000010101002704'
  43. elif cmdType == '42':
  44. sendMsg = '68130A0300415503141278230500000000D14B0A540198E2'
  45. elif cmdType == '44':
  46. sendMsg = '680D1A030043550314127823050100BD84'
  47. elif cmdType == '46':
  48. sendMsg = '680D1A0300455503141278230500000000D14B0A540000000000E14C0A5400'
  49. elif cmdType == '48':
  50. sendMsg = '680D1A0300475503141278230500000000D14B0A540100000000E14C0A54005DB3'
  51. elif cmdType == '52':
  52. sendMsg = '680C1A030051550314127823050125DC'
  53. elif cmdType == '56':
  54. sendMsg = '68121A0300555503141278230598B70E11100314ADAC'
  55. elif cmdType == '58':
  56. sendMsg = '680C1A03005755031412782305010E7C'
  57. elif cmdType == '62':
  58. sendMsg = '680D1A0300635503141278230501000000000045A5'
  59. elif cmdType == '92':
  60. sendMsg = '680C1A030091550314127823050175D9'
  61. elif cmdType == '94':
  62. sendMsg = '680C1A03009355031412782305016CB9'
  63. elif cmdType == 'A4':
  64. sendMsg = '68251A0300A3550314127823051151116155535026055031412782305010100002010291128018D3C'
  65. else:
  66. continue
  67. gclient.sendall(sendMsg)
  68. except Exception, e:
  69. time.sleep(1)
  70. continue
  71. #  打印收到消息的线程
  72. receiveThread = threading.Thread(target=print_info)
  73. receiveThread.setDaemon(True)
  74. receiveThread.start()
  75. # 登录请求:6822200000013201060011030801020F30322E37302E31300001010101010101010101045AC7
  76. # 不存在的设备登录请求:6822000000015603141278230500020F56342E312E3530000101010101010101010101040CC2
  77. # 心跳请求:680D00010003320106001103080100B83C 680D0001000332010600110308010178FD
  78. # 请求核对计费模型:680D000200055503141278230500014446 680D000200055503141278230500020447
  79. # 请求新的计费模型:680B0200000955031412782305A451
  80. # 订单实时信息:68401A0300130000000000000000000000000000000055031412782305010001010200000000000000000000000000000000000000000000000000000000000000005C7A
  81. # 刷卡启动:6837000400315503141278230501010000000000D14B0A5400000000000000000000000000000000000000000000000000000000000000000070DF
  82. # 订单结束:
  83. # 回复离线统计数据: 68401A0300130000000000000000000000000000000055031412782305010001010200000000000000000000000000000000000000000000000000000000000000005C7A
  84. while True:
  85. strSendMsg = raw_input(u"please input msg: ")
  86. try:
  87. sendMsg = get_bytes_from_str(strSendMsg) #
  88. if not gclient:
  89. gclient = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  90. gclient.connect((server, port))
  91. # gclient.send(strSendMsg.encode('utf-8'))
  92. gclient.sendall(sendMsg)
  93. # msg = gclient.recv(1024)
  94. # print(msg)
  95. time.sleep(5)
  96. except Exception, e:
  97. gclient = None
  98. print "dddddddddddd",e
  99. print '\nhello'
  100. #'6822010000013201101001103001010E595F315F30355F370000000000000000000000049298'
  101. # 银达尔透传模块,久恒模块
  102. # 7B2266766572223A225945445F4454555F312E322E30222C226963636964223A223839383630343931313032313833333935363333222C22696D6569223A22383636323530303631323735363130222C22637371223A31367D
  103. # AA0401000005
  104. # 550501010A010E
  105. # import socket
  106. # import sys
  107. #
  108. # receive_count = 0
  109. #
  110. # def start_tcp_client(ip,port):
  111. # ###create socket
  112. # s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  113. #
  114. # failed_count = 0
  115. # while True:
  116. # try:
  117. # print("start connect to server ")
  118. # s.connect((ip,port))
  119. # break
  120. # except socket.error:
  121. # failed_count += 1
  122. # print("fail to connect to server %d times" % failed_count)
  123. # if failed_count == 100: return
  124. #
  125. # # send and receive
  126. # while True:
  127. # print("connect success")
  128. #
  129. # #get the socket send buffer size and receive buffer size
  130. # s_send_buffer_size = s.getsockopt(socket.SOL_SOCKET, socket.SO_SNDBUF)
  131. # s_receive_buffer_size = s.getsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF)
  132. #
  133. # print("client TCP send buffer size is %d" % s_send_buffer_size)
  134. # print("client TCP receive buffer size is %d" %s_receive_buffer_size)
  135. #
  136. # receive_count = 0
  137. # while True:
  138. # msg = raw_input(u"请输入设备主动上报给服务器的消息: ")
  139. # s.send(msg.encode('utf-8'))
  140. # print("send len is : [%d]" % len(msg))
  141. #
  142. # msg = s.recv(1024)
  143. # print(msg.decode('utf-8'))
  144. # print("recv len is : [%d]" % len(msg))
  145. #
  146. # receive_count+= 1
  147. #
  148. # # if receive_count==14:
  149. # # msg = 'disconnect'
  150. # # print("total send times is : %d " % receive_count)
  151. # # s.send(msg.encode('utf-8'))
  152. # # break
  153. # break
  154. #
  155. # s.close()
  156. #
  157. # start_tcp_client('127.0.0.1',6000)