提交 96a6f57e authored 作者: 陈泽健's avatar 陈泽健

Merge remote-tracking branch 'origin/develop' into develop

...@@ -7,6 +7,52 @@ import threading ...@@ -7,6 +7,52 @@ import threading
import time import time
from datetime import datetime from datetime import datetime
from queue import Queue from queue import Queue
import signal
# ============================================================================
# ==================== 配置区域 (修改这里即可自定义行为) ====================
# ============================================================================
# 1. CSV配置文件路径列表 (支持多个文件,同时加载)
# 注意:路径可以是相对于当前脚本的路径,也可以是绝对路径
CSV_FILES = [
'../../TestData/ReservationSystem_DoorScreen/MQTT心跳上报_100条.csv',
#'../TestData/ReservationSystem_DoorScreen/MQTT信息上报_100条.csv',
'../../TestData/ReservationSystem_DoorScreen/MQTT设备信息上报_100条.csv', # 新增:设备信息上报
]
# 2. MQTT服务器连接配置
MQTT_CONFIG = {
'broker_address': '192.168.5.50', # MQTT服务器地址
'port': 1883, # 端口号
'username': 'mqtt@cmdb', # 用户名
'password': 'mqtt@webpassw0RD', # 密码
}
# 3. 线程和发送控制
THREAD_CONFIG = {
'max_threads': 100, # 最大线程数
'send_interval': 1, # 每条消息发送间隔(秒)
'startup_delay': 0.05, # 线程启动间隔(秒),避免同时启动
}
# 4. 日志配置
LOG_CONFIG = {
'log_dir': '/var/log/scripts', # Linux日志目录
'fallback_log_dir': 'logs', # Windows备用日志目录
'log_level': logging.INFO, # 日志级别: DEBUG/INFO/WARNING/ERROR
'reconnect_log_interval': 10, # 每N次重连打印一次日志
}
# 5. 优雅退出配置
SHUTDOWN_CONFIG = {
'thread_join_timeout': 10, # 等待线程结束的最大时间(秒)
'error_wait_time': 5, # 发生错误后等待时间(秒)
}
# ============================================================================
# ==================== 以下为代码实现区域 (无需修改) ========================
# ============================================================================
# 获取当前脚本的绝对路径 # 获取当前脚本的绝对路径
current_dir = os.path.dirname(os.path.abspath(__file__)) current_dir = os.path.dirname(os.path.abspath(__file__))
...@@ -22,17 +68,39 @@ except ModuleNotFoundError as e: ...@@ -22,17 +68,39 @@ except ModuleNotFoundError as e:
print("尝试使用绝对路径导入") print("尝试使用绝对路径导入")
from 预定系统.Base.Mqtt_Send import * from 预定系统.Base.Mqtt_Send import *
# 配置日志 # ========== 日志配置 ==========
# 创建日志目录(遵循项目规范:/var/log/scripts/)
LOG_DIR = LOG_CONFIG['log_dir']
if not os.path.exists(LOG_DIR):
try:
os.makedirs(LOG_DIR, exist_ok=True)
print(f"已创建日志目录: {LOG_DIR}")
except PermissionError:
# Windows环境下使用当前目录作为备选
LOG_DIR = os.path.join(current_dir, LOG_CONFIG['fallback_log_dir'])
os.makedirs(LOG_DIR, exist_ok=True)
print(f"权限不足,使用备用日志目录: {LOG_DIR}")
# 生成日志文件名(包含时间戳)
log_filename = f"mqtt_android_info_{datetime.now().strftime('%Y%m%d_%H%M%S')}.log"
log_filepath = os.path.join(LOG_DIR, log_filename)
# 配置双通道日志输出(控制台 + 文件)
logging.basicConfig( logging.basicConfig(
level=logging.INFO, level=LOG_CONFIG['log_level'],
format='%(asctime)s - %(levelname)s - %(message)s' format='%(asctime)s - %(levelname)s - [%(threadName)s] - %(message)s',
handlers=[
logging.StreamHandler(), # 控制台输出
logging.FileHandler(log_filepath, encoding='utf-8') # 文件输出
]
) )
logger = logging.getLogger(__name__)
logger.info(f"日志文件路径: {log_filepath}")
# 获取当前脚本所在的目录 # 获取当前脚本所在的目录
current_dir = os.path.dirname(os.path.abspath(__file__)) current_dir = os.path.dirname(os.path.abspath(__file__))
print("当前脚本所在的目录:", current_dir) logger.info(f"当前脚本所在的目录: {current_dir}")
# 构建CSV文件的绝对路径
csv_file_path = os.path.join(current_dir, '../TestData/ReservationSystem_DoorScreen/MQTT心跳上报_100条.csv')
class StableMQTTClient: class StableMQTTClient:
...@@ -61,6 +129,18 @@ class StableMQTTClient: ...@@ -61,6 +129,18 @@ class StableMQTTClient:
# 初始化MQTT客户端对象(将在connect方法中实例化) # 初始化MQTT客户端对象(将在connect方法中实例化)
self.client = None self.client = None
# 连接状态标记:用于避免重复打印连接成功日志
self.is_connected = False
# 重连计数器:统计重连次数
self.reconnect_count = 0
# 最后重连日志时间:用于控制重连日志频率
self.last_reconnect_log_time = 0
# RECONNECT_LOG_INTERVAL: 每N次重连才打印一次日志(避免日志刷屏)
self.RECONNECT_LOG_INTERVAL = LOG_CONFIG['reconnect_log_interval']
# 自动尝试连接代理服务器 # 自动尝试连接代理服务器
self.connect() self.connect()
...@@ -87,17 +167,32 @@ class StableMQTTClient: ...@@ -87,17 +167,32 @@ class StableMQTTClient:
self.username, self.password, self.client_id) self.username, self.password, self.client_id)
self.client.set_message_type("json") self.client.set_message_type("json")
self.client.connect() self.client.connect()
logging.info(f"连接成功,Client ID: {self.client_id}")
# 只在首次连接或重连成功后打印日志
if not self.is_connected:
logger.info(f"✅ 连接成功,Client ID: {self.client_id}")
self.is_connected = True
else:
self.reconnect_count += 1
current_time = time.time()
# 每隔N次重连才打印一次日志,避免日志刷屏
if self.reconnect_count % self.RECONNECT_LOG_INTERVAL == 1 or \
(current_time - self.last_reconnect_log_time) > 60:
logger.info(f"🔄 重连成功 (第{self.reconnect_count}次),Client ID: {self.client_id}")
self.last_reconnect_log_time = current_time
return True return True
except Exception as e: except Exception as e:
# 最后一次尝试失败时直接抛出异常 # 最后一次尝试失败时直接抛出异常
if attempt == max_retries - 1: if attempt == max_retries - 1:
logging.error(f"连接失败 (尝试 {attempt + 1}/{max_retries}): {str(e)}") logger.error(f"❌ 连接失败 (尝试 {attempt + 1}/{max_retries}): {str(e)}")
self.is_connected = False
raise raise
# 非最后一次失败时等待递增时间后重试 # 非最后一次失败时等待递增时间后重试
wait_time = (attempt + 1) * 5 wait_time = (attempt + 1) * 5
logging.warning(f"连接失败,{wait_time}秒后重试... ({attempt + 1}/{max_retries})") logger.warning(f"⚠️ 连接失败,{wait_time}秒后重试... ({attempt + 1}/{max_retries})")
time.sleep(wait_time) time.sleep(wait_time)
def publish(self, topic, message): def publish(self, topic, message):
...@@ -118,13 +213,16 @@ class StableMQTTClient: ...@@ -118,13 +213,16 @@ class StableMQTTClient:
self.client.publish(topic, message) self.client.publish(topic, message)
except Exception as e: except Exception as e:
# 发布失败时记录错误并尝试重新连接后重试 # 发布失败时记录错误并尝试重新连接后重试
logging.error(f"发布消息失败: {str(e)},尝试重新连接...") logger.error(f"❌ 发布消息失败: {str(e)},尝试重新连接...")
self.connect() self.connect()
self.client.publish(topic, message) # 重试一次 try:
self.client.publish(topic, message) # 重试一次
except Exception as retry_error:
logger.error(f"❌ 重试发布仍然失败: {str(retry_error)}")
# 工作线程函数 # 工作线程函数
def worker(mqtt_client, config_queue, interval): def worker(mqtt_client, config_queue, interval, stop_event):
"""MQTT消息发布工作线程 """MQTT消息发布工作线程
持续从配置队列中获取配置信息,构建MQTT消息并发布到指定主题。 持续从配置队列中获取配置信息,构建MQTT消息并发布到指定主题。
...@@ -134,49 +232,116 @@ def worker(mqtt_client, config_queue, interval): ...@@ -134,49 +232,116 @@ def worker(mqtt_client, config_queue, interval):
mqtt_client: 已连接的MQTT客户端实例,用于发布消息 mqtt_client: 已连接的MQTT客户端实例,用于发布消息
config_queue: 包含配置信息的队列,每个配置项应包含topic等必要字段 config_queue: 包含配置信息的队列,每个配置项应包含topic等必要字段
interval: 每次消息发布后的间隔时间(秒) interval: 每次消息发布后的间隔时间(秒)
stop_event: 停止事件标志,用于优雅退出线程
""" """
while True: thread_name = threading.current_thread().name
# 从队列获取配置信息 message_count = 0
config = config_queue.get()
while not stop_event.is_set():
try: try:
# 从队列获取配置信息(带超时,便于响应停止信号)
try:
config = config_queue.get(timeout=1)
except:
continue
# 构建并发布MQTT消息 # 构建并发布MQTT消息
topic = config["topic"] topic = config["topic"]
current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S") current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
message = Mqtt.build_message(config, current_time, topic) message = Mqtt.build_message(config, current_time, topic)
mqtt_client.publish(topic, message) mqtt_client.publish(topic, message)
message_count += 1
# 每发送100条消息打印一次统计信息
if message_count % 100 == 0:
logger.debug(f"📊 [{thread_name}] 已发送 {message_count} 条消息")
time.sleep(interval) time.sleep(interval)
except Exception as e: except Exception as e:
# 异常处理:记录错误日志并短暂等待 # 异常处理:记录错误日志并短暂等待
logging.error(f"线程 {threading.current_thread().name} 发送消息失败: {e}") logger.error(f"❌ 线程 {thread_name} 发送消息失败: {e}")
time.sleep(5) # 出错后等待5秒 time.sleep(SHUTDOWN_CONFIG['error_wait_time']) # 出错后等待
finally: finally:
# 标记队列任务完成 # 标记队列任务完成
config_queue.task_done() try:
config_queue.task_done()
except:
pass
logger.info(f"🛑 [{thread_name}] 线程已停止,共发送 {message_count} 条消息")
# 全局停止事件
stop_event = threading.Event()
def signal_handler(sig, frame):
"""处理Ctrl+C信号,优雅退出"""
logger.info("\n🛑 接收到中断信号,正在优雅退出...")
stop_event.set()
if __name__ == "__main__": if __name__ == "__main__":
# 读取配置文件 # 注册信号处理器
configs = Mqtt.read_config_from_csv(csv_file_path) signal.signal(signal.SIGINT, signal_handler)
broker_address = "192.168.5.235" signal.signal(signal.SIGTERM, signal_handler)
username = "mqtt@cmdb"
password = "mqtt@webpassw0RD" # 合并所有CSV配置
port = 1883 configs = []
num_threads = 100 # 线程数量 for csv_file_relative_path in CSV_FILES:
csv_file_path = os.path.join(current_dir, csv_file_relative_path)
try:
file_configs = Mqtt.read_config_from_csv(csv_file_path)
configs.extend(file_configs)
logger.info(f"📄 从 {csv_file_path} 读取了 {len(file_configs)} 条配置")
except Exception as e:
logger.error(f"❌ 读取 {csv_file_path} 失败: {e}")
if not configs:
logger.error("❌ 未读取到任何配置,程序退出")
sys.exit(1)
logger.info(f"📊 总共加载 {len(configs)} 条配置")
# 统计不同类型配置数量
topic_stats = {}
for config in configs:
topic = config.get("topic", "unknown")
topic_stats[topic] = topic_stats.get(topic, 0) + 1
logger.info(f"📈 配置分布: {topic_stats}")
num_threads = min(len(configs), THREAD_CONFIG['max_threads']) # 线程数不超过配置数
# 创建配置队列 # 创建配置队列
config_queue = Queue() config_queue = Queue()
# 创建稳定的MQTT客户端列表 # 创建稳定的MQTT客户端列表
mqtt_clients = [] mqtt_clients = []
failed_clients = 0
for i, config in enumerate(configs): for i, config in enumerate(configs):
client_id = config.get("clientId", f"python_client_{i}") client_id = config.get("clientId", f"python_client_{i}")
try: try:
mqtt_client = StableMQTTClient(broker_address, port, username, password, client_id) mqtt_client = StableMQTTClient(
MQTT_CONFIG['broker_address'],
MQTT_CONFIG['port'],
MQTT_CONFIG['username'],
MQTT_CONFIG['password'],
client_id
)
mqtt_clients.append(mqtt_client) mqtt_clients.append(mqtt_client)
except Exception as e: except Exception as e:
logging.error(f"创建客户端 {client_id} 失败: {str(e)}") logger.error(f"❌ 创建客户端 {client_id} 失败: {str(e)}")
failed_clients += 1
if failed_clients > 0:
logger.warning(f"⚠️ 共有 {failed_clients} 个客户端创建失败")
if not mqtt_clients:
logger.error("❌ 没有可用的MQTT客户端,程序退出")
sys.exit(1)
try: try:
# 创建工作线程 # 创建工作线程
...@@ -184,39 +349,64 @@ if __name__ == "__main__": ...@@ -184,39 +349,64 @@ if __name__ == "__main__":
for i in range(num_threads): for i in range(num_threads):
t = threading.Thread( t = threading.Thread(
target=worker, target=worker,
args=(mqtt_clients[i % len(mqtt_clients)], config_queue, 1), args=(
mqtt_clients[i % len(mqtt_clients)],
config_queue,
THREAD_CONFIG['send_interval'],
stop_event
),
name=f"Worker-{i + 1}", name=f"Worker-{i + 1}",
daemon=True daemon=False # 改为非守护线程,便于优雅退出
) )
t.start() t.start()
threads.append(t) threads.append(t)
time.sleep(0.1) # 避免同时启动太多线程 time.sleep(THREAD_CONFIG['startup_delay']) # 线程启动间隔
# 主循环 - 持续运行 # 主循环 - 持续运行
logging.info("系统已启动,将持续运行...") logger.info("🚀 系统已启动,将持续运行... (按 Ctrl+C 停止)")
while True:
while not stop_event.is_set():
try: try:
# 将配置放入队列 # 将配置放入队列
for config in configs: for config in configs:
if stop_event.is_set():
break
config_queue.put(config) config_queue.put(config)
config_queue.join() # 等待所有任务完成 # 等待所有任务完成或收到停止信号
time.sleep(1) while not config_queue.empty() and not stop_event.is_set():
time.sleep(0.1)
if not stop_event.is_set():
time.sleep(1)
except KeyboardInterrupt:
logging.info("接收到中断信号,准备退出...")
break
except Exception as e: except Exception as e:
logging.error(f"主循环发生错误: {e}", exc_info=True) logger.error(f"❌ 主循环发生错误: {e}", exc_info=True)
time.sleep(5) # 出错后等待5秒 time.sleep(SHUTDOWN_CONFIG['error_wait_time']) # 出错后等待
except Exception as e: except Exception as e:
logging.error(f"发生错误: {e}", exc_info=True) logger.error(f"❌ 发生错误: {e}", exc_info=True)
finally: finally:
logging.info("正在关闭所有连接...") logger.info("🛑 正在关闭所有连接...")
# 设置停止事件
stop_event.set()
# 等待所有线程结束
for t in threads:
t.join(timeout=SHUTDOWN_CONFIG['thread_join_timeout'])
# 断开所有MQTT连接 # 断开所有MQTT连接
success_count = 0
fail_count = 0
for client in mqtt_clients: for client in mqtt_clients:
try: try:
client.client.disconnect() client.client.disconnect()
except: success_count += 1
pass except Exception as e:
fail_count += 1
logger.debug(f"断开连接失败: {str(e)}")
logger.info(f"✅ 已断开 {success_count} 个连接,{fail_count} 个失败")
logger.info(f"📝 日志文件保存在: {log_filepath}")
logger.info("👋 程序已退出")
from hytest import *
import os
import sys
import json
import logging
import threading
import time
from datetime import datetime
from queue import Queue
import signal
# ============================================================================
# ==================== 配置区域 (修改这里即可自定义行为) ====================
# ============================================================================
# 1. CSV配置文件路径列表 (支持多个文件,同时加载)
# 注意:路径可以是相对于当前脚本的路径,也可以是绝对路径
CSV_FILES = [
'../TestData/ReservationSystem_DoorScreen/MQTT心跳上报_100条.csv',
#'../TestData/ReservationSystem_DoorScreen/MQTT信息上报_100条.csv',
'../TestData/ReservationSystem_DoorScreen/MQTT设备信息上报_100条.csv', # 新增:设备信息上报
]
# 2. MQTT服务器连接配置
MQTT_CONFIG = {
'broker_address': '192.168.5.50', # MQTT服务器地址
'port': 1883, # 端口号
'username': 'mqtt@cmdb', # 用户名
'password': 'mqtt@webpassw0RD', # 密码
}
# 3. 线程和发送控制
THREAD_CONFIG = {
'max_threads': 100, # 最大线程数
'send_interval': 5, # 每条消息发送间隔(秒)
'startup_delay': 0.05, # 线程启动间隔(秒),避免同时启动
}
# 4. 日志配置
LOG_CONFIG = {
'log_dir': '/var/log/scripts', # Linux日志目录
'fallback_log_dir': 'logs', # Windows备用日志目录
'log_level': logging.INFO, # 日志级别: DEBUG/INFO/WARNING/ERROR
'reconnect_log_interval': 10, # 每N次重连打印一次日志
}
# 5. 优雅退出配置
SHUTDOWN_CONFIG = {
'thread_join_timeout': 10, # 等待线程结束的最大时间(秒)
'error_wait_time': 5, # 发生错误后等待时间(秒)
}
# ============================================================================
# ==================== 以下为代码实现区域 (无需修改) ========================
# ============================================================================
# 获取当前脚本的绝对路径
current_dir = os.path.dirname(os.path.abspath(__file__))
# 构建预定系统的绝对路径
预定系统_path = os.path.abspath(os.path.join(current_dir, '..', '..', '..'))
# 添加路径
sys.path.append(预定系统_path)
# 导入模块
try:
from 预定系统.Base.Mqtt_Send import *
except ModuleNotFoundError as e:
print(f"ModuleNotFoundError: {e}")
print("尝试使用绝对路径导入")
from 预定系统.Base.Mqtt_Send import *
# ========== 日志配置 ==========
# 创建日志目录(遵循项目规范:/var/log/scripts/)
LOG_DIR = LOG_CONFIG['log_dir']
if not os.path.exists(LOG_DIR):
try:
os.makedirs(LOG_DIR, exist_ok=True)
print(f"已创建日志目录: {LOG_DIR}")
except PermissionError:
# Windows环境下使用当前目录作为备选
LOG_DIR = os.path.join(current_dir, LOG_CONFIG['fallback_log_dir'])
os.makedirs(LOG_DIR, exist_ok=True)
print(f"权限不足,使用备用日志目录: {LOG_DIR}")
# 生成日志文件名(包含时间戳)
log_filename = f"mqtt_android_info_{datetime.now().strftime('%Y%m%d_%H%M%S')}.log"
log_filepath = os.path.join(LOG_DIR, log_filename)
# 配置双通道日志输出(控制台 + 文件)
logging.basicConfig(
level=LOG_CONFIG['log_level'],
format='%(asctime)s - %(levelname)s - [%(threadName)s] - %(message)s',
handlers=[
logging.StreamHandler(), # 控制台输出
logging.FileHandler(log_filepath, encoding='utf-8') # 文件输出
]
)
logger = logging.getLogger(__name__)
logger.info(f"日志文件路径: {log_filepath}")
# 获取当前脚本所在的目录
current_dir = os.path.dirname(os.path.abspath(__file__))
logger.info(f"当前脚本所在的目录: {current_dir}")
class StableMQTTClient:
def __init__(self, broker_address, port, username, password, client_id):
"""
初始化MQTT客户端实例
参数:
broker_address (str): MQTT代理服务器的地址/IP
port (int): MQTT代理服务器的端口号
username (str): 连接代理服务器的用户名
password (str): 连接代理服务器的密码
client_id (str): 客户端的唯一标识符
功能:
1. 保存连接参数
2. 初始化客户端对象为None
3. 自动尝试连接代理服务器
"""
# 保存MQTT连接参数
self.broker_address = broker_address # 代理服务器地址
self.port = port # 端口号
self.username = username # 用户名
self.password = password # 密码
self.client_id = client_id # 客户端ID
# 初始化MQTT客户端对象(将在connect方法中实例化)
self.client = None
# 连接状态标记:用于避免重复打印连接成功日志
self.is_connected = False
# 重连计数器:统计重连次数
self.reconnect_count = 0
# 最后重连日志时间:用于控制重连日志频率
self.last_reconnect_log_time = 0
# RECONNECT_LOG_INTERVAL: 每N次重连才打印一次日志(避免日志刷屏)
self.RECONNECT_LOG_INTERVAL = LOG_CONFIG['reconnect_log_interval']
# 自动尝试连接代理服务器
self.connect()
def connect(self):
"""
尝试连接到MQTT broker,最多重试3次。
每次连接失败后会等待递增的时间后重试(5秒、10秒、15秒)。
如果所有尝试都失败,则抛出最后的异常并记录错误日志。
连接成功时会记录成功日志并返回True。
Returns:
bool: 连接成功返回True,否则抛出异常。
Raises:
Exception: 当所有重试尝试都失败时,抛出最后一次连接尝试的异常。
"""
max_retries = 3
for attempt in range(max_retries):
try:
# 创建MQTT客户端并尝试连接
self.client = Mqtt(self.broker_address, self.port,
self.username, self.password, self.client_id)
self.client.set_message_type("json")
self.client.connect()
# 只在首次连接或重连成功后打印日志
if not self.is_connected:
logger.info(f"✅ 连接成功,Client ID: {self.client_id}")
self.is_connected = True
else:
self.reconnect_count += 1
current_time = time.time()
# 每隔N次重连才打印一次日志,避免日志刷屏
if self.reconnect_count % self.RECONNECT_LOG_INTERVAL == 1 or \
(current_time - self.last_reconnect_log_time) > 60:
logger.info(f"🔄 重连成功 (第{self.reconnect_count}次),Client ID: {self.client_id}")
self.last_reconnect_log_time = current_time
return True
except Exception as e:
# 最后一次尝试失败时直接抛出异常
if attempt == max_retries - 1:
logger.error(f"❌ 连接失败 (尝试 {attempt + 1}/{max_retries}): {str(e)}")
self.is_connected = False
raise
# 非最后一次失败时等待递增时间后重试
wait_time = (attempt + 1) * 5
logger.warning(f"⚠️ 连接失败,{wait_time}秒后重试... ({attempt + 1}/{max_retries})")
time.sleep(wait_time)
def publish(self, topic, message):
"""
发布消息到指定主题。
如果发布失败,将自动尝试重新连接并重试一次发布操作。
参数:
topic (str): 要发布消息的主题名称
message (str): 要发布的消息内容
异常:
如果重试后仍然失败,将通过logging记录错误但不会抛出异常
"""
try:
# 尝试发布消息
self.client.publish(topic, message)
except Exception as e:
# 发布失败时记录错误并尝试重新连接后重试
logger.error(f"❌ 发布消息失败: {str(e)},尝试重新连接...")
self.connect()
try:
self.client.publish(topic, message) # 重试一次
except Exception as retry_error:
logger.error(f"❌ 重试发布仍然失败: {str(retry_error)}")
# 工作线程函数
def worker(mqtt_client, config_queue, interval, stop_event):
"""MQTT消息发布工作线程
持续从配置队列中获取配置信息,构建MQTT消息并发布到指定主题。
该线程会循环运行直到被外部中断。
Args:
mqtt_client: 已连接的MQTT客户端实例,用于发布消息
config_queue: 包含配置信息的队列,每个配置项应包含topic等必要字段
interval: 每次消息发布后的间隔时间(秒)
stop_event: 停止事件标志,用于优雅退出线程
"""
thread_name = threading.current_thread().name
message_count = 0
while not stop_event.is_set():
try:
# 从队列获取配置信息(带超时,便于响应停止信号)
try:
config = config_queue.get(timeout=1)
except:
continue
# 构建并发布MQTT消息
topic = config["topic"]
current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
message = Mqtt.build_message(config, current_time, topic)
mqtt_client.publish(topic, message)
message_count += 1
# 每发送100条消息打印一次统计信息
if message_count % 100 == 0:
logger.debug(f"📊 [{thread_name}] 已发送 {message_count} 条消息")
time.sleep(interval)
except Exception as e:
# 异常处理:记录错误日志并短暂等待
logger.error(f"❌ 线程 {thread_name} 发送消息失败: {e}")
time.sleep(SHUTDOWN_CONFIG['error_wait_time']) # 出错后等待
finally:
# 标记队列任务完成
try:
config_queue.task_done()
except:
pass
logger.info(f"🛑 [{thread_name}] 线程已停止,共发送 {message_count} 条消息")
# 全局停止事件
stop_event = threading.Event()
def signal_handler(sig, frame):
"""处理Ctrl+C信号,优雅退出"""
logger.info("\n🛑 接收到中断信号,正在优雅退出...")
stop_event.set()
if __name__ == "__main__":
# 注册信号处理器
signal.signal(signal.SIGINT, signal_handler)
signal.signal(signal.SIGTERM, signal_handler)
# 合并所有CSV配置
configs = []
for csv_file_relative_path in CSV_FILES:
csv_file_path = os.path.join(current_dir, csv_file_relative_path)
try:
file_configs = Mqtt.read_config_from_csv(csv_file_path)
configs.extend(file_configs)
logger.info(f"📄 从 {csv_file_path} 读取了 {len(file_configs)} 条配置")
except Exception as e:
logger.error(f"❌ 读取 {csv_file_path} 失败: {e}")
if not configs:
logger.error("❌ 未读取到任何配置,程序退出")
sys.exit(1)
logger.info(f"📊 总共加载 {len(configs)} 条配置")
# 统计不同类型配置数量
topic_stats = {}
for config in configs:
topic = config.get("topic", "unknown")
topic_stats[topic] = topic_stats.get(topic, 0) + 1
logger.info(f"📈 配置分布: {topic_stats}")
num_threads = min(len(configs), THREAD_CONFIG['max_threads']) # 线程数不超过配置数
# 创建配置队列
config_queue = Queue()
# 创建稳定的MQTT客户端列表
mqtt_clients = []
failed_clients = 0
for i, config in enumerate(configs):
client_id = config.get("clientId", f"python_client_{i}")
try:
mqtt_client = StableMQTTClient(
MQTT_CONFIG['broker_address'],
MQTT_CONFIG['port'],
MQTT_CONFIG['username'],
MQTT_CONFIG['password'],
client_id
)
mqtt_clients.append(mqtt_client)
except Exception as e:
logger.error(f"❌ 创建客户端 {client_id} 失败: {str(e)}")
failed_clients += 1
if failed_clients > 0:
logger.warning(f"⚠️ 共有 {failed_clients} 个客户端创建失败")
if not mqtt_clients:
logger.error("❌ 没有可用的MQTT客户端,程序退出")
sys.exit(1)
try:
# 创建工作线程
threads = []
for i in range(num_threads):
t = threading.Thread(
target=worker,
args=(
mqtt_clients[i % len(mqtt_clients)],
config_queue,
THREAD_CONFIG['send_interval'],
stop_event
),
name=f"Worker-{i + 1}",
daemon=False # 改为非守护线程,便于优雅退出
)
t.start()
threads.append(t)
time.sleep(THREAD_CONFIG['startup_delay']) # 线程启动间隔
# 主循环 - 持续运行
logger.info("🚀 系统已启动,将持续运行... (按 Ctrl+C 停止)")
while not stop_event.is_set():
try:
# 将配置放入队列
for config in configs:
if stop_event.is_set():
break
config_queue.put(config)
# 等待所有任务完成或收到停止信号
while not config_queue.empty() and not stop_event.is_set():
time.sleep(0.1)
if not stop_event.is_set():
time.sleep(1)
except Exception as e:
logger.error(f"❌ 主循环发生错误: {e}", exc_info=True)
time.sleep(SHUTDOWN_CONFIG['error_wait_time']) # 出错后等待
except Exception as e:
logger.error(f"❌ 发生错误: {e}", exc_info=True)
finally:
logger.info("🛑 正在关闭所有连接...")
# 设置停止事件
stop_event.set()
# 等待所有线程结束
for t in threads:
t.join(timeout=SHUTDOWN_CONFIG['thread_join_timeout'])
# 断开所有MQTT连接
success_count = 0
fail_count = 0
for client in mqtt_clients:
try:
client.client.disconnect()
success_count += 1
except Exception as e:
fail_count += 1
logger.debug(f"断开连接失败: {str(e)}")
logger.info(f"✅ 已断开 {success_count} 个连接,{fail_count} 个失败")
logger.info(f"📝 日志文件保存在: {log_filepath}")
logger.info("👋 程序已退出")
...@@ -17,7 +17,7 @@ def on_message(client, userdata, msg): ...@@ -17,7 +17,7 @@ def on_message(client, userdata, msg):
if __name__ == "__main__": if __name__ == "__main__":
# 5.218测试环境 192.168.5.218 1883 # 5.218测试环境 192.168.5.218 1883
broker_address = "192.168.5.218" broker_address = "192.168.5.50"
username = "mqtt@cmdb" # 你的MQTT用户名 username = "mqtt@cmdb" # 你的MQTT用户名
password = "mqtt@webpassw0RD" # 你的MQTT密码 password = "mqtt@webpassw0RD" # 你的MQTT密码
port = 1883 port = 1883
......
topic,clientId,appToken,companyNumber,cnum,conferenceId,macAddress,authCode,clientId,deviceId
rebootResponseTopic,48134e6047a19a0001,AND-518-0001,CN-518-UBAINS,,101,20:59:20:00:28:01,AND-518-0001,48134e6047a19a0001,aa44e258a4e1e0001
rebootResponseTopic,48134e6047a19a0002,AND-518-0002,CN-518-UBAINS,,102,20:59:20:00:28:01,AND-518-0002,48134e6047a19a0002,aa44e258a4e1e0002
rebootResponseTopic,48134e6047a19a0003,AND-518-0003,CN-518-UBAINS,,103,20:59:20:00:28:01,AND-518-0003,48134e6047a19a0003,aa44e258a4e1e0003
rebootResponseTopic,48134e6047a19a0004,AND-518-0004,CN-518-UBAINS,,104,20:59:20:00:28:01,AND-518-0004,48134e6047a19a0004,aa44e258a4e1e0004
rebootResponseTopic,48134e6047a19a0005,AND-518-0005,CN-518-UBAINS,,105,20:59:20:00:28:01,AND-518-0005,48134e6047a19a0005,aa44e258a4e1e0005
rebootResponseTopic,48134e6047a19a0006,AND-518-0006,CN-518-UBAINS,,106,20:59:20:00:28:01,AND-518-0006,48134e6047a19a0006,aa44e258a4e1e0006
rebootResponseTopic,48134e6047a19a0007,AND-518-0007,CN-518-UBAINS,,107,20:59:20:00:28:01,AND-518-0007,48134e6047a19a0007,aa44e258a4e1e0007
rebootResponseTopic,48134e6047a19a0008,AND-518-0008,CN-518-UBAINS,,108,20:59:20:00:28:01,AND-518-0008,48134e6047a19a0008,aa44e258a4e1e0008
rebootResponseTopic,48134e6047a19a0009,AND-518-0009,CN-518-UBAINS,,109,20:59:20:00:28:01,AND-518-0009,48134e6047a19a0009,aa44e258a4e1e0009
rebootResponseTopic,48134e6047a19a0010,AND-518-0010,CN-518-UBAINS,,110,20:59:20:00:28:01,AND-518-0010,48134e6047a19a0010,aa44e258a4e1e0010
rebootResponseTopic,48134e6047a19a0011,AND-518-0011,CN-518-UBAINS,,111,20:59:20:00:28:01,AND-518-0011,48134e6047a19a0011,aa44e258a4e1e0011
rebootResponseTopic,48134e6047a19a0012,AND-518-0012,CN-518-UBAINS,,112,20:59:20:00:28:01,AND-518-0012,48134e6047a19a0012,aa44e258a4e1e0012
rebootResponseTopic,48134e6047a19a0013,AND-518-0013,CN-518-UBAINS,,113,20:59:20:00:28:01,AND-518-0013,48134e6047a19a0013,aa44e258a4e1e0013
rebootResponseTopic,48134e6047a19a0014,AND-518-0014,CN-518-UBAINS,,114,20:59:20:00:28:01,AND-518-0014,48134e6047a19a0014,aa44e258a4e1e0014
rebootResponseTopic,48134e6047a19a0015,AND-518-0015,CN-518-UBAINS,,115,20:59:20:00:28:01,AND-518-0015,48134e6047a19a0015,aa44e258a4e1e0015
rebootResponseTopic,48134e6047a19a0016,AND-518-0016,CN-518-UBAINS,,116,20:59:20:00:28:01,AND-518-0016,48134e6047a19a0016,aa44e258a4e1e0016
rebootResponseTopic,48134e6047a19a0017,AND-518-0017,CN-518-UBAINS,,117,20:59:20:00:28:01,AND-518-0017,48134e6047a19a0017,aa44e258a4e1e0017
rebootResponseTopic,48134e6047a19a0018,AND-518-0018,CN-518-UBAINS,,118,20:59:20:00:28:01,AND-518-0018,48134e6047a19a0018,aa44e258a4e1e0018
rebootResponseTopic,48134e6047a19a0019,AND-518-0019,CN-518-UBAINS,,119,20:59:20:00:28:01,AND-518-0019,48134e6047a19a0019,aa44e258a4e1e0019
rebootResponseTopic,48134e6047a19a0020,AND-518-0020,CN-518-UBAINS,,120,20:59:20:00:28:01,AND-518-0020,48134e6047a19a0020,aa44e258a4e1e0020
rebootResponseTopic,48134e6047a19a0021,AND-518-0021,CN-518-UBAINS,,121,20:59:20:00:28:01,AND-518-0021,48134e6047a19a0021,aa44e258a4e1e0021
rebootResponseTopic,48134e6047a19a0022,AND-518-0022,CN-518-UBAINS,,122,20:59:20:00:28:01,AND-518-0022,48134e6047a19a0022,aa44e258a4e1e0022
rebootResponseTopic,48134e6047a19a0023,AND-518-0023,CN-518-UBAINS,,123,20:59:20:00:28:01,AND-518-0023,48134e6047a19a0023,aa44e258a4e1e0023
rebootResponseTopic,48134e6047a19a0024,AND-518-0024,CN-518-UBAINS,,124,20:59:20:00:28:01,AND-518-0024,48134e6047a19a0024,aa44e258a4e1e0024
rebootResponseTopic,48134e6047a19a0025,AND-518-0025,CN-518-UBAINS,,125,20:59:20:00:28:01,AND-518-0025,48134e6047a19a0025,aa44e258a4e1e0025
rebootResponseTopic,48134e6047a19a0026,AND-518-0026,CN-518-UBAINS,,126,20:59:20:00:28:01,AND-518-0026,48134e6047a19a0026,aa44e258a4e1e0026
rebootResponseTopic,48134e6047a19a0027,AND-518-0027,CN-518-UBAINS,,127,20:59:20:00:28:01,AND-518-0027,48134e6047a19a0027,aa44e258a4e1e0027
rebootResponseTopic,48134e6047a19a0028,AND-518-0028,CN-518-UBAINS,,128,20:59:20:00:28:01,AND-518-0028,48134e6047a19a0028,aa44e258a4e1e0028
rebootResponseTopic,48134e6047a19a0029,AND-518-0029,CN-518-UBAINS,,129,20:59:20:00:28:01,AND-518-0029,48134e6047a19a0029,aa44e258a4e1e0029
rebootResponseTopic,48134e6047a19a0030,AND-518-0030,CN-518-UBAINS,,130,20:59:20:00:28:01,AND-518-0030,48134e6047a19a0030,aa44e258a4e1e0030
rebootResponseTopic,48134e6047a19a0031,AND-518-0031,CN-518-UBAINS,,131,20:59:20:00:28:01,AND-518-0031,48134e6047a19a0031,aa44e258a4e1e0031
rebootResponseTopic,48134e6047a19a0032,AND-518-0032,CN-518-UBAINS,,132,20:59:20:00:28:01,AND-518-0032,48134e6047a19a0032,aa44e258a4e1e0032
rebootResponseTopic,48134e6047a19a0033,AND-518-0033,CN-518-UBAINS,,133,20:59:20:00:28:01,AND-518-0033,48134e6047a19a0033,aa44e258a4e1e0033
rebootResponseTopic,48134e6047a19a0034,AND-518-0034,CN-518-UBAINS,,134,20:59:20:00:28:01,AND-518-0034,48134e6047a19a0034,aa44e258a4e1e0034
rebootResponseTopic,48134e6047a19a0035,AND-518-0035,CN-518-UBAINS,,135,20:59:20:00:28:01,AND-518-0035,48134e6047a19a0035,aa44e258a4e1e0035
rebootResponseTopic,48134e6047a19a0036,AND-518-0036,CN-518-UBAINS,,136,20:59:20:00:28:01,AND-518-0036,48134e6047a19a0036,aa44e258a4e1e0036
rebootResponseTopic,48134e6047a19a0037,AND-518-0037,CN-518-UBAINS,,137,20:59:20:00:28:01,AND-518-0037,48134e6047a19a0037,aa44e258a4e1e0037
rebootResponseTopic,48134e6047a19a0038,AND-518-0038,CN-518-UBAINS,,138,20:59:20:00:28:01,AND-518-0038,48134e6047a19a0038,aa44e258a4e1e0038
rebootResponseTopic,48134e6047a19a0039,AND-518-0039,CN-518-UBAINS,,139,20:59:20:00:28:01,AND-518-0039,48134e6047a19a0039,aa44e258a4e1e0039
rebootResponseTopic,48134e6047a19a0040,AND-518-0040,CN-518-UBAINS,,140,20:59:20:00:28:01,AND-518-0040,48134e6047a19a0040,aa44e258a4e1e0040
rebootResponseTopic,48134e6047a19a0041,AND-518-0041,CN-518-UBAINS,,141,20:59:20:00:28:01,AND-518-0041,48134e6047a19a0041,aa44e258a4e1e0041
rebootResponseTopic,48134e6047a19a0042,AND-518-0042,CN-518-UBAINS,,142,20:59:20:00:28:01,AND-518-0042,48134e6047a19a0042,aa44e258a4e1e0042
rebootResponseTopic,48134e6047a19a0043,AND-518-0043,CN-518-UBAINS,,143,20:59:20:00:28:01,AND-518-0043,48134e6047a19a0043,aa44e258a4e1e0043
rebootResponseTopic,48134e6047a19a0044,AND-518-0044,CN-518-UBAINS,,144,20:59:20:00:28:01,AND-518-0044,48134e6047a19a0044,aa44e258a4e1e0044
rebootResponseTopic,48134e6047a19a0045,AND-518-0045,CN-518-UBAINS,,145,20:59:20:00:28:01,AND-518-0045,48134e6047a19a0045,aa44e258a4e1e0045
rebootResponseTopic,48134e6047a19a0046,AND-518-0046,CN-518-UBAINS,,146,20:59:20:00:28:01,AND-518-0046,48134e6047a19a0046,aa44e258a4e1e0046
rebootResponseTopic,48134e6047a19a0047,AND-518-0047,CN-518-UBAINS,,147,20:59:20:00:28:01,AND-518-0047,48134e6047a19a0047,aa44e258a4e1e0047
rebootResponseTopic,48134e6047a19a0048,AND-518-0048,CN-518-UBAINS,,148,20:59:20:00:28:01,AND-518-0048,48134e6047a19a0048,aa44e258a4e1e0048
rebootResponseTopic,48134e6047a19a0049,AND-518-0049,CN-518-UBAINS,,149,20:59:20:00:28:01,AND-518-0049,48134e6047a19a0049,aa44e258a4e1e0049
rebootResponseTopic,48134e6047a19a0050,AND-518-0050,CN-518-UBAINS,,150,20:59:20:00:28:01,AND-518-0050,48134e6047a19a0050,aa44e258a4e1e0050
rebootResponseTopic,48134e6047a19a0051,AND-518-0051,CN-518-UBAINS,,151,20:59:20:00:28:01,AND-518-0051,48134e6047a19a0051,aa44e258a4e1e0051
rebootResponseTopic,48134e6047a19a0052,AND-518-0052,CN-518-UBAINS,,152,20:59:20:00:28:01,AND-518-0052,48134e6047a19a0052,aa44e258a4e1e0052
rebootResponseTopic,48134e6047a19a0053,AND-518-0053,CN-518-UBAINS,,153,20:59:20:00:28:01,AND-518-0053,48134e6047a19a0053,aa44e258a4e1e0053
rebootResponseTopic,48134e6047a19a0054,AND-518-0054,CN-518-UBAINS,,154,20:59:20:00:28:01,AND-518-0054,48134e6047a19a0054,aa44e258a4e1e0054
rebootResponseTopic,48134e6047a19a0055,AND-518-0055,CN-518-UBAINS,,155,20:59:20:00:28:01,AND-518-0055,48134e6047a19a0055,aa44e258a4e1e0055
rebootResponseTopic,48134e6047a19a0056,AND-518-0056,CN-518-UBAINS,,156,20:59:20:00:28:01,AND-518-0056,48134e6047a19a0056,aa44e258a4e1e0056
rebootResponseTopic,48134e6047a19a0057,AND-518-0057,CN-518-UBAINS,,157,20:59:20:00:28:01,AND-518-0057,48134e6047a19a0057,aa44e258a4e1e0057
rebootResponseTopic,48134e6047a19a0058,AND-518-0058,CN-518-UBAINS,,158,20:59:20:00:28:01,AND-518-0058,48134e6047a19a0058,aa44e258a4e1e0058
rebootResponseTopic,48134e6047a19a0059,AND-518-0059,CN-518-UBAINS,,159,20:59:20:00:28:01,AND-518-0059,48134e6047a19a0059,aa44e258a4e1e0059
rebootResponseTopic,48134e6047a19a0060,AND-518-0060,CN-518-UBAINS,,160,20:59:20:00:28:01,AND-518-0060,48134e6047a19a0060,aa44e258a4e1e0060
rebootResponseTopic,48134e6047a19a0061,AND-518-0061,CN-518-UBAINS,,161,20:59:20:00:28:01,AND-518-0061,48134e6047a19a0061,aa44e258a4e1e0061
rebootResponseTopic,48134e6047a19a0062,AND-518-0062,CN-518-UBAINS,,162,20:59:20:00:28:01,AND-518-0062,48134e6047a19a0062,aa44e258a4e1e0062
rebootResponseTopic,48134e6047a19a0063,AND-518-0063,CN-518-UBAINS,,163,20:59:20:00:28:01,AND-518-0063,48134e6047a19a0063,aa44e258a4e1e0063
rebootResponseTopic,48134e6047a19a0064,AND-518-0064,CN-518-UBAINS,,164,20:59:20:00:28:01,AND-518-0064,48134e6047a19a0064,aa44e258a4e1e0064
rebootResponseTopic,48134e6047a19a0065,AND-518-0065,CN-518-UBAINS,,165,20:59:20:00:28:01,AND-518-0065,48134e6047a19a0065,aa44e258a4e1e0065
rebootResponseTopic,48134e6047a19a0066,AND-518-0066,CN-518-UBAINS,,166,20:59:20:00:28:01,AND-518-0066,48134e6047a19a0066,aa44e258a4e1e0066
rebootResponseTopic,48134e6047a19a0067,AND-518-0067,CN-518-UBAINS,,167,20:59:20:00:28:01,AND-518-0067,48134e6047a19a0067,aa44e258a4e1e0067
rebootResponseTopic,48134e6047a19a0068,AND-518-0068,CN-518-UBAINS,,168,20:59:20:00:28:01,AND-518-0068,48134e6047a19a0068,aa44e258a4e1e0068
rebootResponseTopic,48134e6047a19a0069,AND-518-0069,CN-518-UBAINS,,169,20:59:20:00:28:01,AND-518-0069,48134e6047a19a0069,aa44e258a4e1e0069
rebootResponseTopic,48134e6047a19a0070,AND-518-0070,CN-518-UBAINS,,170,20:59:20:00:28:01,AND-518-0070,48134e6047a19a0070,aa44e258a4e1e0070
rebootResponseTopic,48134e6047a19a0071,AND-518-0071,CN-518-UBAINS,,171,20:59:20:00:28:01,AND-518-0071,48134e6047a19a0071,aa44e258a4e1e0071
rebootResponseTopic,48134e6047a19a0072,AND-518-0072,CN-518-UBAINS,,172,20:59:20:00:28:01,AND-518-0072,48134e6047a19a0072,aa44e258a4e1e0072
rebootResponseTopic,48134e6047a19a0073,AND-518-0073,CN-518-UBAINS,,173,20:59:20:00:28:01,AND-518-0073,48134e6047a19a0073,aa44e258a4e1e0073
rebootResponseTopic,48134e6047a19a0074,AND-518-0074,CN-518-UBAINS,,174,20:59:20:00:28:01,AND-518-0074,48134e6047a19a0074,aa44e258a4e1e0074
rebootResponseTopic,48134e6047a19a0075,AND-518-0075,CN-518-UBAINS,,175,20:59:20:00:28:01,AND-518-0075,48134e6047a19a0075,aa44e258a4e1e0075
rebootResponseTopic,48134e6047a19a0076,AND-518-0076,CN-518-UBAINS,,176,20:59:20:00:28:01,AND-518-0076,48134e6047a19a0076,aa44e258a4e1e0076
rebootResponseTopic,48134e6047a19a0077,AND-518-0077,CN-518-UBAINS,,177,20:59:20:00:28:01,AND-518-0077,48134e6047a19a0077,aa44e258a4e1e0077
rebootResponseTopic,48134e6047a19a0078,AND-518-0078,CN-518-UBAINS,,178,20:59:20:00:28:01,AND-518-0078,48134e6047a19a0078,aa44e258a4e1e0078
rebootResponseTopic,48134e6047a19a0079,AND-518-0079,CN-518-UBAINS,,179,20:59:20:00:28:01,AND-518-0079,48134e6047a19a0079,aa44e258a4e1e0079
rebootResponseTopic,48134e6047a19a0080,AND-518-0080,CN-518-UBAINS,,180,20:59:20:00:28:01,AND-518-0080,48134e6047a19a0080,aa44e258a4e1e0080
rebootResponseTopic,48134e6047a19a0081,AND-518-0081,CN-518-UBAINS,,181,20:59:20:00:28:01,AND-518-0081,48134e6047a19a0081,aa44e258a4e1e0081
rebootResponseTopic,48134e6047a19a0082,AND-518-0082,CN-518-UBAINS,,182,20:59:20:00:28:01,AND-518-0082,48134e6047a19a0082,aa44e258a4e1e0082
rebootResponseTopic,48134e6047a19a0083,AND-518-0083,CN-518-UBAINS,,183,20:59:20:00:28:01,AND-518-0083,48134e6047a19a0083,aa44e258a4e1e0083
rebootResponseTopic,48134e6047a19a0084,AND-518-0084,CN-518-UBAINS,,184,20:59:20:00:28:01,AND-518-0084,48134e6047a19a0084,aa44e258a4e1e0084
rebootResponseTopic,48134e6047a19a0085,AND-518-0085,CN-518-UBAINS,,185,20:59:20:00:28:01,AND-518-0085,48134e6047a19a0085,aa44e258a4e1e0085
rebootResponseTopic,48134e6047a19a0086,AND-518-0086,CN-518-UBAINS,,186,20:59:20:00:28:01,AND-518-0086,48134e6047a19a0086,aa44e258a4e1e0086
rebootResponseTopic,48134e6047a19a0087,AND-518-0087,CN-518-UBAINS,,187,20:59:20:00:28:01,AND-518-0087,48134e6047a19a0087,aa44e258a4e1e0087
rebootResponseTopic,48134e6047a19a0088,AND-518-0088,CN-518-UBAINS,,188,20:59:20:00:28:01,AND-518-0088,48134e6047a19a0088,aa44e258a4e1e0088
rebootResponseTopic,48134e6047a19a0089,AND-518-0089,CN-518-UBAINS,,189,20:59:20:00:28:01,AND-518-0089,48134e6047a19a0089,aa44e258a4e1e0089
rebootResponseTopic,48134e6047a19a0090,AND-518-0090,CN-518-UBAINS,,190,20:59:20:00:28:01,AND-518-0090,48134e6047a19a0090,aa44e258a4e1e0090
rebootResponseTopic,48134e6047a19a0091,AND-518-0091,CN-518-UBAINS,,191,20:59:20:00:28:01,AND-518-0091,48134e6047a19a0091,aa44e258a4e1e0091
rebootResponseTopic,48134e6047a19a0092,AND-518-0092,CN-518-UBAINS,,192,20:59:20:00:28:01,AND-518-0092,48134e6047a19a0092,aa44e258a4e1e0092
rebootResponseTopic,48134e6047a19a0093,AND-518-0093,CN-518-UBAINS,,193,20:59:20:00:28:01,AND-518-0093,48134e6047a19a0093,aa44e258a4e1e0093
rebootResponseTopic,48134e6047a19a0094,AND-518-0094,CN-518-UBAINS,,194,20:59:20:00:28:01,AND-518-0094,48134e6047a19a0094,aa44e258a4e1e0094
rebootResponseTopic,48134e6047a19a0095,AND-518-0095,CN-518-UBAINS,,195,20:59:20:00:28:01,AND-518-0095,48134e6047a19a0095,aa44e258a4e1e0095
rebootResponseTopic,48134e6047a19a0096,AND-518-0096,CN-518-UBAINS,,196,20:59:20:00:28:01,AND-518-0096,48134e6047a19a0096,aa44e258a4e1e0096
rebootResponseTopic,48134e6047a19a0097,AND-518-0097,CN-518-UBAINS,,197,20:59:20:00:28:01,AND-518-0097,48134e6047a19a0097,aa44e258a4e1e0097
rebootResponseTopic,48134e6047a19a0098,AND-518-0098,CN-518-UBAINS,,198,20:59:20:00:28:01,AND-518-0098,48134e6047a19a0098,aa44e258a4e1e0098
rebootResponseTopic,48134e6047a19a0099,AND-518-0099,CN-518-UBAINS,,199,20:59:20:00:28:01,AND-518-0099,48134e6047a19a0099,aa44e258a4e1e0099
rebootResponseTopic,48134e6047a19a0100,AND-518-0100,CN-518-UBAINS,,200,20:59:20:00:28:01,AND-518-0100,48134e6047a19a0100,aa44e258a4e1e0100
rebootResponseTopic,48134e6047a19a0101,AND-518-0101,CN-518-UBAINS,,201,20:59:20:00:28:01,AND-518-0101,48134e6047a19a0101,aa44e258a4e1e0101
\ No newline at end of file
topic,clientId,appToken,companyNumber,cnum,conferenceId,conferenceName,macAddress,ipAddress,deviceModel,networkType,battery,charging,resolution,romName,sdkVersionCode,sdkVersionName,appVersion,appVersionName,faceVersion,wgtVersion,abiList,appName,appPackageName,bluetoothEnabled,camerasCount,density,freeAndTotalMemory,internalAvailableSize,internalTotalSize,processCpuUsage,rooted,sysLanguage,sysSupportedSensors,buildConfig,faceBuildInfo
rebootResponseTopic,48134e6047a19a0001,AND-518-0001,CN-518-UBAINS,16,101,PGY-TestRoom-01,20:59:20:00:28:01,192.168.1.141,Pad10-Pro,NETWORK_WIFI,0.4,True,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,21.01%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0002,AND-518-0002,CN-518-UBAINS,16,102,PGY-TestRoom-02,20:59:20:00:28:01,192.168.1.142,Pad10-Pro,NETWORK_WIFI,0.5,True,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,22.02%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0003,AND-518-0003,CN-518-UBAINS,16,103,PGY-TestRoom-03,20:59:20:00:28:01,192.168.1.143,Pad10-Pro,NETWORK_WIFI,0.6,False,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,23.03%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0004,AND-518-0004,CN-518-UBAINS,16,104,PGY-TestRoom-04,20:59:20:00:28:01,192.168.1.144,Pad10-Pro,NETWORK_WIFI,0.7,True,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,24.04%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0005,AND-518-0005,CN-518-UBAINS,16,105,PGY-TestRoom-05,20:59:20:00:28:01,192.168.1.145,Pad10-Pro,NETWORK_WIFI,0.8,True,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,25.05%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0006,AND-518-0006,CN-518-UBAINS,16,106,PGY-TestRoom-06,20:59:20:00:28:01,192.168.1.146,Pad10-Pro,NETWORK_WIFI,0.9,False,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,26.06%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0007,AND-518-0007,CN-518-UBAINS,16,107,PGY-TestRoom-07,20:59:20:00:28:01,192.168.1.147,Pad10-Pro,NETWORK_WIFI,0.3,True,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,27.07%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0008,AND-518-0008,CN-518-UBAINS,16,108,PGY-TestRoom-08,20:59:20:00:28:01,192.168.1.148,Pad10-Pro,NETWORK_WIFI,0.4,True,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,28.08%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0009,AND-518-0009,CN-518-UBAINS,16,109,PGY-TestRoom-09,20:59:20:00:28:01,192.168.1.149,Pad10-Pro,NETWORK_WIFI,0.5,False,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,29.09%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0010,AND-518-0010,CN-518-UBAINS,16,110,PGY-TestRoom-10,20:59:20:00:28:01,192.168.1.150,Pad10-Pro,NETWORK_WIFI,0.6,True,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,30.00%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0011,AND-518-0011,CN-518-UBAINS,16,111,PGY-TestRoom-11,20:59:20:00:28:01,192.168.1.151,Pad10-Pro,NETWORK_WIFI,0.7,True,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,31.01%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0012,AND-518-0012,CN-518-UBAINS,16,112,PGY-TestRoom-12,20:59:20:00:28:01,192.168.1.152,Pad10-Pro,NETWORK_WIFI,0.8,False,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,32.02%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0013,AND-518-0013,CN-518-UBAINS,16,113,PGY-TestRoom-13,20:59:20:00:28:01,192.168.1.153,Pad10-Pro,NETWORK_WIFI,0.9,True,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,33.03%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0014,AND-518-0014,CN-518-UBAINS,16,114,PGY-TestRoom-14,20:59:20:00:28:01,192.168.1.154,Pad10-Pro,NETWORK_WIFI,0.3,True,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,34.04%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0015,AND-518-0015,CN-518-UBAINS,16,115,PGY-TestRoom-15,20:59:20:00:28:01,192.168.1.155,Pad10-Pro,NETWORK_WIFI,0.4,False,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,20.05%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0016,AND-518-0016,CN-518-UBAINS,16,116,PGY-TestRoom-16,20:59:20:00:28:01,192.168.1.156,Pad10-Pro,NETWORK_WIFI,0.5,True,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,21.06%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0017,AND-518-0017,CN-518-UBAINS,16,117,PGY-TestRoom-17,20:59:20:00:28:01,192.168.1.157,Pad10-Pro,NETWORK_WIFI,0.6,True,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,22.07%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0018,AND-518-0018,CN-518-UBAINS,16,118,PGY-TestRoom-18,20:59:20:00:28:01,192.168.1.158,Pad10-Pro,NETWORK_WIFI,0.7,False,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,23.08%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0019,AND-518-0019,CN-518-UBAINS,16,119,PGY-TestRoom-19,20:59:20:00:28:01,192.168.1.159,Pad10-Pro,NETWORK_WIFI,0.8,True,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,24.09%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0020,AND-518-0020,CN-518-UBAINS,16,120,PGY-TestRoom-20,20:59:20:00:28:01,192.168.1.160,Pad10-Pro,NETWORK_WIFI,0.9,True,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,25.00%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0021,AND-518-0021,CN-518-UBAINS,16,121,PGY-TestRoom-21,20:59:20:00:28:01,192.168.1.161,Pad10-Pro,NETWORK_WIFI,0.3,False,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,26.01%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0022,AND-518-0022,CN-518-UBAINS,16,122,PGY-TestRoom-22,20:59:20:00:28:01,192.168.1.162,Pad10-Pro,NETWORK_WIFI,0.4,True,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,27.02%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0023,AND-518-0023,CN-518-UBAINS,16,123,PGY-TestRoom-23,20:59:20:00:28:01,192.168.1.163,Pad10-Pro,NETWORK_WIFI,0.5,True,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,28.03%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0024,AND-518-0024,CN-518-UBAINS,16,124,PGY-TestRoom-24,20:59:20:00:28:01,192.168.1.164,Pad10-Pro,NETWORK_WIFI,0.6,False,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,29.04%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0025,AND-518-0025,CN-518-UBAINS,16,125,PGY-TestRoom-25,20:59:20:00:28:01,192.168.1.165,Pad10-Pro,NETWORK_WIFI,0.7,True,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,30.05%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0026,AND-518-0026,CN-518-UBAINS,16,126,PGY-TestRoom-26,20:59:20:00:28:01,192.168.1.166,Pad10-Pro,NETWORK_WIFI,0.8,True,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,31.06%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0027,AND-518-0027,CN-518-UBAINS,16,127,PGY-TestRoom-27,20:59:20:00:28:01,192.168.1.167,Pad10-Pro,NETWORK_WIFI,0.9,False,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,32.07%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0028,AND-518-0028,CN-518-UBAINS,16,128,PGY-TestRoom-28,20:59:20:00:28:01,192.168.1.168,Pad10-Pro,NETWORK_WIFI,0.3,True,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,33.08%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0029,AND-518-0029,CN-518-UBAINS,16,129,PGY-TestRoom-29,20:59:20:00:28:01,192.168.1.169,Pad10-Pro,NETWORK_WIFI,0.4,True,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,34.09%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0030,AND-518-0030,CN-518-UBAINS,16,130,PGY-TestRoom-30,20:59:20:00:28:01,192.168.1.170,Pad10-Pro,NETWORK_WIFI,0.5,False,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,20.00%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0031,AND-518-0031,CN-518-UBAINS,16,131,PGY-TestRoom-31,20:59:20:00:28:01,192.168.1.171,Pad10-Pro,NETWORK_WIFI,0.6,True,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,21.01%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0032,AND-518-0032,CN-518-UBAINS,16,132,PGY-TestRoom-32,20:59:20:00:28:01,192.168.1.172,Pad10-Pro,NETWORK_WIFI,0.7,True,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,22.02%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0033,AND-518-0033,CN-518-UBAINS,16,133,PGY-TestRoom-33,20:59:20:00:28:01,192.168.1.173,Pad10-Pro,NETWORK_WIFI,0.8,False,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,23.03%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0034,AND-518-0034,CN-518-UBAINS,16,134,PGY-TestRoom-34,20:59:20:00:28:01,192.168.1.174,Pad10-Pro,NETWORK_WIFI,0.9,True,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,24.04%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0035,AND-518-0035,CN-518-UBAINS,16,135,PGY-TestRoom-35,20:59:20:00:28:01,192.168.1.175,Pad10-Pro,NETWORK_WIFI,0.3,True,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,25.05%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0036,AND-518-0036,CN-518-UBAINS,16,136,PGY-TestRoom-36,20:59:20:00:28:01,192.168.1.176,Pad10-Pro,NETWORK_WIFI,0.4,False,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,26.06%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0037,AND-518-0037,CN-518-UBAINS,16,137,PGY-TestRoom-37,20:59:20:00:28:01,192.168.1.177,Pad10-Pro,NETWORK_WIFI,0.5,True,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,27.07%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0038,AND-518-0038,CN-518-UBAINS,16,138,PGY-TestRoom-38,20:59:20:00:28:01,192.168.1.178,Pad10-Pro,NETWORK_WIFI,0.6,True,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,28.08%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0039,AND-518-0039,CN-518-UBAINS,16,139,PGY-TestRoom-39,20:59:20:00:28:01,192.168.1.179,Pad10-Pro,NETWORK_WIFI,0.7,False,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,29.09%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0040,AND-518-0040,CN-518-UBAINS,16,140,PGY-TestRoom-40,20:59:20:00:28:01,192.168.1.180,Pad10-Pro,NETWORK_WIFI,0.8,True,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,30.00%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0041,AND-518-0041,CN-518-UBAINS,16,141,PGY-TestRoom-41,20:59:20:00:28:01,192.168.1.181,Pad10-Pro,NETWORK_WIFI,0.9,True,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,31.01%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0042,AND-518-0042,CN-518-UBAINS,16,142,PGY-TestRoom-42,20:59:20:00:28:01,192.168.1.182,Pad10-Pro,NETWORK_WIFI,0.3,False,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,32.02%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0043,AND-518-0043,CN-518-UBAINS,16,143,PGY-TestRoom-43,20:59:20:00:28:01,192.168.1.183,Pad10-Pro,NETWORK_WIFI,0.4,True,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,33.03%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0044,AND-518-0044,CN-518-UBAINS,16,144,PGY-TestRoom-44,20:59:20:00:28:01,192.168.1.184,Pad10-Pro,NETWORK_WIFI,0.5,True,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,34.04%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0045,AND-518-0045,CN-518-UBAINS,16,145,PGY-TestRoom-45,20:59:20:00:28:01,192.168.1.185,Pad10-Pro,NETWORK_WIFI,0.6,False,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,20.05%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0046,AND-518-0046,CN-518-UBAINS,16,146,PGY-TestRoom-46,20:59:20:00:28:01,192.168.1.186,Pad10-Pro,NETWORK_WIFI,0.7,True,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,21.06%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0047,AND-518-0047,CN-518-UBAINS,16,147,PGY-TestRoom-47,20:59:20:00:28:01,192.168.1.187,Pad10-Pro,NETWORK_WIFI,0.8,True,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,22.07%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0048,AND-518-0048,CN-518-UBAINS,16,148,PGY-TestRoom-48,20:59:20:00:28:01,192.168.1.188,Pad10-Pro,NETWORK_WIFI,0.9,False,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,23.08%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0049,AND-518-0049,CN-518-UBAINS,16,149,PGY-TestRoom-49,20:59:20:00:28:01,192.168.1.189,Pad10-Pro,NETWORK_WIFI,0.3,True,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,24.09%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0050,AND-518-0050,CN-518-UBAINS,16,150,PGY-TestRoom-50,20:59:20:00:28:01,192.168.1.190,Pad10-Pro,NETWORK_WIFI,0.4,True,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,25.00%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0051,AND-518-0051,CN-518-UBAINS,16,151,PGY-TestRoom-51,20:59:20:00:28:01,192.168.1.191,Pad10-Pro,NETWORK_WIFI,0.5,False,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,26.01%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0052,AND-518-0052,CN-518-UBAINS,16,152,PGY-TestRoom-52,20:59:20:00:28:01,192.168.1.192,Pad10-Pro,NETWORK_WIFI,0.6,True,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,27.02%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0053,AND-518-0053,CN-518-UBAINS,16,153,PGY-TestRoom-53,20:59:20:00:28:01,192.168.1.193,Pad10-Pro,NETWORK_WIFI,0.7,True,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,28.03%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0054,AND-518-0054,CN-518-UBAINS,16,154,PGY-TestRoom-54,20:59:20:00:28:01,192.168.1.194,Pad10-Pro,NETWORK_WIFI,0.8,False,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,29.04%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0055,AND-518-0055,CN-518-UBAINS,16,155,PGY-TestRoom-55,20:59:20:00:28:01,192.168.1.195,Pad10-Pro,NETWORK_WIFI,0.9,True,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,30.05%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0056,AND-518-0056,CN-518-UBAINS,16,156,PGY-TestRoom-56,20:59:20:00:28:01,192.168.1.196,Pad10-Pro,NETWORK_WIFI,0.3,True,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,31.06%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0057,AND-518-0057,CN-518-UBAINS,16,157,PGY-TestRoom-57,20:59:20:00:28:01,192.168.1.197,Pad10-Pro,NETWORK_WIFI,0.4,False,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,32.07%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0058,AND-518-0058,CN-518-UBAINS,16,158,PGY-TestRoom-58,20:59:20:00:28:01,192.168.1.198,Pad10-Pro,NETWORK_WIFI,0.5,True,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,33.08%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0059,AND-518-0059,CN-518-UBAINS,16,159,PGY-TestRoom-59,20:59:20:00:28:01,192.168.1.199,Pad10-Pro,NETWORK_WIFI,0.6,True,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,34.09%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0060,AND-518-0060,CN-518-UBAINS,16,160,PGY-TestRoom-60,20:59:20:00:28:01,192.168.1.200,Pad10-Pro,NETWORK_WIFI,0.7,False,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,20.00%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0061,AND-518-0061,CN-518-UBAINS,16,161,PGY-TestRoom-61,20:59:20:00:28:01,192.168.1.201,Pad10-Pro,NETWORK_WIFI,0.8,True,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,21.01%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0062,AND-518-0062,CN-518-UBAINS,16,162,PGY-TestRoom-62,20:59:20:00:28:01,192.168.1.202,Pad10-Pro,NETWORK_WIFI,0.9,True,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,22.02%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0063,AND-518-0063,CN-518-UBAINS,16,163,PGY-TestRoom-63,20:59:20:00:28:01,192.168.1.203,Pad10-Pro,NETWORK_WIFI,0.3,False,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,23.03%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0064,AND-518-0064,CN-518-UBAINS,16,164,PGY-TestRoom-64,20:59:20:00:28:01,192.168.1.204,Pad10-Pro,NETWORK_WIFI,0.4,True,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,24.04%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0065,AND-518-0065,CN-518-UBAINS,16,165,PGY-TestRoom-65,20:59:20:00:28:01,192.168.1.205,Pad10-Pro,NETWORK_WIFI,0.5,True,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,25.05%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0066,AND-518-0066,CN-518-UBAINS,16,166,PGY-TestRoom-66,20:59:20:00:28:01,192.168.1.206,Pad10-Pro,NETWORK_WIFI,0.6,False,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,26.06%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0067,AND-518-0067,CN-518-UBAINS,16,167,PGY-TestRoom-67,20:59:20:00:28:01,192.168.1.207,Pad10-Pro,NETWORK_WIFI,0.7,True,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,27.07%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0068,AND-518-0068,CN-518-UBAINS,16,168,PGY-TestRoom-68,20:59:20:00:28:01,192.168.1.208,Pad10-Pro,NETWORK_WIFI,0.8,True,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,28.08%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0069,AND-518-0069,CN-518-UBAINS,16,169,PGY-TestRoom-69,20:59:20:00:28:01,192.168.1.209,Pad10-Pro,NETWORK_WIFI,0.9,False,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,29.09%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0070,AND-518-0070,CN-518-UBAINS,16,170,PGY-TestRoom-70,20:59:20:00:28:01,192.168.1.210,Pad10-Pro,NETWORK_WIFI,0.3,True,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,30.00%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0071,AND-518-0071,CN-518-UBAINS,16,171,PGY-TestRoom-71,20:59:20:00:28:01,192.168.1.211,Pad10-Pro,NETWORK_WIFI,0.4,True,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,31.01%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0072,AND-518-0072,CN-518-UBAINS,16,172,PGY-TestRoom-72,20:59:20:00:28:01,192.168.1.212,Pad10-Pro,NETWORK_WIFI,0.5,False,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,32.02%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0073,AND-518-0073,CN-518-UBAINS,16,173,PGY-TestRoom-73,20:59:20:00:28:01,192.168.1.213,Pad10-Pro,NETWORK_WIFI,0.6,True,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,33.03%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0074,AND-518-0074,CN-518-UBAINS,16,174,PGY-TestRoom-74,20:59:20:00:28:01,192.168.1.214,Pad10-Pro,NETWORK_WIFI,0.7,True,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,34.04%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0075,AND-518-0075,CN-518-UBAINS,16,175,PGY-TestRoom-75,20:59:20:00:28:01,192.168.1.215,Pad10-Pro,NETWORK_WIFI,0.8,False,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,20.05%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0076,AND-518-0076,CN-518-UBAINS,16,176,PGY-TestRoom-76,20:59:20:00:28:01,192.168.1.216,Pad10-Pro,NETWORK_WIFI,0.9,True,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,21.06%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0077,AND-518-0077,CN-518-UBAINS,16,177,PGY-TestRoom-77,20:59:20:00:28:01,192.168.1.217,Pad10-Pro,NETWORK_WIFI,0.3,True,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,22.07%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0078,AND-518-0078,CN-518-UBAINS,16,178,PGY-TestRoom-78,20:59:20:00:28:01,192.168.1.218,Pad10-Pro,NETWORK_WIFI,0.4,False,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,23.08%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0079,AND-518-0079,CN-518-UBAINS,16,179,PGY-TestRoom-79,20:59:20:00:28:01,192.168.1.219,Pad10-Pro,NETWORK_WIFI,0.5,True,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,24.09%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0080,AND-518-0080,CN-518-UBAINS,16,180,PGY-TestRoom-80,20:59:20:00:28:01,192.168.1.220,Pad10-Pro,NETWORK_WIFI,0.6,True,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,25.00%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0081,AND-518-0081,CN-518-UBAINS,16,181,PGY-TestRoom-81,20:59:20:00:28:01,192.168.1.221,Pad10-Pro,NETWORK_WIFI,0.7,False,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,26.01%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0082,AND-518-0082,CN-518-UBAINS,16,182,PGY-TestRoom-82,20:59:20:00:28:01,192.168.1.222,Pad10-Pro,NETWORK_WIFI,0.8,True,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,27.02%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0083,AND-518-0083,CN-518-UBAINS,16,183,PGY-TestRoom-83,20:59:20:00:28:01,192.168.1.223,Pad10-Pro,NETWORK_WIFI,0.9,True,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,28.03%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0084,AND-518-0084,CN-518-UBAINS,16,184,PGY-TestRoom-84,20:59:20:00:28:01,192.168.1.224,Pad10-Pro,NETWORK_WIFI,0.3,False,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,29.04%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0085,AND-518-0085,CN-518-UBAINS,16,185,PGY-TestRoom-85,20:59:20:00:28:01,192.168.1.225,Pad10-Pro,NETWORK_WIFI,0.4,True,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,30.05%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0086,AND-518-0086,CN-518-UBAINS,16,186,PGY-TestRoom-86,20:59:20:00:28:01,192.168.1.226,Pad10-Pro,NETWORK_WIFI,0.5,True,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,31.06%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0087,AND-518-0087,CN-518-UBAINS,16,187,PGY-TestRoom-87,20:59:20:00:28:01,192.168.1.227,Pad10-Pro,NETWORK_WIFI,0.6,False,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,32.07%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0088,AND-518-0088,CN-518-UBAINS,16,188,PGY-TestRoom-88,20:59:20:00:28:01,192.168.1.228,Pad10-Pro,NETWORK_WIFI,0.7,True,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,33.08%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0089,AND-518-0089,CN-518-UBAINS,16,189,PGY-TestRoom-89,20:59:20:00:28:01,192.168.1.229,Pad10-Pro,NETWORK_WIFI,0.8,True,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,34.09%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0090,AND-518-0090,CN-518-UBAINS,16,190,PGY-TestRoom-90,20:59:20:00:28:01,192.168.1.230,Pad10-Pro,NETWORK_WIFI,0.9,False,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,20.00%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0091,AND-518-0091,CN-518-UBAINS,16,191,PGY-TestRoom-91,20:59:20:00:28:01,192.168.1.231,Pad10-Pro,NETWORK_WIFI,0.3,True,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,21.01%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0092,AND-518-0092,CN-518-UBAINS,16,192,PGY-TestRoom-92,20:59:20:00:28:01,192.168.1.232,Pad10-Pro,NETWORK_WIFI,0.4,True,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,22.02%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0093,AND-518-0093,CN-518-UBAINS,16,193,PGY-TestRoom-93,20:59:20:00:28:01,192.168.1.233,Pad10-Pro,NETWORK_WIFI,0.5,False,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,23.03%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0094,AND-518-0094,CN-518-UBAINS,16,194,PGY-TestRoom-94,20:59:20:00:28:01,192.168.1.234,Pad10-Pro,NETWORK_WIFI,0.6,True,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,24.04%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0095,AND-518-0095,CN-518-UBAINS,16,195,PGY-TestRoom-95,20:59:20:00:28:01,192.168.1.235,Pad10-Pro,NETWORK_WIFI,0.7,True,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,25.05%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0096,AND-518-0096,CN-518-UBAINS,16,196,PGY-TestRoom-96,20:59:20:00:28:01,192.168.1.236,Pad10-Pro,NETWORK_WIFI,0.8,False,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,26.06%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0097,AND-518-0097,CN-518-UBAINS,16,197,PGY-TestRoom-97,20:59:20:00:28:01,192.168.1.237,Pad10-Pro,NETWORK_WIFI,0.9,True,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,27.07%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0098,AND-518-0098,CN-518-UBAINS,16,198,PGY-TestRoom-98,20:59:20:00:28:01,192.168.1.238,Pad10-Pro,NETWORK_WIFI,0.3,True,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,28.08%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0099,AND-518-0099,CN-518-UBAINS,16,199,PGY-TestRoom-99,20:59:20:00:28:01,192.168.1.239,Pad10-Pro,NETWORK_WIFI,0.4,False,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,29.09%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
rebootResponseTopic,48134e6047a19a0100,AND-518-0100,CN-518-UBAINS,16,200,PGY-TestRoom-100,20:59:20:00:28:01,192.168.1.240,Pad10-Pro,NETWORK_WIFI,0.5,True,1920x1200,yuxian,30,11,351,1.3.351,4.2.12021020201.1,0.2.134,"[""arm64-v8a"", ""armeabi-v7a"", ""armeabi""]",UBAINS,com.ubains.local.gviewer,False,1,1,698M/1957M,9793269760,11075297280,30.00%,True,en,"[""Accelerometer sensor""]","{""FLAVOR_APP_TYPE"": ""rksystem"", ""BUILD_TYPE"": ""release"", ""FLAVOR_FEATURE"": ""doorscreen"", ""DEBUG"": false, ""FLAVOR"": ""rksystemDoorscreen""}",arcfacepro4x
# MQTT设备信息上报测试数据说明
## 📋 概述
本目录包含用于模拟Android门口屏设备信息上报的MQTT测试数据,完全基于JavaScript代码`getDeviceInfoMessage()`方法的结构生成。
## 📁 文件说明
### 1. CSV数据文件
#### MQTT设备信息上报_100条.csv
- **用途**: 包含100条设备信息上报的测试数据
- **字段**: 35个字段,涵盖设备所有关键信息
- **生成方式**: 通过`generate_device_info_csv.py`脚本生成
#### 其他CSV文件
- `MQTT心跳上报_100条.csv`: 心跳数据
- `MQTT信息上报_100条.csv`: 旧版信息上报数据
### 2. Python脚本
#### generate_device_info_csv.py
- **功能**: 生成设备信息上报CSV测试数据
- **运行方式**:
```bash
python generate_device_info_csv.py
```
- **输出**: 生成100条符合真实设备格式的测试数据
#### test_device_info_message.py
- **功能**: 验证消息构建是否符合JavaScript代码规范
- **运行方式**:
```bash
python test_device_info_message.py
```
- **验证内容**:
- 外层消息结构(method, clientId, result)
- 内层result对象的所有字段
- 数据类型正确性(布尔值、整数、浮点数、数组等)
- JSON双重序列化格式
#### Android_Information .py
- **功能**: MQTT消息发送主程序
- **配置**: 已自动添加`MQTT设备信息上报_100条.csv`到CSV_FILES列表
- **运行方式**:
```bash
python "Android_Information .py"
```
## 🔧 消息结构
### 外层结构
```json
{
"method": "/system/readSystemInfo",
"clientId": "设备ID",
"result": "{内层JSON字符串}"
}
```
**注意**: `result`字段是JSON字符串(双重序列化),不是对象。
### 内层结构(result.result)
```json
{
"result": {
"buildInfo": {
"appToken": "授权码",
"companyNumber": "公司编号",
"cnum": "会议室绑定ID",
"conferenceName": "会议室名称",
"conferenceId": 3,
"defaultQrCodeUrl": null,
"aliasName": "会议室别名",
"serverBaseUrl": "https://192.168.9.86/exapi/",
"localBindTime": "2026-04-22 11:19:55",
"generalField": "{...}" // JSON字符串
},
"faceVersion": "4.2.12021020201.1",
"wgtVersion": "0.2.134",
"deviceModel": "Pad10-Pro",
"abiList": ["arm64-v8a", "armeabi-v7a", "armeabi"],
"androidId": "79f18c1a9a3bcfb1",
"appName": "UBAINS",
"appPackageName": "com.ubains.local.gviewer",
"appVersion": 351,
"appVersionName": "1.3.351",
"battery": 0.5,
"bluetoothEnabled": false,
"camerasCount": 1,
"charging": true,
"density": 1,
"freeAndTotalMemory": "698M/1957M",
"internalAvailableSize": 9793269760,
"internalTotalSize": 11075297280,
"ipAddress": "192.168.1.142",
"macAddress": "28:52:F9:1B:99:52",
"networkType": "NETWORK_WIFI",
"processCpuUsage": "28.73%",
"resolution": "1920x1200",
"romName": "yuxian",
"rooted": true,
"sdkVersionCode": 30,
"sdkVersionName": "11",
"sysDate": "Wed Apr 22 11:19:55 GMT+08:00 2026",
"sysDateStr": "2026-04-22 11:19:55",
"sysElapsedRealtime": "83:19:56",
"sysLanguage": "en",
"sysSupportedSensors": ["Accelerometer sensor"],
"buildConfig": {
"FLAVOR_APP_TYPE": "rksystem",
"BUILD_TYPE": "release",
"FLAVOR_FEATURE": "doorscreen",
"DEBUG": false,
"FLAVOR": "rksystemDoorscreen"
},
"faceBuildInfo": "arcfacepro4x",
"authCode": "AND-KH4-0011",
"conferenceName": "PGY-TestRoom"
}
}
```
## 📊 CSV字段说明
| 字段名 | 类型 | 说明 | 示例 |
|--------|------|------|------|
| topic | String | MQTT主题 | rebootResponseTopic |
| clientId | String | Android设备唯一标识 | 79f18c1a9a3bcfb1 |
| appToken | String | 授权码 | AND-KH4-0011 |
| companyNumber | String | 公司编号 | CN-KH4-UBAINS |
| cnum | String | 会议室绑定ID | w7k1allc7gqkmk8igrae9qgnliwhxyhy |
| conferenceId | Integer | 会议室ID | 3 |
| conferenceName | String | 会议室名称 | PGY-TestRoom |
| macAddress | String | MAC地址 | 28:52:F9:1B:99:52 |
| ipAddress | String | IP地址 | 192.168.1.142 |
| deviceModel | String | 设备型号 | Pad10-Pro |
| networkType | String | 网络类型 | NETWORK_WIFI |
| battery | Float | 电池电量(0-1) | 0.5 |
| charging | Boolean | 充电状态 | true/false |
| resolution | String | 分辨率 | 1920x1200 |
| romName | String | ROM名称 | yuxian |
| sdkVersionCode | Integer | SDK版本代码 | 30 |
| sdkVersionName | String | SDK版本名称 | 11 |
| appVersion | Integer | 应用版本号 | 351 |
| appVersionName | String | 应用版本名称 | 1.3.351 |
| faceVersion | String | 人脸模块版本 | 4.2.12021020201.1 |
| wgtVersion | String | Widget版本 | 0.2.134 |
| abiList | JSON String | CPU架构列表 | ["arm64-v8a",...] |
| appName | String | 应用名称 | UBAINS |
| appPackageName | String | 应用包名 | com.ubains.local.gviewer |
| bluetoothEnabled | Boolean | 蓝牙启用状态 | true/false |
| camerasCount | Integer | 摄像头数量 | 1 |
| density | Integer | 屏幕密度 | 1 |
| freeAndTotalMemory | String | 内存使用情况 | 698M/1957M |
| internalAvailableSize | Integer | 内部存储可用大小 | 9793269760 |
| internalTotalSize | Integer | 内部存储总大小 | 11075297280 |
| processCpuUsage | String | CPU使用率 | 28.73% |
| rooted | Boolean | 是否Root | true/false |
| sysLanguage | String | 系统语言 | en |
| sysSupportedSensors | JSON String | 支持的传感器列表 | ["Accelerometer sensor"] |
| buildConfig | JSON String | 构建配置 | {...} |
| faceBuildInfo | String | 人脸构建信息 | arcfacepro4x |
## 🚀 使用步骤
### 1. 生成测试数据(可选)
```bash
cd E:\ubains-module-test\ubains-module-test\Mqtt_Universal_Tool\TestData\ReservationSystem_DoorScreen
python generate_device_info_csv.py
```
### 2. 验证消息格式
```bash
python test_device_info_message.py
```
### 3. 运行MQTT发送程序
```bash
cd E:\ubains-module-test\ubains-module-test\Mqtt_Universal_Tool\ReservationSystem_DoorScreen
python "Android_Information .py"
```
## ⚙️ 配置说明
在`Android_Information .py`中修改以下配置:
```python
# CSV文件列表
CSV_FILES = [
'../TestData/ReservationSystem_DoorScreen/MQTT设备信息上报_100条.csv',
]
# MQTT服务器配置
MQTT_CONFIG = {
'broker_address': '192.168.5.50',
'port': 1883,
'username': 'mqtt@cmdb',
'password': 'mqtt@webpassw0RD',
}
# 线程配置
THREAD_CONFIG = {
'max_threads': 100,
'send_interval': 1,
'startup_delay': 0.05,
}
```
## 🔍 验证要点
### 与JavaScript代码的一致性
1. ✅ 外层消息结构完全一致
2. ✅ result字段为JSON字符串(双重序列化)
3. ✅ buildInfo包含完整的会议室绑定信息
4. ✅ 所有字段名称与JavaScript代码一致
5. ✅ 数据类型正确(布尔值、整数、浮点数、数组)
6. ✅ 数组字段保持数组格式(abiList, sysSupportedSensors)
7. ✅ generalField为JSON字符串
### 真实日志对比
参考日志中的关键字段:
- method: `/system/readSystemInfo`
- clientId: `79f18c1a9a3bcfb1`
- deviceModel: `Pad10-Pro`
- faceVersion: `4.2.12021020201.1`
- wgtVersion: `0.2.134`
- appVersionName: `1.3.351`
- resolution: `1920x1200`
- networkType: `NETWORK_WIFI`
## 📝 注意事项
1. **双重序列化**: result字段必须是JSON字符串,不是对象
2. **布尔值**: 使用true/false,不是字符串"true"/"false"
3. **数组字段**: abiList和sysSupportedSensors必须保持数组格式
4. **数值类型**: battery是浮点数,conferenceId是整数
5. **时间格式**: sysDateStr使用"YYYY-MM-DD HH:mm:ss"格式
6. **运行时长**: sysElapsedRealtime格式为"H:MM:SS"
## 🐛 故障排查
### 问题1: 消息格式不正确
- 运行`test_device_info_message.py`验证
- 检查CSV字段名称是否正确
- 确认JSON字符串字段是否正确转义
### 问题2: 数据类型错误
- 检查CSV中的布尔值是否为true/false(不是字符串)
- 确认数值字段没有引号
- 验证JSON字符串字段是否用引号包裹
### 问题3: 模块导入失败
- 确保在项目根目录下运行
- 检查Python路径是否正确设置
- 验证`预定系统/Base/Mqtt_Send.py`文件存在
## 📅 更新记录
- **2026-04-22**: 初始版本,基于JavaScript getDeviceInfoMessage()方法生成
- 创建CSV生成脚本
- 更新Mqtt_Send.py消息构建逻辑
- 添加测试验证脚本
- 编写本文档
...@@ -321,63 +321,143 @@ class Mqtt: ...@@ -321,63 +321,143 @@ class Mqtt:
:param current_time: 当前时间 :param current_time: 当前时间
:return: 消息字典 :return: 消息字典
""" """
#安卓信息设备上报 #安卓信息设备上报(根据JavaScript getDeviceInfoMessage方法)
if topic == "rebootResponseTopic": if topic == "rebootResponseTopic":
return { # 构建会议室绑定信息(buildInfo)
"method": "/system/readSystemInfo", build_info = {
"clientId": config['clientId'], "appToken": config.get('appToken', ''),
"result": json.dumps({ "companyNumber": config.get('companyNumber', ''),
"result": { "cnum": config.get('cnum', ''),
"buildInfo": { "conferenceName": config.get('conferenceName', ''),
"appToken": config['appToken'], "conferenceId": int(config.get('conferenceId', 0)),
"companyNumber": config['companyNumber'], "defaultQrCodeUrl": None,
"cnum": config['cnum'], "aliasName": config.get('conferenceName', ''),
"conferenceName": "测试会议室", "serverBaseUrl": "https://192.168.9.86/exapi/",
"conferenceId": int(config['conferenceId']), "localBindTime": current_time,
"defaultQrCodeUrl": "http://192.168.5.218:8888/group1/M00/00/21/wKgFyGNBWZmADtnNAAAwrxR0X8s016.png", "generalField": json.dumps({
"aliasName": "zt", "floorPlanPath": "",
"serverBaseUrl": "https://192.168.5.218/exapi", "conferencePhone": "",
"localBindTime": current_time, "chooseTimeType": 1,
"generalField": "{\"conferencePhone\":\"\",\"chooseTimeType\":1,\"meetingTopicSwitch\":\"1\",\"meetingContentSwitch\":\"1\",\"meetingReverseTypeSwitch\":\"1\",\"seatArrangeSwitch\":\"1\",\"meetingVoteSwitch\":\"1\",\"floorPlanPath\":\"\",\"jumpToPaperless\":2,\"approvalList\":[],\"isLeaderJoin\":false,\"meetingPublishScreenSwitch\":\"1\"}" "meetingTopicSwitch": "1",
}, "meetingContentSwitch": "1",
"faceVersion": "4.2.12021020201.1", "meetingReverseTypeSwitch": "1",
"wgtVersion": "0.0.81", "seatArrangeSwitch": "0",
"deviceModel": "yx_rk3288", "meetingVoteSwitch": "1",
"abiList": ["armeabi-v7a", "armeabi"], "jumpToPaperless": 2,
"androidId": "48134e6047a19aaf", "meetingPublishScreenSwitch": "1",
"appName": "UBAINS", "isLeaderJoin": False,
"appPackageName": "com.ubains.local.gviewer", "approvalList": []
"appVersion": 78,
"appVersionName": "1.1.78",
"battery": 0,
"bluetoothEnabled": False,
"camerasCount": 1,
"charging": True,
"density": 1,
"freeAndTotalMemory": "1176M/1997M",
"internalAvailableSize": 4306395136,
"internalTotalSize": 4877451264,
"ipAddress": "192.168.5.111",
"macAddress": config['macAddress'],
"networkType": "NETWORK_ETHERNET",
"processCpuUsage": "0.82%",
"resolution": "1280x800",
"romName": "rockchip",
"rooted": True,
"sdkVersionCode": 25,
"sdkVersionName": "7.1.2",
"sysDate": "Tue Oct 22 18:24:52 GMT+08:00 2024",
"sysDatestr": current_time,
"sysElapsedRealtime": "342:26:11",
"sysLanguage": "zh",
"sysSupportedSensors": ["Accelerometer sensor", "Gyroscope sensor",
"Game Rotation Vector Sensor",
"Gravity Sensor"],
"authCode": config['authCode'],
"conferenceName": "测试会议室"
}
}) })
} }
# 解析JSON字符串字段
try:
abi_list = json.loads(config.get('abiList', '[]')) if isinstance(config.get('abiList'), str) else config.get('abiList', [])
except:
abi_list = ["arm64-v8a", "armeabi-v7a", "armeabi"]
try:
sys_supported_sensors = json.loads(config.get('sysSupportedSensors', '[]')) if isinstance(config.get('sysSupportedSensors'), str) else config.get('sysSupportedSensors', [])
except:
sys_supported_sensors = ["Accelerometer sensor"]
try:
build_config = json.loads(config.get('buildConfig', '{}')) if isinstance(config.get('buildConfig'), str) else config.get('buildConfig', {})
except:
build_config = {
"FLAVOR_APP_TYPE": "rksystem",
"BUILD_TYPE": "release",
"FLAVOR_FEATURE": "doorscreen",
"DEBUG": False,
"FLAVOR": "rksystemDoorscreen"
}
# 处理布尔值
charging = config.get('charging', 'true')
if isinstance(charging, str):
charging = charging.lower() == 'true'
bluetooth_enabled = config.get('bluetoothEnabled', 'false')
if isinstance(bluetooth_enabled, str):
bluetooth_enabled = bluetooth_enabled.lower() == 'true'
rooted = config.get('rooted', 'true')
if isinstance(rooted, str):
rooted = rooted.lower() == 'true'
# 处理数值类型
battery = float(config.get('battery', 0))
cameras_count = int(config.get('camerasCount', 1))
density = int(config.get('density', 1))
internal_available_size = int(config.get('internalAvailableSize', 0))
internal_total_size = int(config.get('internalTotalSize', 0))
sdk_version_code = int(config.get('sdkVersionCode', 30))
app_version = int(config.get('appVersion', 351))
# 生成系统日期字符串
from datetime import datetime
sys_date_obj = datetime.now()
sys_date = sys_date_obj.strftime("%a %b %d %H:%M:%S GMT+08:00 %Y")
sys_date_str = sys_date_obj.strftime("%Y-%m-%d %H:%M:%S")
# 计算运行时长(模拟)
seed = hash(config.get('clientId', '')) % 86400 # 一天内的秒数
hours = seed // 3600
minutes = (seed % 3600) // 60
seconds = seed % 60
sys_elapsed_realtime = f"{hours}:{minutes:02d}:{seconds:02d}"
# 构建完整的result对象
result_data = {
"result": {
"buildInfo": build_info,
"faceVersion": config.get('faceVersion', '4.2.12021020201.1'),
"wgtVersion": config.get('wgtVersion', '0.2.134'),
"deviceModel": config.get('deviceModel', 'Pad10-Pro'),
"abiList": abi_list,
"androidId": config.get('clientId', ''),
"appName": config.get('appName', 'UBAINS'),
"appPackageName": config.get('appPackageName', 'com.ubains.local.gviewer'),
"appVersion": app_version,
"appVersionName": config.get('appVersionName', '1.3.351'),
"battery": battery,
"bluetoothEnabled": bluetooth_enabled,
"camerasCount": cameras_count,
"charging": charging,
"density": density,
"freeAndTotalMemory": config.get('freeAndTotalMemory', '698M/1957M'),
"internalAvailableSize": internal_available_size,
"internalTotalSize": internal_total_size,
"ipAddress": config.get('ipAddress', '192.168.1.142'),
"macAddress": config.get('macAddress', ''),
"networkType": config.get('networkType', 'NETWORK_WIFI'),
"processCpuUsage": config.get('processCpuUsage', '28.73%'),
"resolution": config.get('resolution', '1920x1200'),
"romName": config.get('romName', 'yuxian'),
"rooted": rooted,
"sdkVersionCode": sdk_version_code,
"sdkVersionName": config.get('sdkVersionName', '11'),
"sysDate": sys_date,
"sysDateStr": sys_date_str,
"sysElapsedRealtime": sys_elapsed_realtime,
"sysLanguage": config.get('sysLanguage', 'en'),
"sysSupportedSensors": sys_supported_sensors,
"buildConfig": build_config,
"faceBuildInfo": config.get('faceBuildInfo', 'arcfacepro4x'),
"authCode": config.get('appToken', ''),
"conferenceName": config.get('conferenceName', '')
}
}
# 外层消息结构
message = {
"method": "/system/readSystemInfo",
"clientId": config.get('clientId', ''),
"result": json.dumps(result_data, ensure_ascii=False)
}
return message
#安卓信息心跳上报 #安卓信息心跳上报
elif topic == "/uams/android/broadcast": elif topic == "/uams/android/broadcast":
return json.dumps({ return json.dumps({
......
# 预定系统 Base 模块初始化文件
# 预定系统模块初始化文件
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论