Casper 1 сар өмнө
parent
commit
d335a71f80

+ 1 - 0
sri-pysdk/xclient/xmqtt.py

@@ -69,6 +69,7 @@ if __name__ == '__main__':
         print(f"#message.payload: {p3.payload}")
         # print(f"#message.payload: {json.loads(p3.payload)}")
 
+
     # subscribe_topic = 'bg/log'
     # subscribe_topic = 'qtmqtt'
     # subscribe_topic = 'client'

+ 22 - 16
sri-server-bg02/lib/MessageListener.py

@@ -6,7 +6,7 @@ import json
 import os
 
 
-class MessageListener(object):
+class MessageListener:
     """
     """
 
@@ -16,24 +16,30 @@ class MessageListener(object):
         from lib.UserWorkRecord import UserWorkRecord
         UserWorkRecord.init()
 
-        from lib.MessageListenerC001 import subscribe_c001
-        from lib.MessageListenerV001 import subscribe_v001
+        # from lib.MessageListenerZJV1 import subscribe_Veh0533
+        # from lib.MessageListenerZJV2 import subscribe_Veh0534
+        # from lib.MessageListenerZJV3 import subscribe_Veh0535
+        # from lib.MessageListenerZJV4 import subscribe_Veh0537
+        # from lib.MessageListenerZJV5 import subscribe_Veh0538
 
-        from lib.MessageListenerZJV1 import subscribe_Veh0533
-        from lib.MessageListenerZJV2 import subscribe_Veh0534
-        from lib.MessageListenerZJV3 import subscribe_Veh0535
-        from lib.MessageListenerZJV4 import subscribe_Veh0537
-        from lib.MessageListenerZJV5 import subscribe_Veh0538
+        # todo 创建多个实例,根据不同项目现场,创建不同的监听消息的话题,以及指定对应解析使用的方法;
+        from lib.TopicListener import TopicListener
 
         thread_list = [
-            threading.Thread(target=subscribe_c001),
-            threading.Thread(target=subscribe_v001),
-
-            threading.Thread(target=subscribe_Veh0533),
-            threading.Thread(target=subscribe_Veh0534),
-            threading.Thread(target=subscribe_Veh0535),
-            threading.Thread(target=subscribe_Veh0537),
-            threading.Thread(target=subscribe_Veh0538),
+            threading.Thread(target=TopicListener(
+                'Cockpit/CanBus/CanId001/Cop001',
+                'method_c001',
+            )),
+            threading.Thread(target=TopicListener(
+                'Vehicle/ControlVehicle/Veh001',
+                'method_v001',
+            )),
+
+            # threading.Thread(target=subscribe_Veh0533),
+            # threading.Thread(target=subscribe_Veh0534),
+            # threading.Thread(target=subscribe_Veh0535),
+            # threading.Thread(target=subscribe_Veh0537),
+            # threading.Thread(target=subscribe_Veh0538),
         ]
         for thread in thread_list:
             thread.setDaemon(True)

+ 0 - 163
sri-server-bg02/lib/MessageListenerC001.py

@@ -1,163 +0,0 @@
-from hub import methods, Global
-
-import threading
-import traceback
-import time
-import json
-import os
-
-from lib.UserWorkRecord import UserWorkRecord
-
-
-class LocalClass(object):
-    last_log_key = str()
-
-
-def method_c001(client, userdata, message):
-    """消息处理方法"""
-    """
-    {
-        'basControl': {
-            'directSwitch': 1,
-            'eStop': 0,
-            'gearControl': 0,
-            'hazardLight': 0,
-            'keyStatus': 0,
-            'parkControl': 0,
-            'silencedAlarm': 0,
-            'travelLight': 2,
-            'travelMode': 0,
-            'vehicleHorn': 0
-        },
-        'driverControl': {
-            'accPedal': '0 AND 0 || 0 AND -1',
-            'brakePedal': '2 AND 2',
-            'steeringWheel': '1 AND 0',
-            'turnMode': 0,
-            'turnSignal': 0
-        },
-        'errCode': {
-            'errAccPedal': 0,
-            'errBasOperation': '',
-            'errBrakePedal': 0,
-            'errEndTool': 0,
-            'errHandle': 0,
-            'errOther': '',
-            'errSteeringWheel': 0
-        },
-        'taskControl': {
-            'baseLegControl': '103 AND 24',
-            'baseLegSwitch': 0,
-            'bypassSwitch': 0,
-            'cabLift': 0,
-            'coopSignal': 3,
-            'enableHydraulic': 1,
-            'endJoint': '1 AND 0',
-            'esCabLift': 0,
-            'suckerSelect': 0,
-            'taskJoint_1': '5 AND 0',
-            'taskJoint_2': '0 AND 0',
-            'taskJoint_3': '0 AND 0',
-            'toolControl': '0 AND 0',
-            'workLight': 0
-        },
-        'timeStamp': 576301601,
-        'userID': 'Ego',
-        'cockpitID': 'Cop001',
-        'vehicleID': '0538'
-    }
-    """
-    # --- check ---
-    # methods.debug_log(f"method_c001|75", f"#message.payload: {message.payload}")
-    try:
-        log_dict = json.loads(message.payload)
-    except Exception as exception:
-        methods.debug_log("method_c001|79", f"#message.payload: {message.payload}")
-        methods.debug_log("method_c001|79", f"#exception: {exception.__class__.__name__}")
-        methods.debug_log("method_c001|79", f"#traceback: {traceback.format_exc()}")
-        return
-
-    # --- check ---
-    # log_dict = json.loads(message.payload)
-    log_time = int(log_dict.get('timeStamp')) / 1000
-    user_uuid = log_dict.get('userID')
-    vehicle_id = log_dict.get('vehicleID')
-    cockpit_id = log_dict.get('cockpitID')
-    log_uuid = UserWorkRecord.get_log_uuid(user_uuid, log_time, vehicle_id, cockpit_id)
-    if not log_uuid:
-        methods.debug_log(f"MessageListenerC001|error92", f"user_uuid: {user_uuid}, log_time: {log_time}")
-        return
-
-    # --- fill log_list ---
-    log_list = [
-
-        f"timeStamp: {methods.ts_to_string(log_time)}",  # 时间
-        f"topic: Cockpit/CanBus/CanId001/Cop001",  # 话题
-        # f"userID: {log_dict.get('userID')}",  # 用户id
-        # f"cockpitID: {log_dict.get('cockpitID')}",  # 舱id
-        # f"vehicleID: {log_dict.get('vehicleID')}",  # 车id
-
-        f"directSwitch: {log_dict.get('basControl').get('directSwitch')}",
-        f"eStop: {log_dict.get('basControl').get('eStop')}",
-        f"gearControl: {log_dict.get('basControl').get('gearControl')}",
-        f"hazardLight: {log_dict.get('basControl').get('hazardLight')}",
-        f"keyStatus: {log_dict.get('basControl').get('keyStatus')}",
-        f"parkControl: {log_dict.get('basControl').get('parkControl')}",
-        f"silencedAlarm: {log_dict.get('basControl').get('silencedAlarm')}",
-        f"travelLight: {log_dict.get('basControl').get('travelLight')}",
-        f"travelMode: {log_dict.get('basControl').get('travelMode')}",
-        f"vehicleHorn: {log_dict.get('basControl').get('vehicleHorn')}",
-
-        f"accPedal: {log_dict.get('driverControl').get('accPedal').replace('||', 'OR')}",
-        f"brakePedal: {log_dict.get('driverControl').get('brakePedal')}",
-        f"steeringWheel: {log_dict.get('driverControl').get('steeringWheel')}",
-        f"turnMode: {log_dict.get('driverControl').get('turnMode')}",
-        f"turnSignal: {log_dict.get('driverControl').get('turnSignal')}",
-
-        f"errAccPedal: {log_dict.get('errCode').get('errAccPedal')}",
-        f"errBasOperation: {log_dict.get('errCode').get('errBasOperation')}",
-        f"errBrakePedal: {log_dict.get('errCode').get('errBrakePedal')}",
-        f"errEndTool: {log_dict.get('errCode').get('errEndTool')}",
-        f"errHandle: {log_dict.get('errCode').get('errHandle')}",
-        f"errOther: {log_dict.get('errCode').get('errOther')}",
-        f"errSteeringWheel: {log_dict.get('errCode').get('errSteeringWheel')}",
-
-        f"baseLegControl: {log_dict.get('taskControl').get('baseLegControl')}",
-        f"baseLegSwitch: {log_dict.get('taskControl').get('baseLegSwitch')}",
-        f"bypassSwitch: {log_dict.get('taskControl').get('bypassSwitch')}",
-        f"cabLift: {log_dict.get('taskControl').get('cabLift')}",
-        f"coopSignal: {log_dict.get('taskControl').get('coopSignal')}",
-        f"enableHydraulic: {log_dict.get('taskControl').get('enableHydraulic')}",
-        f"endJoint: {log_dict.get('taskControl').get('endJoint')}",
-        f"esCabLift: {log_dict.get('taskControl').get('esCabLift')}",
-        f"suckerSelect: {log_dict.get('taskControl').get('suckerSelect')}",
-        f"taskJoint_1: {log_dict.get('taskControl').get('taskJoint_1')}",
-        f"taskJoint_2: {log_dict.get('taskControl').get('taskJoint_2')}",
-        f"taskJoint_3: {log_dict.get('taskControl').get('taskJoint_3')}",
-        f"toolControl: {log_dict.get('taskControl').get('toolControl')}",
-        f"workLight: {log_dict.get('taskControl').get('workLight')}",
-
-    ]
-
-    # --- check ---
-    log_key = '-'.join(log_list[1:])
-    if LocalClass.last_log_key and LocalClass.last_log_key == log_key:
-        # methods.debug_log(f"MessageListener24", f"#86: {LocalClass.last_log_key == log_key}")
-        return
-
-    # --- update --
-    LocalClass.last_log_key = log_key
-
-    # --- save ---
-    # methods.debug_log(f"MessageListenerC001|158", f"#log_list: {log_list}")
-    log_file_path = os.path.join(Global.save_dir, f'{log_uuid}.log')
-    methods.write_text(log_file_path, ' | '.join(log_list) + '\n', 'a')
-
-
-def subscribe_c001():
-    """"""
-    client = Global.emqx_factory.Client(host=Global.emqx_host, port=Global.emqx_port)
-    client.start_subscribe_loop(
-        decorate_method=method_c001,
-        subscribe_topic='Cockpit/CanBus/CanId001/Cop001'
-    )

+ 0 - 121
sri-server-bg02/lib/MessageListenerV001.py

@@ -1,121 +0,0 @@
-from hub import methods, Global
-
-import threading
-import traceback
-import time
-import json
-import os
-
-from lib.UserWorkRecord import UserWorkRecord
-
-
-
-class LocalClass(object):
-    last_log_key = str()
-
-
-def method_v001(client, userdata, message):
-    """消息处理方法"""
-    # --- log ---
-    # methods.debug_log(f"method_v001|26", f"#message.payload: {message.payload}")
-    # return
-
-    # --- check ---
-    # if not methods.is_dir(Global.save_dir):
-    #     out = methods.run_command(f'mkdir -p {Global.save_dir}', callback=True)
-    #     methods.debug_log('MessageListener46', f"#out: {out}")
-
-    # --- check ---
-    try:
-        log_dict = json.loads(message.payload)
-        log_time = int(log_dict.get('timestamp')) / 1000
-        user_uuid = log_dict.get('userID')
-        vehicle_id = log_dict.get('VehicleID')
-        cockpit_id = log_dict.get('cockpitID')
-    except Exception as exception:
-        methods.debug_log("method_v001|41", f"#message.payload: {message.payload}")
-        methods.debug_log("method_v001|41", f"#exception: {exception.__class__.__name__}")
-        methods.debug_log("method_v001|41", f"#traceback: {traceback.format_exc()}")
-        return
-
-    # --- check ---
-    log_uuid = UserWorkRecord.get_log_uuid(user_uuid, log_time, vehicle_id, cockpit_id)
-    if not log_uuid:
-        methods.debug_log(f"MessageListenerV001|error50", f"user_uuid: {user_uuid}, log_time: {log_time}")
-        return
-
-    # --- fill log_list ---
-    log_list = [
-
-        f"timestamp: {methods.ts_to_string(log_time)}",  # 时间
-        f"topic: Vehicle/ControlVehicle/Veh001",  # 话题
-        # f"userID: {log_dict.get('userID')}",  # 用户id
-        # f"VehicleID: {log_dict.get('VehicleID')}",  # 车id
-        # f"cockpitID: {log_dict.get('cockpitID')}",  # 舱id
-
-        f"directSwitch: {log_dict.get('baseControl')[0].get('directSwitch')}",  # 前后切换
-        f"eStop: {log_dict.get('baseControl')[0].get('eStop')}",  # 急停开关
-        f"gearCaontrol: {log_dict.get('baseControl')[0].get('gearCaontrol')}",  # 车辆档位控制
-        f"hazardLight: {log_dict.get('baseControl')[0].get('hazardLight')}",  # 双闪灯
-        f"keyStatus: {log_dict.get('baseControl')[0].get('keyStatus')}",  # 钥匙状态
-        f"parkControl: {log_dict.get('baseControl')[0].get('parkControl')}",  # 驻车控制
-        f"silencedAlarm: {log_dict.get('baseControl')[0].get('silencedAlarm')}",  # 消报警音按钮
-        f"travelLight: {log_dict.get('baseControl')[0].get('travelLight')}",  # 行驶灯光
-        f"travelMode: {log_dict.get('baseControl')[0].get('travelMode')}",  # 驾驶模式
-        f"vehicleHorn: {log_dict.get('baseControl')[0].get('vehicleHorn')}",  # 喇叭
-
-        f"accPedalF: {log_dict.get('driveControl')[0].get('accPedal')[0].get('accPedalF')}",  # 油门踏板.手油门
-        f"accPedalH: {log_dict.get('driveControl')[0].get('accPedal')[0].get('accPedalH')}",  # 油门踏板.脚油门
-
-        f"accPedalH: {log_dict.get('driveControl')[0].get('brakePedal')}",  # 刹车踏板
-        f"steeringWheel: {log_dict.get('driveControl')[0].get('steeringWheel')}",  # 方向盘转速
-        f"turnMode: {log_dict.get('driveControl')[0].get('turnMode')}",  # 转向模式
-        f"turnSignal: {log_dict.get('driveControl')[0].get('turnSignal')}",  # 转向灯
-
-        f"errAccPedal: {log_dict.get('errCode')[0].get('errAccPedal')}",  # 油门信号故障
-        f"errBasOperation: {log_dict.get('errCode')[0].get('errBasOperation')}",  # 基本操作故障
-        f"errBrakePedal: {log_dict.get('errCode')[0].get('errBrakePedal')}",  # 刹车信号故障
-        f"errEndTool: {log_dict.get('errCode')[0].get('errEndTool')}",  # 末端工具控制故障
-        f"errHandle: {log_dict.get('errCode')[0].get('errHandle')}",  # 手柄信号故障
-        f"errOther: {log_dict.get('errCode')[0].get('errOther')}",  # 其他故障
-        f"errSteeringWheel: {log_dict.get('errCode')[0].get('errSteeringWheel')}",  # 转向故障
-
-        f"baseLegControl: {log_dict.get('taskControl')[0].get('baseLegControl')}",  # 支腿动作控制
-        f"baseLegSwitch: {log_dict.get('taskControl')[0].get('baseLegSwitch')}",  # 支腿选择开关
-        f"bypassSwitch: {log_dict.get('taskControl')[0].get('bypassSwitch')}",  # 旁通开关
-        f"cabLift: {log_dict.get('taskControl')[0].get('cabLift')}",  # 驾驶室升降机构
-        f"coopSignal: {log_dict.get('taskControl')[0].get('coopSignal')}",  # 协同作业信号
-        f"enableHydraulic: {log_dict.get('taskControl')[0].get('enableHydraulic')}",  # 液压使能开关
-        f"endJoint: {log_dict.get('taskControl')[0].get('endJoint')}",  # 末端关节控制
-        f"esCabLift: {log_dict.get('taskControl')[0].get('esCabLift')}",  # 驾驶室应急下降开关
-        f"suckerSelect: {log_dict.get('taskControl')[0].get('suckerSelect')}",  # 吸盘选择开关
-        f"taskJoint_1: {log_dict.get('taskControl')[0].get('taskJoint_1')}",  # 第一个作业关节控制
-        f"taskJoint_2: {log_dict.get('taskControl')[0].get('taskJoint_2')}",  # 第二个作业关节控制
-        f"taskJoint_3: {log_dict.get('taskControl')[0].get('taskJoint_3')}",  # 第三个作业关节控制
-        f"toolControl: {log_dict.get('taskControl')[0].get('toolControl')}",  # 末端工具控制
-        f"workLight: {log_dict.get('taskControl')[0].get('workLight')}",  # 工作灯
-
-    ]
-
-    # --- check ---
-    log_key = '-'.join(log_list[1:])
-    if LocalClass.last_log_key and LocalClass.last_log_key == log_key:
-        # methods.debug_log(f"MessageListener24", f"#86: {LocalClass.last_log_key == log_key}")
-        return
-
-    # --- update --
-    LocalClass.last_log_key = log_key
-
-    # --- save ---
-    # methods.debug_log(f"MessageListenerV001|113", f"#log_list: {log_list}")
-    log_file_path = os.path.join(Global.save_dir, f'{log_uuid}.log')
-    methods.write_text(log_file_path, ' | '.join(log_list) + '\n', 'a')
-
-
-def subscribe_v001():
-    """"""
-    client = Global.emqx_factory.Client(host=Global.emqx_host, port=Global.emqx_port)
-    client.start_subscribe_loop(
-        decorate_method=method_v001,
-        subscribe_topic='Vehicle/ControlVehicle/Veh001'
-    )

+ 259 - 0
sri-server-bg02/lib/TopicListener.py

@@ -0,0 +1,259 @@
+from hub import methods, Global
+
+import threading
+import traceback
+import time
+import json
+import os
+
+from lib.UserWorkRecord import UserWorkRecord
+
+
+class TopicListener:
+    """
+    """
+    last_log_key = str()
+
+    def __init__(self, subscribe_topic, method_name):
+        client = Global.emqx_factory.Client(host=Global.emqx_host, port=Global.emqx_port)
+        client.start_subscribe_loop(
+            decorate_method=getattr(self, method_name, None),
+            subscribe_topic=subscribe_topic
+        )
+
+    def method_c001(self, client, userdata, message):
+        """消息处理方法"""
+        """
+        {
+            'basControl': {
+                'directSwitch': 1,
+                'eStop': 0,
+                'gearControl': 0,
+                'hazardLight': 0,
+                'keyStatus': 0,
+                'parkControl': 0,
+                'silencedAlarm': 0,
+                'travelLight': 2,
+                'travelMode': 0,
+                'vehicleHorn': 0
+            },
+            'driverControl': {
+                'accPedal': '0 AND 0 || 0 AND -1',
+                'brakePedal': '2 AND 2',
+                'steeringWheel': '1 AND 0',
+                'turnMode': 0,
+                'turnSignal': 0
+            },
+            'errCode': {
+                'errAccPedal': 0,
+                'errBasOperation': '',
+                'errBrakePedal': 0,
+                'errEndTool': 0,
+                'errHandle': 0,
+                'errOther': '',
+                'errSteeringWheel': 0
+            },
+            'taskControl': {
+                'baseLegControl': '103 AND 24',
+                'baseLegSwitch': 0,
+                'bypassSwitch': 0,
+                'cabLift': 0,
+                'coopSignal': 3,
+                'enableHydraulic': 1,
+                'endJoint': '1 AND 0',
+                'esCabLift': 0,
+                'suckerSelect': 0,
+                'taskJoint_1': '5 AND 0',
+                'taskJoint_2': '0 AND 0',
+                'taskJoint_3': '0 AND 0',
+                'toolControl': '0 AND 0',
+                'workLight': 0
+            },
+            'timeStamp': 576301601,
+            'userID': 'Ego',
+            'cockpitID': 'Cop001',
+            'vehicleID': '0538'
+        }
+        """
+        # --- check ---
+        # methods.debug_log(f"method_c001|75", f"#message.payload: {message.payload}")
+        try:
+            log_dict = json.loads(message.payload)
+        except Exception as exception:
+            methods.debug_log("method_c001|79", f"#message.payload: {message.payload}")
+            methods.debug_log("method_c001|79", f"#exception: {exception.__class__.__name__}")
+            methods.debug_log("method_c001|79", f"#traceback: {traceback.format_exc()}")
+            return
+
+        # --- check ---
+        # log_dict = json.loads(message.payload)
+        log_time = int(log_dict.get('timeStamp')) / 1000
+        user_uuid = log_dict.get('userID')
+        vehicle_id = log_dict.get('vehicleID')
+        cockpit_id = log_dict.get('cockpitID')
+        log_uuid = UserWorkRecord.get_log_uuid(user_uuid, log_time, vehicle_id, cockpit_id)
+        if not log_uuid:
+            methods.debug_log(f"MessageListenerC001|error92", f"user_uuid: {user_uuid}, log_time: {log_time}")
+            return
+
+        # --- fill log_list ---
+        log_list = [
+
+            f"timeStamp: {methods.ts_to_string(log_time)}",  # 时间
+            f"topic: Cockpit/CanBus/CanId001/Cop001",  # 话题
+            # f"userID: {log_dict.get('userID')}",  # 用户id
+            # f"cockpitID: {log_dict.get('cockpitID')}",  # 舱id
+            # f"vehicleID: {log_dict.get('vehicleID')}",  # 车id
+
+            f"directSwitch: {log_dict.get('basControl').get('directSwitch')}",
+            f"eStop: {log_dict.get('basControl').get('eStop')}",
+            f"gearControl: {log_dict.get('basControl').get('gearControl')}",
+            f"hazardLight: {log_dict.get('basControl').get('hazardLight')}",
+            f"keyStatus: {log_dict.get('basControl').get('keyStatus')}",
+            f"parkControl: {log_dict.get('basControl').get('parkControl')}",
+            f"silencedAlarm: {log_dict.get('basControl').get('silencedAlarm')}",
+            f"travelLight: {log_dict.get('basControl').get('travelLight')}",
+            f"travelMode: {log_dict.get('basControl').get('travelMode')}",
+            f"vehicleHorn: {log_dict.get('basControl').get('vehicleHorn')}",
+
+            f"accPedal: {log_dict.get('driverControl').get('accPedal').replace('||', 'OR')}",
+            f"brakePedal: {log_dict.get('driverControl').get('brakePedal')}",
+            f"steeringWheel: {log_dict.get('driverControl').get('steeringWheel')}",
+            f"turnMode: {log_dict.get('driverControl').get('turnMode')}",
+            f"turnSignal: {log_dict.get('driverControl').get('turnSignal')}",
+
+            f"errAccPedal: {log_dict.get('errCode').get('errAccPedal')}",
+            f"errBasOperation: {log_dict.get('errCode').get('errBasOperation')}",
+            f"errBrakePedal: {log_dict.get('errCode').get('errBrakePedal')}",
+            f"errEndTool: {log_dict.get('errCode').get('errEndTool')}",
+            f"errHandle: {log_dict.get('errCode').get('errHandle')}",
+            f"errOther: {log_dict.get('errCode').get('errOther')}",
+            f"errSteeringWheel: {log_dict.get('errCode').get('errSteeringWheel')}",
+
+            f"baseLegControl: {log_dict.get('taskControl').get('baseLegControl')}",
+            f"baseLegSwitch: {log_dict.get('taskControl').get('baseLegSwitch')}",
+            f"bypassSwitch: {log_dict.get('taskControl').get('bypassSwitch')}",
+            f"cabLift: {log_dict.get('taskControl').get('cabLift')}",
+            f"coopSignal: {log_dict.get('taskControl').get('coopSignal')}",
+            f"enableHydraulic: {log_dict.get('taskControl').get('enableHydraulic')}",
+            f"endJoint: {log_dict.get('taskControl').get('endJoint')}",
+            f"esCabLift: {log_dict.get('taskControl').get('esCabLift')}",
+            f"suckerSelect: {log_dict.get('taskControl').get('suckerSelect')}",
+            f"taskJoint_1: {log_dict.get('taskControl').get('taskJoint_1')}",
+            f"taskJoint_2: {log_dict.get('taskControl').get('taskJoint_2')}",
+            f"taskJoint_3: {log_dict.get('taskControl').get('taskJoint_3')}",
+            f"toolControl: {log_dict.get('taskControl').get('toolControl')}",
+            f"workLight: {log_dict.get('taskControl').get('workLight')}",
+
+        ]
+
+        # --- check ---
+        log_key = '-'.join(log_list[1:])
+        if self.last_log_key and self.last_log_key == log_key:
+            # methods.debug_log(f"MessageListener24", f"#86: {self.last_log_key == log_key}")
+            return
+
+        # --- update --
+        self.last_log_key = log_key
+
+        # --- save ---
+        # methods.debug_log(f"MessageListenerC001|158", f"#log_list: {log_list}")
+        log_file_path = os.path.join(Global.save_dir, f'{log_uuid}.log')
+        methods.write_text(log_file_path, ' | '.join(log_list) + '\n', 'a')
+
+    def method_v001(self, client, userdata, message):
+        """消息处理方法"""
+        # --- log ---
+        # methods.debug_log(f"method_v001|26", f"#message.payload: {message.payload}")
+        # return
+
+        # --- check ---
+        # if not methods.is_dir(Global.save_dir):
+        #     out = methods.run_command(f'mkdir -p {Global.save_dir}', callback=True)
+        #     methods.debug_log('MessageListener46', f"#out: {out}")
+
+        # --- check ---
+        try:
+            log_dict = json.loads(message.payload)
+            log_time = int(log_dict.get('timestamp')) / 1000
+            user_uuid = log_dict.get('userID')
+            vehicle_id = log_dict.get('VehicleID')
+            cockpit_id = log_dict.get('cockpitID')
+        except Exception as exception:
+            methods.debug_log("method_v001|41", f"#message.payload: {message.payload}")
+            methods.debug_log("method_v001|41", f"#exception: {exception.__class__.__name__}")
+            methods.debug_log("method_v001|41", f"#traceback: {traceback.format_exc()}")
+            return
+
+        # --- check ---
+        log_uuid = UserWorkRecord.get_log_uuid(user_uuid, log_time, vehicle_id, cockpit_id)
+        if not log_uuid:
+            methods.debug_log(f"MessageListenerV001|error50", f"user_uuid: {user_uuid}, log_time: {log_time}")
+            return
+
+        # --- fill log_list ---
+        log_list = [
+
+            f"timestamp: {methods.ts_to_string(log_time)}",  # 时间
+            f"topic: Vehicle/ControlVehicle/Veh001",  # 话题
+            # f"userID: {log_dict.get('userID')}",  # 用户id
+            # f"VehicleID: {log_dict.get('VehicleID')}",  # 车id
+            # f"cockpitID: {log_dict.get('cockpitID')}",  # 舱id
+
+            f"directSwitch: {log_dict.get('baseControl')[0].get('directSwitch')}",  # 前后切换
+            f"eStop: {log_dict.get('baseControl')[0].get('eStop')}",  # 急停开关
+            f"gearCaontrol: {log_dict.get('baseControl')[0].get('gearCaontrol')}",  # 车辆档位控制
+            f"hazardLight: {log_dict.get('baseControl')[0].get('hazardLight')}",  # 双闪灯
+            f"keyStatus: {log_dict.get('baseControl')[0].get('keyStatus')}",  # 钥匙状态
+            f"parkControl: {log_dict.get('baseControl')[0].get('parkControl')}",  # 驻车控制
+            f"silencedAlarm: {log_dict.get('baseControl')[0].get('silencedAlarm')}",  # 消报警音按钮
+            f"travelLight: {log_dict.get('baseControl')[0].get('travelLight')}",  # 行驶灯光
+            f"travelMode: {log_dict.get('baseControl')[0].get('travelMode')}",  # 驾驶模式
+            f"vehicleHorn: {log_dict.get('baseControl')[0].get('vehicleHorn')}",  # 喇叭
+
+            f"accPedalF: {log_dict.get('driveControl')[0].get('accPedal')[0].get('accPedalF')}",  # 油门踏板.手油门
+            f"accPedalH: {log_dict.get('driveControl')[0].get('accPedal')[0].get('accPedalH')}",  # 油门踏板.脚油门
+
+            f"accPedalH: {log_dict.get('driveControl')[0].get('brakePedal')}",  # 刹车踏板
+            f"steeringWheel: {log_dict.get('driveControl')[0].get('steeringWheel')}",  # 方向盘转速
+            f"turnMode: {log_dict.get('driveControl')[0].get('turnMode')}",  # 转向模式
+            f"turnSignal: {log_dict.get('driveControl')[0].get('turnSignal')}",  # 转向灯
+
+            f"errAccPedal: {log_dict.get('errCode')[0].get('errAccPedal')}",  # 油门信号故障
+            f"errBasOperation: {log_dict.get('errCode')[0].get('errBasOperation')}",  # 基本操作故障
+            f"errBrakePedal: {log_dict.get('errCode')[0].get('errBrakePedal')}",  # 刹车信号故障
+            f"errEndTool: {log_dict.get('errCode')[0].get('errEndTool')}",  # 末端工具控制故障
+            f"errHandle: {log_dict.get('errCode')[0].get('errHandle')}",  # 手柄信号故障
+            f"errOther: {log_dict.get('errCode')[0].get('errOther')}",  # 其他故障
+            f"errSteeringWheel: {log_dict.get('errCode')[0].get('errSteeringWheel')}",  # 转向故障
+
+            f"baseLegControl: {log_dict.get('taskControl')[0].get('baseLegControl')}",  # 支腿动作控制
+            f"baseLegSwitch: {log_dict.get('taskControl')[0].get('baseLegSwitch')}",  # 支腿选择开关
+            f"bypassSwitch: {log_dict.get('taskControl')[0].get('bypassSwitch')}",  # 旁通开关
+            f"cabLift: {log_dict.get('taskControl')[0].get('cabLift')}",  # 驾驶室升降机构
+            f"coopSignal: {log_dict.get('taskControl')[0].get('coopSignal')}",  # 协同作业信号
+            f"enableHydraulic: {log_dict.get('taskControl')[0].get('enableHydraulic')}",  # 液压使能开关
+            f"endJoint: {log_dict.get('taskControl')[0].get('endJoint')}",  # 末端关节控制
+            f"esCabLift: {log_dict.get('taskControl')[0].get('esCabLift')}",  # 驾驶室应急下降开关
+            f"suckerSelect: {log_dict.get('taskControl')[0].get('suckerSelect')}",  # 吸盘选择开关
+            f"taskJoint_1: {log_dict.get('taskControl')[0].get('taskJoint_1')}",  # 第一个作业关节控制
+            f"taskJoint_2: {log_dict.get('taskControl')[0].get('taskJoint_2')}",  # 第二个作业关节控制
+            f"taskJoint_3: {log_dict.get('taskControl')[0].get('taskJoint_3')}",  # 第三个作业关节控制
+            f"toolControl: {log_dict.get('taskControl')[0].get('toolControl')}",  # 末端工具控制
+            f"workLight: {log_dict.get('taskControl')[0].get('workLight')}",  # 工作灯
+
+        ]
+
+        # --- check ---
+        log_key = '-'.join(log_list[1:])
+        if self.last_log_key and self.last_log_key == log_key:
+            # methods.debug_log(f"MessageListener24", f"#86: {self.last_log_key == log_key}")
+            return
+
+        # --- update --
+        self.last_log_key = log_key
+
+        # --- save ---
+        # methods.debug_log(f"MessageListenerV001|113", f"#log_list: {log_list}")
+        log_file_path = os.path.join(Global.save_dir, f'{log_uuid}.log')
+        methods.write_text(log_file_path, ' | '.join(log_list) + '\n', 'a')

+ 1 - 1
sri-server-bg03/lib/Connection_e1.py

@@ -282,7 +282,7 @@ class SRIConnection(asyncio.Protocol):
             ret = False
         elif not check_password_hash(user.get('password'), object.password):
             ret = False
-        elif int(user.get('state')) == 1:
+        elif user.get('state') and int(user.get('state')) == 1:
             ret = False
         else:
             name = user.get('name')