download_thingsboard.py 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. # -*- coding: utf-8 -*-
  2. """
  3. Created on Fri Aug 14 21:10:25 2020
  4. @author: solo
  5. """
  6. import requests
  7. import json
  8. import time
  9. import pandas as pd
  10. import sys
  11. import pandas as pd
  12. import os
  13. from datetime import datetime
  14. src_server = 'http://124.222.45.156:18080'
  15. src_req_url = '%s/api/auth/login'%(src_server)
  16. src_username = "cz_dld@thingsboard.org"
  17. src_password = "tenant"
  18. src_s = json.dumps({"username":src_username, "password":src_password})
  19. src_r = requests.post(src_req_url, headers={'Accept': 'application/json'}, data=src_s)
  20. src_rj = json.loads(src_r.text.encode())
  21. print('src rj:' + str(src_rj))
  22. startdate='2024-1-18'
  23. enddate='2024-1-19'
  24. devidx = 1
  25. src_deviceid='d203df30-af8e-11ee-9972-3dd738949819'
  26. keys=[]
  27. keys.append({'src':'es_ap','tgt':'es_ap','intv':1})
  28. keys.append({'src':'load_ap','tgt':'load_ap','intv':1})
  29. '''
  30. # cell voltages
  31. for i in range(5):
  32. for j in range(52):
  33. keys.append({'src':'bms1_p%d_v%d'%(i+1,j+1),'tgt':'bms1_p%d_v%d'%(i+1,j+1),'intv':60})
  34. for i in range(5):
  35. for j in range(52):
  36. keys.append({'src':'bms1_p%d_t%d'%(i+1,j+1),'tgt':'bms1_p%d_t%d'%(i+1,j+1),'intv':180})
  37. # fa 1 - 5 ############################################################################
  38. for i in range(5):
  39. keys=keys+[
  40. {'src':'fa%d_co'%(i+1),'tgt':'fa%d_co'%(i+1),'intv':60*5},
  41. {'src':'fa%d_fire'%(i+1),'tgt':'fa%d_fire'%(i+1),'intv':60*5},
  42. {'src':'fa%d_smoke'%(i+1),'tgt':'fa%d_smoke'%(i+1),'intv':60*5},
  43. {'src':'fa%d_status'%(i+1),'tgt':'fa%d_status'%(i+1),'intv':60*5},
  44. {'src':'fa%d_t1'%(i+1),'tgt':'fa%d_t1'%(i+1),'intv':60*5},
  45. {'src':'fa%d_t2'%(i+1),'tgt':'fa%d_t2'%(i+1),'intv':60*5},
  46. {'src':'fa%d_voc'%(i+1),'tgt':'fa%d_voc'%(i+1),'intv':60*5},
  47. ]
  48. '''
  49. for key in keys:
  50. drange = pd.date_range(startdate,enddate)
  51. for date in drange:
  52. time.sleep(0.1)
  53. devpath='data/dev%d'%(devidx)
  54. if not os.path.exists(devpath):
  55. os.mkdir(devpath)
  56. keypath='%s/%s'%(devpath,key['tgt'])
  57. if not os.path.exists(keypath):
  58. os.mkdir(keypath)
  59. try:
  60. print('getting data for src:',key['src'],'tgt:',key['tgt'],'date:','%04d-%02d-%02d'%(date.year, date.month, date.day))
  61. startTs = int(time.mktime(time.strptime('%04d-%02d-%02d 00:00:00'%(date.year, date.month, date.day), "%Y-%m-%d %H:%M:%S"))*1000)
  62. endTs = int(time.mktime(time.strptime('%04d-%02d-%02d 23:59:59'%(date.year, date.month, date.day), "%Y-%m-%d %H:%M:%S"))*1000)
  63. req_url = '%s/api/plugins/telemetry/DEVICE/%s/values/timeseries?keys=%s&startTs=%d&endTs=%d&limit=50000&agg=NONE'%(src_server,src_deviceid,key['src'],startTs,endTs)
  64. r = requests.get(req_url, headers={'Accept': 'application/json','X-Authorization':'Bearer %s'%src_rj['token']})
  65. if r.status_code != 200:
  66. print(r)
  67. continue
  68. rj_val = json.loads(r.text.encode())
  69. l = rj_val[key['src']]
  70. last_ts = 0
  71. ts=[]
  72. val=[]
  73. l.reverse()
  74. for itm in l:
  75. if abs(itm['ts'] - last_ts) > (key['intv']-5)*1000:
  76. last_ts = itm['ts']
  77. ts.append(datetime.fromtimestamp(itm['ts']/1000).strftime("%H:%M:%S"))
  78. val.append(itm['value'])
  79. #df = pd.DataFrame(data = [ts,val], columns=['ts',key])
  80. #df.to_excel('com_ap_%04d-%02d-%02d.xls'%(date.year, date.month, date.day))
  81. df = pd.DataFrame()
  82. df['ts']=ts
  83. df[key['tgt']]=val
  84. df.to_csv('%s/%04d-%02d-%02d.csv'%(keypath,date.year, date.month, date.day),index=None)
  85. print('saved')
  86. time.sleep(0.02)
  87. except:
  88. print("get data error @"+str(date)+' for key:%s'%(key['src']))
  89. #sys.exit()
  90. continue
  91. else:
  92. continue
  93. print('done')