access_plc_api.py 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. import requests
  2. import time
  3. def access_plc_query_api(url: str,headers:dict, data: list, max_retries=2):
  4. """调用bge-m3,embedding"""
  5. # 类型检查
  6. time.sleep(0.010) # 方式频繁调用接口
  7. for attempt in range(max_retries):
  8. try:
  9. response = requests.post(url=url, headers=headers, json=data)
  10. if response.status_code == 200:
  11. return response.json()
  12. except Exception as e:
  13. print('请求PLC点位查询接口失败!', e)
  14. time.sleep(1)
  15. return None
  16. return None
  17. def sparse_plc_api_response(response):
  18. data = response.get('data')
  19. code = response.get('code')
  20. if int(code) != 200 or data is None:
  21. print(f"访问plc接口失败,状态码:{code}, 返回数据有效:{bool(data)}")
  22. return None
  23. # 提取名称,时间和值
  24. plc_query_results = [] # 查询结果
  25. for item in data:
  26. plc_query_results.append(f"PLC点位名称:{item.get('alias')},记录时间:{item.get('htime')}, 值:{item.get('val')}")
  27. return plc_query_results
  28. def post_req_2_plc_api(project_id:int,database_codes:list):
  29. headers = {"Content-Type": "application/json",
  30. "JWT-TOKEN": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJJRCI6NywiVXNlcm5hbWUiOiJhZG1pbiIsIkRlcCI6IjEzNSIsImV4cCI6MTc3NjExOTExNCwiaXNzIjoiZ2luLWJsb2cifQ.0HTtzHZjyd2mHo8VCy8icYROxmntRMuQhyoZsAYRL_M"}
  31. # 构造数据
  32. data = [{"deviceId":"1","deviceItems":db_code,"deviceName":"外供水PH","project_id":project_id} for db_code in database_codes]
  33. # 查询结果
  34. resp = access_plc_query_api(url='http://120.55.44.4:8900/api/v1/jinke-cloud/device/current-data?time=1739859286292',
  35. headers=headers, data=data)
  36. # 解析结果
  37. res = sparse_plc_api_response(resp)
  38. return res
  39. if '__main__' == __name__:
  40. res = post_req_2_plc_api(1420,['ns=3;s=1#RO_CSDD_O','ns=3;s=2#RO_CSDD_O'])
  41. print('请求结果', res)