weather.py 52 KB

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