weather.py 38 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912
  1. # -*- coding:utf-8 -*-
  2. # @Time : 2020/5/22 2:22 下午
  3. # @Author : Creat by Han
  4. import json
  5. import ast
  6. import copy
  7. import datetime
  8. import time
  9. import os
  10. import pymysql
  11. import requests
  12. from django.forms.models import model_to_dict
  13. from django.db.models import Q
  14. from django.conf import settings
  15. from kedong.decoration import kedong_deco, PortError
  16. from smartfarming.models.device import MongoDevice, MongoCBDData
  17. from smartfarming.models.weather import MongoQXZ_Base_Info, QXZdata_New, MongoQXZ_Conf, QXZstatus_New, MongoQXZ_Alarm
  18. from smartfarming.api.views.weather.all_dict import qxz_dict
  19. config_dict = settings.CONFIG
  20. @kedong_deco(login_required=True)
  21. def qxz_page(request):
  22. """
  23. 气象设备列表接口 :
  24. 参数:
  25. page 非必传(num) 页码,默认为1
  26. device_id 非必传(str) 设备号
  27. device_status 非必传(str) 在线状态 1在线 0离线
  28. device_name 非必传(str) 设备名称
  29. device_type 非必传(str) 5气象站 8墒情站
  30. 返回值:
  31. {
  32. "data": {
  33. "ids": [
  34. {
  35. "d_id":"", 设备数据库ID
  36. "equip_name":"", 设备名称
  37. "equip_id":12313456, 设备ID
  38. "is_online":1, 在线状态 1在线 0离线
  39. "rssi":10, 信号强度
  40. "volt":22, 电压
  41. "lng":113, 经度
  42. "lat":113, 纬度
  43. "off_time":"" 离线时间
  44. "address":"" 设备地址
  45. "device_expire_time": 1234444 设备到期时间
  46. "device_expire": # 设备状态 0未到期,1已到期,2即将到期
  47. "device_expire_days": 到期天数
  48. }
  49. ],
  50. "nums": 0 设备总数
  51. },
  52. "formError": {},
  53. "errorCode": 0,
  54. "message": "",
  55. "params": {}
  56. }
  57. """
  58. device_id = request.POST.get("device_id")
  59. device_status = request.POST.get("device_status")
  60. device_name = request.POST.get("device_name")
  61. page = request.POST.get("page","")
  62. page_size = request.POST.get("page_size","")
  63. device_type = request.POST.get("device_type","5")
  64. if not page and not page_size:
  65. page = 1
  66. page_size = 8
  67. else:
  68. if not page.isdigit() and not page_size.isdigit():
  69. raise PortError("","字段类型有误")
  70. else:
  71. page = int(page)
  72. page_size = int(page_size)
  73. if device_type not in ("5","8"):
  74. raise PortError("","参数超出范围")
  75. devices = MongoDevice.objects.filter(device_type_id=device_type).order_by('-device_status', '-uptime')
  76. #设备状态查询
  77. if device_status:
  78. devices = devices.filter(device_status=int(device_status))
  79. #设备号查询
  80. if device_id:
  81. devices = devices.filter(Q(device_id__icontains=device_id) | Q(device_name__icontains=device_id))
  82. #设备名称查询
  83. if device_name:
  84. devices = devices.filter(device_name__icontains=device_name)
  85. date = []
  86. nums = devices.count()
  87. result = devices[(page_size*(page-1)):(page*page_size)]
  88. result_device_id_list = [item.device_id for item in result]
  89. qxz_base_dict = {item.device_id: item for item in MongoQXZ_Base_Info.objects.filter(device_id__in=result_device_id_list)}
  90. for i in result:
  91. try:
  92. qxz_base = qxz_base_dict[i.device_id]
  93. rssi = qxz_base.rssi
  94. volt = qxz_base.volt
  95. except:
  96. rssi = ""
  97. volt = ""
  98. lng = i.lng
  99. lat = i.lat
  100. address = i.province+i.city+i.district
  101. is_online = i.device_status
  102. uptime = i.uptime
  103. date.append({
  104. "d_id":i.id,
  105. "equip_name":i.device_name,
  106. "equip_id":i.device_id,
  107. "volt":volt,
  108. "rssi":rssi,
  109. "lng":lng,
  110. "lat":lat,
  111. "address":address,
  112. "is_online":is_online,
  113. "uptime":uptime,
  114. })
  115. data = {'ids':date, 'nums': nums}
  116. return data
  117. @kedong_deco(login_required=True)
  118. def qxz_detail(request):
  119. """
  120. 气象历史数据接口 :
  121. 参数:
  122. device_id 必传(string)
  123. page 非必传(num) 页码,默认为1
  124. start_time 非必传(string 时间戳) 开始时间 (用于时间搜索)
  125. end_time 非必传(string 时间戳) 结束时间 (用于时间搜索)
  126. 返回值:
  127. {
  128. "data": {
  129. "conf": {
  130. "e1":x.e1,"e2":x.e2,"e3":x.e3,"e4":x.e4,"e5":x.e5,
  131. "e6":x.e6,"e7":x.e7,"e8":x.e8,"e9":x.e9,"e10":x.e10,
  132. "e11":x.e11,"e12":x.e12,"e13":x.e13,"e14":x.e14,
  133. "e15":x.e15,"e16":x.e16,"e17":x.e17,"e18":x.e18,
  134. "e19":x.e19,"e20":x.e20,"e21":x.e21,"e22":x.e22,
  135. "e23":x.e23,"e24":x.e24,"e25":x.e25,"e26":x.e26,
  136. "e27":x.e27,"e28":x.e28,"e29":x.e29,"e30":x.e30
  137. },
  138. "nums": 0,
  139. "rainFall": 1 气象设备是否具有日雨量累计因子,有返回1,无返回0
  140. "data": [
  141. {
  142. "e1":qxz_list.e1,"e2":qxz_list.e2,"e3":qxz_list.e3,"e4":qxz_list.e4,"e5":qxz_list.e5,
  143. "e6":qxz_list.e6,"e7":qxz_list.e7,"e8":qxz_list.e8,"e9":qxz_list.e9,"e10":qxz_list.e10,
  144. "e11":qxz_list.e11,"e12":qxz_list.e12,"e13":qxz_list.e13,"e14":qxz_list.e14,
  145. "e15":qxz_list.e15,"e16":qxz_list.e16,"e17":qxz_list.e17,"e18":qxz_list.e18,
  146. "e19":qxz_list.e19,"e20":qxz_list.e20,"e21":qxz_list.e21,"e22":qxz_list.e22,
  147. "e23":qxz_list.e23,"e24":qxz_list.e24,"e25":qxz_list.e25,"e26":qxz_list.e26,
  148. "e27":qxz_list.e27,"e28":qxz_list.e28,"e29":qxz_list.e29,"e30":qxz_list.e30,
  149. "upl_time":qxz_list.upl_time.strftime('%Y-%m-%d %H:%M:%S')
  150. },
  151. {
  152. "e1":qxz_list.e1,"e2":qxz_list.e2,"e3":qxz_list.e3,"e4":qxz_list.e4,"e5":qxz_list.e5,
  153. "e6":qxz_list.e6,"e7":qxz_list.e7,"e8":qxz_list.e8,"e9":qxz_list.e9,"e10":qxz_list.e10,
  154. "e11":qxz_list.e11,"e12":qxz_list.e12,"e13":qxz_list.e13,"e14":qxz_list.e14,
  155. "e15":qxz_list.e15,"e16":qxz_list.e16,"e17":qxz_list.e17,"e18":qxz_list.e18,
  156. "e19":qxz_list.e19,"e20":qxz_list.e20,"e21":qxz_list.e21,"e22":qxz_list.e22,
  157. "e23":qxz_list.e23,"e24":qxz_list.e24,"e25":qxz_list.e25,"e26":qxz_list.e26,
  158. "e27":qxz_list.e27,"e28":qxz_list.e28,"e29":qxz_list.e29,"e30":qxz_list.e30,
  159. "upl_time":qxz_list.upl_time.strftime('%Y-%m-%d %H:%M:%S')
  160. },...
  161. ]
  162. }
  163. "params": {},
  164. "formError": {},
  165. "errorCode": 0,
  166. "message": "",
  167. }
  168. """
  169. f_tbegin = request.POST.get('start_time')
  170. f_tend = request.POST.get('end_time')
  171. device_id = request.POST.get("device_id")
  172. try:
  173. device = MongoDevice.objects.get(device_id=device_id)
  174. device_expire = device.device_expire
  175. device_expire_time = device.device_expire_time
  176. except:
  177. raise PortError('device_id',"暂无此设备")
  178. qxz_list = QXZdata_New.objects.filter(device_id=device_id)
  179. myuser_type = request.user_type
  180. if not myuser_type == 1 and not myuser_type == 5:
  181. if f_tbegin and int(f_tend) > int(device_expire_time):
  182. f_tend = device_expire_time
  183. if f_tbegin and f_tend:
  184. qxz_list =qxz_list.filter(uptime__range=(int(f_tbegin),int(f_tend))).order_by('-id')
  185. page = int(request.POST.get('page',1))
  186. data = []
  187. nums = qxz_list.count()
  188. conf = {}
  189. if nums:
  190. for i in qxz_list[(10*(page-1)):(page*10)]:
  191. dat = {}
  192. for e in range(1, 31):
  193. k = f'e{e}'
  194. v = getattr(i, k)
  195. dat[k] = v or ""
  196. data.append({"dat": dat, "time": i.uptime})
  197. try:
  198. x = MongoQXZ_Conf.objects.get(device_id=device_id)
  199. conf = {}
  200. for e in range(1, 31):
  201. k = f'e{e}'
  202. v = getattr(x, k)
  203. conf[k] = v or ""
  204. except Exception as e:
  205. conf = {}
  206. rainFall = 0
  207. for factor in conf.values():
  208. if factor == "降雨量累计#mm":
  209. rainFall = 1
  210. break
  211. data1 = {"data":data,"nums":nums,"conf":conf,"rainFall":rainFall}
  212. return data1
  213. @kedong_deco(login_required=True)
  214. def qxz_status(request):
  215. """
  216. 气象详情接口 :
  217. 参数:
  218. device_id 必传(string)
  219. 返回值:
  220. {
  221. "data": {
  222. 'dat':{
  223. "e1":qxz_list.e1,"e2":qxz_list.e2,"e3":qxz_list.e3,"e4":qxz_list.e4,"e5":qxz_list.e5,
  224. "e6":qxz_list.e6,"e7":qxz_list.e7,"e8":qxz_list.e8,"e9":qxz_list.e9,"e10":qxz_list.e10,
  225. "e11":qxz_list.e11,"e12":qxz_list.e12,"e13":qxz_list.e13,"e14":qxz_list.e14,
  226. "e15":qxz_list.e15,"e16":qxz_list.e16,"e17":qxz_list.e17,"e18":qxz_list.e18,
  227. "e19":qxz_list.e19,"e20":qxz_list.e20,"e21":qxz_list.e21,"e22":qxz_list.e22,
  228. "e23":qxz_list.e23,"e24":qxz_list.e24,"e25":qxz_list.e25,"e26":qxz_list.e26,
  229. "e27":qxz_list.e27,"e28":qxz_list.e28,"e29":qxz_list.e29,"e30":qxz_list.e30,
  230. "upl_time":qxz_list.upl_time.strftime('%Y-%m-%d %H:%M:%S')
  231. },
  232. 'conf':{
  233. "e1":x.e1,"e2":x.e2,"e3":x.e3,"e4":x.e4,"e5":x.e5,
  234. "e6":x.e6,"e7":x.e7,"e8":x.e8,"e9":x.e9,"e10":x.e10,
  235. "e11":x.e11,"e12":x.e12,"e13":x.e13,"e14":x.e14,
  236. "e15":x.e15,"e16":x.e16,"e17":x.e17,"e18":x.e18,
  237. "e19":x.e19,"e20":x.e20,"e21":x.e21,"e22":x.e22,
  238. "e23":x.e23,"e24":x.e24,"e25":x.e25,"e26":x.e26,
  239. "e27":x.e27,"e28":x.e28,"e29":x.e29,"e30":x.e30
  240. },
  241. "led":0, 0 无led点阵屏功能 1 有led点阵屏功能
  242. "ledinfo":"点阵屏内容"
  243. },
  244. "errorCode": 0,
  245. "message": "",
  246. "formError": {}
  247. }
  248. """
  249. e_id = request.POST.get("device_id")
  250. if not e_id:
  251. raise PortError("","参数缺失")
  252. qxz_list = QXZdata_New.objects.filter(device_id=e_id).first()
  253. if not qxz_list:
  254. raise PortError("","未找到此设备")
  255. data = []
  256. dat = {"e1":qxz_list.e1,"e2":qxz_list.e2,"e3":qxz_list.e3,"e4":qxz_list.e4,"e5":qxz_list.e5,
  257. "e6":qxz_list.e6,"e7":qxz_list.e7,"e8":qxz_list.e8,"e9":qxz_list.e9,"e10":qxz_list.e10,
  258. "e11":qxz_list.e11,"e12":qxz_list.e12,"e13":qxz_list.e13,"e14":qxz_list.e14,
  259. "e15":qxz_list.e15,"e16":qxz_list.e16,"e17":qxz_list.e17,"e18":qxz_list.e18,
  260. "e19":qxz_list.e19,"e20":qxz_list.e20,"e21":qxz_list.e21,"e22":qxz_list.e22,
  261. "e23":qxz_list.e23,"e24":qxz_list.e24,"e25":qxz_list.e25,"e26":qxz_list.e26,
  262. "e27":qxz_list.e27,"e28":qxz_list.e28,"e29":qxz_list.e29,"e30":qxz_list.e30, "uptime":qxz_list.uptime}
  263. try:
  264. x = MongoQXZ_Conf.objects.get(device_id=e_id)
  265. conf = {"e1":x.e1,"e2":x.e2,"e3":x.e3,"e4":x.e4,"e5":x.e5,
  266. "e6":x.e6,"e7":x.e7,"e8":x.e8,"e9":x.e9,"e10":x.e10,
  267. "e11":x.e11,"e12":x.e12,"e13":x.e13,"e14":x.e14,
  268. "e15":x.e15,"e16":x.e16,"e17":x.e17,"e18":x.e18,
  269. "e19":x.e19,"e20":x.e20,"e21":x.e21,"e22":x.e22,
  270. "e23":x.e23,"e24":x.e24,"e25":x.e25,"e26":x.e26,
  271. "e27":x.e27,"e28":x.e28,"e29":x.e29,"e30":x.e30}
  272. except:
  273. conf = {}
  274. try:
  275. led = MongoQXZ_Base_Info.objects.get(device_id=e_id).led
  276. except:
  277. led = "0"
  278. try:
  279. ledinfo = MongoQXZ_Base_Info.objects.get(device_id=e_id).ledinfo
  280. except:
  281. ledinfo = ""
  282. data = {'dat':dat,'conf':conf, "led":led,"ledinfo":ledinfo}
  283. return data
  284. @kedong_deco(login_required=True)
  285. def qxz_data_chart(request):
  286. """
  287. 气象折线图接口 :
  288. 参数:
  289. device_id 必传(string)
  290. begin 必传(string 时间戳) 开始时间 (用于时间搜索) 默认近一个月
  291. end 非必传(string 时间戳) 结束时间 (用于时间搜索)
  292. 返回值:
  293. {
  294. "data": {
  295. "conf": {
  296. "e1":x.e1,"e2":x.e2,"e3":x.e3,"e4":x.e4,"e5":x.e5,
  297. "e6":x.e6,"e7":x.e7,"e8":x.e8,"e9":x.e9,"e10":x.e10,
  298. "e11":x.e11,"e12":x.e12,"e13":x.e13,"e14":x.e14,
  299. "e15":x.e15,"e16":x.e16,"e17":x.e17,"e18":x.e18,
  300. "e19":x.e19,"e20":x.e20,"e21":x.e21,"e22":x.e22,
  301. "e23":x.e23,"e24":x.e24,"e25":x.e25,"e26":x.e26,
  302. "e27":x.e27,"e28":x.e28,"e29":x.e29,"e30":x.e30
  303. },
  304. "nums": 0,
  305. "data": [
  306. {
  307. "e1":qxz_list.e1,"e2":qxz_list.e2,"e3":qxz_list.e3,"e4":qxz_list.e4,"e5":qxz_list.e5,
  308. "e6":qxz_list.e6,"e7":qxz_list.e7,"e8":qxz_list.e8,"e9":qxz_list.e9,"e10":qxz_list.e10,
  309. "e11":qxz_list.e11,"e12":qxz_list.e12,"e13":qxz_list.e13,"e14":qxz_list.e14,
  310. "e15":qxz_list.e15,"e16":qxz_list.e16,"e17":qxz_list.e17,"e18":qxz_list.e18,
  311. "e19":qxz_list.e19,"e20":qxz_list.e20,"e21":qxz_list.e21,"e22":qxz_list.e22,
  312. "e23":qxz_list.e23,"e24":qxz_list.e24,"e25":qxz_list.e25,"e26":qxz_list.e26,
  313. "e27":qxz_list.e27,"e28":qxz_list.e28,"e29":qxz_list.e29,"e30":qxz_list.e30,
  314. "upl_time":qxz_list.upl_time.strftime('%Y-%m-%d %H:%M:%S')
  315. },
  316. {
  317. "e1":qxz_list.e1,"e2":qxz_list.e2,"e3":qxz_list.e3,"e4":qxz_list.e4,"e5":qxz_list.e5,
  318. "e6":qxz_list.e6,"e7":qxz_list.e7,"e8":qxz_list.e8,"e9":qxz_list.e9,"e10":qxz_list.e10,
  319. "e11":qxz_list.e11,"e12":qxz_list.e12,"e13":qxz_list.e13,"e14":qxz_list.e14,
  320. "e15":qxz_list.e15,"e16":qxz_list.e16,"e17":qxz_list.e17,"e18":qxz_list.e18,
  321. "e19":qxz_list.e19,"e20":qxz_list.e20,"e21":qxz_list.e21,"e22":qxz_list.e22,
  322. "e23":qxz_list.e23,"e24":qxz_list.e24,"e25":qxz_list.e25,"e26":qxz_list.e26,
  323. "e27":qxz_list.e27,"e28":qxz_list.e28,"e29":qxz_list.e29,"e30":qxz_list.e30,
  324. "upl_time":qxz_list.upl_time.strftime('%Y-%m-%d %H:%M:%S')
  325. },...
  326. ]
  327. }
  328. "params": {},
  329. "formError": {},
  330. "errorCode": 0,
  331. "message": "",
  332. }
  333. """
  334. device_id = request.POST.get("device_id")
  335. data = []
  336. f_tbegin = request.POST.get('begin')
  337. f_tend = request.POST.get('end')
  338. try:
  339. device = MongoDevice.objects.get(device_id=device_id)
  340. device_expire = device.device_expire
  341. device_expire_time = device.device_expire_time
  342. except:
  343. raise PortError('device_id',"暂无此设备")
  344. qxz_list = QXZdata_New.objects.filter(device_id=device_id)
  345. myuser_type = request.user_type
  346. if not myuser_type == 1 and not myuser_type == 5:
  347. if f_tbegin and int(f_tend) > int(device_expire_time):
  348. f_tend = device_expire_time
  349. if f_tbegin and f_tend:
  350. qxz_list =qxz_list.filter(uptime__range=(int(f_tbegin),int(f_tend))).order_by('-id')
  351. conf = {}
  352. for i in qxz_list:
  353. data.append({"dat":{"e1":i.e1,"e2":i.e2,"e3":i.e3,"e4":i.e4,"e5":i.e5,
  354. "e6":i.e6,"e7":i.e7,"e8":i.e8,"e9":i.e9,"e10":i.e10,
  355. "e11":i.e11,"e12":i.e12,"e13":i.e13,"e14":i.e14,
  356. "e15":i.e15,"e16":i.e16,"e17":i.e17,"e18":i.e18,
  357. "e19":i.e19,"e20":i.e20,"e21":i.e21,"e22":i.e22,
  358. "e23":i.e23,"e24":i.e24,"e25":i.e25,"e26":i.e26,
  359. "e27":i.e27,"e28":i.e28,"e29":i.e29,"e30":i.e30},
  360. "time":i.uptime})
  361. try:
  362. x = MongoQXZ_Conf.objects.get(device_id=device_id)
  363. conf = {"e1":x.e1,"e2":x.e2,"e3":x.e3,"e4":x.e4,"e5":x.e5,
  364. "e6":x.e6,"e7":x.e7,"e8":x.e8,"e9":x.e9,"e10":x.e10,
  365. "e11":x.e11,"e12":x.e12,"e13":x.e13,"e14":x.e14,
  366. "e15":x.e15,"e16":x.e16,"e17":x.e17,"e18":x.e18,
  367. "e19":x.e19,"e20":x.e20,"e21":x.e21,"e22":x.e22,
  368. "e23":x.e23,"e24":x.e24,"e25":x.e25,"e26":x.e26,
  369. "e27":x.e27,"e28":x.e28,"e29":x.e29,"e30":x.e30}
  370. except:
  371. conf = {}
  372. data1 = {"data":data,"conf":conf}
  373. return data1
  374. @kedong_deco(login_required=True)
  375. def qxz_early_warning(request):
  376. """
  377. 气象站查看短信预警信息接口\配置预警信息接口
  378. 参数:
  379. device_id 必传(str) 设备号
  380. status 必传(str) 当status等于see查看, 当status等于save保存
  381. alarm 非必传(json) 配置信息,例如:{"dat":{"e1":"1#12","e2":"0#","e3":"0#","e4":"0#","e5":"0#","e6":"0#","e7":"0#","e8":"0#","e9":"0#"},"tel":"18258845915","equip_id":"865553058440811"}
  382. 返回值:
  383. {
  384. "data" 0 0 保存成功 1失败
  385. }
  386. """
  387. status = request.POST.get("status")
  388. device_id = request.POST.get("device_id")
  389. if status == "see":
  390. try:
  391. qxz_alarm = MongoQXZ_Alarm.objects.get(device_id=device_id)
  392. alarm = ast.literal_eval(qxz_alarm.conf)
  393. phone = qxz_alarm.phone
  394. except Exception as e:
  395. print(e)
  396. alarm = ""
  397. phone = ""
  398. x = MongoQXZ_Conf.objects.get(device_id=device_id)
  399. conf = {"e1":x.e1,"e2":x.e2,"e3":x.e3,"e4":x.e4,"e5":x.e5,
  400. "e6":x.e6,"e7":x.e7,"e8":x.e8,"e9":x.e9,"e10":x.e10,
  401. "e11":x.e11,"e12":x.e12,"e13":x.e13,"e14":x.e14,
  402. "e15":x.e15,"e16":x.e16,"e17":x.e17,"e18":x.e18,
  403. "e19":x.e19,"e20":x.e20,"e21":x.e21,"e22":x.e22,
  404. "e23":x.e23,"e24":x.e24,"e25":x.e25,"e26":x.e26,
  405. "e27":x.e27,"e28":x.e28,"e29":x.e29,"e30":x.e30}
  406. for k in list(conf.keys()):
  407. if not conf[k]:
  408. del conf[k]
  409. data = {"conf":conf,"alarm":alarm,"phone":phone}
  410. elif status == "save":
  411. alarm = ast.literal_eval(request.POST.get('alarm'))
  412. conf = alarm["dat"]
  413. try:
  414. MongoQXZ_Alarm.objects.update_or_create(
  415. device_id=device_id,
  416. defaults={
  417. "conf": {"dat": conf},
  418. "upl_time": int(time.time())
  419. }
  420. )
  421. return {"code":0}
  422. except Exception as e:
  423. raise PortError("","更新失败")
  424. else:
  425. raise PortError("","参数超出范围")
  426. return data
  427. def qxz_configs(conf,e_data,es):
  428. """气象站要素配置"""
  429. e3s = conf.get(es,"")
  430. code = e_data.split('#')[1]
  431. if e3s:
  432. config = e3s.split("#")
  433. config.insert(0,code)
  434. else:
  435. config = qxz_dict_1[e_data.split('#')[1]]
  436. return config
  437. @kedong_deco(login_required=True)
  438. def qxz_day_data(request):
  439. """
  440. 气象24H数据接口 :
  441. 参数:
  442. device_id 必传(string)
  443. 返回值:
  444. {
  445. "data": {
  446. "conf": {
  447. "e1":x.e1,"e2":x.e2,"e3":x.e3,"e4":x.e4,"e5":x.e5,
  448. "e6":x.e6,"e7":x.e7,"e8":x.e8,"e9":x.e9,"e10":x.e10,
  449. "e11":x.e11,"e12":x.e12,"e13":x.e13,"e14":x.e14,
  450. "e15":x.e15,"e16":x.e16,"e17":x.e17,"e18":x.e18,
  451. "e19":x.e19,"e20":x.e20,"e21":x.e21,"e22":x.e22,
  452. "e23":x.e23,"e24":x.e24,"e25":x.e25,"e26":x.e26,
  453. "e27":x.e27,"e28":x.e28,"e29":x.e29,"e30":x.e30
  454. },
  455. "nums": 0,
  456. "data": [
  457. {
  458. "e1":qxz_list.e1,"e2":qxz_list.e2,"e3":qxz_list.e3,"e4":qxz_list.e4,"e5":qxz_list.e5,
  459. "e6":qxz_list.e6,"e7":qxz_list.e7,"e8":qxz_list.e8,"e9":qxz_list.e9,"e10":qxz_list.e10,
  460. "e11":qxz_list.e11,"e12":qxz_list.e12,"e13":qxz_list.e13,"e14":qxz_list.e14,
  461. "e15":qxz_list.e15,"e16":qxz_list.e16,"e17":qxz_list.e17,"e18":qxz_list.e18,
  462. "e19":qxz_list.e19,"e20":qxz_list.e20,"e21":qxz_list.e21,"e22":qxz_list.e22,
  463. "e23":qxz_list.e23,"e24":qxz_list.e24,"e25":qxz_list.e25,"e26":qxz_list.e26,
  464. "e27":qxz_list.e27,"e28":qxz_list.e28,"e29":qxz_list.e29,"e30":qxz_list.e30,
  465. "upl_time":qxz_list.upl_time.strftime('%Y-%m-%d %H:%M:%S')
  466. },
  467. {
  468. "e1":qxz_list.e1,"e2":qxz_list.e2,"e3":qxz_list.e3,"e4":qxz_list.e4,"e5":qxz_list.e5,
  469. "e6":qxz_list.e6,"e7":qxz_list.e7,"e8":qxz_list.e8,"e9":qxz_list.e9,"e10":qxz_list.e10,
  470. "e11":qxz_list.e11,"e12":qxz_list.e12,"e13":qxz_list.e13,"e14":qxz_list.e14,
  471. "e15":qxz_list.e15,"e16":qxz_list.e16,"e17":qxz_list.e17,"e18":qxz_list.e18,
  472. "e19":qxz_list.e19,"e20":qxz_list.e20,"e21":qxz_list.e21,"e22":qxz_list.e22,
  473. "e23":qxz_list.e23,"e24":qxz_list.e24,"e25":qxz_list.e25,"e26":qxz_list.e26,
  474. "e27":qxz_list.e27,"e28":qxz_list.e28,"e29":qxz_list.e29,"e30":qxz_list.e30,
  475. "upl_time":qxz_list.upl_time.strftime('%Y-%m-%d %H:%M:%S')
  476. },...
  477. ]
  478. }
  479. "params": {},
  480. "formError": {},
  481. "errorCode": 0,
  482. "message": "",
  483. }
  484. """
  485. device_id = request.POST.get("device_id")
  486. qxz_dict_1 = copy.deepcopy(qxz_dict) # 如果不拷贝 后面折线图修改字典会导致字典内容变化 从而造成数据错误
  487. times = ""
  488. try:
  489. MongoDevice.objects.get(device_id=device_id)
  490. except:
  491. raise PortError('device_id',"暂无此设备")
  492. qxz_list = QXZstatus_New.objects.filter(device_id=device_id).order_by("-uptime").first()
  493. if qxz_list:
  494. times = qxz_list.uptime
  495. # 获取最新一条数据的时间然后进行时间格式转换,再获取前一天时间
  496. if times:
  497. otherStyleTime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(times))
  498. times_type = datetime.datetime.strptime(str(otherStyleTime), "%Y-%m-%d %H:%M:%S")
  499. now = times_type - datetime.timedelta(days=1)
  500. else:
  501. # 获取前一天的时间点从0点到24点时间
  502. now = datetime.datetime.now()- datetime.timedelta(days=1)
  503. zero_today = now - datetime.timedelta(hours=now.hour, minutes=now.minute, seconds=now.second,microseconds=now.microsecond)
  504. last_today = zero_today + datetime.timedelta(hours=23, minutes=59, seconds=59)
  505. start_time = int(time.mktime(time.strptime(str(zero_today), "%Y-%m-%d %H:%M:%S")))
  506. end_time = int(time.mktime(time.strptime(str(last_today), "%Y-%m-%d %H:%M:%S")))
  507. sta1 = QXZdata_New.objects.filter(device_id=device_id).filter(uptime__range=(start_time,end_time)).values()
  508. data = []
  509. e1 = []
  510. e1_time = []
  511. e2 = []
  512. e2_time = []
  513. e3 = []
  514. e3_time = []
  515. e4 = []
  516. e4_time = []
  517. e5 = []
  518. e5_time = []
  519. e6 = []
  520. e6_time = []
  521. e7 = []
  522. e7_time = []
  523. e8 = []
  524. e8_time = []
  525. e9 = []
  526. e9_time = []
  527. e10 = []
  528. e10_time = []
  529. e11 = []
  530. e11_time = []
  531. e12 = []
  532. e12_time = []
  533. e13 = []
  534. e13_time = []
  535. e14 = []
  536. e14_time = []
  537. e15 = []
  538. e15_time = []
  539. e16 = []
  540. e16_time = []
  541. e17 = []
  542. e17_time = []
  543. e18 = []
  544. e18_time = []
  545. e19 = []
  546. e19_time = []
  547. e20 = []
  548. e20_time = []
  549. e21 = []
  550. e21_time = []
  551. e22 = []
  552. e22_time = []
  553. e23 = []
  554. e23_time = []
  555. e24 = []
  556. e24_time = []
  557. e25 = []
  558. e25_time = []
  559. e26 = []
  560. e26_time = []
  561. e27 = []
  562. e27_time = []
  563. e28 = []
  564. e28_time = []
  565. e29 = []
  566. e29_time = []
  567. e30 = []
  568. e30_time = []
  569. for i in sta1[:200]:
  570. if i['e1']:
  571. e1.append(float(i['e1'].split('#')[0]))
  572. e1_time.append(i['uptime'])
  573. if i['e2']:
  574. e2.append(float(i['e2'].split('#')[0]))
  575. e2_time.append(i['uptime'])
  576. if i['e3']:
  577. e3.append(float(i['e3'].split('#')[0]))
  578. e3_time.append(i['uptime'])
  579. if i['e4']:
  580. e4.append(float(i['e4'].split('#')[0]))
  581. e4_time.append(i['uptime'])
  582. if i['e5']:
  583. e5.append(float(i['e5'].split('#')[0]))
  584. e5_time.append(i['uptime'])
  585. if i['e6']:
  586. e6.append(float(i['e6'].split('#')[0]))
  587. e6_time.append(i['uptime'])
  588. if i['e7']:
  589. e7.append(float(i['e7'].split('#')[0]))
  590. e7_time.append(i['uptime'])
  591. if i['e8']:
  592. e8.append(float(i['e8'].split('#')[0]))
  593. e8_time.append(i['uptime'])
  594. if i['e9']:
  595. e9.append(float(i['e9'].split('#')[0]))
  596. e9_time.append(i['uptime'])
  597. if i['e10']:
  598. e10.append(float(i['e10'].split('#')[0]))
  599. e10_time.append(i['uptime'])
  600. if i['e11']:
  601. e11.append(float(i['e11'].split('#')[0]))
  602. e11_time.append(i['uptime'])
  603. if i['e12']:
  604. e12.append(float(i['e12'].split('#')[0]))
  605. e12_time.append(i['uptime'])
  606. if i['e13']:
  607. e13.append(float(i['e13'].split('#')[0]))
  608. e13_time.append(i['uptime'])
  609. if i['e14']:
  610. e14.append(float(i['e14'].split('#')[0]))
  611. e14_time.append(i['uptime'])
  612. if i['e15']:
  613. e15.append(float(i['e15'].split('#')[0]))
  614. e15_time.append(i['uptime'])
  615. if i['e16']:
  616. e16.append(float(i['e16'].split('#')[0]))
  617. e16_time.append(i['uptime'])
  618. if i['e17']:
  619. e17.append(float(i['e17'].split('#')[0]))
  620. e17_time.append(i['uptime'])
  621. if i['e18']:
  622. e18.append(float(i['e18'].split('#')[0]))
  623. e18_time.append(i['uptime'])
  624. if i['e19']:
  625. e19.append(float(i['e19'].split('#')[0]))
  626. e19_time.append(i['uptime'])
  627. if i['e20']:
  628. e20.append(float(i['e20'].split('#')[0]))
  629. e20_time.append(i['uptime'])
  630. if i['e21']:
  631. e21.append(float(i['e21'].split('#')[0]))
  632. e21_time.append(i['uptime'])
  633. if i['e22']:
  634. e22.append(float(i['e22'].split('#')[0]))
  635. e22_time.append(i['uptime'])
  636. if i['e23']:
  637. e23.append(float(i['e23'].split('#')[0]))
  638. e23_time.append(i['uptime'])
  639. if i['e24']:
  640. e24.append(float(i['e24'].split('#')[0]))
  641. e24_time.append(i['uptime'])
  642. if i['e25']:
  643. e25.append(float(i['e25'].split('#')[0]))
  644. e25_time.append(i['uptime'])
  645. if i['e26']:
  646. e26.append(float(i['e26'].split('#')[0]))
  647. e26_time.append(i['uptime'])
  648. if i['e27']:
  649. e27.append(float(i['e27'].split('#')[0]))
  650. e27_time.append(i['uptime'])
  651. if i['e28']:
  652. e28.append(float(i['e28'].split('#')[0]))
  653. e28_time.append(i['uptime'])
  654. if i['e29']:
  655. e29.append(float(i['e29'].split('#')[0]))
  656. e29_time.append(i['uptime'])
  657. if i['e30']:
  658. e30.append(float(i['e30'].split('#')[0]))
  659. e30_time.append(i['uptime'])
  660. conf = {}
  661. x = MongoQXZ_Conf.objects.filter(device_id=device_id).first()
  662. if x:
  663. conf = {"e1":x.e1,"e2":x.e2,"e3":x.e3,"e4":x.e4,"e5":x.e5,
  664. "e6":x.e6,"e7":x.e7,"e8":x.e8,"e9":x.e9,"e10":x.e10,
  665. "e11":x.e11,"e12":x.e12,"e13":x.e13,"e14":x.e14,
  666. "e15":x.e15,"e16":x.e16,"e17":x.e17,"e18":x.e18,
  667. "e19":x.e19,"e20":x.e20,"e21":x.e21,"e22":x.e22,
  668. "e23":x.e23,"e24":x.e24,"e25":x.e25,"e26":x.e26,
  669. "e27":x.e27,"e28":x.e28,"e29":x.e29,"e30":x.e30}
  670. data = []
  671. try:
  672. if e1 != []:
  673. config = qxz_configs(conf,i['e1'],"e1")
  674. data.append({"max":max(e1),"maxtime":e1_time[e1.index(max(e1))],"min":min(e1),"mintime":e1_time[e1.index(min(e1))],"enum":config,"ekey":i['e1'].split('#')[2]})
  675. if e2 != []:
  676. config = qxz_configs(conf,i['e2'],"e2")
  677. data.append({"max":max(e2),"maxtime":e2_time[e2.index(max(e2))],"min":min(e2),"mintime":e2_time[e2.index(min(e2))],"enum":config,"ekey":i['e2'].split('#')[2]})
  678. if e3 != []:
  679. config = qxz_configs(conf,i['e3'],"e3")
  680. data.append({"max":max(e3),"maxtime":e3_time[e3.index(max(e3))],"min":min(e3),"mintime":e3_time[e3.index(min(e3))],"enum":config,"ekey":i['e3'].split('#')[2]})
  681. if e4 != []:
  682. config = qxz_configs(conf,i['e4'],"e4")
  683. data.append({"max":max(e4),"maxtime":e4_time[e4.index(max(e4))],"min":min(e4),"mintime":e4_time[e4.index(min(e4))],"enum":config,"ekey":i['e4'].split('#')[2]})
  684. if e5 != []:
  685. config = qxz_configs(conf,i['e5'],"e5")
  686. data.append({"max":max(e5),"maxtime":e5_time[e5.index(max(e5))],"min":min(e5),"mintime":e5_time[e5.index(min(e5))],"enum":config,"ekey":i['e5'].split('#')[2]})
  687. if e6 != []:
  688. config = qxz_configs(conf,i['e6'],"e6")
  689. data.append({"max":max(e6),"maxtime":e6_time[e6.index(max(e6))],"min":min(e6),"mintime":e6_time[e6.index(min(e6))],"enum":config,"ekey":i['e6'].split('#')[2]})
  690. if e7 != []:
  691. config = qxz_configs(conf,i['e7'],"e7")
  692. data.append({"max":max(e7),"maxtime":e7_time[e7.index(max(e7))],"min":min(e7),"mintime":e7_time[e7.index(min(e7))],"enum":config,"ekey":i['e7'].split('#')[2]})
  693. if e8 != []:
  694. config = qxz_configs(conf,i['e8'],"e8")
  695. data.append({"max":max(e8),"maxtime":e8_time[e8.index(max(e8))],"min":min(e8),"mintime":e8_time[e8.index(min(e8))],"enum":config,"ekey":i['e8'].split('#')[2]})
  696. if e9 != []:
  697. config = qxz_configs(conf,i['e9'],"e9")
  698. data.append({"max":max(e9),"maxtime":e9_time[e9.index(max(e9))],"min":min(e9),"mintime":e9_time[e9.index(min(e9))],"enum":config,"ekey":i['e9'].split('#')[2]})
  699. if e10 != []:
  700. config = qxz_configs(conf,i['e10'],"e10")
  701. data.append({"max":max(e10),"maxtime":e10_time[e10.index(max(e10))],"min":min(e10),"mintime":e10_time[e10.index(min(e10))],"enum":config,"ekey":i['e10'].split('#')[2]})
  702. if e11 != []:
  703. config = qxz_configs(conf,i['e11'],"e11")
  704. data.append({"max":max(e11),"maxtime":e11_time[e11.index(max(e11))],"min":min(e11),"mintime":e11_time[e11.index(min(e11))],"enum":config,"ekey":i['e11'].split('#')[2]})
  705. if e12 != []:
  706. config = qxz_configs(conf,i['e12'],"e12")
  707. data.append({"max":max(e12),"maxtime":e12_time[e12.index(max(e12))],"min":min(e12),"mintime":e12_time[e12.index(min(e12))],"enum":config,"ekey":i['e12'].split('#')[2]})
  708. if e13 != []:
  709. config = qxz_configs(conf,i['e13'],"e13")
  710. data.append({"max":max(e13),"maxtime":e13_time[e13.index(max(e13))],"min":min(e13),"mintime":e13_time[e13.index(min(e13))],"enum":config,"ekey":i['e13'].split('#')[2]})
  711. if e14 != []:
  712. config = qxz_configs(conf,i['e14'],"e14")
  713. data.append({"max":max(e14),"maxtime":e14_time[e14.index(max(e14))],"min":min(e14),"mintime":e14_time[e14.index(min(e14))],"enum":config,"ekey":i['e14'].split('#')[2]})
  714. if e15 != []:
  715. config = qxz_configs(conf,i['e15'],"e15")
  716. data.append({"max":max(e15),"maxtime":e15_time[e15.index(max(e15))],"min":min(e15),"mintime":e15_time[e15.index(min(e15))],"enum":config,"ekey":i['e15'].split('#')[2]})
  717. if e16 != []:
  718. config = qxz_configs(conf,i['e16'],"e16")
  719. data.append({"max":max(e16),"maxtime":e16_time[e16.index(max(e16))],"min":min(e16),"mintime":e16_time[e16.index(min(e16))],"enum":config,"ekey":i['e16'].split('#')[2]})
  720. if e17 != []:
  721. config = qxz_configs(conf,i['e17'],"e17")
  722. data.append({"max":max(e17),"maxtime":e17_time[e17.index(max(e17))],"min":min(e17),"mintime":e17_time[e17.index(min(e17))],"enum":config,"ekey":i['e17'].split('#')[2]})
  723. if e18 != []:
  724. config = qxz_configs(conf,i['e18'],"e18")
  725. data.append({"max":max(e18),"maxtime":e18_time[e18.index(max(e18))],"min":min(e18),"mintime":e18_time[e18.index(min(e18))],"enum":config,"ekey":i['e18'].split('#')[2]})
  726. if e19 != []:
  727. config = qxz_configs(conf,i['e19'],"e19")
  728. data.append({"max":max(e19),"maxtime":e19_time[e19.index(max(e19))],"min":min(e19),"mintime":e19_time[e19.index(min(e19))],"enum":config,"ekey":i['e19'].split('#')[2]})
  729. if e20 != []:
  730. config = qxz_configs(conf,i['e20'],"e20")
  731. data.append({"max":max(e20),"maxtime":e20_time[e20.index(max(e20))],"min":min(e20),"mintime":e20_time[e20.index(min(e20))],"enum":config,"ekey":i['e20'].split('#')[2]})
  732. if e21 != []:
  733. config = qxz_configs(conf,i['e21'],"e21")
  734. data.append({"max":max(e21),"maxtime":e21_time[e21.index(max(e21))],"min":min(e21),"mintime":e21_time[e21.index(min(e21))],"enum":config,"ekey":i['e21'].split('#')[2]})
  735. if e22 != []:
  736. config = qxz_configs(conf,i['e22'],"e22")
  737. data.append({"max":max(e22),"maxtime":e22_time[e22.index(max(e22))],"min":min(e22),"mintime":e22_time[e22.index(min(e22))],"enum":config,"ekey":i['e22'].split('#')[2]})
  738. if e23 != []:
  739. config = qxz_configs(conf,i['e23'],"e23")
  740. data.append({"max":max(e23),"maxtime":e23_time[e23.index(max(e23))],"min":min(e23),"mintime":e23_time[e23.index(min(e23))],"enum":config,"ekey":i['e23'].split('#')[2]})
  741. if e24 != []:
  742. config = qxz_configs(conf,i['e24'],"e24")
  743. data.append({"max":max(e24),"maxtime":e24_time[e24.index(max(e24))],"min":min(e24),"mintime":e24_time[e24.index(min(e24))],"enum":config,"ekey":i['e24'].split('#')[2]})
  744. if e25 != []:
  745. config = qxz_configs(conf,i['e25'],"e25")
  746. data.append({"max":max(e25),"maxtime":e25_time[e25.index(max(e25))],"min":min(e25),"mintime":e25_time[e25.index(min(e25))],"enum":config,"ekey":i['e25'].split('#')[2]})
  747. if e26 != []:
  748. config = qxz_configs(conf,i['e26'],"e26")
  749. data.append({"max":max(e26),"maxtime":e26_time[e26.index(max(e26))],"min":min(e26),"mintime":e26_time[e26.index(min(e26))],"enum":config,"ekey":i['e26'].split('#')[2]})
  750. if e27 != []:
  751. config = qxz_configs(conf,i['e27'],"e27")
  752. data.append({"max":max(e27),"maxtime":e27_time[e27.index(max(e27))],"min":min(e27),"mintime":e27_time[e27.index(min(e27))],"enum":config,"ekey":i['e27'].split('#')[2]})
  753. if e28 != []:
  754. config = qxz_configs(conf,i['e28'],"e28")
  755. data.append({"max":max(e28),"maxtime":e28_time[e28.index(max(e28))],"min":min(e28),"mintime":e28_time[e28.index(min(e28))],"enum":config,"ekey":i['e28'].split('#')[2]})
  756. if e29 != []:
  757. config = qxz_configs(conf,i['e29'],"e29")
  758. data.append({"max":max(e29),"maxtime":e29_time[e29.index(max(e29))],"min":min(e29),"mintime":e29_time[e29.index(min(e29))],"enum":config,"ekey":i['e29'].split('#')[2]})
  759. if e30 != []:
  760. config = qxz_configs(conf,i['e30'],"e30")
  761. data.append({"max":max(e30),"maxtime":e30_time[e30.index(max(e30))],"min":min(e30),"mintime":e30_time[e30.index(min(e30))],"enum":config,"ekey":i['e30'].split('#')[2]})
  762. except Exception as e:
  763. raise PortError(" ", "计算数据失败,稍后重试")
  764. dat = {"data":data,"conf":conf}
  765. return dat
  766. @kedong_deco(login_required=False)
  767. def device_status_data(request):
  768. """
  769. 虫情测报灯/数据详情
  770. 设备实时状态接口
  771. 参数:
  772. device_id 必传 设备id
  773. 返回值:
  774. "data": {
  775. "upds": 1, 上仓门状态 1打开,0关闭
  776. "tpl": 5, 低温保护阈值温度
  777. "dver": "1.0.0", 设备固件版本
  778. "gs": 0, 通道状态 1落虫,0排水
  779. "hs": 0, 加热状态 1加热,0正常
  780. "dnds": 0, 下仓门状态 1打开,0关闭
  781. "is_online": 0, 在线状态
  782. "csq": 29, 信号强度
  783. "tph": 70, 高温保护阈值温度
  784. "ts": 0 定时模式 0光控,1时控
  785. "tps": 1 温控状态 1 温控,0 正常
  786. "lps": 0 光控状态 1 光控,0 正常
  787. "hrt": 22 加热仓实时温度
  788. "device_name":"这里是设备名称",
  789. "address": "这里是设备位置",
  790. "iccid": 1234444 SIM卡号
  791. }
  792. """
  793. post_info = request.POST
  794. _device_id = post_info.get("device_id")
  795. if not _device_id:
  796. raise PortError('device_id', "该设备不存在")
  797. try:
  798. device = MongoDevice.objects.get(device_id=_device_id)
  799. except:
  800. raise PortError('device_id','暂无此设备')
  801. d_id = device.id
  802. device_name = device.device_name
  803. province = device.province
  804. city = device.city
  805. district = device.district
  806. device_status = device.device_status # 在线状态
  807. myuser_type = request.user_type
  808. device_datas = MongoCBDData.objects.filter(device_id=d_id).order_by('-id')
  809. try:
  810. device_data = json.loads(device_datas[0].device_data)
  811. except json.JSONDecodeError as e:
  812. device_data = eval(device_datas[0].device_data)
  813. except:
  814. raise PortError("device_id","暂无数据")
  815. ds = device_data.get("ds",1 )
  816. ts = device_data.get("ts",1)
  817. up_st = {
  818. "is_online": device_status,
  819. "ts":ts,
  820. "hs":device_data["hs"],
  821. "upds":device_data["upds"],
  822. "dnds":device_data["dnds"],
  823. "csq":device_data["csq"],
  824. "dver":device_data["dver"],
  825. "tph":device_data["tph"],
  826. "tpl":device_data["tpl"],
  827. "tps":device_data["tps"],
  828. "lps":device_data["lps"],
  829. "hrt":device_data["hrt"],
  830. "iccid":device_data["iccid"],
  831. "rps":device_data["rps"],
  832. "ah":device_data["ah"],
  833. "at":device_data["at"],
  834. "ds":ds,
  835. "device_name":device_name,
  836. "address": province + city + district,
  837. }
  838. return up_st
  839. # config = {
  840. # 'host': config_dict['bigdata']['django_mysql_host'],
  841. # 'port': int(config_dict['bigdata']['django_mysql_port']),
  842. # 'user': config_dict['bigdata']['django_mysql_user'],
  843. # 'password': config_dict['bigdata']['django_mysql_password'],
  844. # 'db': config_dict['bigdata']['django_mysql_db'],
  845. # 'charset': 'utf8mb4',
  846. # 'cursorclass': pymysql.cursors.DictCursor,
  847. # }