td266_converter.py 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. import json
  2. import re
  3. import time
  4. from converter import Converter
  5. class TD266Converter(Converter):
  6. def convert(self, config, data):
  7. # 原始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'
  8. # 去除结尾\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'
  9. # 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
  10. # 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']
  11. # print(len(data), time.strftime('%Y-%m-%d %H:%M:%S'), data)
  12. pattern_start = b"4420"
  13. # pattern_end = b"\r\n"
  14. index_start = re.search(pattern_start, data) # 查找字符串得到开始索引
  15. # index_end = re.search(pattern_end, data)
  16. if index_start:
  17. index_start = index_start.span()[0]
  18. # index_end = index_end.span()[1]
  19. data = data[index_start:75] # 只获取流速和流向,大约取25个字符即可
  20. # print(data)
  21. data = data.decode('utf-8').split('\t')
  22. # print(data)
  23. dict = {}
  24. try:
  25. for index in config:
  26. name = 'c' + str(index['serial_number'])
  27. i = int(index['address'])
  28. if index['divisor'] is None:
  29. dict[name] = float(data[i])
  30. else:
  31. dict[name] = round((float(data[i]) / index['divisor']), 2)
  32. # print(dict)
  33. return dict
  34. except Exception as e:
  35. print(e)
  36. return "error"
  37. else:
  38. return 'pass'