cbd_device.py 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. # coding:utf-8
  2. import os
  3. import sys
  4. import time
  5. local_path = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))
  6. if local_path not in sys.path:
  7. sys.path.append(local_path)
  8. os.environ.setdefault("DJANGO_SETTINGS_MODULE", "kedong.settings")
  9. from django.conf import settings
  10. from kedong.tools import RedisPool
  11. from scripts.tools.utils import dashuju_pub_mqtt
  12. cbd_redis_pool = RedisPool().get_redis_pool(settings.redis_db["cbd"])
  13. def re_cbd_publish(payload):
  14. if settings.DEBUG:
  15. return None
  16. imei_id = payload['imei_id']
  17. at, ah = payload['at'], payload['ah']
  18. try:
  19. at = str(round(float(at)))
  20. except ValueError as e:
  21. at = "25"
  22. try:
  23. ah = str(round(float(ah)))
  24. except ValueError as e:
  25. print('at_error', e, payload)
  26. ah = "30"
  27. publics = "/yfkj/cbd/sub/#"
  28. TASK_TOPIC = publics.replace("#", imei_id)
  29. payload_1 = {"cmd": "sensor", "ext": {"new_hum": ah, "new_tem": at}}
  30. dashuju_pub_mqtt(TASK_TOPIC, payload_1)
  31. def re_pub_cbd_publish(data):
  32. if settings.DEBUG:
  33. return None
  34. imei_id = data['imei_id']
  35. payload = data['payload']
  36. TASK_TOPIC = ""
  37. if TASK_TOPIC:
  38. dashuju_pub_mqtt(TASK_TOPIC, payload)
  39. class CbdDeviceController(DeviceController):
  40. def cbd_device(self, data):
  41. table_name = "sa_device_cbd_data"
  42. DEVICE_NAME = "测报灯"
  43. DTYPE = 3
  44. serverconf = ''
  45. payload = data['payload']
  46. imei_id = data['imei_id']
  47. re_cbd_publish(data)
  48. re_pub_cbd_publish(data)
  49. ext = payload["ext"]
  50. dver_num = ext.get("dver", "")
  51. # 0-手动,1-GPS,2-基站
  52. gps = ext["gps"]
  53. lng, lat = data['lng'], data['lat']
  54. device_code = 0
  55. try:
  56. device_code = int(ext.get("vtype", 0))
  57. except Exception as e:
  58. pass
  59. now_time = int(time.time())
  60. device_config = {
  61. "cmd": "paramconf",
  62. "ext": {
  63. "hst": ext.get("hst", "0"),
  64. "collt": ext.get("collt", ""),
  65. "et": ext.get("et", ""),
  66. "datt": ext.get("dat_f", 30),
  67. "shake_sec": ext.get("shake_sec", 1),
  68. "tpl": ext.get("tpl", 5),
  69. "shake": ext.get("shake", 0),
  70. "tph": ext.get("tph", 0),
  71. "ts": ext.get("ts", 0),
  72. "st": ext.get("st", 0),
  73. "htim": ext.get("htim", 0),
  74. "tt": ext.get("tt", 0),
  75. "ds": ext.get("ds", 0),
  76. "ws": ext.get("ws", 0),
  77. }
  78. }
  79. temp_dict = {
  80. 'device_id': imei_id,
  81. 'device_type_id': DTYPE,
  82. 'dver_num': dver_num,
  83. 'addtime': now_time,
  84. 'uptime': now_time,
  85. 'device_name': DEVICE_NAME,
  86. 'lng': lng,
  87. 'lat': lat,
  88. 'gps': gps,
  89. 'serverconf': serverconf,
  90. 'device_status': 1,
  91. 'device_code': device_code
  92. }
  93. return temp_dict, device_config, table_name
  94. def xct_device(self, data):
  95. """吸虫塔设备"""
  96. table_name = "sa_device_xct_data"
  97. DEVICE_NAME = "吸虫塔"
  98. # 设备类型id
  99. DTYPE = 12
  100. serverconf = ''
  101. payload = data['payload']
  102. imei_id = data['imei_id']
  103. re_cbd_publish(data)
  104. ext = payload["ext"]
  105. dver_num = ext["dver"]
  106. # 0-手动,1-GPS,2-基站
  107. gps = ext["gps"]
  108. lng, lat = data["lng"], data["lat"]
  109. now_time = int(time.time())
  110. device_config = {
  111. "cmd": "paramconf",
  112. "ext": {
  113. "dat_f": ext.get("dat_f", 30), # 数据上传时间
  114. "shake_sec": ext["shake_sec"], # 震动时间
  115. "shake": ext["shake"], # 震动开关, 1开启 0关闭
  116. "ds": ext["ds"], # 设备开关机,1开机,0关机
  117. "dver": ext["dver"], # 版本号
  118. "st": ext["st"],
  119. "et": ext["et"],
  120. }
  121. }
  122. temp_dict = {
  123. 'device_id': imei_id, 'device_type_id': DTYPE, 'dver_num': dver_num,
  124. 'addtime': now_time, 'uptime': now_time, 'device_name': DEVICE_NAME,
  125. 'lng': lng, 'lat': lat, 'gps': gps, 'serverconf': serverconf, 'device_status': 1,
  126. 'device_code': DTYPE
  127. }
  128. return temp_dict, device_config, table_name
  129. def make_device_config(self, data):
  130. payload = data['payload']
  131. ext = payload["ext"]
  132. try:
  133. vtype = int(ext["vtype"])
  134. if vtype == 6:
  135. return self.xct_device(data)
  136. except Exception as e:
  137. pass
  138. return self.cbd_device(data)
  139. if __name__ == "__main__":
  140. # 正常消息订阅
  141. PUBLICS = "/yfkj/cbd/pub/#"
  142. # 离线消息订阅
  143. OFFLINE = "/yfkj/cbd/offline/#"
  144. cbd = CbdDeviceController()
  145. key = "/yfkj/cbd"
  146. while True:
  147. try:
  148. data = cbd_redis_pool.bpop(key)
  149. now_time = int(time.time())
  150. create_time = data['create_time']
  151. if now_time - create_time > 3600:
  152. continue
  153. cbd.device_controller(data)
  154. except Exception as e:
  155. print(e)