qxz_mqtt_new.py 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657
  1. # -*- coding: utf-8 -*-
  2. # File Name:mqtt_chat_client.py
  3. # Python Version:3.5.1
  4. import os
  5. import django
  6. import sys
  7. BASE_DIR = os.path.dirname(os.path.abspath(__file__)) # 定位到你的django根目录
  8. sys.path.append(os.path.abspath(os.path.join(BASE_DIR, os.pardir)))
  9. os.environ.setdefault("DJANGO_SETTINGS_MODULE",
  10. "yfwlw_pro.settings") # project_name 项目名称
  11. django.setup()
  12. print("<-----python_mqtt_client_qxz is run----->")
  13. import paho.mqtt.client as mqtt
  14. import json
  15. from apps.AppInfoManage.models import Equip, Equip_type, MyUser, Alarm_record, QXZdata, QXZstatus, QXZswitchstatus, QXZswitchdata, QXZAutoswitch, QXZTimingswitch, QXZstatus_New, \
  16. QXZdata_New, QXZ_Conf, QXZ_Default_Conf, QXZ_Base_Info, QXZ_Info_Record
  17. import re
  18. import datetime
  19. from apps.ReportManage.all_dict import qxz_dict
  20. class CJSONEncoder(json.JSONEncoder):
  21. def default(self, obj):
  22. if isinstance(obj, datetime):
  23. return obj.strftime('%Y-%m-%d %H:%M:%S')
  24. elif isinstance(obj, date):
  25. return obj.strftime('%Y-%m-%d')
  26. else:
  27. return json.JSONEncoder.default(self, obj)
  28. # 连接后的操作: 0为成功
  29. def on_connect(client, userdata, flags, rc):
  30. # print("Connected with result code "+str(rc))
  31. client.subscribe("/yfkj/qxz/pub/#")
  32. client.subscribe("/yfkj/qxz/offline/#")
  33. # *****成功发布******
  34. def on_publish(msg, rc):
  35. if rc == 0:
  36. print("publish success,msg = "+msg)
  37. # 从服务器接受到消息后回调此函数 :
  38. def on_message(client, userdata, msg):
  39. print('\r')
  40. print('=================================================')
  41. print('\r')
  42. print("<-----topic:\n" + msg.topic + ';\n')
  43. print("Message:\n" + str(msg.payload) + "----->\n")
  44. # 从主题中获取imei
  45. # imei = msg.topic[14:len(msg.topic)]
  46. imei = re.sub("\D", "", msg.topic)
  47. print("<-----imei:", imei, "----->")
  48. try:
  49. # 判断主题:
  50. if "pub" in msg.topic:
  51. # 将json字符串解析:
  52. payload = json.loads(msg.payload.decode())
  53. qxz_exist = Equip.objects.filter(equip_id=imei)
  54. if payload.get("cmd") == "terminalData":
  55. print("<-----uploading data!----->")
  56. extdata = payload.get("ext")
  57. print(type(extdata))
  58. qxzdata = extdata['data']
  59. print(qxzdata)
  60. e1 = ''
  61. e2 = ''
  62. e3 = ''
  63. e4 = ''
  64. e5 = ''
  65. e6 = ''
  66. e7 = ''
  67. e8 = ''
  68. e9 = ''
  69. e10 = ''
  70. e11 = ''
  71. e12 = ''
  72. e13 = ''
  73. e14 = ''
  74. e15 = ''
  75. e16 = ''
  76. e17 = ''
  77. e18 = ''
  78. e19 = ''
  79. e20 = ''
  80. e21 = ''
  81. e22 = ''
  82. e23 = ''
  83. e24 = ''
  84. e25 = ''
  85. e26 = ''
  86. e27 = ''
  87. e28 = ''
  88. e29 = ''
  89. e30 = ''
  90. conf1 = ''
  91. conf2 = ''
  92. conf3 = ''
  93. conf4 = ''
  94. conf5 = ''
  95. conf6 = ''
  96. conf7 = ''
  97. conf8 = ''
  98. conf9 = ''
  99. conf10 = ''
  100. conf11 = ''
  101. conf12 = ''
  102. conf13 = ''
  103. conf14 = ''
  104. conf15 = ''
  105. conf16 = ''
  106. conf17 = ''
  107. conf18 = ''
  108. conf19 = ''
  109. conf20 = ''
  110. conf21 = ''
  111. conf22 = ''
  112. conf23 = ''
  113. conf24 = ''
  114. conf25 = ''
  115. conf26 = ''
  116. conf27 = ''
  117. conf28 = ''
  118. conf29 = ''
  119. conf30 = ''
  120. for i in qxzdata:
  121. if i['eNum'] == "102" and float(i['eValue']) > 100:
  122. i['eValue'] = "100"
  123. if i['eKey'] == 'e1':
  124. e1 = str(i['eValue']) + '#' + str(i['eNum']) + '#' + str(i['eKey'])
  125. conf1 = qxz_dict[i['eNum']][1] + '#' + qxz_dict[i['eNum']][2]
  126. if e1[0] == "#":
  127. continue
  128. elif i['eKey'] == 'e2':
  129. e2 = str(i['eValue']) + '#' + str(i['eNum']) + '#' + str(i['eKey'])
  130. conf2 = qxz_dict[i['eNum']][1] + '#' + qxz_dict[i['eNum']][2]
  131. if e2[0] == "#":
  132. continue
  133. elif i['eKey'] == 'e3':
  134. e3 = str(i['eValue']) + '#' + str(i['eNum']) + '#' + str(i['eKey'])
  135. conf3 = qxz_dict[i['eNum']][1] + '#' + qxz_dict[i['eNum']][2]
  136. if e3[0] == "#":
  137. continue
  138. elif i['eKey'] == 'e4':
  139. e4 = str(i['eValue']) + '#' + str(i['eNum']) + '#' + str(i['eKey'])
  140. conf4 = qxz_dict[i['eNum']][1] + '#' + qxz_dict[i['eNum']][2]
  141. if e4[0] == "#":
  142. continue
  143. elif i['eKey'] == 'e5':
  144. e5 = str(i['eValue']) + '#' + str(i['eNum']) + '#' + str(i['eKey'])
  145. conf5 = qxz_dict[i['eNum']][1] + '#' + qxz_dict[i['eNum']][2]
  146. if e5[0] == "#":
  147. continue
  148. elif i['eKey'] == 'e6':
  149. e6 = str(i['eValue']) + '#' + str(i['eNum']) + '#' + str(i['eKey'])
  150. conf6 = qxz_dict[i['eNum']][1] + '#' + qxz_dict[i['eNum']][2]
  151. if e6[0] == "#":
  152. continue
  153. elif i['eKey'] == 'e7':
  154. e7 = str(i['eValue']) + '#' + str(i['eNum']) + '#' + str(i['eKey'])
  155. conf7 = qxz_dict[i['eNum']][1] + '#' + qxz_dict[i['eNum']][2]
  156. if e7[0] == "#":
  157. continue
  158. elif i['eKey'] == 'e8':
  159. e8 = str(i['eValue']) + '#' + str(i['eNum']) + '#' + str(i['eKey'])
  160. conf8 = qxz_dict[i['eNum']][1] + '#' + qxz_dict[i['eNum']][2]
  161. if e8[0] == "#":
  162. continue
  163. elif i['eKey'] == 'e9':
  164. e9 = str(i['eValue']) + '#' + str(i['eNum']) + '#' + str(i['eKey'])
  165. conf9 = qxz_dict[i['eNum']][1] + '#' + qxz_dict[i['eNum']][2]
  166. if e9[0] == "#":
  167. continue
  168. elif i['eKey'] == 'e10':
  169. e10 = str(i['eValue']) + '#' + str(i['eNum']) + '#' + str(i['eKey'])
  170. conf10 = qxz_dict[i['eNum']][1] + '#' + qxz_dict[i['eNum']][2]
  171. if e10[0] == "#":
  172. continue
  173. elif i['eKey'] == 'e11':
  174. e11 = str(i['eValue']) + '#' + str(i['eNum']) + '#' + str(i['eKey'])
  175. conf11 = qxz_dict[i['eNum']][1] + '#' + qxz_dict[i['eNum']][2]
  176. if e11[0] == "#":
  177. continue
  178. elif i['eKey'] == 'e12':
  179. e12 = str(i['eValue']) + '#' + str(i['eNum']) + '#' + str(i['eKey'])
  180. conf12 = qxz_dict[i['eNum']][1] + '#' + qxz_dict[i['eNum']][2]
  181. if e12[0] == "#":
  182. continue
  183. elif i['eKey'] == 'e13':
  184. e13 = str(i['eValue']) + '#' + str(i['eNum']) + '#' + str(i['eKey'])
  185. conf13 = qxz_dict[i['eNum']][1] + '#' + qxz_dict[i['eNum']][2]
  186. if e13[0] == "#":
  187. continue
  188. elif i['eKey'] == 'e14':
  189. e14 = str(i['eValue']) + '#' + str(i['eNum']) + '#' + str(i['eKey'])
  190. conf14 = qxz_dict[i['eNum']][1] + '#' + qxz_dict[i['eNum']][2]
  191. if e14[0] == "#":
  192. continue
  193. elif i['eKey'] == 'e15':
  194. e15 = str(i['eValue']) + '#' + str(i['eNum']) + '#' + str(i['eKey'])
  195. conf15 = qxz_dict[i['eNum']][1] + '#' + qxz_dict[i['eNum']][2]
  196. if e15[0] == "#":
  197. continue
  198. elif i['eKey'] == 'e16':
  199. e16 = str(i['eValue']) + '#' + str(i['eNum']) + '#' + str(i['eKey'])
  200. conf16 = qxz_dict[i['eNum']][1] + '#' + qxz_dict[i['eNum']][2]
  201. if e16[0] == "#":
  202. continue
  203. elif i['eKey'] == 'e17':
  204. e17 = str(i['eValue']) + '#' + str(i['eNum']) + '#' + str(i['eKey'])
  205. conf17 = qxz_dict[i['eNum']][1] + '#' + qxz_dict[i['eNum']][2]
  206. if e17[0] == "#":
  207. continue
  208. elif i['eKey'] == 'e18':
  209. e18 = str(i['eValue']) + '#' + str(i['eNum']) + '#' + str(i['eKey'])
  210. conf18 = qxz_dict[i['eNum']][1] + '#' + qxz_dict[i['eNum']][2]
  211. if e18[0] == "#":
  212. continue
  213. elif i['eKey'] == 'e19':
  214. e19 = str(i['eValue']) + '#' + str(i['eNum']) + '#' + str(i['eKey'])
  215. conf19 = qxz_dict[i['eNum']][1] + '#' + qxz_dict[i['eNum']][2]
  216. if e19[0] == "#":
  217. continue
  218. elif i['eKey'] == 'e20':
  219. e20 = str(i['eValue']) + '#' + str(i['eNum']) + '#' + str(i['eKey'])
  220. conf20 = qxz_dict[i['eNum']][1] + '#' + qxz_dict[i['eNum']][2]
  221. if e20[0] == "#":
  222. continue
  223. elif i['eKey'] == 'e21':
  224. e21 = str(i['eValue']) + '#' + str(i['eNum']) + '#' + str(i['eKey'])
  225. conf21 = qxz_dict[i['eNum']][1] + '#' + qxz_dict[i['eNum']][2]
  226. if e21[0] == "#":
  227. continue
  228. elif i['eKey'] == 'e22':
  229. e22 = str(i['eValue']) + '#' + str(i['eNum']) + '#' + str(i['eKey'])
  230. conf22 = qxz_dict[i['eNum']][1] + '#' + qxz_dict[i['eNum']][2]
  231. if e22[0] == "#":
  232. continue
  233. elif i['eKey'] == 'e23':
  234. e23 = str(i['eValue']) + '#' + str(i['eNum']) + '#' + str(i['eKey'])
  235. conf23 = qxz_dict[i['eNum']][1] + '#' + qxz_dict[i['eNum']][2]
  236. if e23[0] == "#":
  237. continue
  238. elif i['eKey'] == 'e24':
  239. e24 = str(i['eValue']) + '#' + str(i['eNum']) + '#' + str(i['eKey'])
  240. conf24 = qxz_dict[i['eNum']][1] + '#' + qxz_dict[i['eNum']][2]
  241. if e24[0] == "#":
  242. continue
  243. elif i['eKey'] == 'e25':
  244. e25 = str(i['eValue']) + '#' + str(i['eNum']) + '#' + str(i['eKey'])
  245. conf25 = qxz_dict[i['eNum']][1] + '#' + qxz_dict[i['eNum']][2]
  246. if e25[0] == "#":
  247. continue
  248. elif i['eKey'] == 'e26':
  249. e26 = str(i['eValue']) + '#' + str(i['eNum']) + '#' + str(i['eKey'])
  250. conf26 = qxz_dict[i['eNum']][1] + '#' + qxz_dict[i['eNum']][2]
  251. if e26[0] == "#":
  252. continue
  253. elif i['eKey'] == 'e27':
  254. e27 = str(i['eValue']) + '#' + str(i['eNum']) + '#' + str(i['eKey'])
  255. conf27 = qxz_dict[i['eNum']][1] + '#' + qxz_dict[i['eNum']][2]
  256. if e27[0] == "#":
  257. continue
  258. elif i['eKey'] == 'e28':
  259. e28 = str(i['eValue']) + '#' + str(i['eNum']) + '#' + str(i['eKey'])
  260. conf28 = qxz_dict[i['eNum']][1] + '#' + qxz_dict[i['eNum']][2]
  261. if e28[0] == "#":
  262. continue
  263. elif i['eKey'] == 'e29':
  264. e29 = str(i['eValue']) + '#' + str(i['eNum']) + '#' + str(i['eKey'])
  265. conf29 = qxz_dict[i['eNum']][1] + '#' + qxz_dict[i['eNum']][2]
  266. if e29[0] == "#":
  267. continue
  268. elif i['eKey'] == 'e30':
  269. e30 = str(i['eValue']) + '#' + str(i['eNum']) + '#' + str(i['eKey'])
  270. conf30 = qxz_dict[i['eNum']][1] + '#' + qxz_dict[i['eNum']][2]
  271. if e30[0] == "#":
  272. continue
  273. # print("extdata:", extdata)
  274. # 设备存在,进一步判断状态表是否存在:
  275. if qxz_exist.exists():
  276. print("<-----this equip is existed!----->")
  277. try:
  278. e_id = Equip.objects.get(equip_id=imei)
  279. except:
  280. print("<-----this equip didn't exist!----->")
  281. try:
  282. # 设备数据表直接储存数据
  283. # QXZdata.objects.create(equip_id=e_id, qxz_data=extdata)
  284. QXZdata_New.objects.create(equip_id_id=e_id,
  285. e1=e1,e2=e2,e3=e3,e4=e4,e5=e5,e6=e6,e7=e7,e8=e8,e9=e9,e10=e10,
  286. e11=e11,e12=e12,e13=e13,e14=e14,e15=e15,e16=e16,e17=e17,e18=e18,e19=e19,e20=e20,
  287. e21=e21,e22=e22,e23=e23,e24=e24,e25=e25,e26=e26,e27=e27,e28=e28,e29=e29,e30=e30)
  288. print("<-----data update success!----->")
  289. except:
  290. print("<-----data update failed!----->")
  291. if QXZstatus_New.objects.filter(equip_id=imei).exists():
  292. print("<-----this equip's status is existed!----->")
  293. try:
  294. sta = QXZstatus_New.objects.get(equip_id=imei)
  295. sta.e1 = e1
  296. sta.e2 = e2
  297. sta.e3 = e3
  298. sta.e4 = e4
  299. sta.e5 = e5
  300. sta.e6 = e6
  301. sta.e7 = e7
  302. sta.e8 = e8
  303. sta.e9 = e9
  304. sta.e10 = e10
  305. sta.e11 = e11
  306. sta.e12 = e12
  307. sta.e13 = e13
  308. sta.e14 = e14
  309. sta.e15 = e15
  310. sta.e16 = e16
  311. sta.e17 = e17
  312. sta.e18 = e18
  313. sta.e19 = e19
  314. sta.e20 = e20
  315. sta.e21 = e21
  316. sta.e22 = e22
  317. sta.e23 = e23
  318. sta.e24 = e24
  319. sta.e25 = e25
  320. sta.e26 = e26
  321. sta.e27 = e27
  322. sta.e28 = e28
  323. sta.e29 = e29
  324. sta.e30 = e30
  325. sta.is_online = "1"
  326. sta.upl_time = datetime.datetime.now()
  327. sta.save()
  328. print("<-----status update success!----->")
  329. except:
  330. print("<-----status update failed!----->")
  331. else:
  332. # 设备状态表不存在、创建状态表:
  333. print("<-----this equip's status is not existed!----->")
  334. try:
  335. QXZstatus_New.objects.create(equip_id_id=e_id,
  336. e1=e1,e2=e2,e3=e3,e4=e4,e5=e5,e6=e6,e7=e7,e8=e8,e9=e9,e10=e10,
  337. e11=e11,e12=e12,e13=e13,e14=e14,e15=e15,e16=e16,e17=e17,e18=e18,e19=e19,e20=e20,
  338. e21=e21,e22=e22,e23=e23,e24=e24,e25=e25,e26=e26,e27=e27,e28=e28,e29=e29,e30=e30,is_online="1")
  339. # QXZstatus.objects.create(equip_id=e_id, qxz_status=extdata)
  340. print("<-----this equip's status table re-create successed!----->")
  341. except:
  342. print("<-----this equip's status table re-create failed!----->")
  343. # 判断标题配置表
  344. if QXZ_Conf.objects.filter(equip_id=e_id).exists():
  345. print("------conf create default-------")
  346. else:
  347. QXZ_Conf.objects.create(equip_id_id=e_id,
  348. e1=conf1,e2=conf2,e3=conf3,e4=conf4,e5=conf5,e6=conf6,e7=conf7,e8=conf8,e9=conf9,e10=conf10,
  349. e11=conf11,e12=conf12,e13=conf13,e14=conf14,e15=conf15,e16=conf16,e17=conf17,e18=conf18,e19=conf19,e20=conf20,
  350. e21=conf21,e22=conf22,e23=conf23,e24=conf24,e25=conf25,e26=conf26,e27=conf27,e28=conf28,e29=conf29,e30=conf30)
  351. QXZ_Default_Conf.objects.create(equip_id_id=e_id,
  352. e1=conf1,e2=conf2,e3=conf3,e4=conf4,e5=conf5,e6=conf6,e7=conf7,e8=conf8,e9=conf9,e10=conf10,
  353. e11=conf11,e12=conf12,e13=conf13,e14=conf14,e15=conf15,e16=conf16,e17=conf17,e18=conf18,e19=conf19,e20=conf20,
  354. e21=conf21,e22=conf22,e23=conf23,e24=conf24,e25=conf25,e26=conf26,e27=conf27,e28=conf28,e29=conf29,e30=conf30)
  355. print("------conf create success-------")
  356. # 设备状态表存在、刷新状态表:
  357. print("2222222")
  358. else:
  359. print("<-----this equip not existed!----->")
  360. # 设备不存在,在设备列表中创建:
  361. equip_t = Equip_type.objects.get(type_id=5)
  362. try:
  363. e_id = Equip.objects.create(equip_id=imei, equip_type=equip_t)
  364. print("<-----this imei add successed!----->")
  365. try:
  366. # 设备数据表直接储存数据
  367. QXZdata_New.objects.create(equip_id_id=e_id,
  368. e1=e1,e2=e2,e3=e3,e4=e4,e5=e5,e6=e6,e7=e7,e8=e8,e9=e9,e10=e10,
  369. e11=e11,e12=e12,e13=e13,e14=e14,e15=e15,e16=e16,e17=e17,e18=e18,e19=e19,e20=e20,
  370. e21=e21,e22=e22,e23=e23,e24=e24,e25=e25,e26=e26,e27=e27,e28=e28,e29=e29,e30=e30)
  371. # QXZdata.objects.create(equip_id=e_id, qxz_data=extdata)
  372. print("<-----data update success!----->")
  373. except:
  374. print("<-----data update failed!----->")
  375. try:
  376. QXZstatus_New.objects.create(equip_id_id=e_id,
  377. e1=e1,e2=e2,e3=e3,e4=e4,e5=e5,e6=e6,e7=e7,e8=e8,e9=e9,e10=e10,
  378. e11=e11,e12=e12,e13=e13,e14=e14,e15=e15,e16=e16,e17=e17,e18=e18,e19=e19,e20=e20,
  379. e21=e21,e22=e22,e23=e23,e24=e24,e25=e25,e26=e26,e27=e27,e28=e28,e29=e29,e30=e30,is_online="1")
  380. # QXZstatus.objects.create(equip_id=e_id, qxz_status=extdata)
  381. print("<-----this imei register successed!----->")
  382. except:
  383. print("<-----this imei register failed!----->")
  384. # 判断标题配置表
  385. if QXZ_Conf.objects.filter(equip_id=e_id).exists():
  386. print("------conf create default-------")
  387. else:
  388. QXZ_Conf.objects.create(equip_id_id=e_id,
  389. e1=conf1,e2=conf2,e3=conf3,e4=conf4,e5=conf5,e6=conf6,e7=conf7,e8=conf8,e9=conf9,e10=conf10,
  390. e11=conf11,e12=conf12,e13=conf13,e14=conf14,e15=conf15,e16=conf16,e17=conf17,e18=conf18,e19=conf19,e20=conf20,
  391. e21=conf21,e22=conf22,e23=conf23,e24=conf24,e25=conf25,e26=conf26,e27=conf27,e28=conf28,e29=conf29,e30=conf30)
  392. QXZ_Default_Conf.objects.create(equip_id_id=e_id,
  393. e1=conf1,e2=conf2,e3=conf3,e4=conf4,e5=conf5,e6=conf6,e7=conf7,e8=conf8,e9=conf9,e10=conf10,
  394. e11=conf11,e12=conf12,e13=conf13,e14=conf14,e15=conf15,e16=conf16,e17=conf17,e18=conf18,e19=conf19,e20=conf20,
  395. e21=conf21,e22=conf22,e23=conf23,e24=conf24,e25=conf25,e26=conf26,e27=conf27,e28=conf28,e29=conf29,e30=conf30)
  396. print("------conf create success-------")
  397. except Exception as e:
  398. print(e)
  399. print("<-----this imei add failed!----->")
  400. # elif payload.get("cmd") == "control":
  401. # # extdata = eval(payload.get("ext"))["runStatus"]
  402. # extdata = payload.get("ext")['runStatus']
  403. # print("extdata:", extdata)
  404. # # 设备存在,进一步判断开关表是否存在:
  405. # if qxz_exist.exists():
  406. # print("<-----this equip is existed!----->")
  407. # try:
  408. # e_id = Equip.objects.get(equip_id=imei)
  409. # except:
  410. # print("<-----this equip didn't exist!----->")
  411. # if QXZswitchstatus.objects.filter(equip_id=imei).exists():
  412. # print("<-----this switch status is existed!----->")
  413. # try:
  414. # sta = QXZswitchstatus.objects.get(equip_id=imei)
  415. # sta.qxz_switch=extdata
  416. # sta.save()
  417. # print("<-----switchstatus update success!----->")
  418. # except:
  419. # print("<-----switchstatus update failed!----->")
  420. # else:
  421. # # 设备开关表不存在、创建开关表:
  422. # print("<-----this switch switchstatus is not existed!----->")
  423. # try:
  424. # QXZswitchstatus.objects.create(equip_id=e_id, qxz_switch=extdata)
  425. # print("<-----this switchstatus table re-create successed!----->")
  426. # except:
  427. # print("<-----this switchstatus table re-create failed!----->")
  428. # # 气象站开关自定义名字表
  429. # if QXZswitchdata.objects.get(equip_id=imei).qxz_switch_data != "[]":
  430. # print("<-----this switchdata is existed!----->")
  431. # else:
  432. # # 设备开关配置表不存在、创建开关配置表:
  433. # print("<-----this switch switchdata is not existed!----->")
  434. # extdata = payload.get("ext")['runStatus']
  435. # data = []
  436. # for i in extdata:
  437. # print(i["JK"])
  438. # data.append({"JK":i["JK"],"name":""})
  439. # print(data)
  440. # try:
  441. # QXZswitchdata.objects.create(equip_id=e_id, qxz_switch_data=data)
  442. # print("<-----this switchdata table re-create successed!----->")
  443. # except Exception as e:
  444. # print(e)
  445. # print("<-----this switchdata table re-create failed!----->")
  446. # elif payload.get("cmd") == "auto":
  447. # # extdata = eval(payload.get("ext"))["runStatus"]
  448. # extdata = payload.get("ext")['runStatus']
  449. # print("extdata:", extdata)
  450. # # 设备存在,进一步判断阈值表是否存在:
  451. # if qxz_exist.exists():
  452. # print("<-----this equip is existed!----->")
  453. # try:
  454. # e_id = Equip.objects.get(equip_id=imei)
  455. # except:
  456. # print("<-----this equip didn't exist!----->")
  457. # if QXZAutoswitch.objects.filter(equip_id=imei).exists():
  458. # print("<-----this autoswitch is existed!----->")
  459. # try:
  460. # sta = QXZAutoswitch.objects.get(equip_id=imei)
  461. # sta.qxz_auto=extdata
  462. # sta.save()
  463. # print("<-----switchstatus update success!----->")
  464. # except:
  465. # print("<-----switchstatus update failed!----->")
  466. # else:
  467. # # 设备阈值表不存在、创建阈值表:
  468. # print("<-----this switch autoswitch is not existed!----->")
  469. # try:
  470. # QXZAutoswitch.objects.create(equip_id=e_id, qxz_auto=extdata)
  471. # print("<-----this autoswitch table re-create successed!----->")
  472. # except:
  473. # print("<-----this autoswitch table re-create failed!----->")
  474. # elif payload.get("cmd") == "timing":
  475. # extdata = payload.get("ext")['setTime']
  476. # print("extdata:", extdata)
  477. # # 设备存在,进一步判断定时表是否存在:
  478. # if qxz_exist.exists():
  479. # print("<-----this equip is existed!----->")
  480. # try:
  481. # e_id = Equip.objects.get(equip_id=imei)
  482. # except:
  483. # print("<-----this equip didn't exist!----->")
  484. # if QXZTimingswitch.objects.filter(equip_id=imei).exists():
  485. # print("<-----this timingstatus is existed!----->")
  486. # try:
  487. # sta = QXZTimingswitch.objects.get(equip_id=imei)
  488. # sta.qxz_timing=extdata
  489. # sta.save()
  490. # print("<-----timingstatus update success!----->")
  491. # except:
  492. # print("<-----timingstatus update failed!----->")
  493. # else:
  494. # # 设备阈值表不存在、创建阈值表:
  495. # print("<-----this switch timingstatus is not existed!----->")
  496. # try:
  497. # QXZTimingswitch.objects.create(equip_id=e_id, qxz_timing=extdata)
  498. # print("<-----this timingstatus table re-create successed!----->")
  499. # except:
  500. # print("<-----this timingstatus table re-create failed!----->")
  501. elif payload.get("cmd") == "Status":
  502. extdata = payload.get("ext")['terminalStatus']
  503. print(extdata)
  504. try:
  505. volt = extdata["VOLT"]
  506. rssi = extdata["RSSI"]
  507. iccid = extdata["ICCID"]
  508. lng = extdata["longitude"]
  509. lat = extdata["latitude"]
  510. led = extdata["Dotled"]
  511. except:
  512. pass
  513. try:
  514. dver = extdata["Version"]
  515. except:
  516. dver = ""
  517. if qxz_exist.exists():
  518. print("<-----this equip is existed!----->")
  519. try:
  520. e_id = Equip.objects.get(equip_id=imei)
  521. except:
  522. print("<-----this equip didn't exist!----->")
  523. QXZ_Info_Record.objects.create(equip_id=e_id, volt=volt,rssi=rssi)
  524. if QXZ_Base_Info.objects.filter(equip_id=imei).exists():
  525. print("<-----this qxz_base_info is existed!----->")
  526. try:
  527. sta = QXZ_Base_Info.objects.get(equip_id=imei)
  528. sta.volt = volt
  529. sta.rssi = rssi
  530. sta.iccid = iccid
  531. sta.lng = lng
  532. sta.lat = lat
  533. sta.led = led
  534. sta.dver = dver
  535. sta.save()
  536. sta1 = QXZstatus.objects.get(equip_id=imei)
  537. sta1.lng = lng
  538. sta1.lat = lat
  539. sta1.save()
  540. print("<-----qxz_base_info update success!----->")
  541. except:
  542. print("<-----qxz_base_info update failed!----->")
  543. try:
  544. sta = QXZ_Base_Info.objects.get(equip_id=imei)
  545. sta.volt = volt
  546. sta.rssi = rssi
  547. sta.save()
  548. print("<-----qxz_base_info update success!!!----->")
  549. except:
  550. pass
  551. else:
  552. # 设备阈值表不存在、创建阈值表:
  553. print("<-----this qxz_base_info is not existed!----->")
  554. try:
  555. QXZ_Base_Info.objects.create(equip_id=e_id, volt=volt,rssi=rssi,iccid=iccid,lng=lng,lat=lat,led=led)
  556. print("<-----this qxz_base_info table re-create successed!----->")
  557. except:
  558. print("<-----this qxz_base_info table re-create failed!----->")
  559. # 离线消息:
  560. elif "offline" in msg.topic:
  561. try:
  562. # 将json字符串解析:
  563. payload = json.loads(msg.payload.decode())
  564. if payload.get("cmd") == "offline":
  565. print("<-----离线消息!----->")
  566. print("%s is offline!" % imei)
  567. qxz_exist = Equip.objects.filter(equip_id=imei)
  568. # 设备存在,进一步判断状态表是否存在:
  569. if qxz_exist.exists():
  570. try:
  571. e_id = Equip.objects.get(equip_id=imei)
  572. # now_time = json.dumps(datetime.datetime.now(), cls=CJSONEncoder)
  573. # 更新状态表中未离线状态:
  574. QXZstatus_New.objects.filter(equip_id=imei).update(is_online = '0',off_time = datetime.datetime.now())
  575. # 创建预警记录:
  576. Alarm_record.objects.create(equip_id=e_id, alarm_desc="{'status':0,'type':'offline'}",e_type="2")
  577. print("update offline ok!")
  578. except:
  579. print("update offline failed!")
  580. else:
  581. print("this imei is not exist!")
  582. elif payload.get("cmd") == "online":
  583. print("<-----在线消息!----->")
  584. print("%s is offline!" % imei)
  585. qxz_exist = Equip.objects.filter(equip_id=imei)
  586. # 设备存在,进一步判断状态表是否存在:
  587. if qxz_exist.exists():
  588. try:
  589. e_id = Equip.objects.get(equip_id=imei)
  590. # now_time = json.dumps(datetime.datetime.now(), cls=CJSONEncoder)
  591. # 更新状态表中未离线状态:
  592. QXZstatus_New.objects.filter(equip_id=imei).update(is_online = '1')
  593. # 创建预警记录:
  594. Alarm_record.objects.create(equip_id=e_id, alarm_desc="{'status': 'relink', 'type': 'dev_sta'}",e_type="5")
  595. print("update online ok!")
  596. except:
  597. print("update online failed!")
  598. else:
  599. print("this imei is not exist!")
  600. except:
  601. pass
  602. except Exception as e:
  603. print(e)
  604. pass
  605. if __name__ == '__main__':
  606. client = mqtt.Client(
  607. client_id="PY_MQTT_CLIENTC_QXZ_NEW",
  608. clean_session=True,
  609. userdata=None,
  610. # protocol=MQTTv311,# 数据库版本
  611. )
  612. # 必须设置,否则会返回「Connected with result code 4」
  613. client.username_pw_set("admin", "password")
  614. client.on_connect = on_connect
  615. client.on_message = on_message
  616. HOST = "127.0.0.1"
  617. client.connect(HOST, 1883, 60)
  618. client.loop_forever()