weather.py 47 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167
  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:
  183. raise PortError('device_id',"暂无此设备")
  184. qxz_list = QXZdata_New.objects.filter(device_id=device_id)
  185. myuser_type = request.user_type
  186. if not myuser_type == 1 and not myuser_type == 5:
  187. if f_tbegin and int(f_tend) > int(device_expire_time):
  188. f_tend = device_expire_time
  189. if f_tbegin and f_tend:
  190. qxz_list =qxz_list.filter(uptime__range=(int(f_tbegin),int(f_tend))).order_by('-id')
  191. page = int(request.POST.get('page',1))
  192. data = []
  193. nums = qxz_list.count()
  194. conf = {}
  195. if nums:
  196. for i in qxz_list[(10*(page-1)):(page*10)]:
  197. dat = {}
  198. for e in range(1, 31):
  199. k = f'e{e}'
  200. v = getattr(i, k)
  201. dat[k] = v or ""
  202. data.append({"dat": dat, "time": i.uptime})
  203. try:
  204. x = MongoQXZ_Conf.objects.get(device_id=device_id)
  205. conf = {}
  206. for e in range(1, 31):
  207. k = f'e{e}'
  208. v = getattr(x, k)
  209. conf[k] = v or ""
  210. except Exception as e:
  211. conf = {}
  212. rainFall = 0
  213. for factor in conf.values():
  214. if factor == "降雨量累计#mm":
  215. rainFall = 1
  216. break
  217. data1 = {"data":data,"nums":nums,"conf":conf,"rainFall":rainFall}
  218. return data1
  219. @kedong_deco(login_required=True)
  220. def qxz_status(request):
  221. """
  222. 气象详情接口 :
  223. 参数:
  224. device_id 必传(string)
  225. 返回值:
  226. {
  227. "data": {
  228. 'dat':{
  229. "e1":qxz_list.e1,"e2":qxz_list.e2,"e3":qxz_list.e3,"e4":qxz_list.e4,"e5":qxz_list.e5,
  230. "e6":qxz_list.e6,"e7":qxz_list.e7,"e8":qxz_list.e8,"e9":qxz_list.e9,"e10":qxz_list.e10,
  231. "e11":qxz_list.e11,"e12":qxz_list.e12,"e13":qxz_list.e13,"e14":qxz_list.e14,
  232. "e15":qxz_list.e15,"e16":qxz_list.e16,"e17":qxz_list.e17,"e18":qxz_list.e18,
  233. "e19":qxz_list.e19,"e20":qxz_list.e20,"e21":qxz_list.e21,"e22":qxz_list.e22,
  234. "e23":qxz_list.e23,"e24":qxz_list.e24,"e25":qxz_list.e25,"e26":qxz_list.e26,
  235. "e27":qxz_list.e27,"e28":qxz_list.e28,"e29":qxz_list.e29,"e30":qxz_list.e30,
  236. "upl_time":qxz_list.upl_time.strftime('%Y-%m-%d %H:%M:%S')
  237. },
  238. 'conf':{
  239. "e1":x.e1,"e2":x.e2,"e3":x.e3,"e4":x.e4,"e5":x.e5,
  240. "e6":x.e6,"e7":x.e7,"e8":x.e8,"e9":x.e9,"e10":x.e10,
  241. "e11":x.e11,"e12":x.e12,"e13":x.e13,"e14":x.e14,
  242. "e15":x.e15,"e16":x.e16,"e17":x.e17,"e18":x.e18,
  243. "e19":x.e19,"e20":x.e20,"e21":x.e21,"e22":x.e22,
  244. "e23":x.e23,"e24":x.e24,"e25":x.e25,"e26":x.e26,
  245. "e27":x.e27,"e28":x.e28,"e29":x.e29,"e30":x.e30
  246. },
  247. "led":0, 0 无led点阵屏功能 1 有led点阵屏功能
  248. "ledinfo":"点阵屏内容"
  249. },
  250. "errorCode": 0,
  251. "message": "",
  252. "formError": {}
  253. }
  254. """
  255. e_id = request.POST.get("device_id")
  256. if not e_id:
  257. raise PortError("","参数缺失")
  258. qxz_list = QXZdata_New.objects.filter(device_id=e_id).order_by("-uptime").first()
  259. if not qxz_list:
  260. raise PortError("","未找到此设备")
  261. data = []
  262. dat = {"e1":qxz_list.e1,"e2":qxz_list.e2,"e3":qxz_list.e3,"e4":qxz_list.e4,"e5":qxz_list.e5,
  263. "e6":qxz_list.e6,"e7":qxz_list.e7,"e8":qxz_list.e8,"e9":qxz_list.e9,"e10":qxz_list.e10,
  264. "e11":qxz_list.e11,"e12":qxz_list.e12,"e13":qxz_list.e13,"e14":qxz_list.e14,
  265. "e15":qxz_list.e15,"e16":qxz_list.e16,"e17":qxz_list.e17,"e18":qxz_list.e18,
  266. "e19":qxz_list.e19,"e20":qxz_list.e20,"e21":qxz_list.e21,"e22":qxz_list.e22,
  267. "e23":qxz_list.e23,"e24":qxz_list.e24,"e25":qxz_list.e25,"e26":qxz_list.e26,
  268. "e27":qxz_list.e27,"e28":qxz_list.e28,"e29":qxz_list.e29,"e30":qxz_list.e30, "uptime":qxz_list.uptime}
  269. try:
  270. x = MongoQXZ_Conf.objects.get(device_id=e_id)
  271. conf = {"e1":x.e1,"e2":x.e2,"e3":x.e3,"e4":x.e4,"e5":x.e5,
  272. "e6":x.e6,"e7":x.e7,"e8":x.e8,"e9":x.e9,"e10":x.e10,
  273. "e11":x.e11,"e12":x.e12,"e13":x.e13,"e14":x.e14,
  274. "e15":x.e15,"e16":x.e16,"e17":x.e17,"e18":x.e18,
  275. "e19":x.e19,"e20":x.e20,"e21":x.e21,"e22":x.e22,
  276. "e23":x.e23,"e24":x.e24,"e25":x.e25,"e26":x.e26,
  277. "e27":x.e27,"e28":x.e28,"e29":x.e29,"e30":x.e30}
  278. except:
  279. conf = {}
  280. try:
  281. led = MongoQXZ_Base_Info.objects.get(device_id=e_id).led
  282. except:
  283. led = "0"
  284. try:
  285. ledinfo = MongoQXZ_Base_Info.objects.get(device_id=e_id).ledinfo
  286. except:
  287. ledinfo = ""
  288. data = {'dat':dat,'conf':conf, "led":led,"ledinfo":ledinfo}
  289. return data
  290. @kedong_deco(login_required=True)
  291. def qxz_data_chart(request):
  292. """
  293. 气象折线图接口 :
  294. 参数:
  295. device_id 必传(string)
  296. begin 必传(string 时间戳) 开始时间 (用于时间搜索) 默认近一个月
  297. end 非必传(string 时间戳) 结束时间 (用于时间搜索)
  298. 返回值:
  299. {
  300. "data": {
  301. "conf": {
  302. "e1":x.e1,"e2":x.e2,"e3":x.e3,"e4":x.e4,"e5":x.e5,
  303. "e6":x.e6,"e7":x.e7,"e8":x.e8,"e9":x.e9,"e10":x.e10,
  304. "e11":x.e11,"e12":x.e12,"e13":x.e13,"e14":x.e14,
  305. "e15":x.e15,"e16":x.e16,"e17":x.e17,"e18":x.e18,
  306. "e19":x.e19,"e20":x.e20,"e21":x.e21,"e22":x.e22,
  307. "e23":x.e23,"e24":x.e24,"e25":x.e25,"e26":x.e26,
  308. "e27":x.e27,"e28":x.e28,"e29":x.e29,"e30":x.e30
  309. },
  310. "nums": 0,
  311. "data": [
  312. {
  313. "e1":qxz_list.e1,"e2":qxz_list.e2,"e3":qxz_list.e3,"e4":qxz_list.e4,"e5":qxz_list.e5,
  314. "e6":qxz_list.e6,"e7":qxz_list.e7,"e8":qxz_list.e8,"e9":qxz_list.e9,"e10":qxz_list.e10,
  315. "e11":qxz_list.e11,"e12":qxz_list.e12,"e13":qxz_list.e13,"e14":qxz_list.e14,
  316. "e15":qxz_list.e15,"e16":qxz_list.e16,"e17":qxz_list.e17,"e18":qxz_list.e18,
  317. "e19":qxz_list.e19,"e20":qxz_list.e20,"e21":qxz_list.e21,"e22":qxz_list.e22,
  318. "e23":qxz_list.e23,"e24":qxz_list.e24,"e25":qxz_list.e25,"e26":qxz_list.e26,
  319. "e27":qxz_list.e27,"e28":qxz_list.e28,"e29":qxz_list.e29,"e30":qxz_list.e30,
  320. "upl_time":qxz_list.upl_time.strftime('%Y-%m-%d %H:%M:%S')
  321. },
  322. {
  323. "e1":qxz_list.e1,"e2":qxz_list.e2,"e3":qxz_list.e3,"e4":qxz_list.e4,"e5":qxz_list.e5,
  324. "e6":qxz_list.e6,"e7":qxz_list.e7,"e8":qxz_list.e8,"e9":qxz_list.e9,"e10":qxz_list.e10,
  325. "e11":qxz_list.e11,"e12":qxz_list.e12,"e13":qxz_list.e13,"e14":qxz_list.e14,
  326. "e15":qxz_list.e15,"e16":qxz_list.e16,"e17":qxz_list.e17,"e18":qxz_list.e18,
  327. "e19":qxz_list.e19,"e20":qxz_list.e20,"e21":qxz_list.e21,"e22":qxz_list.e22,
  328. "e23":qxz_list.e23,"e24":qxz_list.e24,"e25":qxz_list.e25,"e26":qxz_list.e26,
  329. "e27":qxz_list.e27,"e28":qxz_list.e28,"e29":qxz_list.e29,"e30":qxz_list.e30,
  330. "upl_time":qxz_list.upl_time.strftime('%Y-%m-%d %H:%M:%S')
  331. },...
  332. ]
  333. }
  334. "params": {},
  335. "formError": {},
  336. "errorCode": 0,
  337. "message": "",
  338. }
  339. """
  340. device_id = request.POST.get("device_id")
  341. data = []
  342. f_tbegin = request.POST.get('begin')
  343. f_tend = request.POST.get('end')
  344. try:
  345. device = MongoDevice.objects.get(device_id=device_id)
  346. device_expire = device.device_expire
  347. device_expire_time = device.device_expire_time
  348. except:
  349. raise PortError('device_id',"暂无此设备")
  350. qxz_list = QXZdata_New.objects.filter(device_id=device_id)
  351. myuser_type = request.user_type
  352. if not myuser_type == 1 and not myuser_type == 5:
  353. if f_tbegin and int(f_tend) > int(device_expire_time):
  354. f_tend = device_expire_time
  355. if f_tbegin and f_tend:
  356. qxz_list =qxz_list.filter(uptime__range=(int(f_tbegin),int(f_tend))).order_by('-id')
  357. conf = {}
  358. for i in qxz_list:
  359. data.append({"dat":{"e1":i.e1,"e2":i.e2,"e3":i.e3,"e4":i.e4,"e5":i.e5,
  360. "e6":i.e6,"e7":i.e7,"e8":i.e8,"e9":i.e9,"e10":i.e10,
  361. "e11":i.e11,"e12":i.e12,"e13":i.e13,"e14":i.e14,
  362. "e15":i.e15,"e16":i.e16,"e17":i.e17,"e18":i.e18,
  363. "e19":i.e19,"e20":i.e20,"e21":i.e21,"e22":i.e22,
  364. "e23":i.e23,"e24":i.e24,"e25":i.e25,"e26":i.e26,
  365. "e27":i.e27,"e28":i.e28,"e29":i.e29,"e30":i.e30},
  366. "time":i.uptime})
  367. try:
  368. x = MongoQXZ_Conf.objects.get(device_id=device_id)
  369. conf = {"e1":x.e1,"e2":x.e2,"e3":x.e3,"e4":x.e4,"e5":x.e5,
  370. "e6":x.e6,"e7":x.e7,"e8":x.e8,"e9":x.e9,"e10":x.e10,
  371. "e11":x.e11,"e12":x.e12,"e13":x.e13,"e14":x.e14,
  372. "e15":x.e15,"e16":x.e16,"e17":x.e17,"e18":x.e18,
  373. "e19":x.e19,"e20":x.e20,"e21":x.e21,"e22":x.e22,
  374. "e23":x.e23,"e24":x.e24,"e25":x.e25,"e26":x.e26,
  375. "e27":x.e27,"e28":x.e28,"e29":x.e29,"e30":x.e30}
  376. except:
  377. conf = {}
  378. data1 = {"data":data,"conf":conf}
  379. return data1
  380. @kedong_deco(login_required=True)
  381. def qxz_early_warning(request):
  382. """
  383. 气象站查看短信预警信息接口\配置预警信息接口
  384. 参数:
  385. device_id 必传(str) 设备号
  386. status 必传(str) 当status等于see查看, 当status等于save保存
  387. 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"}
  388. 返回值:
  389. {
  390. "data" 0 0 保存成功 1失败
  391. }
  392. """
  393. status = request.POST.get("status")
  394. device_id = request.POST.get("device_id")
  395. if status == "see":
  396. try:
  397. qxz_alarm = MongoQXZ_Alarm.objects.get(device_id=device_id)
  398. alarm = ast.literal_eval(qxz_alarm.conf)
  399. phone = qxz_alarm.phone
  400. except Exception as e:
  401. print(e)
  402. alarm = ""
  403. phone = ""
  404. x = MongoQXZ_Conf.objects.get(device_id=device_id)
  405. conf = {"e1":x.e1,"e2":x.e2,"e3":x.e3,"e4":x.e4,"e5":x.e5,
  406. "e6":x.e6,"e7":x.e7,"e8":x.e8,"e9":x.e9,"e10":x.e10,
  407. "e11":x.e11,"e12":x.e12,"e13":x.e13,"e14":x.e14,
  408. "e15":x.e15,"e16":x.e16,"e17":x.e17,"e18":x.e18,
  409. "e19":x.e19,"e20":x.e20,"e21":x.e21,"e22":x.e22,
  410. "e23":x.e23,"e24":x.e24,"e25":x.e25,"e26":x.e26,
  411. "e27":x.e27,"e28":x.e28,"e29":x.e29,"e30":x.e30}
  412. for k in list(conf.keys()):
  413. if not conf[k]:
  414. del conf[k]
  415. data = {"conf":conf,"alarm":alarm,"phone":phone}
  416. elif status == "save":
  417. alarm = ast.literal_eval(request.POST.get('alarm'))
  418. conf = alarm["dat"]
  419. try:
  420. MongoQXZ_Alarm.objects.update_or_create(
  421. device_id=device_id,
  422. defaults={
  423. "conf": {"dat": conf},
  424. "upl_time": int(time.time())
  425. }
  426. )
  427. return {"code":0}
  428. except Exception as e:
  429. raise PortError("","更新失败")
  430. else:
  431. raise PortError("","参数超出范围")
  432. return data
  433. def qxz_configs(conf,e_data,es):
  434. """气象站要素配置"""
  435. e3s = conf.get(es,"")
  436. code = e_data.split('#')[1]
  437. if e3s:
  438. config = e3s.split("#")
  439. config.insert(0,code)
  440. else:
  441. config = qxz_dict_1[e_data.split('#')[1]]
  442. return config
  443. @kedong_deco(login_required=True)
  444. def qxz_day_data(request):
  445. """
  446. 气象24H数据接口 :
  447. 参数:
  448. device_id 必传(string)
  449. """
  450. device_id = request.POST.get("device_id")
  451. qxz_dict_1 = copy.deepcopy(qxz_dict) # 如果不拷贝 后面折线图修改字典会导致字典内容变化 从而造成数据错误
  452. times = ""
  453. try:
  454. MongoDevice.objects.get(device_id=device_id)
  455. except:
  456. logger.error(f"{device_id} 暂无此设备")
  457. raise PortError('device_id',"暂无此设备")
  458. qxz_list = QXZstatus_New.objects.filter(device_id=device_id).order_by("-uptime").first()
  459. if qxz_list:
  460. times = qxz_list.uptime
  461. # 获取最新一条数据的时间然后进行时间格式转换,再获取前一天时间
  462. if times:
  463. otherStyleTime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(times))
  464. times_type = datetime.datetime.strptime(str(otherStyleTime), "%Y-%m-%d %H:%M:%S")
  465. now = times_type - datetime.timedelta(days=1)
  466. else:
  467. # 获取前一天的时间点从0点到24点时间
  468. now = datetime.datetime.now()- datetime.timedelta(days=1)
  469. zero_today = now - datetime.timedelta(hours=now.hour, minutes=now.minute, seconds=now.second,microseconds=now.microsecond)
  470. last_today = zero_today + datetime.timedelta(hours=23, minutes=59, seconds=59)
  471. start_time = int(time.mktime(time.strptime(str(zero_today), "%Y-%m-%d %H:%M:%S")))
  472. end_time = int(time.mktime(time.strptime(str(last_today), "%Y-%m-%d %H:%M:%S")))
  473. sta1 = QXZdata_New.objects.filter(device_id=device_id).filter(uptime__range=(start_time,end_time)).values()
  474. data = []
  475. e1 = []
  476. e1_time = []
  477. e2 = []
  478. e2_time = []
  479. e3 = []
  480. e3_time = []
  481. e4 = []
  482. e4_time = []
  483. e5 = []
  484. e5_time = []
  485. e6 = []
  486. e6_time = []
  487. e7 = []
  488. e7_time = []
  489. e8 = []
  490. e8_time = []
  491. e9 = []
  492. e9_time = []
  493. e10 = []
  494. e10_time = []
  495. e11 = []
  496. e11_time = []
  497. e12 = []
  498. e12_time = []
  499. e13 = []
  500. e13_time = []
  501. e14 = []
  502. e14_time = []
  503. e15 = []
  504. e15_time = []
  505. e16 = []
  506. e16_time = []
  507. e17 = []
  508. e17_time = []
  509. e18 = []
  510. e18_time = []
  511. e19 = []
  512. e19_time = []
  513. e20 = []
  514. e20_time = []
  515. e21 = []
  516. e21_time = []
  517. e22 = []
  518. e22_time = []
  519. e23 = []
  520. e23_time = []
  521. e24 = []
  522. e24_time = []
  523. e25 = []
  524. e25_time = []
  525. e26 = []
  526. e26_time = []
  527. e27 = []
  528. e27_time = []
  529. e28 = []
  530. e28_time = []
  531. e29 = []
  532. e29_time = []
  533. e30 = []
  534. e30_time = []
  535. for i in sta1[:200]:
  536. if i['e1']:
  537. e1.append(float(i['e1'].split('#')[0]))
  538. e1_time.append(i['uptime'])
  539. if i['e2']:
  540. e2.append(float(i['e2'].split('#')[0]))
  541. e2_time.append(i['uptime'])
  542. if i['e3']:
  543. e3.append(float(i['e3'].split('#')[0]))
  544. e3_time.append(i['uptime'])
  545. if i['e4']:
  546. e4.append(float(i['e4'].split('#')[0]))
  547. e4_time.append(i['uptime'])
  548. if i['e5']:
  549. e5.append(float(i['e5'].split('#')[0]))
  550. e5_time.append(i['uptime'])
  551. if i['e6']:
  552. e6.append(float(i['e6'].split('#')[0]))
  553. e6_time.append(i['uptime'])
  554. if i['e7']:
  555. e7.append(float(i['e7'].split('#')[0]))
  556. e7_time.append(i['uptime'])
  557. if i['e8']:
  558. e8.append(float(i['e8'].split('#')[0]))
  559. e8_time.append(i['uptime'])
  560. if i['e9']:
  561. e9.append(float(i['e9'].split('#')[0]))
  562. e9_time.append(i['uptime'])
  563. if i['e10']:
  564. e10.append(float(i['e10'].split('#')[0]))
  565. e10_time.append(i['uptime'])
  566. if i['e11']:
  567. e11.append(float(i['e11'].split('#')[0]))
  568. e11_time.append(i['uptime'])
  569. if i['e12']:
  570. e12.append(float(i['e12'].split('#')[0]))
  571. e12_time.append(i['uptime'])
  572. if i['e13']:
  573. e13.append(float(i['e13'].split('#')[0]))
  574. e13_time.append(i['uptime'])
  575. if i['e14']:
  576. e14.append(float(i['e14'].split('#')[0]))
  577. e14_time.append(i['uptime'])
  578. if i['e15']:
  579. e15.append(float(i['e15'].split('#')[0]))
  580. e15_time.append(i['uptime'])
  581. if i['e16']:
  582. e16.append(float(i['e16'].split('#')[0]))
  583. e16_time.append(i['uptime'])
  584. if i['e17']:
  585. e17.append(float(i['e17'].split('#')[0]))
  586. e17_time.append(i['uptime'])
  587. if i['e18']:
  588. e18.append(float(i['e18'].split('#')[0]))
  589. e18_time.append(i['uptime'])
  590. if i['e19']:
  591. e19.append(float(i['e19'].split('#')[0]))
  592. e19_time.append(i['uptime'])
  593. if i['e20']:
  594. e20.append(float(i['e20'].split('#')[0]))
  595. e20_time.append(i['uptime'])
  596. if i['e21']:
  597. e21.append(float(i['e21'].split('#')[0]))
  598. e21_time.append(i['uptime'])
  599. if i['e22']:
  600. e22.append(float(i['e22'].split('#')[0]))
  601. e22_time.append(i['uptime'])
  602. if i['e23']:
  603. e23.append(float(i['e23'].split('#')[0]))
  604. e23_time.append(i['uptime'])
  605. if i['e24']:
  606. e24.append(float(i['e24'].split('#')[0]))
  607. e24_time.append(i['uptime'])
  608. if i['e25']:
  609. e25.append(float(i['e25'].split('#')[0]))
  610. e25_time.append(i['uptime'])
  611. if i['e26']:
  612. e26.append(float(i['e26'].split('#')[0]))
  613. e26_time.append(i['uptime'])
  614. if i['e27']:
  615. e27.append(float(i['e27'].split('#')[0]))
  616. e27_time.append(i['uptime'])
  617. if i['e28']:
  618. e28.append(float(i['e28'].split('#')[0]))
  619. e28_time.append(i['uptime'])
  620. if i['e29']:
  621. e29.append(float(i['e29'].split('#')[0]))
  622. e29_time.append(i['uptime'])
  623. if i['e30']:
  624. e30.append(float(i['e30'].split('#')[0]))
  625. e30_time.append(i['uptime'])
  626. conf = {}
  627. x = MongoQXZ_Conf.objects.filter(device_id=device_id).first()
  628. if x:
  629. conf = {"e1":x.e1,"e2":x.e2,"e3":x.e3,"e4":x.e4,"e5":x.e5,
  630. "e6":x.e6,"e7":x.e7,"e8":x.e8,"e9":x.e9,"e10":x.e10,
  631. "e11":x.e11,"e12":x.e12,"e13":x.e13,"e14":x.e14,
  632. "e15":x.e15,"e16":x.e16,"e17":x.e17,"e18":x.e18,
  633. "e19":x.e19,"e20":x.e20,"e21":x.e21,"e22":x.e22,
  634. "e23":x.e23,"e24":x.e24,"e25":x.e25,"e26":x.e26,
  635. "e27":x.e27,"e28":x.e28,"e29":x.e29,"e30":x.e30}
  636. data = []
  637. try:
  638. if e1 != []:
  639. config = qxz_configs(conf,i['e1'],"e1")
  640. 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]})
  641. if e2 != []:
  642. config = qxz_configs(conf,i['e2'],"e2")
  643. 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]})
  644. if e3 != []:
  645. config = qxz_configs(conf,i['e3'],"e3")
  646. 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]})
  647. if e4 != []:
  648. config = qxz_configs(conf,i['e4'],"e4")
  649. 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]})
  650. if e5 != []:
  651. config = qxz_configs(conf,i['e5'],"e5")
  652. 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]})
  653. if e6 != []:
  654. config = qxz_configs(conf,i['e6'],"e6")
  655. 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]})
  656. if e7 != []:
  657. config = qxz_configs(conf,i['e7'],"e7")
  658. 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]})
  659. if e8 != []:
  660. config = qxz_configs(conf,i['e8'],"e8")
  661. 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]})
  662. if e9 != []:
  663. config = qxz_configs(conf,i['e9'],"e9")
  664. 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]})
  665. if e10 != []:
  666. config = qxz_configs(conf,i['e10'],"e10")
  667. 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]})
  668. if e11 != []:
  669. config = qxz_configs(conf,i['e11'],"e11")
  670. 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]})
  671. if e12 != []:
  672. config = qxz_configs(conf,i['e12'],"e12")
  673. 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]})
  674. if e13 != []:
  675. config = qxz_configs(conf,i['e13'],"e13")
  676. 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]})
  677. if e14 != []:
  678. config = qxz_configs(conf,i['e14'],"e14")
  679. 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]})
  680. if e15 != []:
  681. config = qxz_configs(conf,i['e15'],"e15")
  682. 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]})
  683. if e16 != []:
  684. config = qxz_configs(conf,i['e16'],"e16")
  685. 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]})
  686. if e17 != []:
  687. config = qxz_configs(conf,i['e17'],"e17")
  688. 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]})
  689. if e18 != []:
  690. config = qxz_configs(conf,i['e18'],"e18")
  691. 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]})
  692. if e19 != []:
  693. config = qxz_configs(conf,i['e19'],"e19")
  694. 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]})
  695. if e20 != []:
  696. config = qxz_configs(conf,i['e20'],"e20")
  697. 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]})
  698. if e21 != []:
  699. config = qxz_configs(conf,i['e21'],"e21")
  700. 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]})
  701. if e22 != []:
  702. config = qxz_configs(conf,i['e22'],"e22")
  703. 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]})
  704. if e23 != []:
  705. config = qxz_configs(conf,i['e23'],"e23")
  706. 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]})
  707. if e24 != []:
  708. config = qxz_configs(conf,i['e24'],"e24")
  709. 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]})
  710. if e25 != []:
  711. config = qxz_configs(conf,i['e25'],"e25")
  712. 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]})
  713. if e26 != []:
  714. config = qxz_configs(conf,i['e26'],"e26")
  715. 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]})
  716. if e27 != []:
  717. config = qxz_configs(conf,i['e27'],"e27")
  718. 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]})
  719. if e28 != []:
  720. config = qxz_configs(conf,i['e28'],"e28")
  721. 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]})
  722. if e29 != []:
  723. config = qxz_configs(conf,i['e29'],"e29")
  724. 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]})
  725. if e30 != []:
  726. config = qxz_configs(conf,i['e30'],"e30")
  727. 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]})
  728. except Exception as e:
  729. logger.error(f"气象站24h数据:{e}")
  730. raise PortError(" ", "计算数据失败,稍后重试")
  731. dat = {"data":data,"conf":conf}
  732. return dat
  733. @kedong_deco(login_required=False)
  734. def device_status_data(request):
  735. """
  736. 虫情测报灯/数据详情
  737. 设备实时状态接口
  738. 参数:
  739. device_id 必传 设备id
  740. 返回值:
  741. "data": {
  742. "upds": 1, 上仓门状态 1打开,0关闭
  743. "tpl": 5, 低温保护阈值温度
  744. "dver": "1.0.0", 设备固件版本
  745. "gs": 0, 通道状态 1落虫,0排水
  746. "hs": 0, 加热状态 1加热,0正常
  747. "dnds": 0, 下仓门状态 1打开,0关闭
  748. "is_online": 0, 在线状态
  749. "csq": 29, 信号强度
  750. "tph": 70, 高温保护阈值温度
  751. "ts": 0 定时模式 0光控,1时控
  752. "tps": 1 温控状态 1 温控,0 正常
  753. "lps": 0 光控状态 1 光控,0 正常
  754. "hrt": 22 加热仓实时温度
  755. "device_name":"这里是设备名称",
  756. "address": "这里是设备位置",
  757. "iccid": 1234444 SIM卡号
  758. }
  759. """
  760. post_info = request.POST
  761. _device_id = post_info.get("device_id")
  762. if not _device_id:
  763. raise PortError('device_id', "该设备不存在")
  764. try:
  765. device = MongoDevice.objects.get(device_id=_device_id)
  766. except:
  767. raise PortError('device_id','暂无此设备')
  768. d_id = device.id
  769. device_name = device.device_name
  770. province = device.province
  771. city = device.city
  772. district = device.district
  773. device_status = device.device_status # 在线状态
  774. myuser_type = request.user_type
  775. device_datas = MongoCBDData.objects.filter(device_id=d_id).order_by('-id')
  776. try:
  777. device_data = json.loads(device_datas[0].device_data)
  778. except json.JSONDecodeError as e:
  779. device_data = eval(device_datas[0].device_data)
  780. except:
  781. raise PortError("device_id","暂无数据")
  782. ds = device_data.get("ds",1 )
  783. ts = device_data.get("ts",1)
  784. up_st = {
  785. "is_online": device_status,
  786. "ts":ts,
  787. "hs":device_data["hs"],
  788. "upds":device_data["upds"],
  789. "dnds":device_data["dnds"],
  790. "csq":device_data["csq"],
  791. "dver":device_data["dver"],
  792. "tph":device_data["tph"],
  793. "tpl":device_data["tpl"],
  794. "tps":device_data["tps"],
  795. "lps":device_data["lps"],
  796. "hrt":device_data["hrt"],
  797. "iccid":device_data["iccid"],
  798. "rps":device_data["rps"],
  799. "ah":device_data["ah"],
  800. "at":device_data["at"],
  801. "ds":ds,
  802. "device_name":device_name,
  803. "address": province + city + district,
  804. }
  805. return up_st
  806. @kedong_deco(login_required=True)
  807. def qxz_switch_status(request):
  808. """
  809. 气象站开关、阈值状态接口
  810. 参数:
  811. device_id 必传(str) 设备号
  812. 返回值:
  813. {
  814. qxz_switch: "[{'status': 0, 'JK': 0}, {'status': 0, 'JK': 1}]" 开关状态
  815. switch_name: "[{'name': '开关0', 'JK': 0}, {'name': '', 'JK': 1}]" 开关名称
  816. timing_list: "[{'JK': 0, 'Duration': 4, 'StartTime': 3}, {'JK': 1, 'Duration': 8, 'StartTime': 7}]" 定时控制
  817. auto_list: [{'lower': 32767, 'JK': 0, 'method': 0, 'upper': 32767, 'eKey': 0}]" 阈值状态
  818. }
  819. """
  820. device_id = request.POST.get("device_id")
  821. data = []
  822. try:
  823. switch_obj = QXZ_Switch_Status.objects.get(device_id=device_id)
  824. qxz_switch = switch_obj.qxz_switch
  825. except:
  826. qxz_switch = ""
  827. try:
  828. switch_name_obj = MongoQXZ_Switch.objects.get(device_id=device_id)
  829. switch_name = switch_name_obj.qxz_switch_data
  830. except:
  831. switch_name = ""
  832. try:
  833. timing_list = MongoQXZ_Timing_Switch.objects.get(device_id=device_id).qxz_timing
  834. except:
  835. timing_list = ""
  836. try:
  837. auto_list = MongoQXZ_Auto_Switch.objects.get(device_id=device_id).qxz_auto
  838. except:
  839. auto_list = ""
  840. data = {'qxz_switch':qxz_switch, 'switch_name':switch_name, 'timing_list':timing_list,"auto_list":auto_list}
  841. return data
  842. @kedong_deco(login_required=False)
  843. def qxz_element_conf(request):
  844. """
  845. 气象站查看通道要素接口\保存通道要素接口:
  846. 参数:
  847. device_id 必传(str) 设备号
  848. status 必传(str) 当status等于see查看, 当status等于save保存
  849. ekey 非必传(str) 通道号 如e1
  850. conf 非必传(str) 通道标题,如大气温度#℃
  851. 说明:当status等于see查看,只需要传device_id,当status等于save保存 需传device_id、conf、ekey
  852. 返回值:
  853. 当status等于see时:
  854. "data": {
  855. "default": { 原来值
  856. "e1": "大气温度#℃",
  857. "e2": "大气湿度#%RH",
  858. "e3": "风速#m/s",
  859. "e4": "风向#°",
  860. "e5": "模拟气压#hpa",
  861. "e6": "简易总辐射#w/㎡"
  862. },
  863. "conf": { 修改值
  864. "e1": "大气温度#℃",
  865. "e2": "大气湿度#%RH",
  866. "e3": "风速#m/s",
  867. "e4": "风向#°",
  868. "e5": "模拟气压#hpa",
  869. "e6": "简易总辐射#w/㎡"
  870. }
  871. },
  872. 当status等于save时:
  873. {
  874. "data" 0 0 保存成功 1失败
  875. }
  876. """
  877. device_id = request.POST.get("device_id")
  878. status = request.POST.get("status")
  879. ekey = request.POST.get("ekey")
  880. conf = request.POST.get("conf")
  881. if status == "see":
  882. x = MongoQXZ_Conf.objects.get(device_id=device_id)
  883. i = QXZ_Default_Conf.objects.get(device_id=device_id)
  884. conf = {"e1":x.e1,"e2":x.e2,"e3":x.e3,"e4":x.e4,"e5":x.e5,
  885. "e6":x.e6,"e7":x.e7,"e8":x.e8,"e9":x.e9,"e10":x.e10,
  886. "e11":x.e11,"e12":x.e12,"e13":x.e13,"e14":x.e14,
  887. "e15":x.e15,"e16":x.e16,"e17":x.e17,"e18":x.e18,
  888. "e19":x.e19,"e20":x.e20,"e21":x.e21,"e22":x.e22,
  889. "e23":x.e23,"e24":x.e24,"e25":x.e25,"e26":x.e26,
  890. "e27":x.e27,"e28":x.e28,"e29":x.e29,"e30":x.e30}
  891. default = {"e1":i.e1,"e2":i.e2,"e3":i.e3,"e4":i.e4,"e5":i.e5,
  892. "e6":i.e6,"e7":i.e7,"e8":i.e8,"e9":i.e9,"e10":i.e10,
  893. "e11":i.e11,"e12":i.e12,"e13":i.e13,"e14":i.e14,
  894. "e15":i.e15,"e16":i.e16,"e17":i.e17,"e18":i.e18,
  895. "e19":i.e19,"e20":i.e20,"e21":i.e21,"e22":i.e22,
  896. "e23":i.e23,"e24":i.e24,"e25":i.e25,"e26":i.e26,
  897. "e27":i.e27,"e28":i.e28,"e29":i.e29,"e30":i.e30}
  898. for k in list(conf.keys()):
  899. if not conf[k]:
  900. del conf[k]
  901. for y in list(default.keys()):
  902. if not default[y]:
  903. del default[y]
  904. data = {"default":default,"conf":conf}
  905. elif status == "save":
  906. times = int(time.time())
  907. conf_obj = MongoQXZ_Conf.objects.get(device_id=device_id)
  908. if ekey == "e1":
  909. con = (conf_obj.e1).split("#")
  910. conf_obj.e1 = conf + "#"+ con[1]
  911. conf_obj.update = times
  912. conf_obj.save()
  913. data = {"code": 0}
  914. elif ekey == "e2":
  915. con = (conf_obj.e2).split("#")
  916. conf = conf + "#"+ con[1]
  917. conf_obj.e2 = conf
  918. conf_obj.update = times
  919. conf_obj.save()
  920. data = {"code": 0}
  921. elif ekey == "e3":
  922. con = (conf_obj.e3).split("#")
  923. conf_obj.e3 = conf + "#"+ con[1]
  924. conf_obj.update = times
  925. conf_obj.save()
  926. data = {"code": 0}
  927. elif ekey == "e4":
  928. con = (conf_obj.e4).split("#")
  929. conf_obj.e4 = conf + "#"+ con[1]
  930. conf_obj.update = times
  931. conf_obj.save()
  932. data = {"code": 0}
  933. elif ekey == "e5":
  934. con = (conf_obj.e5).split("#")
  935. conf_obj.e5 = conf + "#"+ con[1]
  936. conf_obj.update = times
  937. conf_obj.save()
  938. data = {"code": 0}
  939. elif ekey == "e6":
  940. con = (conf_obj.e6).split("#")
  941. conf_obj.e6 = conf + "#"+ con[1]
  942. conf_obj.update = times
  943. conf_obj.save()
  944. data = {"code": 0}
  945. elif ekey == "e7":
  946. con = (conf_obj.e7).split("#")
  947. conf_obj.e7 = conf + "#"+ con[1]
  948. conf_obj.update = times
  949. conf_obj.save()
  950. data = {"code": 0}
  951. elif ekey == "e8":
  952. con = (conf_obj.e8).split("#")
  953. conf_obj.e8 = conf + "#"+ con[1]
  954. conf_obj.update = times
  955. conf_obj.save()
  956. data = {"code": 0}
  957. elif ekey == "e9":
  958. con = (conf_obj.e9).split("#")
  959. conf_obj.e9 = conf + "#"+ con[1]
  960. conf_obj.update = times
  961. conf_obj.save()
  962. data = {"code": 0}
  963. elif ekey == "e10":
  964. con = (conf_obj.e10).split("#")
  965. conf_obj.e10 = conf + "#"+ con[1]
  966. conf_obj.update = times
  967. conf_obj.save()
  968. data = {"code": 0}
  969. elif ekey == "e11":
  970. con = (conf_obj.e11).split("#")
  971. conf_obj.e11 = conf + "#"+ con[1]
  972. conf_obj.update = times
  973. conf_obj.save()
  974. data = {"code": 0}
  975. elif ekey == "e12":
  976. con = (conf_obj.e12).split("#")
  977. conf_obj.e12 = conf + "#"+ con[1]
  978. conf_obj.update = times
  979. conf_obj.save()
  980. data = {"code": 0}
  981. elif ekey == "e13":
  982. con = (conf_obj.e13).split("#")
  983. conf_obj.e13 = conf + "#"+ con[1]
  984. conf_obj.update = times
  985. conf_obj.save()
  986. data = {"code": 0}
  987. elif ekey == "e14":
  988. con = (conf_obj.e14).split("#")
  989. conf_obj.e14 = conf + "#"+ con[1]
  990. conf_obj.update = times
  991. conf_obj.save()
  992. data = {"code": 0}
  993. elif ekey == "e15":
  994. con = (conf_obj.e15).split("#")
  995. conf_obj.e15 = conf + "#"+ con[1]
  996. conf_obj.update = times
  997. conf_obj.save()
  998. data = {"code": 0}
  999. elif ekey == "e16":
  1000. con = (conf_obj.e16).split("#")
  1001. conf_obj.e16 = conf + "#"+ con[1]
  1002. conf_obj.update = times
  1003. conf_obj.save()
  1004. data = {"code": 0}
  1005. elif ekey == "e17":
  1006. con = (conf_obj.e17).split("#")
  1007. conf_obj.e17 = conf + "#"+ con[1]
  1008. conf_obj.update = times
  1009. conf_obj.save()
  1010. data = {"code": 0}
  1011. elif ekey == "e18":
  1012. con = (conf_obj.e18).split("#")
  1013. conf_obj.e18 = conf + "#"+ con[1]
  1014. conf_obj.update = times
  1015. conf_obj.save()
  1016. data = {"code": 0}
  1017. elif ekey == "e19":
  1018. con = (conf_obj.e19).split("#")
  1019. conf_obj.e19 = conf + "#"+ con[1]
  1020. conf_obj.update = times
  1021. conf_obj.save()
  1022. data = {"code": 0}
  1023. elif ekey == "e20":
  1024. con = (conf_obj.e20).split("#")
  1025. conf_obj.e20 = conf + "#"+ con[1]
  1026. conf_obj.update = times
  1027. conf_obj.save()
  1028. data = {"code": 0}
  1029. elif ekey == "e21":
  1030. con = (conf_obj.e21).split("#")
  1031. conf_obj.e21 = conf + "#"+ con[1]
  1032. conf_obj.update = times
  1033. conf_obj.save()
  1034. data = {"code": 0}
  1035. elif ekey == "e22":
  1036. con = (conf_obj.e22).split("#")
  1037. conf_obj.e22 = conf + "#"+ con[1]
  1038. conf_obj.update = times
  1039. conf_obj.save()
  1040. data = {"code": 0}
  1041. elif ekey == "e23":
  1042. con = (conf_obj.e23).split("#")
  1043. conf_obj.e23 = conf + "#"+ con[1]
  1044. conf_obj.update = times
  1045. conf_obj.save()
  1046. data = {"code": 0}
  1047. elif ekey == "e24":
  1048. con = (conf_obj.e24).split("#")
  1049. conf_obj.e24 = conf + "#"+ con[1]
  1050. conf_obj.update = times
  1051. conf_obj.save()
  1052. data = {"code": 0}
  1053. elif ekey == "e25":
  1054. con = (conf_obj.e25).split("#")
  1055. conf_obj.e25 = conf + "#"+ con[1]
  1056. conf_obj.update = times
  1057. conf_obj.save()
  1058. data = {"code": 0}
  1059. elif ekey == "e26":
  1060. con = (conf_obj.e26).split("#")
  1061. conf_obj.e26 = conf + "#"+ con[1]
  1062. conf_obj.update = times
  1063. conf_obj.save()
  1064. data = {"code": 0}
  1065. elif ekey == "e27":
  1066. con = (conf_obj.e27).split("#")
  1067. conf_obj.e27 = conf + "#"+ con[1]
  1068. conf_obj.update = times
  1069. conf_obj.save()
  1070. data = {"code": 0}
  1071. elif ekey == "e28":
  1072. con = (conf_obj.e28).split("#")
  1073. conf_obj.e28 = conf + "#"+ con[1]
  1074. conf_obj.update = times
  1075. conf_obj.save()
  1076. data = {"code": 0}
  1077. elif ekey == "e29":
  1078. con = (conf_obj.e29).split("#")
  1079. conf_obj.e29 = conf + "#"+ con[1]
  1080. conf_obj.update = times
  1081. conf_obj.save()
  1082. data = {"code": 0}
  1083. elif ekey == "e30":
  1084. con = (conf_obj.e30).split("#")
  1085. conf_obj.e30 = conf + "#"+ con[1]
  1086. conf_obj.update = times
  1087. conf_obj.save()
  1088. data = {"code": 0}
  1089. else:
  1090. data = {"code": 1}
  1091. else:
  1092. raise PortError("","参数超出范围")
  1093. return data