weather.py 52 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438
  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 logging
  10. from django.forms.models import model_to_dict
  11. from django.db.models import Q, Max, Min
  12. from django.conf import settings
  13. from kedong.decoration import kedong_deco, PortError
  14. from smartfarming.models.device import MongoDevice, MongoCBDData
  15. from smartfarming.models.weather import MongoQXZ_Base_Info, QXZdata_New, MongoQXZ_Conf, QXZstatus_New, MongoQXZ_Alarm
  16. from smartfarming.api.views.weather.all_dict import qxz_dict
  17. from smartfarming.models.weather import (
  18. MongoQXZ_Switch,
  19. MongoQXZ_Auto_Switch,
  20. MongoQXZ_Timing_Switch,
  21. QXZ_Switch_Status,
  22. QXZ_Default_Conf
  23. )
  24. config_dict = settings.CONFIG
  25. logger = logging.getLogger("myapp")
  26. @kedong_deco(login_required=True)
  27. def qxz_page(request):
  28. """
  29. 气象设备列表接口 :
  30. 参数:
  31. page 非必传(num) 页码,默认为1
  32. device_id 非必传(str) 设备号
  33. device_status 非必传(str) 在线状态 1在线 0离线
  34. device_name 非必传(str) 设备名称
  35. device_type 非必传(str) 5气象站 8墒情站
  36. 返回值:
  37. {
  38. "data": {
  39. "ids": [
  40. {
  41. "d_id":"", 设备数据库ID
  42. "equip_name":"", 设备名称
  43. "equip_id":12313456, 设备ID
  44. "is_online":1, 在线状态 1在线 0离线
  45. "rssi":10, 信号强度
  46. "volt":22, 电压
  47. "lng":113, 经度
  48. "lat":113, 纬度
  49. "off_time":"" 离线时间
  50. "address":"" 设备地址
  51. "device_expire_time": 1234444 设备到期时间
  52. "device_expire": # 设备状态 0未到期,1已到期,2即将到期
  53. "device_expire_days": 到期天数
  54. }
  55. ],
  56. "nums": 0 设备总数
  57. },
  58. "formError": {},
  59. "errorCode": 0,
  60. "message": "",
  61. "params": {}
  62. }
  63. """
  64. device_id = request.POST.get("device_id")
  65. device_status = request.POST.get("device_status")
  66. device_name = request.POST.get("device_name")
  67. page = request.POST.get("page","")
  68. page_size = request.POST.get("page_size","")
  69. device_type = request.POST.get("device_type","5")
  70. if not page and not page_size:
  71. page = 1
  72. page_size = 8
  73. else:
  74. if not page.isdigit() and not page_size.isdigit():
  75. raise PortError("","字段类型有误")
  76. else:
  77. page = int(page)
  78. page_size = int(page_size)
  79. if device_type not in ("5","8"):
  80. raise PortError("","参数超出范围")
  81. devices = MongoDevice.objects.filter(device_type_id=device_type).order_by('-device_status', '-uptime')
  82. #设备状态查询
  83. if device_status:
  84. devices = devices.filter(device_status=int(device_status))
  85. #设备号查询
  86. if device_id:
  87. devices = devices.filter(Q(device_id__icontains=device_id) | Q(device_name__icontains=device_id))
  88. #设备名称查询
  89. if device_name:
  90. devices = devices.filter(device_name__icontains=device_name)
  91. date = []
  92. nums = devices.count()
  93. result = devices[(page_size*(page-1)):(page*page_size)]
  94. result_device_id_list = [item.device_id for item in result]
  95. qxz_base_dict = {item.device_id: item for item in MongoQXZ_Base_Info.objects.filter(device_id__in=result_device_id_list)}
  96. for i in result:
  97. try:
  98. qxz_base = qxz_base_dict[i.device_id]
  99. rssi = qxz_base.rssi
  100. volt = qxz_base.volt
  101. except:
  102. rssi = ""
  103. volt = ""
  104. lng = i.lng
  105. lat = i.lat
  106. address = i.province+i.city+i.district
  107. is_online = i.device_status
  108. uptime = i.uptime
  109. date.append({
  110. "d_id":i.id,
  111. "equip_name":i.device_name,
  112. "equip_id":i.device_id,
  113. "volt":volt,
  114. "rssi":rssi,
  115. "lng":lng,
  116. "lat":lat,
  117. "address":address,
  118. "is_online":is_online,
  119. "uptime":uptime,
  120. })
  121. data = {'ids':date, 'nums': nums}
  122. return data
  123. @kedong_deco(login_required=True)
  124. def qxz_detail(request):
  125. """
  126. 气象历史数据接口 :
  127. 参数:
  128. device_id 必传(string)
  129. page 非必传(num) 页码,默认为1
  130. start_time 非必传(string 时间戳) 开始时间 (用于时间搜索)
  131. end_time 非必传(string 时间戳) 结束时间 (用于时间搜索)
  132. 返回值:
  133. {
  134. "data": {
  135. "conf": {
  136. "e1":x.e1,"e2":x.e2,"e3":x.e3,"e4":x.e4,"e5":x.e5,
  137. "e6":x.e6,"e7":x.e7,"e8":x.e8,"e9":x.e9,"e10":x.e10,
  138. "e11":x.e11,"e12":x.e12,"e13":x.e13,"e14":x.e14,
  139. "e15":x.e15,"e16":x.e16,"e17":x.e17,"e18":x.e18,
  140. "e19":x.e19,"e20":x.e20,"e21":x.e21,"e22":x.e22,
  141. "e23":x.e23,"e24":x.e24,"e25":x.e25,"e26":x.e26,
  142. "e27":x.e27,"e28":x.e28,"e29":x.e29,"e30":x.e30
  143. },
  144. "nums": 0,
  145. "rainFall": 1 气象设备是否具有日雨量累计因子,有返回1,无返回0
  146. "data": [
  147. {
  148. "e1":qxz_list.e1,"e2":qxz_list.e2,"e3":qxz_list.e3,"e4":qxz_list.e4,"e5":qxz_list.e5,
  149. "e6":qxz_list.e6,"e7":qxz_list.e7,"e8":qxz_list.e8,"e9":qxz_list.e9,"e10":qxz_list.e10,
  150. "e11":qxz_list.e11,"e12":qxz_list.e12,"e13":qxz_list.e13,"e14":qxz_list.e14,
  151. "e15":qxz_list.e15,"e16":qxz_list.e16,"e17":qxz_list.e17,"e18":qxz_list.e18,
  152. "e19":qxz_list.e19,"e20":qxz_list.e20,"e21":qxz_list.e21,"e22":qxz_list.e22,
  153. "e23":qxz_list.e23,"e24":qxz_list.e24,"e25":qxz_list.e25,"e26":qxz_list.e26,
  154. "e27":qxz_list.e27,"e28":qxz_list.e28,"e29":qxz_list.e29,"e30":qxz_list.e30,
  155. "upl_time":qxz_list.upl_time.strftime('%Y-%m-%d %H:%M:%S')
  156. },
  157. {
  158. "e1":qxz_list.e1,"e2":qxz_list.e2,"e3":qxz_list.e3,"e4":qxz_list.e4,"e5":qxz_list.e5,
  159. "e6":qxz_list.e6,"e7":qxz_list.e7,"e8":qxz_list.e8,"e9":qxz_list.e9,"e10":qxz_list.e10,
  160. "e11":qxz_list.e11,"e12":qxz_list.e12,"e13":qxz_list.e13,"e14":qxz_list.e14,
  161. "e15":qxz_list.e15,"e16":qxz_list.e16,"e17":qxz_list.e17,"e18":qxz_list.e18,
  162. "e19":qxz_list.e19,"e20":qxz_list.e20,"e21":qxz_list.e21,"e22":qxz_list.e22,
  163. "e23":qxz_list.e23,"e24":qxz_list.e24,"e25":qxz_list.e25,"e26":qxz_list.e26,
  164. "e27":qxz_list.e27,"e28":qxz_list.e28,"e29":qxz_list.e29,"e30":qxz_list.e30,
  165. "upl_time":qxz_list.upl_time.strftime('%Y-%m-%d %H:%M:%S')
  166. },...
  167. ]
  168. }
  169. "params": {},
  170. "formError": {},
  171. "errorCode": 0,
  172. "message": "",
  173. }
  174. """
  175. f_tbegin = request.POST.get('start_time')
  176. f_tend = request.POST.get('end_time')
  177. device_id = request.POST.get("device_id")
  178. try:
  179. device = MongoDevice.objects.get(device_id=device_id)
  180. device_expire = device.device_expire
  181. device_expire_time = device.device_expire_time
  182. except Exception as e:
  183. logger.error(f"气象站数据:{e} {device_id}")
  184. raise PortError('device_id',"暂无此设备")
  185. qxz_list = QXZdata_New.objects.filter(device_id=device_id)
  186. myuser_type = request.user_type
  187. if not myuser_type == 1 and not myuser_type == 5:
  188. if f_tbegin and int(f_tend) > int(device_expire_time):
  189. f_tend = device_expire_time
  190. if f_tbegin and f_tend:
  191. qxz_list =qxz_list.filter(uptime__range=(int(f_tbegin),int(f_tend))).order_by('-id')
  192. page = int(request.POST.get('page',1))
  193. data = []
  194. nums = qxz_list.count()
  195. conf = {}
  196. if nums:
  197. for i in qxz_list[(10*(page-1)):(page*10)]:
  198. dat = {}
  199. for e in range(1, 31):
  200. k = f'e{e}'
  201. v = getattr(i, k)
  202. dat[k] = v or ""
  203. data.append({"dat": dat, "time": i.uptime})
  204. try:
  205. x = MongoQXZ_Conf.objects.get(device_id=device_id)
  206. conf = {}
  207. for e in range(1, 31):
  208. k = f'e{e}'
  209. v = getattr(x, k)
  210. conf[k] = v or ""
  211. except Exception as e:
  212. conf = {}
  213. rainFall = 0
  214. for factor in conf.values():
  215. if factor == "降雨量累计#mm":
  216. rainFall = 1
  217. break
  218. data1 = {"data":data,"nums":nums,"conf":conf,"rainFall":rainFall}
  219. return data1
  220. @kedong_deco(login_required=True)
  221. def qxz_status(request):
  222. """
  223. 气象详情接口 :
  224. 参数:
  225. device_id 必传(string)
  226. 返回值:
  227. {
  228. "data": {
  229. 'dat':{
  230. "e1":qxz_list.e1,"e2":qxz_list.e2,"e3":qxz_list.e3,"e4":qxz_list.e4,"e5":qxz_list.e5,
  231. "e6":qxz_list.e6,"e7":qxz_list.e7,"e8":qxz_list.e8,"e9":qxz_list.e9,"e10":qxz_list.e10,
  232. "e11":qxz_list.e11,"e12":qxz_list.e12,"e13":qxz_list.e13,"e14":qxz_list.e14,
  233. "e15":qxz_list.e15,"e16":qxz_list.e16,"e17":qxz_list.e17,"e18":qxz_list.e18,
  234. "e19":qxz_list.e19,"e20":qxz_list.e20,"e21":qxz_list.e21,"e22":qxz_list.e22,
  235. "e23":qxz_list.e23,"e24":qxz_list.e24,"e25":qxz_list.e25,"e26":qxz_list.e26,
  236. "e27":qxz_list.e27,"e28":qxz_list.e28,"e29":qxz_list.e29,"e30":qxz_list.e30,
  237. "upl_time":qxz_list.upl_time.strftime('%Y-%m-%d %H:%M:%S')
  238. },
  239. 'conf':{
  240. "e1":x.e1,"e2":x.e2,"e3":x.e3,"e4":x.e4,"e5":x.e5,
  241. "e6":x.e6,"e7":x.e7,"e8":x.e8,"e9":x.e9,"e10":x.e10,
  242. "e11":x.e11,"e12":x.e12,"e13":x.e13,"e14":x.e14,
  243. "e15":x.e15,"e16":x.e16,"e17":x.e17,"e18":x.e18,
  244. "e19":x.e19,"e20":x.e20,"e21":x.e21,"e22":x.e22,
  245. "e23":x.e23,"e24":x.e24,"e25":x.e25,"e26":x.e26,
  246. "e27":x.e27,"e28":x.e28,"e29":x.e29,"e30":x.e30
  247. },
  248. "led":0, 0 无led点阵屏功能 1 有led点阵屏功能
  249. "ledinfo":"点阵屏内容"
  250. },
  251. "errorCode": 0,
  252. "message": "",
  253. "formError": {}
  254. }
  255. """
  256. e_id = request.POST.get("device_id")
  257. if not e_id:
  258. raise PortError("","参数缺失")
  259. qxz_list = QXZdata_New.objects.filter(device_id=e_id).order_by("-uptime").first()
  260. if not qxz_list:
  261. raise PortError("","未找到此设备")
  262. data = []
  263. e12 = qxz_list.e12 if qxz_list.e12 else "0#110#e12"
  264. dat = {"e1":qxz_list.e1,"e2":qxz_list.e2,"e3":qxz_list.e3,"e4":qxz_list.e4,"e5":qxz_list.e5,
  265. "e6":qxz_list.e6,"e7":qxz_list.e7,"e8":qxz_list.e8,"e9":qxz_list.e9,"e10":qxz_list.e10,
  266. "e11":qxz_list.e11,"e12":e12,"e13":qxz_list.e13,"e14":qxz_list.e14,
  267. "e15":qxz_list.e15,"e16":qxz_list.e16,"e17":qxz_list.e17,"e18":qxz_list.e18,
  268. "e19":qxz_list.e19,"e20":qxz_list.e20,"e21":qxz_list.e21,"e22":qxz_list.e22,
  269. "e23":qxz_list.e23,"e24":qxz_list.e24,"e25":qxz_list.e25,"e26":qxz_list.e26,
  270. "e27":qxz_list.e27,"e28":qxz_list.e28,"e29":qxz_list.e29,"e30":qxz_list.e30, "uptime":qxz_list.uptime}
  271. try:
  272. x = MongoQXZ_Conf.objects.get(device_id=e_id)
  273. conf = {"e1":x.e1,"e2":x.e2,"e3":x.e3,"e4":x.e4,"e5":x.e5,
  274. "e6":x.e6,"e7":x.e7,"e8":x.e8,"e9":x.e9,"e10":x.e10,
  275. "e11":x.e11,"e12":x.e12,"e13":x.e13,"e14":x.e14,
  276. "e15":x.e15,"e16":x.e16,"e17":x.e17,"e18":x.e18,
  277. "e19":x.e19,"e20":x.e20,"e21":x.e21,"e22":x.e22,
  278. "e23":x.e23,"e24":x.e24,"e25":x.e25,"e26":x.e26,
  279. "e27":x.e27,"e28":x.e28,"e29":x.e29,"e30":x.e30}
  280. except:
  281. conf = {}
  282. try:
  283. led = MongoQXZ_Base_Info.objects.get(device_id=e_id).led
  284. except:
  285. led = "0"
  286. try:
  287. ledinfo = MongoQXZ_Base_Info.objects.get(device_id=e_id).ledinfo
  288. except:
  289. ledinfo = ""
  290. data = {'dat':dat,'conf':conf, "led":led,"ledinfo":ledinfo}
  291. return data
  292. @kedong_deco(login_required=True)
  293. def qxz_data_chart(request):
  294. """
  295. 气象折线图接口 :
  296. 参数:
  297. device_id 必传(string)
  298. begin 必传(string 时间戳) 开始时间 (用于时间搜索) 默认近一个月
  299. end 非必传(string 时间戳) 结束时间 (用于时间搜索)
  300. 返回值:
  301. {
  302. "data": {
  303. "conf": {
  304. "e1":x.e1,"e2":x.e2,"e3":x.e3,"e4":x.e4,"e5":x.e5,
  305. "e6":x.e6,"e7":x.e7,"e8":x.e8,"e9":x.e9,"e10":x.e10,
  306. "e11":x.e11,"e12":x.e12,"e13":x.e13,"e14":x.e14,
  307. "e15":x.e15,"e16":x.e16,"e17":x.e17,"e18":x.e18,
  308. "e19":x.e19,"e20":x.e20,"e21":x.e21,"e22":x.e22,
  309. "e23":x.e23,"e24":x.e24,"e25":x.e25,"e26":x.e26,
  310. "e27":x.e27,"e28":x.e28,"e29":x.e29,"e30":x.e30
  311. },
  312. "nums": 0,
  313. "data": [
  314. {
  315. "e1":qxz_list.e1,"e2":qxz_list.e2,"e3":qxz_list.e3,"e4":qxz_list.e4,"e5":qxz_list.e5,
  316. "e6":qxz_list.e6,"e7":qxz_list.e7,"e8":qxz_list.e8,"e9":qxz_list.e9,"e10":qxz_list.e10,
  317. "e11":qxz_list.e11,"e12":qxz_list.e12,"e13":qxz_list.e13,"e14":qxz_list.e14,
  318. "e15":qxz_list.e15,"e16":qxz_list.e16,"e17":qxz_list.e17,"e18":qxz_list.e18,
  319. "e19":qxz_list.e19,"e20":qxz_list.e20,"e21":qxz_list.e21,"e22":qxz_list.e22,
  320. "e23":qxz_list.e23,"e24":qxz_list.e24,"e25":qxz_list.e25,"e26":qxz_list.e26,
  321. "e27":qxz_list.e27,"e28":qxz_list.e28,"e29":qxz_list.e29,"e30":qxz_list.e30,
  322. "upl_time":qxz_list.upl_time.strftime('%Y-%m-%d %H:%M:%S')
  323. },
  324. {
  325. "e1":qxz_list.e1,"e2":qxz_list.e2,"e3":qxz_list.e3,"e4":qxz_list.e4,"e5":qxz_list.e5,
  326. "e6":qxz_list.e6,"e7":qxz_list.e7,"e8":qxz_list.e8,"e9":qxz_list.e9,"e10":qxz_list.e10,
  327. "e11":qxz_list.e11,"e12":qxz_list.e12,"e13":qxz_list.e13,"e14":qxz_list.e14,
  328. "e15":qxz_list.e15,"e16":qxz_list.e16,"e17":qxz_list.e17,"e18":qxz_list.e18,
  329. "e19":qxz_list.e19,"e20":qxz_list.e20,"e21":qxz_list.e21,"e22":qxz_list.e22,
  330. "e23":qxz_list.e23,"e24":qxz_list.e24,"e25":qxz_list.e25,"e26":qxz_list.e26,
  331. "e27":qxz_list.e27,"e28":qxz_list.e28,"e29":qxz_list.e29,"e30":qxz_list.e30,
  332. "upl_time":qxz_list.upl_time.strftime('%Y-%m-%d %H:%M:%S')
  333. },...
  334. ]
  335. }
  336. "params": {},
  337. "formError": {},
  338. "errorCode": 0,
  339. "message": "",
  340. }
  341. """
  342. device_id = request.POST.get("device_id")
  343. data = []
  344. f_tbegin = request.POST.get('begin')
  345. f_tend = request.POST.get('end')
  346. try:
  347. device = MongoDevice.objects.get(device_id=device_id)
  348. device_expire = device.device_expire
  349. device_expire_time = device.device_expire_time
  350. except:
  351. raise PortError('device_id',"暂无此设备")
  352. qxz_list = QXZdata_New.objects.filter(device_id=device_id)
  353. myuser_type = request.user_type
  354. if not myuser_type == 1 and not myuser_type == 5:
  355. if f_tbegin and int(f_tend) > int(device_expire_time):
  356. f_tend = device_expire_time
  357. if f_tbegin and f_tend:
  358. qxz_list =qxz_list.filter(uptime__range=(int(f_tbegin),int(f_tend))).order_by('-id')
  359. conf = {}
  360. for i in qxz_list:
  361. data.append({"dat":{"e1":i.e1 if i.e1 else "0#0#e1","e2":i.e2 if i.e2 else "0#0#e2","e3":i.e3 if i.e3 else "0#0#e3","e4":i.e4 if i.e4 else "0#0#e4","e5":i.e5 if i.e5 else "0#0#e5" ,
  362. "e6":i.e6 if i.e6 else "0#0#e6","e7":i.e7 if i.e7 else "0#0#e7","e8":i.e8 if i.e8 else "0#0#e8","e9":i.e9 if i.e9 else "0#0#e9","e10":i.e10 if i.e10 else "0#0#e10",
  363. "e11":i.e11 if i.e11 else "0#0#e11","e12":i.e12 if i.e2 else "0#0#e12","e13":i.e13,"e14":i.e14,
  364. "e15":i.e15,"e16":i.e16,"e17":i.e17,"e18":i.e18,
  365. "e19":i.e19,"e20":i.e20,"e21":i.e21,"e22":i.e22,
  366. "e23":i.e23,"e24":i.e24,"e25":i.e25,"e26":i.e26,
  367. "e27":i.e27,"e28":i.e28,"e29":i.e29,"e30":i.e30},
  368. "time":i.uptime})
  369. try:
  370. x = MongoQXZ_Conf.objects.get(device_id=device_id)
  371. conf = {"e1":x.e1,"e2":x.e2,"e3":x.e3,"e4":x.e4,"e5":x.e5,
  372. "e6":x.e6,"e7":x.e7,"e8":x.e8,"e9":x.e9,"e10":x.e10,
  373. "e11":x.e11,"e12":x.e12,"e13":x.e13,"e14":x.e14,
  374. "e15":x.e15,"e16":x.e16,"e17":x.e17,"e18":x.e18,
  375. "e19":x.e19,"e20":x.e20,"e21":x.e21,"e22":x.e22,
  376. "e23":x.e23,"e24":x.e24,"e25":x.e25,"e26":x.e26,
  377. "e27":x.e27,"e28":x.e28,"e29":x.e29,"e30":x.e30}
  378. except:
  379. conf = {}
  380. data1 = {"data":data,"conf":conf}
  381. return data1
  382. @kedong_deco(login_required=True)
  383. def qxz_early_warning(request):
  384. """
  385. 气象站查看短信预警信息接口\配置预警信息接口
  386. 参数:
  387. device_id 必传(str) 设备号
  388. status 必传(str) 当status等于see查看, 当status等于save保存
  389. 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"}
  390. 返回值:
  391. {
  392. "data" 0 0 保存成功 1失败
  393. }
  394. """
  395. status = request.POST.get("status")
  396. device_id = request.POST.get("device_id")
  397. if status == "see":
  398. try:
  399. qxz_alarm = MongoQXZ_Alarm.objects.get(device_id=device_id)
  400. alarm = ast.literal_eval(qxz_alarm.conf)
  401. phone = qxz_alarm.phone
  402. except Exception as e:
  403. print(e)
  404. alarm = ""
  405. phone = ""
  406. x = MongoQXZ_Conf.objects.get(device_id=device_id)
  407. conf = {"e1":x.e1,"e2":x.e2,"e3":x.e3,"e4":x.e4,"e5":x.e5,
  408. "e6":x.e6,"e7":x.e7,"e8":x.e8,"e9":x.e9,"e10":x.e10,
  409. "e11":x.e11,"e12":x.e12,"e13":x.e13,"e14":x.e14,
  410. "e15":x.e15,"e16":x.e16,"e17":x.e17,"e18":x.e18,
  411. "e19":x.e19,"e20":x.e20,"e21":x.e21,"e22":x.e22,
  412. "e23":x.e23,"e24":x.e24,"e25":x.e25,"e26":x.e26,
  413. "e27":x.e27,"e28":x.e28,"e29":x.e29,"e30":x.e30}
  414. for k in list(conf.keys()):
  415. if not conf[k]:
  416. del conf[k]
  417. data = {"conf":conf,"alarm":alarm,"phone":phone}
  418. elif status == "save":
  419. alarm = ast.literal_eval(request.POST.get('alarm'))
  420. conf = alarm["dat"]
  421. try:
  422. MongoQXZ_Alarm.objects.update_or_create(
  423. device_id=device_id,
  424. defaults={
  425. "conf": {"dat": conf},
  426. "upl_time": int(time.time())
  427. }
  428. )
  429. return {"code":0}
  430. except Exception as e:
  431. raise PortError("","更新失败")
  432. else:
  433. raise PortError("","参数超出范围")
  434. return data
  435. def qxz_configs(conf,e_data,es):
  436. """气象站要素配置"""
  437. e3s = conf.get(es,"")
  438. code = e_data.split('#')[1]
  439. if e3s:
  440. config = e3s.split("#")
  441. config.insert(0,code)
  442. else:
  443. config = qxz_dict_1[e_data.split('#')[1]]
  444. return config
  445. @kedong_deco(login_required=True)
  446. def qxz_day_data(request):
  447. """
  448. 气象24H数据接口 :
  449. 参数:
  450. device_id 必传(string)
  451. """
  452. device_id = request.POST.get("device_id")
  453. # 获取最近24小时的开始时间与结束时间
  454. end = int(time.time())
  455. start = end - 24 * 3600
  456. # 查询数据
  457. qxz_data = QXZdata_New.objects.filter(device_id=device_id).filter(uptime__range=(start, end))
  458. e1, e2 ,e3,e4,e5,e6,e7,e8,e9,e10 = [999999, -99999, 0, 0],[999999, -99999, 0, 0],[999999, -99999, 0, 0],[999999, -99999, 0, 0],[999999, -99999, 0, 0],[999999, -99999, 0, 0],[999999, -99999, 0, 0],[999999, -99999, 0, 0],[999999, -99999, 0, 0],[999999, -99999, 0, 0]
  459. e11,e12,e13,e14,e15,e16,e17,e18,e19,e20 = [999999, -99999, 0, 0],[999999, -99999, 0, 0],[999999, -99999, 0, 0],[999999, -99999, 0, 0],[999999, -99999, 0, 0],[999999, -99999, 0, 0],[999999, -99999, 0, 0],[999999, -99999, 0, 0],[999999, -99999, 0, 0],[999999, -99999, 0, 0]
  460. e21,e22,e23,e24,e25,e26,e27,e28,e29,e30 = [999999, -99999, 0, 0],[999999, -99999, 0, 0],[999999, -99999, 0, 0],[999999, -99999, 0, 0],[999999, -99999, 0, 0],[999999, -99999, 0, 0],[999999, -99999, 0, 0],[999999, -99999, 0, 0],[999999, -99999, 0, 0],[999999, -99999, 0, 0]
  461. for m in qxz_data:
  462. uptime = m.uptime
  463. k1 = (m.e1)
  464. if k1:
  465. k1 = float(k1.split("#")[0])
  466. if e1[0] >= k1:
  467. e1[0] = k1
  468. e1[2] = uptime
  469. if e1[1] <= k1:
  470. e1[1] = k1
  471. e1[3] = uptime
  472. k2 = (m.e2)
  473. if k2:
  474. k2 = float(k2.split("#")[0])
  475. if e2[0] >= k2:
  476. e2[0] = k2
  477. e2[2] = uptime
  478. if e2[1] <= k2:
  479. e2[1] = k2
  480. e2[3] = uptime
  481. k3 = (m.e3)
  482. if k3:
  483. k3 = float(k3.split("#")[0])
  484. if e3[0] >= k3:
  485. e3[0] = k3
  486. e3[2] = uptime
  487. if e3[1] <= k3:
  488. e3[1] = k3
  489. e3[3] = uptime
  490. k4 = (m.e4)
  491. if k4:
  492. k4 = float(k4.split("#")[0])
  493. if e4[0] >= k4:
  494. e4[0] = k4
  495. e4[2] = uptime
  496. if e4[1] <= k4:
  497. e4[1] = k4
  498. e4[3] = uptime
  499. k5 = m.e5
  500. if k5:
  501. k5 = float(k5.split("#")[0])
  502. if e5[0] >= k5:
  503. e5[0] = k5
  504. e5[2] = uptime
  505. if e5[1] <= k5:
  506. e5[1] = k5
  507. e5[3] = uptime
  508. k6 = (m.e6)
  509. if k6:
  510. k6 = float(k6.split("#")[0])
  511. if e6[0] >= k6:
  512. e6[0] = k6
  513. e6[2] = uptime
  514. if e6[1] <= k6:
  515. e6[1] = k6
  516. e6[3] = uptime
  517. k7 = (m.e7)
  518. if k7:
  519. k7 = float(k7.split("#")[0])
  520. if e7[0] >= k7:
  521. e7[0] = k7
  522. e7[2] = uptime
  523. if e7[1] <= k7:
  524. e7[1] = k7
  525. e7[3] = uptime
  526. k8 = (m.e8)
  527. if k8:
  528. k8 = float(k8.split("#")[0])
  529. if e8[0] >= k8:
  530. e8[0] = k8
  531. e8[2] = uptime
  532. if e8[1] <= k8:
  533. e8[1] = k8
  534. e8[3] = uptime
  535. k9 = (m.e9)
  536. if k9:
  537. k9 = float(k9.split("#")[0])
  538. if e9[0] >= k9:
  539. e9[0] = k9
  540. e9[2] = uptime
  541. if e9[1] <= k9:
  542. e9[1] = k9
  543. e9[3] = uptime
  544. k10 = (m.e10)
  545. if k10:
  546. k10 = float(k10.split("#")[0])
  547. if e10[0] >= k10:
  548. e10[0] = k10
  549. e10[2] = uptime
  550. if e10[1] <= k10:
  551. e10[1] = k10
  552. e10[3] = uptime
  553. k11 = (m.e11)
  554. if k11:
  555. k11 = float(k11.split("#")[0])
  556. if e11[0] >= k11:
  557. e11[0] = k11
  558. e11[2] = uptime
  559. if e11[1] <= k11:
  560. e11[1] = k11
  561. e11[3] = uptime
  562. k12 = (m.e12)
  563. if k12:
  564. k12 = float(k12.split("#")[0])
  565. if e12[0] >= k12:
  566. e12[0] = k12
  567. e12[2] = uptime
  568. if e12[1] <= k12:
  569. e12[1] = k12
  570. e12[3] = uptime
  571. k13 = (m.e13)
  572. if k13:
  573. k13 = float(k13.split("#")[0])
  574. if e13[0] >= k13:
  575. e13[0] = k13
  576. e13[2] = uptime
  577. if e13[1] <= k13:
  578. e13[1] = k13
  579. e13[3] = uptime
  580. k14 = (m.e14)
  581. if k14:
  582. k14 = float(k14.split("#")[0])
  583. if e14[0] >= k14:
  584. e14[0] = k14
  585. e14[2] = uptime
  586. if e14[1] <= k14:
  587. e14[1] = k14
  588. e14[3] = uptime
  589. k15 = (m.e15)
  590. if k15:
  591. k15 = float(k15.split("#")[0])
  592. if e15[0] >= k15:
  593. e15[0] = k15
  594. e15[2] = uptime
  595. if e15[1] <= k15:
  596. e15[1] = k15
  597. e15[3] = uptime
  598. k16 = (m.e16)
  599. if k16:
  600. k16 = float(k16.split("#")[0])
  601. if e16[0] >= k16:
  602. e16[0] = k16
  603. e16[2] = uptime
  604. if e16[1] <= k16:
  605. e16[1] = k16
  606. e16[3] = uptime
  607. k17 = (m.e17)
  608. if k17:
  609. k17 = float(k17.split("#")[0])
  610. if e17[0] >= k17:
  611. e17[0] = k17
  612. e17[2] = uptime
  613. if e17[1] <= k17:
  614. e17[1] = k17
  615. e17[3] = uptime
  616. k18 = (m.e18)
  617. if k18:
  618. k18 = float(k18.split("#")[0])
  619. if e18[0] >= k18:
  620. e18[0] = k18
  621. e18[2] = uptime
  622. if e18[1] <= k18:
  623. e18[1] = k18
  624. e18[3] = uptime
  625. k19 = (m.e19)
  626. if k19:
  627. k19 = float(k19.split("#")[0])
  628. if e19[0] >= k19:
  629. e19[0] = k19
  630. e19[2] = uptime
  631. if e19[1] <= k19:
  632. e19[1] = k19
  633. e19[3] = uptime
  634. k20 = (m.e20)
  635. if k20:
  636. k20 = float(k20.split("#")[0])
  637. if e20[0] >= k20:
  638. e20[0] = k20
  639. e20[2] = uptime
  640. if e20[1] <= k20:
  641. e20[1] = k20
  642. e20[3] = uptime
  643. k21 = (m.e21)
  644. if k21:
  645. k21 = float(k21.split("#")[0])
  646. if e21[0] >= k21:
  647. e21[0] = k21
  648. e21[2] = uptime
  649. if e21[1] <= k21:
  650. e21[1] = k21
  651. e21[3] = uptime
  652. k22 = (m.e22)
  653. if k22:
  654. k22 = float(k22.split("#")[0])
  655. if e22[0] >= k22:
  656. e22[0] = k22
  657. e22[2] = uptime
  658. if e22[1] <= k22:
  659. e22[1] = k22
  660. e22[3] = uptime
  661. k23 = (m.e23)
  662. if k23:
  663. k23 = float(k23.split("#")[0])
  664. if e23[0] >= k23:
  665. e23[0] = k23
  666. e23[2] = uptime
  667. if e23[1] <= k23:
  668. e23[1] = k23
  669. e23[3] = uptime
  670. k24 = (m.e24)
  671. if k24:
  672. k24 = float(k24.split("#")[0])
  673. if e24[0] >= k24:
  674. e24[0] = k24
  675. e24[2] = uptime
  676. if e24[1] <= k24:
  677. e24[1] = k24
  678. e24[3] = uptime
  679. k25 = (m.e25)
  680. if k25:
  681. k25 = float(k25.split("#")[0])
  682. if e25[0] >= k25:
  683. e25[0] = k25
  684. e25[2] = uptime
  685. if e25[1] <= k25:
  686. e25[1] = k25
  687. e25[3] = uptime
  688. k26 = (m.e26)
  689. if k26:
  690. k26 = float(k26.split("#")[0])
  691. if e26[0] >= k26:
  692. e26[0] = k26
  693. e26[2] = uptime
  694. if e26[1] <= k26:
  695. e26[1] = k26
  696. e26[3] = uptime
  697. k27 = (m.e27)
  698. if k27:
  699. k27 = float(k27.split("#")[0])
  700. if e27[0] >= k27:
  701. e27[0] = k27
  702. e27[2] = uptime
  703. if e27[1] <= k27:
  704. e27[1] = k27
  705. e27[3] = uptime
  706. k28 = (m.e28)
  707. if k28:
  708. k28 = float(k28.split("#")[0])
  709. if e28[0] >= k28:
  710. e28[0] = k28
  711. e28[2] = uptime
  712. if e28[1] <= k28:
  713. e28[1] = k28
  714. e28[3] = uptime
  715. k29 = (m.e29)
  716. if k29:
  717. k29 = float(k29.split("#")[0])
  718. if e29[0] >= k29:
  719. e29[0] = k29
  720. e29[2] = uptime
  721. if e29[1] <= k29:
  722. e29[1] = k29
  723. e29[3] = uptime
  724. k30 = (m.e30)
  725. if k30:
  726. k30 = float(k30.split("#")[0])
  727. if e30[0] >= k30:
  728. e30[0] = k30
  729. e30[2] = uptime
  730. if e30[1] <= k30:
  731. e30[1] = k30
  732. e30[3] = uptime
  733. conf = {}
  734. x = MongoQXZ_Conf.objects.filter(device_id=device_id).first()
  735. if x:
  736. conf = {"e1":x.e1,"e2":x.e2,"e3":x.e3,"e4":x.e4,"e5":x.e5,
  737. "e6":x.e6,"e7":x.e7,"e8":x.e8,"e9":x.e9,"e10":x.e10,
  738. "e11":x.e11,"e12":x.e12,"e13":x.e13,"e14":x.e14,
  739. "e15":x.e15,"e16":x.e16,"e17":x.e17,"e18":x.e18,
  740. "e19":x.e19,"e20":x.e20,"e21":x.e21,"e22":x.e22,
  741. "e23":x.e23,"e24":x.e24,"e25":x.e25,"e26":x.e26,
  742. "e27":x.e27,"e28":x.e28,"e29":x.e29,"e30":x.e30}
  743. try:
  744. data = []
  745. for k, v in conf.items():
  746. if v:
  747. if k == "e1" and e1[-1] != 0:
  748. data.append({
  749. "max": e1[1],
  750. "maxtime": e1[3],
  751. "min": e1[0],
  752. "mintime": e1[2],
  753. "enum": [
  754. "",
  755. (v.split("#"))[0],
  756. (v.split("#"))[1]
  757. ],
  758. "ekey": "e1"
  759. })
  760. if k == "e2" and e2[-1] != 0:
  761. data.append({
  762. "max": e2[1],
  763. "maxtime": e2[3],
  764. "min": e2[0],
  765. "mintime": e2[2],
  766. "enum": [
  767. "",
  768. (v.split("#"))[0],
  769. (v.split("#"))[1]
  770. ],
  771. "ekey": "e2"
  772. })
  773. if k == "e3" and e3[-1] != 0:
  774. data.append({
  775. "max": e3[1],
  776. "maxtime": e3[3],
  777. "min": e3[0],
  778. "mintime": e3[2],
  779. "enum": [
  780. "",
  781. (v.split("#"))[0],
  782. (v.split("#"))[1]
  783. ],
  784. "ekey": "e3"
  785. })
  786. if k == "e4" and e4[-1] != 0:
  787. data.append({
  788. "max": e4[1],
  789. "maxtime": e4[3],
  790. "min": e4[0],
  791. "mintime": e4[2],
  792. "enum": [
  793. "",
  794. (v.split("#"))[0],
  795. (v.split("#"))[1]
  796. ],
  797. "ekey": "e4"
  798. })
  799. if k == "e5" and e5[-1] != 0:
  800. data.append({
  801. "max": e5[1],
  802. "maxtime": e5[3],
  803. "min": e5[0],
  804. "mintime": e5[2],
  805. "enum": [
  806. "",
  807. (v.split("#"))[0],
  808. (v.split("#"))[1]
  809. ],
  810. "ekey": "e5"
  811. })
  812. if k == "e6" and e6[-1] != 0:
  813. data.append({
  814. "max": e6[1],
  815. "maxtime": e6[3],
  816. "min": e6[0],
  817. "mintime": e6[2],
  818. "enum": [
  819. "",
  820. (v.split("#"))[0],
  821. (v.split("#"))[1]
  822. ],
  823. "ekey": "e6"
  824. })
  825. if k == "e7" and e7[-1] != 0:
  826. data.append({
  827. "max": e7[1],
  828. "maxtime": e7[3],
  829. "min": e7[0],
  830. "mintime": e7[2],
  831. "enum": [
  832. "",
  833. (v.split("#"))[0],
  834. (v.split("#"))[1]
  835. ],
  836. "ekey": "e7"
  837. })
  838. if k == "e8" and e8[-1] != 0:
  839. data.append({
  840. "max": e8[1],
  841. "maxtime": e8[3],
  842. "min": e8[0],
  843. "mintime": e8[2],
  844. "enum": [
  845. "",
  846. (v.split("#"))[0],
  847. (v.split("#"))[1]
  848. ],
  849. "ekey": "e8"
  850. })
  851. if k == "e9" and e9[-1] != 0:
  852. data.append({
  853. "max": e9[1],
  854. "maxtime": e9[3],
  855. "min": e9[0],
  856. "mintime": e9[2],
  857. "enum": [
  858. "",
  859. (v.split("#"))[0],
  860. (v.split("#"))[1]
  861. ],
  862. "ekey": "e9"
  863. })
  864. if k == "e10" and e10[-1] != 0:
  865. data.append({
  866. "max": e10[1],
  867. "maxtime": e10[3],
  868. "min": e10[0],
  869. "mintime": e10[2],
  870. "enum": [
  871. "",
  872. (v.split("#"))[0],
  873. (v.split("#"))[1]
  874. ],
  875. "ekey": "e10"
  876. })
  877. if k == "e11" and e11[-1] != 0:
  878. data.append({
  879. "max": e11[1],
  880. "maxtime": e11[3],
  881. "min": e11[0],
  882. "mintime": e11[2],
  883. "enum": [
  884. "",
  885. (v.split("#"))[0],
  886. (v.split("#"))[1]
  887. ],
  888. "ekey": "e11"
  889. })
  890. if k == "e12" and e12[-1] != 0:
  891. data.append({
  892. "max": e12[1],
  893. "maxtime": e12[3],
  894. "min": e12[0],
  895. "mintime": e12[2],
  896. "enum": [
  897. "",
  898. (v.split("#"))[0],
  899. (v.split("#"))[1]
  900. ],
  901. "ekey": "e12"
  902. })
  903. if k == "e13" and e13[-1] != 0:
  904. data.append({
  905. "max": e13[1],
  906. "maxtime": e13[3],
  907. "min": e13[0],
  908. "mintime": e13[2],
  909. "enum": [
  910. "",
  911. (v.split("#"))[0],
  912. (v.split("#"))[1]
  913. ],
  914. "ekey": "e13"
  915. })
  916. if k == "e14" and e14[-1] != 0:
  917. data.append({
  918. "max": e14[1],
  919. "maxtime": e14[3],
  920. "min": e14[0],
  921. "mintime": e14[2],
  922. "enum": [
  923. "",
  924. (v.split("#"))[0],
  925. (v.split("#"))[1]
  926. ],
  927. "ekey": "e14"
  928. })
  929. if k == "e15" and e15[-1] != 0:
  930. data.append({
  931. "max": e15[1],
  932. "maxtime": e15[3],
  933. "min": e15[0],
  934. "mintime": e15[2],
  935. "enum": [
  936. "",
  937. (v.split("#"))[0],
  938. (v.split("#"))[1]
  939. ],
  940. "ekey": "e15"
  941. })
  942. if k == "e16" and e16[-1] != 0:
  943. data.append({
  944. "max": e16[1],
  945. "maxtime": e16[3],
  946. "min": e16[0],
  947. "mintime": e16[2],
  948. "enum": [
  949. "",
  950. (v.split("#"))[0],
  951. (v.split("#"))[1]
  952. ],
  953. "ekey": "e16"
  954. })
  955. if k == "e17" and e17[-1] != 0:
  956. data.append({
  957. "max": e17[1],
  958. "maxtime": e17[3],
  959. "min": e17[0],
  960. "mintime": e17[2],
  961. "enum": [
  962. "",
  963. (v.split("#"))[0],
  964. (v.split("#"))[1]
  965. ],
  966. "ekey": "e17"
  967. })
  968. if k == "e18" and e18[-1] != 0:
  969. data.append({
  970. "max": e18[1],
  971. "maxtime": e18[3],
  972. "min": e18[0],
  973. "mintime": e18[2],
  974. "enum": [
  975. "",
  976. (v.split("#"))[0],
  977. (v.split("#"))[1]
  978. ],
  979. "ekey": "e18"
  980. })
  981. if k == "e19" and e19[-1] != 0:
  982. data.append({
  983. "max": e19[1],
  984. "maxtime": e19[3],
  985. "min": e19[0],
  986. "mintime": e19[2],
  987. "enum": [
  988. "",
  989. (v.split("#"))[0],
  990. (v.split("#"))[1]
  991. ],
  992. "ekey": "e19"
  993. })
  994. if k == "e20" and e20[-1] != 0:
  995. data.append({
  996. "max": e20[1],
  997. "maxtime": e20[3],
  998. "min": e20[0],
  999. "mintime": e20[2],
  1000. "enum": [
  1001. "",
  1002. (v.split("#"))[0],
  1003. (v.split("#"))[1]
  1004. ],
  1005. "ekey": "e20"
  1006. })
  1007. except Exception as e:
  1008. logger.error(f"气象站24h数据:{e}")
  1009. raise PortError(" ", "计算数据失败,稍后重试")
  1010. dat = {"data":data,"conf":conf}
  1011. return dat
  1012. @kedong_deco(login_required=False)
  1013. def device_status_data(request):
  1014. """
  1015. 虫情测报灯/数据详情
  1016. 设备实时状态接口
  1017. 参数:
  1018. device_id 必传 设备id
  1019. 返回值:
  1020. "data": {
  1021. "upds": 1, 上仓门状态 1打开,0关闭
  1022. "tpl": 5, 低温保护阈值温度
  1023. "dver": "1.0.0", 设备固件版本
  1024. "gs": 0, 通道状态 1落虫,0排水
  1025. "hs": 0, 加热状态 1加热,0正常
  1026. "dnds": 0, 下仓门状态 1打开,0关闭
  1027. "is_online": 0, 在线状态
  1028. "csq": 29, 信号强度
  1029. "tph": 70, 高温保护阈值温度
  1030. "ts": 0 定时模式 0光控,1时控
  1031. "tps": 1 温控状态 1 温控,0 正常
  1032. "lps": 0 光控状态 1 光控,0 正常
  1033. "hrt": 22 加热仓实时温度
  1034. "device_name":"这里是设备名称",
  1035. "address": "这里是设备位置",
  1036. "iccid": 1234444 SIM卡号
  1037. }
  1038. """
  1039. post_info = request.POST
  1040. _device_id = post_info.get("device_id")
  1041. if not _device_id:
  1042. raise PortError('device_id', "该设备不存在")
  1043. try:
  1044. device = MongoDevice.objects.get(device_id=_device_id)
  1045. except:
  1046. raise PortError('device_id','暂无此设备')
  1047. d_id = device.id
  1048. device_name = device.device_name
  1049. province = device.province
  1050. city = device.city
  1051. district = device.district
  1052. device_status = device.device_status # 在线状态
  1053. myuser_type = request.user_type
  1054. device_datas = MongoCBDData.objects.filter(device_id=d_id).order_by('-id')
  1055. try:
  1056. device_data = json.loads(device_datas[0].device_data)
  1057. except json.JSONDecodeError as e:
  1058. device_data = eval(device_datas[0].device_data)
  1059. except:
  1060. raise PortError("device_id","暂无数据")
  1061. ds = device_data.get("ds",1 )
  1062. ts = device_data.get("ts",1)
  1063. up_st = {
  1064. "is_online": device_status,
  1065. "ts":ts,
  1066. "hs":device_data["hs"],
  1067. "upds":device_data["upds"],
  1068. "dnds":device_data["dnds"],
  1069. "csq":device_data["csq"],
  1070. "dver":device_data["dver"],
  1071. "tph":device_data["tph"],
  1072. "tpl":device_data["tpl"],
  1073. "tps":device_data["tps"],
  1074. "lps":device_data["lps"],
  1075. "hrt":device_data["hrt"],
  1076. "iccid":device_data["iccid"],
  1077. "rps":device_data["rps"],
  1078. "ah":device_data["ah"],
  1079. "at":device_data["at"],
  1080. "ds":ds,
  1081. "device_name":device_name,
  1082. "address": province + city + district,
  1083. }
  1084. return up_st
  1085. @kedong_deco(login_required=True)
  1086. def qxz_switch_status(request):
  1087. """
  1088. 气象站开关、阈值状态接口
  1089. 参数:
  1090. device_id 必传(str) 设备号
  1091. 返回值:
  1092. {
  1093. qxz_switch: "[{'status': 0, 'JK': 0}, {'status': 0, 'JK': 1}]" 开关状态
  1094. switch_name: "[{'name': '开关0', 'JK': 0}, {'name': '', 'JK': 1}]" 开关名称
  1095. timing_list: "[{'JK': 0, 'Duration': 4, 'StartTime': 3}, {'JK': 1, 'Duration': 8, 'StartTime': 7}]" 定时控制
  1096. auto_list: [{'lower': 32767, 'JK': 0, 'method': 0, 'upper': 32767, 'eKey': 0}]" 阈值状态
  1097. }
  1098. """
  1099. device_id = request.POST.get("device_id")
  1100. data = []
  1101. try:
  1102. switch_obj = QXZ_Switch_Status.objects.get(device_id=device_id)
  1103. qxz_switch = switch_obj.qxz_switch
  1104. except:
  1105. qxz_switch = ""
  1106. try:
  1107. switch_name_obj = MongoQXZ_Switch.objects.get(device_id=device_id)
  1108. switch_name = switch_name_obj.qxz_switch_data
  1109. except:
  1110. switch_name = ""
  1111. try:
  1112. timing_list = MongoQXZ_Timing_Switch.objects.get(device_id=device_id).qxz_timing
  1113. except:
  1114. timing_list = ""
  1115. try:
  1116. auto_list = MongoQXZ_Auto_Switch.objects.get(device_id=device_id).qxz_auto
  1117. except:
  1118. auto_list = ""
  1119. data = {'qxz_switch':qxz_switch, 'switch_name':switch_name, 'timing_list':timing_list,"auto_list":auto_list}
  1120. return data
  1121. @kedong_deco(login_required=False)
  1122. def qxz_element_conf(request):
  1123. """
  1124. 气象站查看通道要素接口\保存通道要素接口:
  1125. 参数:
  1126. device_id 必传(str) 设备号
  1127. status 必传(str) 当status等于see查看, 当status等于save保存
  1128. ekey 非必传(str) 通道号 如e1
  1129. conf 非必传(str) 通道标题,如大气温度#℃
  1130. 说明:当status等于see查看,只需要传device_id,当status等于save保存 需传device_id、conf、ekey
  1131. 返回值:
  1132. 当status等于see时:
  1133. "data": {
  1134. "default": { 原来值
  1135. "e1": "大气温度#℃",
  1136. "e2": "大气湿度#%RH",
  1137. "e3": "风速#m/s",
  1138. "e4": "风向#°",
  1139. "e5": "模拟气压#hpa",
  1140. "e6": "简易总辐射#w/㎡"
  1141. },
  1142. "conf": { 修改值
  1143. "e1": "大气温度#℃",
  1144. "e2": "大气湿度#%RH",
  1145. "e3": "风速#m/s",
  1146. "e4": "风向#°",
  1147. "e5": "模拟气压#hpa",
  1148. "e6": "简易总辐射#w/㎡"
  1149. }
  1150. },
  1151. 当status等于save时:
  1152. {
  1153. "data" 0 0 保存成功 1失败
  1154. }
  1155. """
  1156. device_id = request.POST.get("device_id")
  1157. status = request.POST.get("status")
  1158. ekey = request.POST.get("ekey")
  1159. conf = request.POST.get("conf")
  1160. if status == "see":
  1161. x = MongoQXZ_Conf.objects.get(device_id=device_id)
  1162. i = QXZ_Default_Conf.objects.get(device_id=device_id)
  1163. conf = {"e1":x.e1,"e2":x.e2,"e3":x.e3,"e4":x.e4,"e5":x.e5,
  1164. "e6":x.e6,"e7":x.e7,"e8":x.e8,"e9":x.e9,"e10":x.e10,
  1165. "e11":x.e11,"e12":x.e12,"e13":x.e13,"e14":x.e14,
  1166. "e15":x.e15,"e16":x.e16,"e17":x.e17,"e18":x.e18,
  1167. "e19":x.e19,"e20":x.e20,"e21":x.e21,"e22":x.e22,
  1168. "e23":x.e23,"e24":x.e24,"e25":x.e25,"e26":x.e26,
  1169. "e27":x.e27,"e28":x.e28,"e29":x.e29,"e30":x.e30}
  1170. default = {"e1":i.e1,"e2":i.e2,"e3":i.e3,"e4":i.e4,"e5":i.e5,
  1171. "e6":i.e6,"e7":i.e7,"e8":i.e8,"e9":i.e9,"e10":i.e10,
  1172. "e11":i.e11,"e12":i.e12,"e13":i.e13,"e14":i.e14,
  1173. "e15":i.e15,"e16":i.e16,"e17":i.e17,"e18":i.e18,
  1174. "e19":i.e19,"e20":i.e20,"e21":i.e21,"e22":i.e22,
  1175. "e23":i.e23,"e24":i.e24,"e25":i.e25,"e26":i.e26,
  1176. "e27":i.e27,"e28":i.e28,"e29":i.e29,"e30":i.e30}
  1177. for k in list(conf.keys()):
  1178. if not conf[k]:
  1179. del conf[k]
  1180. for y in list(default.keys()):
  1181. if not default[y]:
  1182. del default[y]
  1183. data = {"default":default,"conf":conf}
  1184. elif status == "save":
  1185. times = int(time.time())
  1186. conf_obj = MongoQXZ_Conf.objects.get(device_id=device_id)
  1187. if ekey == "e1":
  1188. con = (conf_obj.e1).split("#")
  1189. conf_obj.e1 = conf + "#"+ con[1]
  1190. conf_obj.update = times
  1191. conf_obj.save()
  1192. data = {"code": 0}
  1193. elif ekey == "e2":
  1194. con = (conf_obj.e2).split("#")
  1195. conf = conf + "#"+ con[1]
  1196. conf_obj.e2 = conf
  1197. conf_obj.update = times
  1198. conf_obj.save()
  1199. data = {"code": 0}
  1200. elif ekey == "e3":
  1201. con = (conf_obj.e3).split("#")
  1202. conf_obj.e3 = conf + "#"+ con[1]
  1203. conf_obj.update = times
  1204. conf_obj.save()
  1205. data = {"code": 0}
  1206. elif ekey == "e4":
  1207. con = (conf_obj.e4).split("#")
  1208. conf_obj.e4 = conf + "#"+ con[1]
  1209. conf_obj.update = times
  1210. conf_obj.save()
  1211. data = {"code": 0}
  1212. elif ekey == "e5":
  1213. con = (conf_obj.e5).split("#")
  1214. conf_obj.e5 = conf + "#"+ con[1]
  1215. conf_obj.update = times
  1216. conf_obj.save()
  1217. data = {"code": 0}
  1218. elif ekey == "e6":
  1219. con = (conf_obj.e6).split("#")
  1220. conf_obj.e6 = conf + "#"+ con[1]
  1221. conf_obj.update = times
  1222. conf_obj.save()
  1223. data = {"code": 0}
  1224. elif ekey == "e7":
  1225. con = (conf_obj.e7).split("#")
  1226. conf_obj.e7 = conf + "#"+ con[1]
  1227. conf_obj.update = times
  1228. conf_obj.save()
  1229. data = {"code": 0}
  1230. elif ekey == "e8":
  1231. con = (conf_obj.e8).split("#")
  1232. conf_obj.e8 = conf + "#"+ con[1]
  1233. conf_obj.update = times
  1234. conf_obj.save()
  1235. data = {"code": 0}
  1236. elif ekey == "e9":
  1237. con = (conf_obj.e9).split("#")
  1238. conf_obj.e9 = conf + "#"+ con[1]
  1239. conf_obj.update = times
  1240. conf_obj.save()
  1241. data = {"code": 0}
  1242. elif ekey == "e10":
  1243. con = (conf_obj.e10).split("#")
  1244. conf_obj.e10 = conf + "#"+ con[1]
  1245. conf_obj.update = times
  1246. conf_obj.save()
  1247. data = {"code": 0}
  1248. elif ekey == "e11":
  1249. con = (conf_obj.e11).split("#")
  1250. conf_obj.e11 = conf + "#"+ con[1]
  1251. conf_obj.update = times
  1252. conf_obj.save()
  1253. data = {"code": 0}
  1254. elif ekey == "e12":
  1255. con = (conf_obj.e12).split("#")
  1256. conf_obj.e12 = conf + "#"+ con[1]
  1257. conf_obj.update = times
  1258. conf_obj.save()
  1259. data = {"code": 0}
  1260. elif ekey == "e13":
  1261. con = (conf_obj.e13).split("#")
  1262. conf_obj.e13 = conf + "#"+ con[1]
  1263. conf_obj.update = times
  1264. conf_obj.save()
  1265. data = {"code": 0}
  1266. elif ekey == "e14":
  1267. con = (conf_obj.e14).split("#")
  1268. conf_obj.e14 = conf + "#"+ con[1]
  1269. conf_obj.update = times
  1270. conf_obj.save()
  1271. data = {"code": 0}
  1272. elif ekey == "e15":
  1273. con = (conf_obj.e15).split("#")
  1274. conf_obj.e15 = conf + "#"+ con[1]
  1275. conf_obj.update = times
  1276. conf_obj.save()
  1277. data = {"code": 0}
  1278. elif ekey == "e16":
  1279. con = (conf_obj.e16).split("#")
  1280. conf_obj.e16 = conf + "#"+ con[1]
  1281. conf_obj.update = times
  1282. conf_obj.save()
  1283. data = {"code": 0}
  1284. elif ekey == "e17":
  1285. con = (conf_obj.e17).split("#")
  1286. conf_obj.e17 = conf + "#"+ con[1]
  1287. conf_obj.update = times
  1288. conf_obj.save()
  1289. data = {"code": 0}
  1290. elif ekey == "e18":
  1291. con = (conf_obj.e18).split("#")
  1292. conf_obj.e18 = conf + "#"+ con[1]
  1293. conf_obj.update = times
  1294. conf_obj.save()
  1295. data = {"code": 0}
  1296. elif ekey == "e19":
  1297. con = (conf_obj.e19).split("#")
  1298. conf_obj.e19 = conf + "#"+ con[1]
  1299. conf_obj.update = times
  1300. conf_obj.save()
  1301. data = {"code": 0}
  1302. elif ekey == "e20":
  1303. con = (conf_obj.e20).split("#")
  1304. conf_obj.e20 = conf + "#"+ con[1]
  1305. conf_obj.update = times
  1306. conf_obj.save()
  1307. data = {"code": 0}
  1308. elif ekey == "e21":
  1309. con = (conf_obj.e21).split("#")
  1310. conf_obj.e21 = conf + "#"+ con[1]
  1311. conf_obj.update = times
  1312. conf_obj.save()
  1313. data = {"code": 0}
  1314. elif ekey == "e22":
  1315. con = (conf_obj.e22).split("#")
  1316. conf_obj.e22 = conf + "#"+ con[1]
  1317. conf_obj.update = times
  1318. conf_obj.save()
  1319. data = {"code": 0}
  1320. elif ekey == "e23":
  1321. con = (conf_obj.e23).split("#")
  1322. conf_obj.e23 = conf + "#"+ con[1]
  1323. conf_obj.update = times
  1324. conf_obj.save()
  1325. data = {"code": 0}
  1326. elif ekey == "e24":
  1327. con = (conf_obj.e24).split("#")
  1328. conf_obj.e24 = conf + "#"+ con[1]
  1329. conf_obj.update = times
  1330. conf_obj.save()
  1331. data = {"code": 0}
  1332. elif ekey == "e25":
  1333. con = (conf_obj.e25).split("#")
  1334. conf_obj.e25 = conf + "#"+ con[1]
  1335. conf_obj.update = times
  1336. conf_obj.save()
  1337. data = {"code": 0}
  1338. elif ekey == "e26":
  1339. con = (conf_obj.e26).split("#")
  1340. conf_obj.e26 = conf + "#"+ con[1]
  1341. conf_obj.update = times
  1342. conf_obj.save()
  1343. data = {"code": 0}
  1344. elif ekey == "e27":
  1345. con = (conf_obj.e27).split("#")
  1346. conf_obj.e27 = conf + "#"+ con[1]
  1347. conf_obj.update = times
  1348. conf_obj.save()
  1349. data = {"code": 0}
  1350. elif ekey == "e28":
  1351. con = (conf_obj.e28).split("#")
  1352. conf_obj.e28 = conf + "#"+ con[1]
  1353. conf_obj.update = times
  1354. conf_obj.save()
  1355. data = {"code": 0}
  1356. elif ekey == "e29":
  1357. con = (conf_obj.e29).split("#")
  1358. conf_obj.e29 = conf + "#"+ con[1]
  1359. conf_obj.update = times
  1360. conf_obj.save()
  1361. data = {"code": 0}
  1362. elif ekey == "e30":
  1363. con = (conf_obj.e30).split("#")
  1364. conf_obj.e30 = conf + "#"+ con[1]
  1365. conf_obj.update = times
  1366. conf_obj.save()
  1367. data = {"code": 0}
  1368. else:
  1369. data = {"code": 1}
  1370. else:
  1371. raise PortError("","参数超出范围")
  1372. return data