MessageListenerZJV5.py 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. from hub import methods, Global
  2. import threading
  3. import traceback
  4. import time
  5. import json
  6. import os
  7. from lib.UserWorkRecord import UserWorkRecord
  8. class LocalClass(object):
  9. last_log_key = str()
  10. def method_v001(client, userdata, message):
  11. """消息处理方法"""
  12. # --- log ---
  13. # methods.debug_log(f"method_v001|26", f"#message.payload: {message.payload}")
  14. # return
  15. # --- check ---
  16. # if not methods.is_dir(save_dir):
  17. # out = methods.run_command(f'mkdir -p {save_dir}', callback=True)
  18. # methods.debug_log('MessageListener46', f"#out: {out}")
  19. # --- check ---
  20. try:
  21. log_dict = json.loads(message.payload)
  22. log_time = int(log_dict.get('timestamp')) / 1000
  23. user_uuid = log_dict.get('userID')
  24. vehicle_id = log_dict.get('VehicleID')
  25. cockpit_id = log_dict.get('cockpitID')
  26. except Exception as exception:
  27. methods.debug_log("method_v001|41", f"#message.payload: {message.payload}")
  28. methods.debug_log("method_v001|41", f"#exception: {exception.__class__.__name__}")
  29. methods.debug_log("method_v001|41", f"#traceback: {traceback.format_exc()}")
  30. return
  31. # --- check ---
  32. log_uuid = UserWorkRecord.get_log_uuid(user_uuid, log_time, vehicle_id, cockpit_id)
  33. if not log_uuid:
  34. methods.debug_log(f"MessageListenerV001|error50", f"user_uuid: {user_uuid}, log_time: {log_time}")
  35. return
  36. # --- fill log_list ---
  37. log_list = [
  38. f"timestamp: {methods.ts_to_string(log_time)}", # 时间
  39. f"topic: Vehicle/ControlVehicle/Veh001", # 话题
  40. # f"userID: {log_dict.get('userID')}", # 用户id
  41. # f"VehicleID: {log_dict.get('VehicleID')}", # 车id
  42. # f"cockpitID: {log_dict.get('cockpitID')}", # 舱id
  43. f"directSwitch: {log_dict.get('baseControl')[0].get('directSwitch')}", # 前后切换
  44. f"eStop: {log_dict.get('baseControl')[0].get('eStop')}", # 急停开关
  45. f"gearCaontrol: {log_dict.get('baseControl')[0].get('gearCaontrol')}", # 车辆档位控制
  46. f"hazardLight: {log_dict.get('baseControl')[0].get('hazardLight')}", # 双闪灯
  47. f"keyStatus: {log_dict.get('baseControl')[0].get('keyStatus')}", # 钥匙状态
  48. f"parkControl: {log_dict.get('baseControl')[0].get('parkControl')}", # 驻车控制
  49. f"silencedAlarm: {log_dict.get('baseControl')[0].get('silencedAlarm')}", # 消报警音按钮
  50. f"travelLight: {log_dict.get('baseControl')[0].get('travelLight')}", # 行驶灯光
  51. f"travelMode: {log_dict.get('baseControl')[0].get('travelMode')}", # 驾驶模式
  52. f"vehicleHorn: {log_dict.get('baseControl')[0].get('vehicleHorn')}", # 喇叭
  53. f"accPedalF: {log_dict.get('driveControl')[0].get('accPedal')[0].get('accPedalF')}", # 油门踏板.手油门
  54. f"accPedalH: {log_dict.get('driveControl')[0].get('accPedal')[0].get('accPedalH')}", # 油门踏板.脚油门
  55. f"accPedalH: {log_dict.get('driveControl')[0].get('brakePedal')}", # 刹车踏板
  56. f"steeringWheel: {log_dict.get('driveControl')[0].get('steeringWheel')}", # 方向盘转速
  57. f"turnMode: {log_dict.get('driveControl')[0].get('turnMode')}", # 转向模式
  58. f"turnSignal: {log_dict.get('driveControl')[0].get('turnSignal')}", # 转向灯
  59. f"errAccPedal: {log_dict.get('errCode')[0].get('errAccPedal')}", # 油门信号故障
  60. f"errBasOperation: {log_dict.get('errCode')[0].get('errBasOperation')}", # 基本操作故障
  61. f"errBrakePedal: {log_dict.get('errCode')[0].get('errBrakePedal')}", # 刹车信号故障
  62. f"errEndTool: {log_dict.get('errCode')[0].get('errEndTool')}", # 末端工具控制故障
  63. f"errHandle: {log_dict.get('errCode')[0].get('errHandle')}", # 手柄信号故障
  64. f"errOther: {log_dict.get('errCode')[0].get('errOther')}", # 其他故障
  65. f"errSteeringWheel: {log_dict.get('errCode')[0].get('errSteeringWheel')}", # 转向故障
  66. f"baseLegControl: {log_dict.get('taskControl')[0].get('baseLegControl')}", # 支腿动作控制
  67. f"baseLegSwitch: {log_dict.get('taskControl')[0].get('baseLegSwitch')}", # 支腿选择开关
  68. f"bypassSwitch: {log_dict.get('taskControl')[0].get('bypassSwitch')}", # 旁通开关
  69. f"cabLift: {log_dict.get('taskControl')[0].get('cabLift')}", # 驾驶室升降机构
  70. f"coopSignal: {log_dict.get('taskControl')[0].get('coopSignal')}", # 协同作业信号
  71. f"enableHydraulic: {log_dict.get('taskControl')[0].get('enableHydraulic')}", # 液压使能开关
  72. f"endJoint: {log_dict.get('taskControl')[0].get('endJoint')}", # 末端关节控制
  73. f"esCabLift: {log_dict.get('taskControl')[0].get('esCabLift')}", # 驾驶室应急下降开关
  74. f"suckerSelect: {log_dict.get('taskControl')[0].get('suckerSelect')}", # 吸盘选择开关
  75. f"taskJoint_1: {log_dict.get('taskControl')[0].get('taskJoint_1')}", # 第一个作业关节控制
  76. f"taskJoint_2: {log_dict.get('taskControl')[0].get('taskJoint_2')}", # 第二个作业关节控制
  77. f"taskJoint_3: {log_dict.get('taskControl')[0].get('taskJoint_3')}", # 第三个作业关节控制
  78. f"toolControl: {log_dict.get('taskControl')[0].get('toolControl')}", # 末端工具控制
  79. f"workLight: {log_dict.get('taskControl')[0].get('workLight')}", # 工作灯
  80. ]
  81. # --- check ---
  82. log_key = '-'.join(log_list[1:])
  83. if LocalClass.last_log_key and LocalClass.last_log_key == log_key:
  84. # methods.debug_log(f"MessageListener24", f"#86: {LocalClass.last_log_key == log_key}")
  85. return
  86. # --- update --
  87. LocalClass.last_log_key = log_key
  88. # --- save ---
  89. # methods.debug_log(f"MessageListenerV001|113", f"#log_list: {log_list}")
  90. log_file_path = os.path.join(Global.save_dir, f'{log_uuid}.log')
  91. methods.write_text(log_file_path, ' | '.join(log_list) + '\n', 'a')
  92. def subscribe_Veh0538():
  93. """"""
  94. client = Global.emqx_factory.Client(host=Global.emqx_host, port=Global.emqx_port)
  95. client.start_subscribe_loop(
  96. decorate_method=method_v001,
  97. subscribe_topic='Vehicle/ControlVehicle/Veh0538'
  98. )