td266_converter.py 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. import json
  2. import re
  3. from sanic.log import logger
  4. from converter import Converter
  5. class TD266Converter(Converter):
  6. def convert(self, config, data):
  7. try:
  8. data = data.decode('utf-8').split('\t')
  9. logger.info(f"原始数据(单点流速仪): {data}")
  10. dict = {}
  11. for index in config:
  12. name = 'c' + str(index['serial_number'])
  13. i = int(index['address'])
  14. if index['divisor'] is None:
  15. dict[name] = float(data[i])
  16. else:
  17. dict[name] = round((float(data[i]) / index['divisor']), 2)
  18. logger.info(f"解析后数据(单点流速仪):{data}")
  19. return dict
  20. except Exception as e:
  21. logger.error(e)
  22. return "error"
  23. """
  24. def convert(self, config, data):
  25. # 原始data: data = b'4420\t1194\t29.823\t104.507\t-7.471\t28.872\t253.153\t9.369\t1.816\t91.491\t-59.593\t100\t9.542\t9.589\t0.015\r\n'
  26. # 去除结尾\r\n: data = b'4420\t1194\t29.823\t104.507\t-7.471\t28.872\t253.153\t9.369\t1.816\t91.491\t-59.593\t100\t9.542\t9.589\t0.015'
  27. # decode('utf-8'): data = 4420 1194 29.823 104.507 -7.471 28.872 253.153 9.369 1.816 91.491 -59.593 100 9.542 9.589 0.015
  28. # split('\t'): data = ['4420', '1194', '29.823', '104.507', '-7.471', '28.872', '253.153', '9.369', '1.816', '91.491', '-59.593', '100', '9.542', '9.589', '0.015']
  29. # logger.debug(len(data), time.strftime('%Y-%m-%d %H:%M:%S'), data)
  30. pattern_start = b"4420"
  31. # pattern_end = b"\r\n"
  32. index_start = re.search(pattern_start, data) # 查找字符串得到开始索引
  33. # index_end = re.search(pattern_end, data)
  34. if index_start:
  35. index_start = index_start.span()[0]
  36. # index_end = index_end.span()[1]
  37. data = data[index_start:75] # 只获取流速和流向,大约取25个字符即可
  38. logger.info(data)
  39. data = data.decode('utf-8').split('\t')
  40. logger.info(data)
  41. dict = {}
  42. try:
  43. for index in config:
  44. name = 'c' + str(index['serial_number'])
  45. i = int(index['address'])
  46. if index['divisor'] is None:
  47. dict[name] = float(data[i])
  48. else:
  49. dict[name] = round((float(data[i]) / index['divisor']), 2)
  50. logger.info(dict)
  51. return dict
  52. except Exception as e:
  53. logger.error(e)
  54. return "error"
  55. else:
  56. return 'pass'
  57. """