提交 d6d89335 authored 作者: PGY's avatar PGY

feat(Mqtt_Universal_Tool): 重构Android信息上报脚本以支持设备配对模式

- 将CSV配置从列表改为字典,区分心跳和设备信息配置
- 修改线程模型:每个线程固定负责一个设备,持续发送心跳和设备信息对
- 调整发送策略:每30秒发送一次心跳和设备信息,而非循环发送
- 增强错误处理:添加连续错误检测,超过阈值自动退出线程
- 优化日志输出:减少冗余日志,按优先级分级显示
- 添加资源监控:集成psutil监控内存和CPU使用情况
- 改进路径处理:修复BOM编码问题和路径导入逻辑
- 优化线程管理:调整线程启动间隔和超时设置
上级 4e9152d6
...@@ -13,13 +13,12 @@ import signal ...@@ -13,13 +13,12 @@ import signal
# ==================== 配置区域 (修改这里即可自定义行为) ==================== # ==================== 配置区域 (修改这里即可自定义行为) ====================
# ============================================================================ # ============================================================================
# 1. CSV配置文件路径列表 (支持多个文件,同时加载) # 1. CSV配置文件路径字典 (区分心跳和设备信息)
# 注意:路径可以是相对于当前脚本的路径,也可以是绝对路径 # 注意:路径可以是相对于当前脚本的路径,也可以是绝对路径
CSV_FILES = [ CSV_FILES = {
'../TestData/ReservationSystem_DoorScreen/MQTT心跳上报_100条.csv', 'heartbeat': '../TestData/ReservationSystem_DoorScreen/MQTT心跳上报_300条.csv',
#'../TestData/ReservationSystem_DoorScreen/MQTT信息上报_100条.csv', 'device_info': '../TestData/ReservationSystem_DoorScreen/MQTT设备信息上报_300条.csv',
'../TestData/ReservationSystem_DoorScreen/MQTT设备信息上报_100条.csv', # 新增:设备信息上报 }
]
# 2. MQTT服务器连接配置 # 2. MQTT服务器连接配置
MQTT_CONFIG = { MQTT_CONFIG = {
...@@ -31,22 +30,23 @@ MQTT_CONFIG = { ...@@ -31,22 +30,23 @@ MQTT_CONFIG = {
# 3. 线程和发送控制 # 3. 线程和发送控制
THREAD_CONFIG = { THREAD_CONFIG = {
'max_threads': 100, # 最大线程数 'max_threads': 300, # 最大线程数(建议根据实际需求调整,50-100通常足够)
'send_interval': 5, # 每条消息发送间隔(秒) 'send_interval': 30, # 每对消息发送间隔(秒)
'startup_delay': 0.05, # 线程启动间隔(秒),避免同时启动 'startup_delay': 0.1, # 线程启动间隔(秒),避免同时启动消耗过大资源
'enable_resource_monitor': True, # 是否启用资源监控
} }
# 4. 日志配置 # 4. 日志配置
LOG_CONFIG = { LOG_CONFIG = {
'log_dir': '/var/log/scripts', # Linux日志目录 'log_dir': '/var/log/scripts', # Linux日志目录
'fallback_log_dir': 'logs', # Windows备用日志目录 'fallback_log_dir': 'logs', # Windows备用日志目录
'log_level': logging.INFO, # 日志级别: DEBUG/INFO/WARNING/ERROR 'log_level': logging.ERROR, # 日志级别: DEBUG/INFO/WARNING/ERROR(改为INFO以便看到启动信息)
'reconnect_log_interval': 10, # 每N次重连打印一次日志 'reconnect_log_interval': 10, # 每N次重连打印一次日志
} }
# 5. 优雅退出配置 # 5. 优雅退出配置
SHUTDOWN_CONFIG = { SHUTDOWN_CONFIG = {
'thread_join_timeout': 10, # 等待线程结束的最大时间(秒) 'thread_join_timeout': 2, # 等待线程结束的最大时间(秒)
'error_wait_time': 5, # 发生错误后等待时间(秒) 'error_wait_time': 5, # 发生错误后等待时间(秒)
} }
...@@ -56,44 +56,66 @@ SHUTDOWN_CONFIG = { ...@@ -56,44 +56,66 @@ SHUTDOWN_CONFIG = {
# 获取当前脚本的绝对路径 # 获取当前脚本的绝对路径
current_dir = os.path.dirname(os.path.abspath(__file__)) current_dir = os.path.dirname(os.path.abspath(__file__))
# 构建预定系统的绝对路径 # 构建预定系统的绝对路径(向上一级到 Mqtt_Universal_Tool,再向上一级到项目根目录)
预定系统_path = os.path.abspath(os.path.join(current_dir, '..', '..', '..')) 预定系统_path = os.path.abspath(os.path.join(current_dir, '..', '..'))
# 添加路径 # 添加路径
sys.path.append(预定系统_path) if 预定系统_path not in sys.path:
sys.path.insert(0, 预定系统_path)
print(f"已添加路径: {预定系统_path}")
# 导入模块 # 导入模块
try: try:
from 预定系统.Base.Mqtt_Send import * from 预定系统.Base.Mqtt_Send import *
except ModuleNotFoundError as e: except ModuleNotFoundError as e:
print(f"ModuleNotFoundError: {e}") print(f"ModuleNotFoundError: {e}")
print("尝试使用绝对路径导入") print(f"当前 sys.path: {sys.path}")
from 预定系统.Base.Mqtt_Send import * raise
# ========== 日志配置 ========== # ========== 日志配置 ==========
# 创建日志目录(遵循项目规范:/var/log/scripts/) # 检测操作系统并设置合适的日志目录
LOG_DIR = LOG_CONFIG['log_dir'] import platform
if platform.system() == 'Windows':
# Windows 系统使用脚本所在目录的 logs 文件夹
LOG_DIR = os.path.join(current_dir, LOG_CONFIG['fallback_log_dir'])
else:
# Linux 系统使用标准日志目录
LOG_DIR = LOG_CONFIG['log_dir']
# 创建日志目录
if not os.path.exists(LOG_DIR): if not os.path.exists(LOG_DIR):
try: try:
os.makedirs(LOG_DIR, exist_ok=True) os.makedirs(LOG_DIR, exist_ok=True)
print(f"已创建日志目录: {LOG_DIR}") print(f"已创建日志目录: {LOG_DIR}")
except PermissionError: except Exception as e:
# Windows环境下使用当前目录作为备选 # 如果创建失败,使用当前目录作为备选
LOG_DIR = os.path.join(current_dir, LOG_CONFIG['fallback_log_dir']) LOG_DIR = os.path.join(current_dir, 'logs')
os.makedirs(LOG_DIR, exist_ok=True) os.makedirs(LOG_DIR, exist_ok=True)
print(f"权限不足,使用备用日志目录: {LOG_DIR}") print(f"使用备用日志目录: {LOG_DIR}")
# 生成日志文件名(包含时间戳) # 生成日志文件名(包含时间戳)
log_filename = f"mqtt_android_info_{datetime.now().strftime('%Y%m%d_%H%M%S')}.log" 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) log_filepath = os.path.join(LOG_DIR, log_filename)
# 配置双通道日志输出(控制台 + 文件) # 配置双通道日志输出(控制台 + 文件)
logging.basicConfig( # 先配置根 logger,确保所有模块的 logging 调用都能输出到控制台
level=LOG_CONFIG['log_level'], root_logger = logging.getLogger()
format='%(asctime)s - %(levelname)s - [%(threadName)s] - %(message)s', root_logger.setLevel(LOG_CONFIG['log_level'])
handlers=[
logging.StreamHandler(), # 控制台输出 # 清除可能存在的旧 handlers
logging.FileHandler(log_filepath, encoding='utf-8') # 文件输出 root_logger.handlers.clear()
]
) # 创建控制台处理器
console_handler = logging.StreamHandler()
console_handler.setLevel(LOG_CONFIG['log_level'])
console_formatter = logging.Formatter('%(asctime)s - %(levelname)s - [%(threadName)s] - %(message)s')
console_handler.setFormatter(console_formatter)
root_logger.addHandler(console_handler)
# 创建文件处理器
file_handler = logging.FileHandler(log_filepath, encoding='utf-8')
file_handler.setLevel(LOG_CONFIG['log_level'])
file_formatter = logging.Formatter('%(asctime)s - %(levelname)s - [%(threadName)s] - %(message)s')
file_handler.setFormatter(file_formatter)
root_logger.addHandler(file_handler)
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
logger.info(f"日志文件路径: {log_filepath}") logger.info(f"日志文件路径: {log_filepath}")
...@@ -131,10 +153,10 @@ class StableMQTTClient: ...@@ -131,10 +153,10 @@ class StableMQTTClient:
self.client = None self.client = None
# 连接状态标记:用于避免重复打印连接成功日志 # 连接状态标记:用于避免重复打印连接成功日志
self.is_connected = False self.is_connected = True
# 重连计数器:统计重连次数 # 重连计数器:统计重连次数
self.reconnect_count = 0 self.reconnect_count = 5
# 最后重连日志时间:用于控制重连日志频率 # 最后重连日志时间:用于控制重连日志频率
self.last_reconnect_log_time = 0 self.last_reconnect_log_time = 0
...@@ -170,7 +192,7 @@ class StableMQTTClient: ...@@ -170,7 +192,7 @@ class StableMQTTClient:
# 只在首次连接或重连成功后打印日志 # 只在首次连接或重连成功后打印日志
if not self.is_connected: if not self.is_connected:
logger.info(f"✅ 连接成功,Client ID: {self.client_id}") #logger.info(f"✅ 连接成功,Client ID: {self.client_id}")
self.is_connected = True self.is_connected = True
else: else:
self.reconnect_count += 1 self.reconnect_count += 1
...@@ -222,191 +244,301 @@ class StableMQTTClient: ...@@ -222,191 +244,301 @@ class StableMQTTClient:
# 工作线程函数 # 工作线程函数
def worker(mqtt_client, config_queue, interval, stop_event): def worker(mqtt_client, device_index, heartbeat_config, device_info_config, interval, stop_event):
"""MQTT消息发布工作线程 """MQTT消息发布工作线程
持续从配置队列中获取配置信息,构建MQTT消息并发布到指定主题。 每个线程固定负责一个设备,持续向该设备发送相同的消息对:
该线程会循环运行直到被外部中断。 1. 心跳上报消息 (/uams/android/broadcast)
2. 设备信息上报消息 (rebootResponseTopic)
每30秒发送一次相同的消息对,循环执行直到被外部中断。
Args: Args:
mqtt_client: 已连接的MQTT客户端实例,用于发布消息 mqtt_client: 已连接的MQTT客户端实例,用于发布消息
config_queue: 包含配置信息的队列,每个配置项应包含topic等必要字段 device_index: 设备索引号(用于日志标识)
interval: 每次消息发布后的间隔时间(秒) heartbeat_config: 该设备的心跳上报配置
device_info_config: 该设备的设备信息上报配置
interval: 每次消息对发送后的间隔时间(秒)
stop_event: 停止事件标志,用于优雅退出线程 stop_event: 停止事件标志,用于优雅退出线程
""" """
thread_name = threading.current_thread().name thread_name = threading.current_thread().name
message_count = 0 message_count = 0
# 获取设备ID用于日志
device_id = heartbeat_config.get('clientId', 'Unknown')
logger.info(f"📋 [{thread_name}] 初始化完成,负责设备 {device_index+1} (clientId={device_id})")
# 资源监控:记录线程启动时间
thread_start_time = time.time()
error_count = 0
max_consecutive_errors = 10 # 连续错误最大次数
while not stop_event.is_set(): while not stop_event.is_set():
try: try:
# 从队列获取配置信息(带超时,便于响应停止信号) current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
try:
config = config_queue.get(timeout=1) # ========== 第1条:发送心跳上报消息 ==========
except: topic = heartbeat_config.get("topic")
if not topic:
logger.error(f"❌ [{thread_name}] 心跳配置缺少topic字段!")
time.sleep(interval)
continue continue
# 构建并发布MQTT消息 message = Mqtt.build_message(heartbeat_config, current_time, topic)
topic = config["topic"] mqtt_client.publish(topic, message)
current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S") message_count += 1
message = Mqtt.build_message(config, current_time, topic) error_count = 0 # 成功后重置错误计数
# 仅在WARNING级别记录心跳消息,减少日志量
logger.log(logging.WARNING if message_count % 10 == 0 else logging.DEBUG,
f"💓 [{thread_name}] 设备{device_index+1} 心跳消息 #{message_count}: clientId={device_id}")
# ========== 第2条:发送设备信息上报消息 ==========
topic = device_info_config.get("topic")
if not topic:
logger.error(f"❌ [{thread_name}] 设备信息配置缺少topic字段!")
time.sleep(interval)
continue
message = Mqtt.build_message(device_info_config, current_time, topic)
mqtt_client.publish(topic, message) mqtt_client.publish(topic, message)
message_count += 1 message_count += 1
# 每发送100条消息打印一次统计信息 # 仅在WARNING级别记录设备信息消息,减少日志量
if message_count % 100 == 0: logger.log(logging.WARNING if message_count % 10 == 0 else logging.DEBUG,
logger.debug(f"📊 [{thread_name}] 已发送 {message_count} 条消息") f"📱 [{thread_name}] 设备{device_index+1} 设备信息 #{message_count}: clientId={device_id}")
# ✅ 关键:每对消息发送后等待固定间隔(30秒)
# 优化:减少INFO日志频率,每10次输出一次
if message_count % 20 == 0:
elapsed = time.time() - thread_start_time
logger.info(f"⏰ [{thread_name}] 设备{device_index+1} 已发送 {message_count} 条消息,运行时长 {elapsed:.0f}秒,等待 {interval} 秒后发送下一轮...")
time.sleep(interval) time.sleep(interval)
except Exception as e: except Exception as e:
# 异常处理:记录错误日志并短暂等待 error_count += 1
logger.error(f"❌ 线程 {thread_name} 发送消息失败: {e}") logger.error(f"❌ [{thread_name}] 设备{device_index+1} 发生错误 #{error_count}: {str(e)}")
time.sleep(SHUTDOWN_CONFIG['error_wait_time']) # 出错后等待
finally:
# 标记队列任务完成
try:
config_queue.task_done()
except:
pass
logger.info(f"🛑 [{thread_name}] 线程已停止,共发送 {message_count} 条消息") # 连续错误过多时,线程自动退出防止资源泄漏
if error_count >= max_consecutive_errors:
logger.critical(f"💀 [{thread_name}] 设备{device_index+1} 连续错误 {error_count} 次,线程将退出")
break
time.sleep(SHUTDOWN_CONFIG['error_wait_time'])
# 全局停止事件
stop_event = threading.Event()
# 主函数
def main():
logger.info("=" * 80)
logger.info("开始执行 MQTT Android 信息上报脚本")
logger.info("=" * 80)
def signal_handler(sig, frame): # 资源监控:记录脚本启动时间
"""处理Ctrl+C信号,优雅退出""" script_start_time = time.time()
logger.info("\n🛑 接收到中断信号,正在优雅退出...")
stop_event.set()
# 分别加载两种类型的配置
heartbeat_configs = []
device_info_configs = []
if __name__ == "__main__": # 加载心跳上报配置
# 注册信号处理器 heartbeat_csv_path = os.path.join(current_dir, CSV_FILES['heartbeat'])
signal.signal(signal.SIGINT, signal_handler) logger.info(f"📂 尝试读取心跳配置文件: {heartbeat_csv_path}")
signal.signal(signal.SIGTERM, signal_handler)
if os.path.exists(heartbeat_csv_path):
# 合并所有CSV配置 try:
configs = [] logger.info(f"⏳ 正在读取心跳 CSV 文件...")
for csv_file_relative_path in CSV_FILES: heartbeat_configs = Mqtt.read_config_from_csv(heartbeat_csv_path)
csv_file_path = os.path.join(current_dir, csv_file_relative_path) logger.info(f"✅ 读取完成,共 {len(heartbeat_configs)} 条心跳配置")
# 修复BOM问题
if heartbeat_configs and len(heartbeat_configs) > 0:
first_key = list(heartbeat_configs[0].keys())[0]
if first_key.startswith('\ufeff'):
logger.warning(f"⚠️ 检测到BOM,正在修复心跳配置的键名")
for config in heartbeat_configs:
clean_key = first_key.replace('\ufeff', '')
if first_key in config:
config[clean_key] = config.pop(first_key)
# 过滤无效配置
heartbeat_configs = [c for c in heartbeat_configs if c and isinstance(c, dict) and c.get("topic")]
logger.info(f"📄 有效心跳配置: {len(heartbeat_configs)} 条")
except Exception as e:
logger.error(f"❌ 读取心跳配置文件时发生错误: {str(e)}", exc_info=True)
else:
logger.error(f"❌ 心跳配置文件不存在: {heartbeat_csv_path}")
# 加载设备信息上报配置
device_info_csv_path = os.path.join(current_dir, CSV_FILES['device_info'])
logger.info(f"📂 尝试读取设备信息配置文件: {device_info_csv_path}")
if os.path.exists(device_info_csv_path):
try: try:
file_configs = Mqtt.read_config_from_csv(csv_file_path) logger.info(f"⏳ 正在读取设备信息 CSV 文件...")
configs.extend(file_configs) device_info_configs = Mqtt.read_config_from_csv(device_info_csv_path)
logger.info(f"📄 从 {csv_file_path} 读取了 {len(file_configs)} 条配置") logger.info(f"✅ 读取完成,共 {len(device_info_configs)} 条设备信息配置")
# 修复BOM问题
if device_info_configs and len(device_info_configs) > 0:
first_key = list(device_info_configs[0].keys())[0]
if first_key.startswith('\ufeff'):
logger.warning(f"⚠️ 检测到BOM,正在修复设备信息配置的键名")
for config in device_info_configs:
clean_key = first_key.replace('\ufeff', '')
if first_key in config:
config[clean_key] = config.pop(first_key)
# 过滤无效配置
device_info_configs = [c for c in device_info_configs if c and isinstance(c, dict) and c.get("topic")]
logger.info(f"📄 有效设备信息配置: {len(device_info_configs)} 条")
except Exception as e: except Exception as e:
logger.error(f"❌ 读取 {csv_file_path} 失败: {e}") logger.error(f"❌ 读取设备信息配置文件时发生错误: {str(e)}", exc_info=True)
else:
logger.error(f"❌ 设备信息配置文件不存在: {device_info_csv_path}")
if not configs: # 检查是否有配置
logger.error("❌ 未读取到任何配置,程序退出") logger.info(f"📊 总共加载了 {len(heartbeat_configs)} 条心跳配置, {len(device_info_configs)} 条设备信息配置")
sys.exit(1)
logger.info(f"📊 总共加载 {len(configs)} 条配置") if not heartbeat_configs or not device_info_configs:
logger.error("❌ 没有有效的配置文件,无法继续执行")
return
# 统计不同类型配置数量 # 计算实际设备数量(取两个配置列表的最小值)
topic_stats = {} actual_device_count = min(len(heartbeat_configs), len(device_info_configs))
for config in configs: logger.info(f"🔢 实际可运行的设备数量: {actual_device_count}")
topic = config.get("topic", "unknown")
topic_stats[topic] = topic_stats.get(topic, 0) + 1
logger.info(f"📈 配置分布: {topic_stats}") # 智能调整线程数
actual_thread_count = min(THREAD_CONFIG['max_threads'], actual_device_count)
num_threads = min(len(configs), THREAD_CONFIG['max_threads']) # 线程数不超过配置数 # 资源警告
if actual_thread_count > 100:
logger.warning(f"⚠️ 线程数 {actual_thread_count} 较多,请注意系统资源消耗!")
logger.warning(f"⚠️ 建议:如果不是压力测试,请减少 max_threads 配置")
# 创建配置队列 logger.info(f"🧵 将启动 {actual_thread_count} 个工作线程(每个线程负责一个设备)")
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: try:
import psutil
process = psutil.Process()
memory_info = process.memory_info()
logger.info(f"💾 当前内存占用: {memory_info.rss / 1024 / 1024:.2f} MB")
except ImportError:
logger.debug("⚠️ psutil 未安装,跳过资源监控(可选安装: pip install psutil)")
logger.info("✅ 配置加载完成,开始创建 MQTT 客户端...")
# 创建MQTT客户端实例
logger.info(f"🔌 正在连接 MQTT 服务器: {MQTT_CONFIG['broker_address']}:{MQTT_CONFIG['port']}")
mqtt_client = StableMQTTClient( mqtt_client = StableMQTTClient(
MQTT_CONFIG['broker_address'], broker_address=MQTT_CONFIG['broker_address'],
MQTT_CONFIG['port'], port=MQTT_CONFIG['port'],
MQTT_CONFIG['username'], username=MQTT_CONFIG['username'],
MQTT_CONFIG['password'], password=MQTT_CONFIG['password'],
client_id client_id="MQTT_Publisher"
) )
mqtt_clients.append(mqtt_client) logger.info("✅ MQTT 客户端创建成功")
except Exception as e:
logger.error(f"❌ 创建客户端 {client_id} 失败: {str(e)}")
failed_clients += 1
if failed_clients > 0: # 创建统一的停止事件(所有线程共享)
logger.warning(f"⚠️ 共有 {failed_clients} 个客户端创建失败") stop_event = threading.Event()
if not mqtt_clients: # 启动工作线程 - 每个线程负责一个固定设备
logger.error("❌ 没有可用的MQTT客户端,程序退出")
sys.exit(1)
try:
# 创建工作线程
threads = [] threads = []
for i in range(num_threads): logger.info(f"🚀 正在启动 {actual_thread_count} 个工作线程...")
t = threading.Thread(
for i in range(actual_thread_count):
# 为每个线程分配固定的设备配置
heartbeat_config = heartbeat_configs[i]
device_info_config = device_info_configs[i]
thread = threading.Thread(
target=worker, target=worker,
args=( args=(mqtt_client, i, heartbeat_config, device_info_config, THREAD_CONFIG['send_interval'], stop_event),
mqtt_clients[i % len(mqtt_clients)], name=f"Device-{i+1}"
config_queue,
THREAD_CONFIG['send_interval'],
stop_event
),
name=f"Worker-{i + 1}",
daemon=False # 改为非守护线程,便于优雅退出
) )
t.start() threads.append(thread)
threads.append(t) thread.start()
time.sleep(THREAD_CONFIG['startup_delay']) # 线程启动间隔
# 主循环 - 持续运行 # 增加启动间隔,避免同时创建线程消耗过大资源
logger.info("🚀 系统已启动,将持续运行... (按 Ctrl+C 停止)") if THREAD_CONFIG['startup_delay'] > 0:
time.sleep(THREAD_CONFIG['startup_delay'])
# 每启动50个线程输出一次进度
if (i + 1) % 50 == 0:
logger.info(f"📈 已启动 {i + 1}/{actual_thread_count} 个线程...")
logger.info("✅ 所有工作线程已启动,每个线程负责一个固定设备")
# 资源监控:启动定时监控线程
if THREAD_CONFIG.get('enable_resource_monitor', False):
def resource_monitor():
"""定期监控系统资源使用情况"""
monitor_count = 0
while not stop_event.is_set(): while not stop_event.is_set():
try: time.sleep(60) # 每60秒监控一次
# 将配置放入队列
for config in configs:
if stop_event.is_set(): if stop_event.is_set():
break break
config_queue.put(config)
# 等待所有任务完成或收到停止信号 monitor_count += 1
while not config_queue.empty() and not stop_event.is_set(): try:
time.sleep(0.1) import psutil
process = psutil.Process()
memory_mb = process.memory_info().rss / 1024 / 1024
cpu_percent = process.cpu_percent()
active_threads = threading.active_count()
logger.info(f"📊 [资源监控] 运行时长 {monitor_count}分钟 | 内存: {memory_mb:.2f}MB | CPU: {cpu_percent:.1f}% | 活跃线程: {active_threads}")
# 内存使用过高警告
if memory_mb > 500:
logger.warning(f"⚠️ [资源监控] 内存使用过高: {memory_mb:.2f}MB,请检查是否有内存泄漏")
except ImportError:
pass # psutil未安装,跳过监控
except Exception as e:
logger.debug(f"资源监控异常: {e}")
monitor_thread = threading.Thread(target=resource_monitor, name="ResourceMonitor", daemon=True)
monitor_thread.start()
logger.info("📊 资源监控已启用(每60秒输出一次)")
if not stop_event.is_set(): logger.info("=" * 80)
logger.info("🎉 脚本启动完成!开始持续发送 MQTT 消息...")
logger.info("💡 提示:按 Ctrl+C 可优雅退出")
logger.info(f"📊 预期消息频率: {actual_thread_count * 2 // THREAD_CONFIG['send_interval']} 条/秒")
logger.info("=" * 80)
try:
# 保持主线程运行,等待中断信号
while not stop_event.is_set():
time.sleep(1) time.sleep(1)
except KeyboardInterrupt:
logger.info("⚠️ 接收到中断信号,正在优雅退出...")
stop_event.set()
except Exception as e: # 等待工作线程结束
logger.error(f"❌ 主循环发生错误: {e}", exc_info=True) logger.info(f"⏳ 等待 {len(threads)} 个工作线程结束...")
time.sleep(SHUTDOWN_CONFIG['error_wait_time']) # 出错后等待 for thread in threads:
thread.join(timeout=SHUTDOWN_CONFIG['thread_join_timeout'])
except Exception as e: # 资源统计
logger.error(f"❌ 发生错误: {e}", exc_info=True) elapsed = time.time() - script_start_time
finally: logger.info(f"📊 [退出统计] 运行时长: {elapsed:.0f}秒 ({elapsed/60:.1f}分钟)")
logger.info("🛑 正在关闭所有连接...")
# 设置停止事件 try:
stop_event.set() import psutil
process = psutil.Process()
memory_mb = process.memory_info().rss / 1024 / 1024
logger.info(f"💾 [退出统计] 最终内存占用: {memory_mb:.2f}MB")
except:
pass
# 等待所有线程结束 logger.info("✅ 所有线程已停止,脚本结束")
for t in threads:
t.join(timeout=SHUTDOWN_CONFIG['thread_join_timeout'])
# 断开所有MQTT连接
success_count = 0 if __name__ == "__main__":
fail_count = 0
for client in mqtt_clients:
try: try:
client.client.disconnect() main()
success_count += 1
except Exception as e: except Exception as e:
fail_count += 1 logger.error(f"❌ 脚本执行出错: {str(e)}", exc_info=True)
logger.debug(f"断开连接失败: {str(e)}") raise
logger.info(f"✅ 已断开 {success_count} 个连接,{fail_count} 个失败")
logger.info(f"📝 日志文件保存在: {log_filepath}")
logger.info("👋 程序已退出")
...@@ -13,17 +13,16 @@ import signal ...@@ -13,17 +13,16 @@ import signal
# ==================== 配置区域 (修改这里即可自定义行为) ==================== # ==================== 配置区域 (修改这里即可自定义行为) ====================
# ============================================================================ # ============================================================================
# 1. CSV配置文件路径列表 (支持多个文件,同时加载) # 1. CSV配置文件路径字典 (区分心跳和设备信息)
# 注意:路径可以是相对于当前脚本的路径,也可以是绝对路径 # 注意:路径可以是相对于当前脚本的路径,也可以是绝对路径
CSV_FILES = [ CSV_FILES = {
'../../TestData/ReservationSystem_DoorScreen/MQTT心跳上报_100条.csv', 'heartbeat': '../TestData/ReservationSystem_DoorScreen/MQTT心跳上报_300条553.csv',
#'../TestData/ReservationSystem_DoorScreen/MQTT信息上报_100条.csv', 'device_info': '../TestData/ReservationSystem_DoorScreen/MQTT设备信息上报_300条553.csv',
'../../TestData/ReservationSystem_DoorScreen/MQTT设备信息上报_100条.csv', # 新增:设备信息上报 }
]
# 2. MQTT服务器连接配置 # 2. MQTT服务器连接配置
MQTT_CONFIG = { MQTT_CONFIG = {
'broker_address': '192.168.5.50', # MQTT服务器地址 'broker_address': '192.168.5.53', # MQTT服务器地址
'port': 1883, # 端口号 'port': 1883, # 端口号
'username': 'mqtt@cmdb', # 用户名 'username': 'mqtt@cmdb', # 用户名
'password': 'mqtt@webpassw0RD', # 密码 'password': 'mqtt@webpassw0RD', # 密码
...@@ -31,22 +30,23 @@ MQTT_CONFIG = { ...@@ -31,22 +30,23 @@ MQTT_CONFIG = {
# 3. 线程和发送控制 # 3. 线程和发送控制
THREAD_CONFIG = { THREAD_CONFIG = {
'max_threads': 100, # 最大线程数 'max_threads': 300, # 最大线程数(建议根据实际需求调整,50-100通常足够)
'send_interval': 1, # 每条消息发送间隔(秒) 'send_interval': 30, # 每对消息发送间隔(秒)
'startup_delay': 0.05, # 线程启动间隔(秒),避免同时启动 'startup_delay': 0.1, # 线程启动间隔(秒),避免同时启动消耗过大资源
'enable_resource_monitor': True, # 是否启用资源监控
} }
# 4. 日志配置 # 4. 日志配置
LOG_CONFIG = { LOG_CONFIG = {
'log_dir': '/var/log/scripts', # Linux日志目录 'log_dir': '/var/log/scripts', # Linux日志目录
'fallback_log_dir': 'logs', # Windows备用日志目录 'fallback_log_dir': 'logs', # Windows备用日志目录
'log_level': logging.INFO, # 日志级别: DEBUG/INFO/WARNING/ERROR 'log_level': logging.ERROR, # 日志级别: DEBUG/INFO/WARNING/ERROR(改为INFO以便看到启动信息)
'reconnect_log_interval': 10, # 每N次重连打印一次日志 'reconnect_log_interval': 10, # 每N次重连打印一次日志
} }
# 5. 优雅退出配置 # 5. 优雅退出配置
SHUTDOWN_CONFIG = { SHUTDOWN_CONFIG = {
'thread_join_timeout': 10, # 等待线程结束的最大时间(秒) 'thread_join_timeout': 2, # 等待线程结束的最大时间(秒)
'error_wait_time': 5, # 发生错误后等待时间(秒) 'error_wait_time': 5, # 发生错误后等待时间(秒)
} }
...@@ -56,44 +56,66 @@ SHUTDOWN_CONFIG = { ...@@ -56,44 +56,66 @@ SHUTDOWN_CONFIG = {
# 获取当前脚本的绝对路径 # 获取当前脚本的绝对路径
current_dir = os.path.dirname(os.path.abspath(__file__)) current_dir = os.path.dirname(os.path.abspath(__file__))
# 构建预定系统的绝对路径 # 构建预定系统的绝对路径(向上一级到 Mqtt_Universal_Tool,再向上一级到项目根目录)
预定系统_path = os.path.abspath(os.path.join(current_dir, '..', '..', '..')) 预定系统_path = os.path.abspath(os.path.join(current_dir, '..', '..'))
# 添加路径 # 添加路径
sys.path.append(预定系统_path) if 预定系统_path not in sys.path:
sys.path.insert(0, 预定系统_path)
print(f"已添加路径: {预定系统_path}")
# 导入模块 # 导入模块
try: try:
from 预定系统.Base.Mqtt_Send import * from 预定系统.Base.Mqtt_Send import *
except ModuleNotFoundError as e: except ModuleNotFoundError as e:
print(f"ModuleNotFoundError: {e}") print(f"ModuleNotFoundError: {e}")
print("尝试使用绝对路径导入") print(f"当前 sys.path: {sys.path}")
from 预定系统.Base.Mqtt_Send import * raise
# ========== 日志配置 ========== # ========== 日志配置 ==========
# 创建日志目录(遵循项目规范:/var/log/scripts/) # 检测操作系统并设置合适的日志目录
LOG_DIR = LOG_CONFIG['log_dir'] import platform
if platform.system() == 'Windows':
# Windows 系统使用脚本所在目录的 logs 文件夹
LOG_DIR = os.path.join(current_dir, LOG_CONFIG['fallback_log_dir'])
else:
# Linux 系统使用标准日志目录
LOG_DIR = LOG_CONFIG['log_dir']
# 创建日志目录
if not os.path.exists(LOG_DIR): if not os.path.exists(LOG_DIR):
try: try:
os.makedirs(LOG_DIR, exist_ok=True) os.makedirs(LOG_DIR, exist_ok=True)
print(f"已创建日志目录: {LOG_DIR}") print(f"已创建日志目录: {LOG_DIR}")
except PermissionError: except Exception as e:
# Windows环境下使用当前目录作为备选 # 如果创建失败,使用当前目录作为备选
LOG_DIR = os.path.join(current_dir, LOG_CONFIG['fallback_log_dir']) LOG_DIR = os.path.join(current_dir, 'logs')
os.makedirs(LOG_DIR, exist_ok=True) os.makedirs(LOG_DIR, exist_ok=True)
print(f"权限不足,使用备用日志目录: {LOG_DIR}") print(f"使用备用日志目录: {LOG_DIR}")
# 生成日志文件名(包含时间戳) # 生成日志文件名(包含时间戳)
log_filename = f"mqtt_android_info_{datetime.now().strftime('%Y%m%d_%H%M%S')}.log" 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) log_filepath = os.path.join(LOG_DIR, log_filename)
# 配置双通道日志输出(控制台 + 文件) # 配置双通道日志输出(控制台 + 文件)
logging.basicConfig( # 先配置根 logger,确保所有模块的 logging 调用都能输出到控制台
level=LOG_CONFIG['log_level'], root_logger = logging.getLogger()
format='%(asctime)s - %(levelname)s - [%(threadName)s] - %(message)s', root_logger.setLevel(LOG_CONFIG['log_level'])
handlers=[
logging.StreamHandler(), # 控制台输出 # 清除可能存在的旧 handlers
logging.FileHandler(log_filepath, encoding='utf-8') # 文件输出 root_logger.handlers.clear()
]
) # 创建控制台处理器
console_handler = logging.StreamHandler()
console_handler.setLevel(LOG_CONFIG['log_level'])
console_formatter = logging.Formatter('%(asctime)s - %(levelname)s - [%(threadName)s] - %(message)s')
console_handler.setFormatter(console_formatter)
root_logger.addHandler(console_handler)
# 创建文件处理器
file_handler = logging.FileHandler(log_filepath, encoding='utf-8')
file_handler.setLevel(LOG_CONFIG['log_level'])
file_formatter = logging.Formatter('%(asctime)s - %(levelname)s - [%(threadName)s] - %(message)s')
file_handler.setFormatter(file_formatter)
root_logger.addHandler(file_handler)
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
logger.info(f"日志文件路径: {log_filepath}") logger.info(f"日志文件路径: {log_filepath}")
...@@ -131,10 +153,10 @@ class StableMQTTClient: ...@@ -131,10 +153,10 @@ class StableMQTTClient:
self.client = None self.client = None
# 连接状态标记:用于避免重复打印连接成功日志 # 连接状态标记:用于避免重复打印连接成功日志
self.is_connected = False self.is_connected = True
# 重连计数器:统计重连次数 # 重连计数器:统计重连次数
self.reconnect_count = 0 self.reconnect_count = 5
# 最后重连日志时间:用于控制重连日志频率 # 最后重连日志时间:用于控制重连日志频率
self.last_reconnect_log_time = 0 self.last_reconnect_log_time = 0
...@@ -170,7 +192,7 @@ class StableMQTTClient: ...@@ -170,7 +192,7 @@ class StableMQTTClient:
# 只在首次连接或重连成功后打印日志 # 只在首次连接或重连成功后打印日志
if not self.is_connected: if not self.is_connected:
logger.info(f"✅ 连接成功,Client ID: {self.client_id}") #logger.info(f"✅ 连接成功,Client ID: {self.client_id}")
self.is_connected = True self.is_connected = True
else: else:
self.reconnect_count += 1 self.reconnect_count += 1
...@@ -222,191 +244,301 @@ class StableMQTTClient: ...@@ -222,191 +244,301 @@ class StableMQTTClient:
# 工作线程函数 # 工作线程函数
def worker(mqtt_client, config_queue, interval, stop_event): def worker(mqtt_client, device_index, heartbeat_config, device_info_config, interval, stop_event):
"""MQTT消息发布工作线程 """MQTT消息发布工作线程
持续从配置队列中获取配置信息,构建MQTT消息并发布到指定主题。 每个线程固定负责一个设备,持续向该设备发送相同的消息对:
该线程会循环运行直到被外部中断。 1. 心跳上报消息 (/uams/android/broadcast)
2. 设备信息上报消息 (rebootResponseTopic)
每30秒发送一次相同的消息对,循环执行直到被外部中断。
Args: Args:
mqtt_client: 已连接的MQTT客户端实例,用于发布消息 mqtt_client: 已连接的MQTT客户端实例,用于发布消息
config_queue: 包含配置信息的队列,每个配置项应包含topic等必要字段 device_index: 设备索引号(用于日志标识)
interval: 每次消息发布后的间隔时间(秒) heartbeat_config: 该设备的心跳上报配置
device_info_config: 该设备的设备信息上报配置
interval: 每次消息对发送后的间隔时间(秒)
stop_event: 停止事件标志,用于优雅退出线程 stop_event: 停止事件标志,用于优雅退出线程
""" """
thread_name = threading.current_thread().name thread_name = threading.current_thread().name
message_count = 0 message_count = 0
# 获取设备ID用于日志
device_id = heartbeat_config.get('clientId', 'Unknown')
logger.info(f"📋 [{thread_name}] 初始化完成,负责设备 {device_index+1} (clientId={device_id})")
# 资源监控:记录线程启动时间
thread_start_time = time.time()
error_count = 0
max_consecutive_errors = 10 # 连续错误最大次数
while not stop_event.is_set(): while not stop_event.is_set():
try: try:
# 从队列获取配置信息(带超时,便于响应停止信号) current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
try:
config = config_queue.get(timeout=1) # ========== 第1条:发送心跳上报消息 ==========
except: topic = heartbeat_config.get("topic")
if not topic:
logger.error(f"❌ [{thread_name}] 心跳配置缺少topic字段!")
time.sleep(interval)
continue continue
# 构建并发布MQTT消息 message = Mqtt.build_message(heartbeat_config, current_time, topic)
topic = config["topic"] mqtt_client.publish(topic, message)
current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S") message_count += 1
message = Mqtt.build_message(config, current_time, topic) error_count = 0 # 成功后重置错误计数
# 仅在WARNING级别记录心跳消息,减少日志量
logger.log(logging.WARNING if message_count % 10 == 0 else logging.DEBUG,
f"💓 [{thread_name}] 设备{device_index+1} 心跳消息 #{message_count}: clientId={device_id}")
# ========== 第2条:发送设备信息上报消息 ==========
topic = device_info_config.get("topic")
if not topic:
logger.error(f"❌ [{thread_name}] 设备信息配置缺少topic字段!")
time.sleep(interval)
continue
message = Mqtt.build_message(device_info_config, current_time, topic)
mqtt_client.publish(topic, message) mqtt_client.publish(topic, message)
message_count += 1 message_count += 1
# 每发送100条消息打印一次统计信息 # 仅在WARNING级别记录设备信息消息,减少日志量
if message_count % 100 == 0: logger.log(logging.WARNING if message_count % 10 == 0 else logging.DEBUG,
logger.debug(f"📊 [{thread_name}] 已发送 {message_count} 条消息") f"📱 [{thread_name}] 设备{device_index+1} 设备信息 #{message_count}: clientId={device_id}")
# ✅ 关键:每对消息发送后等待固定间隔(30秒)
# 优化:减少INFO日志频率,每10次输出一次
if message_count % 20 == 0:
elapsed = time.time() - thread_start_time
logger.info(f"⏰ [{thread_name}] 设备{device_index+1} 已发送 {message_count} 条消息,运行时长 {elapsed:.0f}秒,等待 {interval} 秒后发送下一轮...")
time.sleep(interval) time.sleep(interval)
except Exception as e: except Exception as e:
# 异常处理:记录错误日志并短暂等待 error_count += 1
logger.error(f"❌ 线程 {thread_name} 发送消息失败: {e}") logger.error(f"❌ [{thread_name}] 设备{device_index+1} 发生错误 #{error_count}: {str(e)}")
time.sleep(SHUTDOWN_CONFIG['error_wait_time']) # 出错后等待
finally:
# 标记队列任务完成
try:
config_queue.task_done()
except:
pass
logger.info(f"🛑 [{thread_name}] 线程已停止,共发送 {message_count} 条消息") # 连续错误过多时,线程自动退出防止资源泄漏
if error_count >= max_consecutive_errors:
logger.critical(f"💀 [{thread_name}] 设备{device_index+1} 连续错误 {error_count} 次,线程将退出")
break
time.sleep(SHUTDOWN_CONFIG['error_wait_time'])
# 全局停止事件
stop_event = threading.Event()
# 主函数
def main():
logger.info("=" * 80)
logger.info("开始执行 MQTT Android 信息上报脚本")
logger.info("=" * 80)
def signal_handler(sig, frame): # 资源监控:记录脚本启动时间
"""处理Ctrl+C信号,优雅退出""" script_start_time = time.time()
logger.info("\n🛑 接收到中断信号,正在优雅退出...")
stop_event.set()
# 分别加载两种类型的配置
heartbeat_configs = []
device_info_configs = []
if __name__ == "__main__": # 加载心跳上报配置
# 注册信号处理器 heartbeat_csv_path = os.path.join(current_dir, CSV_FILES['heartbeat'])
signal.signal(signal.SIGINT, signal_handler) logger.info(f"📂 尝试读取心跳配置文件: {heartbeat_csv_path}")
signal.signal(signal.SIGTERM, signal_handler)
if os.path.exists(heartbeat_csv_path):
# 合并所有CSV配置 try:
configs = [] logger.info(f"⏳ 正在读取心跳 CSV 文件...")
for csv_file_relative_path in CSV_FILES: heartbeat_configs = Mqtt.read_config_from_csv(heartbeat_csv_path)
csv_file_path = os.path.join(current_dir, csv_file_relative_path) logger.info(f"✅ 读取完成,共 {len(heartbeat_configs)} 条心跳配置")
# 修复BOM问题
if heartbeat_configs and len(heartbeat_configs) > 0:
first_key = list(heartbeat_configs[0].keys())[0]
if first_key.startswith('\ufeff'):
logger.warning(f"⚠️ 检测到BOM,正在修复心跳配置的键名")
for config in heartbeat_configs:
clean_key = first_key.replace('\ufeff', '')
if first_key in config:
config[clean_key] = config.pop(first_key)
# 过滤无效配置
heartbeat_configs = [c for c in heartbeat_configs if c and isinstance(c, dict) and c.get("topic")]
logger.info(f"📄 有效心跳配置: {len(heartbeat_configs)} 条")
except Exception as e:
logger.error(f"❌ 读取心跳配置文件时发生错误: {str(e)}", exc_info=True)
else:
logger.error(f"❌ 心跳配置文件不存在: {heartbeat_csv_path}")
# 加载设备信息上报配置
device_info_csv_path = os.path.join(current_dir, CSV_FILES['device_info'])
logger.info(f"📂 尝试读取设备信息配置文件: {device_info_csv_path}")
if os.path.exists(device_info_csv_path):
try: try:
file_configs = Mqtt.read_config_from_csv(csv_file_path) logger.info(f"⏳ 正在读取设备信息 CSV 文件...")
configs.extend(file_configs) device_info_configs = Mqtt.read_config_from_csv(device_info_csv_path)
logger.info(f"📄 从 {csv_file_path} 读取了 {len(file_configs)} 条配置") logger.info(f"✅ 读取完成,共 {len(device_info_configs)} 条设备信息配置")
# 修复BOM问题
if device_info_configs and len(device_info_configs) > 0:
first_key = list(device_info_configs[0].keys())[0]
if first_key.startswith('\ufeff'):
logger.warning(f"⚠️ 检测到BOM,正在修复设备信息配置的键名")
for config in device_info_configs:
clean_key = first_key.replace('\ufeff', '')
if first_key in config:
config[clean_key] = config.pop(first_key)
# 过滤无效配置
device_info_configs = [c for c in device_info_configs if c and isinstance(c, dict) and c.get("topic")]
logger.info(f"📄 有效设备信息配置: {len(device_info_configs)} 条")
except Exception as e: except Exception as e:
logger.error(f"❌ 读取 {csv_file_path} 失败: {e}") logger.error(f"❌ 读取设备信息配置文件时发生错误: {str(e)}", exc_info=True)
else:
logger.error(f"❌ 设备信息配置文件不存在: {device_info_csv_path}")
if not configs: # 检查是否有配置
logger.error("❌ 未读取到任何配置,程序退出") logger.info(f"📊 总共加载了 {len(heartbeat_configs)} 条心跳配置, {len(device_info_configs)} 条设备信息配置")
sys.exit(1)
logger.info(f"📊 总共加载 {len(configs)} 条配置") if not heartbeat_configs or not device_info_configs:
logger.error("❌ 没有有效的配置文件,无法继续执行")
return
# 统计不同类型配置数量 # 计算实际设备数量(取两个配置列表的最小值)
topic_stats = {} actual_device_count = min(len(heartbeat_configs), len(device_info_configs))
for config in configs: logger.info(f"🔢 实际可运行的设备数量: {actual_device_count}")
topic = config.get("topic", "unknown")
topic_stats[topic] = topic_stats.get(topic, 0) + 1
logger.info(f"📈 配置分布: {topic_stats}") # 智能调整线程数
actual_thread_count = min(THREAD_CONFIG['max_threads'], actual_device_count)
num_threads = min(len(configs), THREAD_CONFIG['max_threads']) # 线程数不超过配置数 # 资源警告
if actual_thread_count > 100:
logger.warning(f"⚠️ 线程数 {actual_thread_count} 较多,请注意系统资源消耗!")
logger.warning(f"⚠️ 建议:如果不是压力测试,请减少 max_threads 配置")
# 创建配置队列 logger.info(f"🧵 将启动 {actual_thread_count} 个工作线程(每个线程负责一个设备)")
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: try:
import psutil
process = psutil.Process()
memory_info = process.memory_info()
logger.info(f"💾 当前内存占用: {memory_info.rss / 1024 / 1024:.2f} MB")
except ImportError:
logger.debug("⚠️ psutil 未安装,跳过资源监控(可选安装: pip install psutil)")
logger.info("✅ 配置加载完成,开始创建 MQTT 客户端...")
# 创建MQTT客户端实例
logger.info(f"🔌 正在连接 MQTT 服务器: {MQTT_CONFIG['broker_address']}:{MQTT_CONFIG['port']}")
mqtt_client = StableMQTTClient( mqtt_client = StableMQTTClient(
MQTT_CONFIG['broker_address'], broker_address=MQTT_CONFIG['broker_address'],
MQTT_CONFIG['port'], port=MQTT_CONFIG['port'],
MQTT_CONFIG['username'], username=MQTT_CONFIG['username'],
MQTT_CONFIG['password'], password=MQTT_CONFIG['password'],
client_id client_id="MQTT_Publisher"
) )
mqtt_clients.append(mqtt_client) logger.info("✅ MQTT 客户端创建成功")
except Exception as e:
logger.error(f"❌ 创建客户端 {client_id} 失败: {str(e)}")
failed_clients += 1
if failed_clients > 0: # 创建统一的停止事件(所有线程共享)
logger.warning(f"⚠️ 共有 {failed_clients} 个客户端创建失败") stop_event = threading.Event()
if not mqtt_clients: # 启动工作线程 - 每个线程负责一个固定设备
logger.error("❌ 没有可用的MQTT客户端,程序退出")
sys.exit(1)
try:
# 创建工作线程
threads = [] threads = []
for i in range(num_threads): logger.info(f"🚀 正在启动 {actual_thread_count} 个工作线程...")
t = threading.Thread(
for i in range(actual_thread_count):
# 为每个线程分配固定的设备配置
heartbeat_config = heartbeat_configs[i]
device_info_config = device_info_configs[i]
thread = threading.Thread(
target=worker, target=worker,
args=( args=(mqtt_client, i, heartbeat_config, device_info_config, THREAD_CONFIG['send_interval'], stop_event),
mqtt_clients[i % len(mqtt_clients)], name=f"Device-{i+1}"
config_queue,
THREAD_CONFIG['send_interval'],
stop_event
),
name=f"Worker-{i + 1}",
daemon=False # 改为非守护线程,便于优雅退出
) )
t.start() threads.append(thread)
threads.append(t) thread.start()
time.sleep(THREAD_CONFIG['startup_delay']) # 线程启动间隔
# 主循环 - 持续运行 # 增加启动间隔,避免同时创建线程消耗过大资源
logger.info("🚀 系统已启动,将持续运行... (按 Ctrl+C 停止)") if THREAD_CONFIG['startup_delay'] > 0:
time.sleep(THREAD_CONFIG['startup_delay'])
# 每启动50个线程输出一次进度
if (i + 1) % 50 == 0:
logger.info(f"📈 已启动 {i + 1}/{actual_thread_count} 个线程...")
logger.info("✅ 所有工作线程已启动,每个线程负责一个固定设备")
# 资源监控:启动定时监控线程
if THREAD_CONFIG.get('enable_resource_monitor', False):
def resource_monitor():
"""定期监控系统资源使用情况"""
monitor_count = 0
while not stop_event.is_set(): while not stop_event.is_set():
try: time.sleep(60) # 每60秒监控一次
# 将配置放入队列
for config in configs:
if stop_event.is_set(): if stop_event.is_set():
break break
config_queue.put(config)
# 等待所有任务完成或收到停止信号 monitor_count += 1
while not config_queue.empty() and not stop_event.is_set(): try:
time.sleep(0.1) import psutil
process = psutil.Process()
memory_mb = process.memory_info().rss / 1024 / 1024
cpu_percent = process.cpu_percent()
active_threads = threading.active_count()
logger.info(f"📊 [资源监控] 运行时长 {monitor_count}分钟 | 内存: {memory_mb:.2f}MB | CPU: {cpu_percent:.1f}% | 活跃线程: {active_threads}")
# 内存使用过高警告
if memory_mb > 500:
logger.warning(f"⚠️ [资源监控] 内存使用过高: {memory_mb:.2f}MB,请检查是否有内存泄漏")
except ImportError:
pass # psutil未安装,跳过监控
except Exception as e:
logger.debug(f"资源监控异常: {e}")
monitor_thread = threading.Thread(target=resource_monitor, name="ResourceMonitor", daemon=True)
monitor_thread.start()
logger.info("📊 资源监控已启用(每60秒输出一次)")
if not stop_event.is_set(): logger.info("=" * 80)
logger.info("🎉 脚本启动完成!开始持续发送 MQTT 消息...")
logger.info("💡 提示:按 Ctrl+C 可优雅退出")
logger.info(f"📊 预期消息频率: {actual_thread_count * 2 // THREAD_CONFIG['send_interval']} 条/秒")
logger.info("=" * 80)
try:
# 保持主线程运行,等待中断信号
while not stop_event.is_set():
time.sleep(1) time.sleep(1)
except KeyboardInterrupt:
logger.info("⚠️ 接收到中断信号,正在优雅退出...")
stop_event.set()
except Exception as e: # 等待工作线程结束
logger.error(f"❌ 主循环发生错误: {e}", exc_info=True) logger.info(f"⏳ 等待 {len(threads)} 个工作线程结束...")
time.sleep(SHUTDOWN_CONFIG['error_wait_time']) # 出错后等待 for thread in threads:
thread.join(timeout=SHUTDOWN_CONFIG['thread_join_timeout'])
except Exception as e: # 资源统计
logger.error(f"❌ 发生错误: {e}", exc_info=True) elapsed = time.time() - script_start_time
finally: logger.info(f"📊 [退出统计] 运行时长: {elapsed:.0f}秒 ({elapsed/60:.1f}分钟)")
logger.info("🛑 正在关闭所有连接...")
# 设置停止事件 try:
stop_event.set() import psutil
process = psutil.Process()
memory_mb = process.memory_info().rss / 1024 / 1024
logger.info(f"💾 [退出统计] 最终内存占用: {memory_mb:.2f}MB")
except:
pass
# 等待所有线程结束 logger.info("✅ 所有线程已停止,脚本结束")
for t in threads:
t.join(timeout=SHUTDOWN_CONFIG['thread_join_timeout'])
# 断开所有MQTT连接
success_count = 0 if __name__ == "__main__":
fail_count = 0
for client in mqtt_clients:
try: try:
client.client.disconnect() main()
success_count += 1
except Exception as e: except Exception as e:
fail_count += 1 logger.error(f"❌ 脚本执行出错: {str(e)}", exc_info=True)
logger.debug(f"断开连接失败: {str(e)}") raise
logger.info(f"✅ 已断开 {success_count} 个连接,{fail_count} 个失败")
logger.info(f"📝 日志文件保存在: {log_filepath}")
logger.info("👋 程序已退出")
import csv
csv_file = r'E:\ubains-module-test\ubains-module-test\Mqtt_Universal_Tool\TestData\ReservationSystem_DoorScreen\MQTT设备信息上报_100条.csv'
print("=" * 80)
print("测试不同编码的读取结果")
print("=" * 80)
# 测试1: utf-8 (不带sig)
print("\n【测试1】使用 encoding='utf-8' (Mqtt类使用的编码):")
with open(csv_file, 'r', encoding='utf-8') as f:
reader = csv.DictReader(f)
configs = [row for row in reader]
first = configs[0]
keys = list(first.keys())[:3]
bom_topic = '\ufefftopic'
print(f" 前3个键: {keys}")
print(f" 第一个键的repr: {repr(keys[0])}")
print(f" topic值: '{first.get('topic', 'MISSING')}'")
print(f" BOM+topic值: '{first.get(bom_topic, 'MISSING')}'")
# 测试2: utf-8-sig (带BOM处理)
print("\n【测试2】使用 encoding='utf-8-sig' (正确处理BOM):")
with open(csv_file, 'r', encoding='utf-8-sig') as f:
reader = csv.DictReader(f)
configs = [row for row in reader]
first = configs[0]
keys = list(first.keys())[:3]
print(f" 前3个键: {keys}")
print(f" 第一个键的repr: {repr(keys[0])}")
print(f" topic值: '{first.get('topic', 'MISSING')}'")
print("\n" + "=" * 80)
print("结论: CSV文件有BOM,必须用utf-8-sig编码读取!")
print("=" * 80)
import csv
import os
# 获取当前脚本的绝对路径
current_dir = os.path.dirname(os.path.abspath(__file__))
csv_file = os.path.join(current_dir, '../TestData/ReservationSystem_DoorScreen/MQTT设备信息上报_100条.csv')
print("=" * 80)
print("调试CSV读取结果")
print("=" * 80)
with open(csv_file, 'r', encoding='utf-8-sig') as f:
reader = csv.DictReader(f)
configs = [row for row in reader]
if configs:
first = configs[0]
print(f"配置类型: {type(first)}")
print(f"是否为dict: {isinstance(first, dict)}")
if isinstance(first, dict):
all_keys = list(first.keys())
print(f"\n所有键名 ({len(all_keys)}个):")
for i, key in enumerate(all_keys[:15]):
print(f" [{i}] '{key}' -> 值长度:{len(str(first[key])) if first[key] else 0}")
# 查找topic相关键
topic_keys = [k for k in all_keys if 'topic' in k.lower()]
print(f"\n包含'topic'的键: {topic_keys}")
for tk in topic_keys:
value = first.get(tk)
print(f" 键'{tk}'的值: '{value}' (类型:{type(value)}, 长度:{len(str(value)) if value else 0})")
# 检查topic键
topic_value = first.get('topic', 'KEY_NOT_FOUND')
print(f"\nfirst.get('topic'): '{topic_value}' (类型:{type(topic_value)})")
# 尝试直接访问
try:
direct_topic = first['topic']
print(f"first['topic']: '{direct_topic}'")
except KeyError as e:
print(f"first['topic'] 抛出KeyError: {e}")
print("=" * 80)
import os
import sys
import csv
# 获取当前脚本的绝对路径
current_dir = os.path.dirname(os.path.abspath(__file__))
预定系统_path = os.path.abspath(os.path.join(current_dir, '..', '..', '..'))
sys.path.append(预定系统_path)
from 预定系统.Base.Mqtt_Send import Mqtt
# CSV文件路径
csv_file = os.path.join(current_dir, '../TestData/ReservationSystem_DoorScreen/MQTT设备信息上报_100条.csv')
print("=" * 80)
print("调试CSV文件读取")
print("=" * 80)
print(f"文件路径: {csv_file}")
print(f"文件存在: {os.path.exists(csv_file)}")
print()
# 读取配置
configs = Mqtt.read_config_from_csv(csv_file)
print(f"读取到的配置数量: {len(configs)}")
print()
# 检查前5条配置
print("前5条配置的topic字段:")
for i, config in enumerate(configs[:5]):
topic = config.get('topic', 'MISSING')
print(f" [{i}] topic='{topic}', 类型={type(topic)}, 长度={len(str(topic)) if topic else 0}")
# 显示所有键
if i == 0:
print(f"\n第一条配置的所有键 ({len(config.keys())}个):")
for key in config.keys():
value = config[key]
display_value = value if len(str(value)) < 50 else str(value)[:50] + "..."
print(f" - {key}: '{display_value}'")
print()
# 检查是否有空topic
empty_topic_count = sum(1 for c in configs if not c.get('topic'))
print(f"topic为空的配置数量: {empty_topic_count}")
if empty_topic_count > 0:
print("\n⚠️ 发现空topic配置! 这些配置会导致发送失败。")
print("\n空topic配置示例:")
for i, config in enumerate(configs):
if not config.get('topic'):
print(f" [{i}] 完整配置: {dict(list(config.items())[:5])}")
if i >= 2: # 只显示前3个
break
else:
print("✓ 所有配置都有topic字段")
print()
print("=" * 80)
import os
import sys
import csv
# 直接使用csv模块测试,不依赖Mqtt类
csv_file = r'E:\ubains-module-test\ubains-module-test\Mqtt_Universal_Tool\TestData\ReservationSystem_DoorScreen\MQTT设备信息上报_100条.csv'
print("=" * 80)
print("验证CSV配置数据完整性")
print("=" * 80)
print(f"文件路径: {csv_file}")
print(f"文件存在: {os.path.exists(csv_file)}")
print()
# 读取配置
with open(csv_file, 'r', encoding='utf-8-sig') as f:
reader = csv.DictReader(f)
configs = [row for row in reader]
print(f"原始配置数量: {len(configs)}")
# 模拟过滤逻辑
valid_configs = []
invalid_count = 0
for config in configs:
if config and isinstance(config, dict) and config.get("topic"):
valid_configs.append(config)
else:
invalid_count += 1
print(f"有效配置数量: {len(valid_configs)}")
print(f"无效配置数量: {invalid_count}")
print()
if invalid_count > 0:
print("⚠️ 发现无效配置!")
print("\n无效配置示例:")
for i, config in enumerate(configs):
if not config or not isinstance(config, dict) or not config.get("topic"):
print(f" [{i}] 配置类型: {type(config)}")
if isinstance(config, dict):
print(f" 所有键: {list(config.keys())[:5]}")
else:
print(f" 值: {config}")
if i >= 2:
break
else:
print("✓ 所有配置都有效!")
print()
# 检查前3条有效配置
if valid_configs:
print("前3条有效配置示例:")
for i, config in enumerate(valid_configs[:3]):
topic = config.get('topic', 'MISSING')
client_id = config.get('clientId', 'MISSING')
conference_name = config.get('conferenceName', 'MISSING')
print(f" [{i}] topic={topic}, clientId={client_id}, conferenceName={conference_name}")
print()
print("=" * 80)
topic,clientId,appToken,companyNumber,cnum,conferenceId,macAddress,authCode,clientId,deviceId topic,clientId,deviceId
/uams/android/broadcast,,,,,,,,48134e6047a19a0001,aa44e258a4e1e0001 /uams/android/broadcast,48134e6047a19a0001,48134e6047a19a0001
/uams/android/broadcast,,,,,,,,48134e6047a19a0002,aa44e258a4e1e0002 /uams/android/broadcast,48134e6047a19a0002,48134e6047a19a0002
/uams/android/broadcast,,,,,,,,48134e6047a19a0003,aa44e258a4e1e0003 /uams/android/broadcast,48134e6047a19a0003,48134e6047a19a0003
/uams/android/broadcast,,,,,,,,48134e6047a19a0004,aa44e258a4e1e0004 /uams/android/broadcast,48134e6047a19a0004,48134e6047a19a0004
/uams/android/broadcast,,,,,,,,48134e6047a19a0005,aa44e258a4e1e0005 /uams/android/broadcast,48134e6047a19a0005,48134e6047a19a0005
/uams/android/broadcast,,,,,,,,48134e6047a19a0006,aa44e258a4e1e0006 /uams/android/broadcast,48134e6047a19a0006,48134e6047a19a0006
/uams/android/broadcast,,,,,,,,48134e6047a19a0007,aa44e258a4e1e0007 /uams/android/broadcast,48134e6047a19a0007,48134e6047a19a0007
/uams/android/broadcast,,,,,,,,48134e6047a19a0008,aa44e258a4e1e0008 /uams/android/broadcast,48134e6047a19a0008,48134e6047a19a0008
/uams/android/broadcast,,,,,,,,48134e6047a19a0009,aa44e258a4e1e0009 /uams/android/broadcast,48134e6047a19a0009,48134e6047a19a0009
/uams/android/broadcast,,,,,,,,48134e6047a19a0010,aa44e258a4e1e0010 /uams/android/broadcast,48134e6047a19a0010,48134e6047a19a0010
/uams/android/broadcast,,,,,,,,48134e6047a19a0011,aa44e258a4e1e0011 /uams/android/broadcast,48134e6047a19a0011,48134e6047a19a0011
/uams/android/broadcast,,,,,,,,48134e6047a19a0012,aa44e258a4e1e0012 /uams/android/broadcast,48134e6047a19a0012,48134e6047a19a0012
/uams/android/broadcast,,,,,,,,48134e6047a19a0013,aa44e258a4e1e0013 /uams/android/broadcast,48134e6047a19a0013,48134e6047a19a0013
/uams/android/broadcast,,,,,,,,48134e6047a19a0014,aa44e258a4e1e0014 /uams/android/broadcast,48134e6047a19a0014,48134e6047a19a0014
/uams/android/broadcast,,,,,,,,48134e6047a19a0015,aa44e258a4e1e0015 /uams/android/broadcast,48134e6047a19a0015,48134e6047a19a0015
/uams/android/broadcast,,,,,,,,48134e6047a19a0016,aa44e258a4e1e0016 /uams/android/broadcast,48134e6047a19a0016,48134e6047a19a0016
/uams/android/broadcast,,,,,,,,48134e6047a19a0017,aa44e258a4e1e0017 /uams/android/broadcast,48134e6047a19a0017,48134e6047a19a0017
/uams/android/broadcast,,,,,,,,48134e6047a19a0018,aa44e258a4e1e0018 /uams/android/broadcast,48134e6047a19a0018,48134e6047a19a0018
/uams/android/broadcast,,,,,,,,48134e6047a19a0019,aa44e258a4e1e0019 /uams/android/broadcast,48134e6047a19a0019,48134e6047a19a0019
/uams/android/broadcast,,,,,,,,48134e6047a19a0020,aa44e258a4e1e0020 /uams/android/broadcast,48134e6047a19a0020,48134e6047a19a0020
/uams/android/broadcast,,,,,,,,48134e6047a19a0021,aa44e258a4e1e0021 /uams/android/broadcast,48134e6047a19a0021,48134e6047a19a0021
/uams/android/broadcast,,,,,,,,48134e6047a19a0022,aa44e258a4e1e0022 /uams/android/broadcast,48134e6047a19a0022,48134e6047a19a0022
/uams/android/broadcast,,,,,,,,48134e6047a19a0023,aa44e258a4e1e0023 /uams/android/broadcast,48134e6047a19a0023,48134e6047a19a0023
/uams/android/broadcast,,,,,,,,48134e6047a19a0024,aa44e258a4e1e0024 /uams/android/broadcast,48134e6047a19a0024,48134e6047a19a0024
/uams/android/broadcast,,,,,,,,48134e6047a19a0025,aa44e258a4e1e0025 /uams/android/broadcast,48134e6047a19a0025,48134e6047a19a0025
/uams/android/broadcast,,,,,,,,48134e6047a19a0026,aa44e258a4e1e0026 /uams/android/broadcast,48134e6047a19a0026,48134e6047a19a0026
/uams/android/broadcast,,,,,,,,48134e6047a19a0027,aa44e258a4e1e0027 /uams/android/broadcast,48134e6047a19a0027,48134e6047a19a0027
/uams/android/broadcast,,,,,,,,48134e6047a19a0028,aa44e258a4e1e0028 /uams/android/broadcast,48134e6047a19a0028,48134e6047a19a0028
/uams/android/broadcast,,,,,,,,48134e6047a19a0029,aa44e258a4e1e0029 /uams/android/broadcast,48134e6047a19a0029,48134e6047a19a0029
/uams/android/broadcast,,,,,,,,48134e6047a19a0030,aa44e258a4e1e0030 /uams/android/broadcast,48134e6047a19a0030,48134e6047a19a0030
/uams/android/broadcast,,,,,,,,48134e6047a19a0031,aa44e258a4e1e0031 /uams/android/broadcast,48134e6047a19a0031,48134e6047a19a0031
/uams/android/broadcast,,,,,,,,48134e6047a19a0032,aa44e258a4e1e0032 /uams/android/broadcast,48134e6047a19a0032,48134e6047a19a0032
/uams/android/broadcast,,,,,,,,48134e6047a19a0033,aa44e258a4e1e0033 /uams/android/broadcast,48134e6047a19a0033,48134e6047a19a0033
/uams/android/broadcast,,,,,,,,48134e6047a19a0034,aa44e258a4e1e0034 /uams/android/broadcast,48134e6047a19a0034,48134e6047a19a0034
/uams/android/broadcast,,,,,,,,48134e6047a19a0035,aa44e258a4e1e0035 /uams/android/broadcast,48134e6047a19a0035,48134e6047a19a0035
/uams/android/broadcast,,,,,,,,48134e6047a19a0036,aa44e258a4e1e0036 /uams/android/broadcast,48134e6047a19a0036,48134e6047a19a0036
/uams/android/broadcast,,,,,,,,48134e6047a19a0037,aa44e258a4e1e0037 /uams/android/broadcast,48134e6047a19a0037,48134e6047a19a0037
/uams/android/broadcast,,,,,,,,48134e6047a19a0038,aa44e258a4e1e0038 /uams/android/broadcast,48134e6047a19a0038,48134e6047a19a0038
/uams/android/broadcast,,,,,,,,48134e6047a19a0039,aa44e258a4e1e0039 /uams/android/broadcast,48134e6047a19a0039,48134e6047a19a0039
/uams/android/broadcast,,,,,,,,48134e6047a19a0040,aa44e258a4e1e0040 /uams/android/broadcast,48134e6047a19a0040,48134e6047a19a0040
/uams/android/broadcast,,,,,,,,48134e6047a19a0041,aa44e258a4e1e0041 /uams/android/broadcast,48134e6047a19a0041,48134e6047a19a0041
/uams/android/broadcast,,,,,,,,48134e6047a19a0042,aa44e258a4e1e0042 /uams/android/broadcast,48134e6047a19a0042,48134e6047a19a0042
/uams/android/broadcast,,,,,,,,48134e6047a19a0043,aa44e258a4e1e0043 /uams/android/broadcast,48134e6047a19a0043,48134e6047a19a0043
/uams/android/broadcast,,,,,,,,48134e6047a19a0044,aa44e258a4e1e0044 /uams/android/broadcast,48134e6047a19a0044,48134e6047a19a0044
/uams/android/broadcast,,,,,,,,48134e6047a19a0045,aa44e258a4e1e0045 /uams/android/broadcast,48134e6047a19a0045,48134e6047a19a0045
/uams/android/broadcast,,,,,,,,48134e6047a19a0046,aa44e258a4e1e0046 /uams/android/broadcast,48134e6047a19a0046,48134e6047a19a0046
/uams/android/broadcast,,,,,,,,48134e6047a19a0047,aa44e258a4e1e0047 /uams/android/broadcast,48134e6047a19a0047,48134e6047a19a0047
/uams/android/broadcast,,,,,,,,48134e6047a19a0048,aa44e258a4e1e0048 /uams/android/broadcast,48134e6047a19a0048,48134e6047a19a0048
/uams/android/broadcast,,,,,,,,48134e6047a19a0049,aa44e258a4e1e0049 /uams/android/broadcast,48134e6047a19a0049,48134e6047a19a0049
/uams/android/broadcast,,,,,,,,48134e6047a19a0050,aa44e258a4e1e0050 /uams/android/broadcast,48134e6047a19a0050,48134e6047a19a0050
/uams/android/broadcast,,,,,,,,48134e6047a19a0051,aa44e258a4e1e0051 /uams/android/broadcast,48134e6047a19a0051,48134e6047a19a0051
/uams/android/broadcast,,,,,,,,48134e6047a19a0052,aa44e258a4e1e0052 /uams/android/broadcast,48134e6047a19a0052,48134e6047a19a0052
/uams/android/broadcast,,,,,,,,48134e6047a19a0053,aa44e258a4e1e0053 /uams/android/broadcast,48134e6047a19a0053,48134e6047a19a0053
/uams/android/broadcast,,,,,,,,48134e6047a19a0054,aa44e258a4e1e0054 /uams/android/broadcast,48134e6047a19a0054,48134e6047a19a0054
/uams/android/broadcast,,,,,,,,48134e6047a19a0055,aa44e258a4e1e0055 /uams/android/broadcast,48134e6047a19a0055,48134e6047a19a0055
/uams/android/broadcast,,,,,,,,48134e6047a19a0056,aa44e258a4e1e0056 /uams/android/broadcast,48134e6047a19a0056,48134e6047a19a0056
/uams/android/broadcast,,,,,,,,48134e6047a19a0057,aa44e258a4e1e0057 /uams/android/broadcast,48134e6047a19a0057,48134e6047a19a0057
/uams/android/broadcast,,,,,,,,48134e6047a19a0058,aa44e258a4e1e0058 /uams/android/broadcast,48134e6047a19a0058,48134e6047a19a0058
/uams/android/broadcast,,,,,,,,48134e6047a19a0059,aa44e258a4e1e0059 /uams/android/broadcast,48134e6047a19a0059,48134e6047a19a0059
/uams/android/broadcast,,,,,,,,48134e6047a19a0060,aa44e258a4e1e0060 /uams/android/broadcast,48134e6047a19a0060,48134e6047a19a0060
/uams/android/broadcast,,,,,,,,48134e6047a19a0061,aa44e258a4e1e0061 /uams/android/broadcast,48134e6047a19a0061,48134e6047a19a0061
/uams/android/broadcast,,,,,,,,48134e6047a19a0062,aa44e258a4e1e0062 /uams/android/broadcast,48134e6047a19a0062,48134e6047a19a0062
/uams/android/broadcast,,,,,,,,48134e6047a19a0063,aa44e258a4e1e0063 /uams/android/broadcast,48134e6047a19a0063,48134e6047a19a0063
/uams/android/broadcast,,,,,,,,48134e6047a19a0064,aa44e258a4e1e0064 /uams/android/broadcast,48134e6047a19a0064,48134e6047a19a0064
/uams/android/broadcast,,,,,,,,48134e6047a19a0065,aa44e258a4e1e0065 /uams/android/broadcast,48134e6047a19a0065,48134e6047a19a0065
/uams/android/broadcast,,,,,,,,48134e6047a19a0066,aa44e258a4e1e0066 /uams/android/broadcast,48134e6047a19a0066,48134e6047a19a0066
/uams/android/broadcast,,,,,,,,48134e6047a19a0067,aa44e258a4e1e0067 /uams/android/broadcast,48134e6047a19a0067,48134e6047a19a0067
/uams/android/broadcast,,,,,,,,48134e6047a19a0068,aa44e258a4e1e0068 /uams/android/broadcast,48134e6047a19a0068,48134e6047a19a0068
/uams/android/broadcast,,,,,,,,48134e6047a19a0069,aa44e258a4e1e0069 /uams/android/broadcast,48134e6047a19a0069,48134e6047a19a0069
/uams/android/broadcast,,,,,,,,48134e6047a19a0070,aa44e258a4e1e0070 /uams/android/broadcast,48134e6047a19a0070,48134e6047a19a0070
/uams/android/broadcast,,,,,,,,48134e6047a19a0071,aa44e258a4e1e0071 /uams/android/broadcast,48134e6047a19a0071,48134e6047a19a0071
/uams/android/broadcast,,,,,,,,48134e6047a19a0072,aa44e258a4e1e0072 /uams/android/broadcast,48134e6047a19a0072,48134e6047a19a0072
/uams/android/broadcast,,,,,,,,48134e6047a19a0073,aa44e258a4e1e0073 /uams/android/broadcast,48134e6047a19a0073,48134e6047a19a0073
/uams/android/broadcast,,,,,,,,48134e6047a19a0074,aa44e258a4e1e0074 /uams/android/broadcast,48134e6047a19a0074,48134e6047a19a0074
/uams/android/broadcast,,,,,,,,48134e6047a19a0075,aa44e258a4e1e0075 /uams/android/broadcast,48134e6047a19a0075,48134e6047a19a0075
/uams/android/broadcast,,,,,,,,48134e6047a19a0076,aa44e258a4e1e0076 /uams/android/broadcast,48134e6047a19a0076,48134e6047a19a0076
/uams/android/broadcast,,,,,,,,48134e6047a19a0077,aa44e258a4e1e0077 /uams/android/broadcast,48134e6047a19a0077,48134e6047a19a0077
/uams/android/broadcast,,,,,,,,48134e6047a19a0078,aa44e258a4e1e0078 /uams/android/broadcast,48134e6047a19a0078,48134e6047a19a0078
/uams/android/broadcast,,,,,,,,48134e6047a19a0079,aa44e258a4e1e0079 /uams/android/broadcast,48134e6047a19a0079,48134e6047a19a0079
/uams/android/broadcast,,,,,,,,48134e6047a19a0080,aa44e258a4e1e0080 /uams/android/broadcast,48134e6047a19a0080,48134e6047a19a0080
/uams/android/broadcast,,,,,,,,48134e6047a19a0081,aa44e258a4e1e0081 /uams/android/broadcast,48134e6047a19a0081,48134e6047a19a0081
/uams/android/broadcast,,,,,,,,48134e6047a19a0082,aa44e258a4e1e0082 /uams/android/broadcast,48134e6047a19a0082,48134e6047a19a0082
/uams/android/broadcast,,,,,,,,48134e6047a19a0083,aa44e258a4e1e0083 /uams/android/broadcast,48134e6047a19a0083,48134e6047a19a0083
/uams/android/broadcast,,,,,,,,48134e6047a19a0084,aa44e258a4e1e0084 /uams/android/broadcast,48134e6047a19a0084,48134e6047a19a0084
/uams/android/broadcast,,,,,,,,48134e6047a19a0085,aa44e258a4e1e0085 /uams/android/broadcast,48134e6047a19a0085,48134e6047a19a0085
/uams/android/broadcast,,,,,,,,48134e6047a19a0086,aa44e258a4e1e0086 /uams/android/broadcast,48134e6047a19a0086,48134e6047a19a0086
/uams/android/broadcast,,,,,,,,48134e6047a19a0087,aa44e258a4e1e0087 /uams/android/broadcast,48134e6047a19a0087,48134e6047a19a0087
/uams/android/broadcast,,,,,,,,48134e6047a19a0088,aa44e258a4e1e0088 /uams/android/broadcast,48134e6047a19a0088,48134e6047a19a0088
/uams/android/broadcast,,,,,,,,48134e6047a19a0089,aa44e258a4e1e0089 /uams/android/broadcast,48134e6047a19a0089,48134e6047a19a0089
/uams/android/broadcast,,,,,,,,48134e6047a19a0090,aa44e258a4e1e0090 /uams/android/broadcast,48134e6047a19a0090,48134e6047a19a0090
/uams/android/broadcast,,,,,,,,48134e6047a19a0091,aa44e258a4e1e0091 /uams/android/broadcast,48134e6047a19a0091,48134e6047a19a0091
/uams/android/broadcast,,,,,,,,48134e6047a19a0092,aa44e258a4e1e0092 /uams/android/broadcast,48134e6047a19a0092,48134e6047a19a0092
/uams/android/broadcast,,,,,,,,48134e6047a19a0093,aa44e258a4e1e0093 /uams/android/broadcast,48134e6047a19a0093,48134e6047a19a0093
/uams/android/broadcast,,,,,,,,48134e6047a19a0094,aa44e258a4e1e0094 /uams/android/broadcast,48134e6047a19a0094,48134e6047a19a0094
/uams/android/broadcast,,,,,,,,48134e6047a19a0095,aa44e258a4e1e0095 /uams/android/broadcast,48134e6047a19a0095,48134e6047a19a0095
/uams/android/broadcast,,,,,,,,48134e6047a19a0096,aa44e258a4e1e0096 /uams/android/broadcast,48134e6047a19a0096,48134e6047a19a0096
/uams/android/broadcast,,,,,,,,48134e6047a19a0097,aa44e258a4e1e0097 /uams/android/broadcast,48134e6047a19a0097,48134e6047a19a0097
/uams/android/broadcast,,,,,,,,48134e6047a19a0098,aa44e258a4e1e0098 /uams/android/broadcast,48134e6047a19a0098,48134e6047a19a0098
/uams/android/broadcast,,,,,,,,48134e6047a19a0099,aa44e258a4e1e0099 /uams/android/broadcast,48134e6047a19a0099,48134e6047a19a0099
/uams/android/broadcast,,,,,,,,48134e6047a19a0100,aa44e258a4e1e0100 /uams/android/broadcast,48134e6047a19a0100,48134e6047a19a0100
/uams/android/broadcast,,,,,,,,48134e6047a19a0101,aa44e258a4e1e0101
\ No newline at end of file
topic,clientId,deviceId
/uams/android/broadcast,48134e6047a19a0001,48134e6047a19a0001
/uams/android/broadcast,48134e6047a19a0002,48134e6047a19a0002
/uams/android/broadcast,48134e6047a19a0003,48134e6047a19a0003
/uams/android/broadcast,48134e6047a19a0004,48134e6047a19a0004
/uams/android/broadcast,48134e6047a19a0005,48134e6047a19a0005
/uams/android/broadcast,48134e6047a19a0006,48134e6047a19a0006
/uams/android/broadcast,48134e6047a19a0007,48134e6047a19a0007
/uams/android/broadcast,48134e6047a19a0008,48134e6047a19a0008
/uams/android/broadcast,48134e6047a19a0009,48134e6047a19a0009
/uams/android/broadcast,48134e6047a19a0010,48134e6047a19a0010
/uams/android/broadcast,48134e6047a19a0011,48134e6047a19a0011
/uams/android/broadcast,48134e6047a19a0012,48134e6047a19a0012
/uams/android/broadcast,48134e6047a19a0013,48134e6047a19a0013
/uams/android/broadcast,48134e6047a19a0014,48134e6047a19a0014
/uams/android/broadcast,48134e6047a19a0015,48134e6047a19a0015
/uams/android/broadcast,48134e6047a19a0016,48134e6047a19a0016
/uams/android/broadcast,48134e6047a19a0017,48134e6047a19a0017
/uams/android/broadcast,48134e6047a19a0018,48134e6047a19a0018
/uams/android/broadcast,48134e6047a19a0019,48134e6047a19a0019
/uams/android/broadcast,48134e6047a19a0020,48134e6047a19a0020
/uams/android/broadcast,48134e6047a19a0021,48134e6047a19a0021
/uams/android/broadcast,48134e6047a19a0022,48134e6047a19a0022
/uams/android/broadcast,48134e6047a19a0023,48134e6047a19a0023
/uams/android/broadcast,48134e6047a19a0024,48134e6047a19a0024
/uams/android/broadcast,48134e6047a19a0025,48134e6047a19a0025
/uams/android/broadcast,48134e6047a19a0026,48134e6047a19a0026
/uams/android/broadcast,48134e6047a19a0027,48134e6047a19a0027
/uams/android/broadcast,48134e6047a19a0028,48134e6047a19a0028
/uams/android/broadcast,48134e6047a19a0029,48134e6047a19a0029
/uams/android/broadcast,48134e6047a19a0030,48134e6047a19a0030
/uams/android/broadcast,48134e6047a19a0031,48134e6047a19a0031
/uams/android/broadcast,48134e6047a19a0032,48134e6047a19a0032
/uams/android/broadcast,48134e6047a19a0033,48134e6047a19a0033
/uams/android/broadcast,48134e6047a19a0034,48134e6047a19a0034
/uams/android/broadcast,48134e6047a19a0035,48134e6047a19a0035
/uams/android/broadcast,48134e6047a19a0036,48134e6047a19a0036
/uams/android/broadcast,48134e6047a19a0037,48134e6047a19a0037
/uams/android/broadcast,48134e6047a19a0038,48134e6047a19a0038
/uams/android/broadcast,48134e6047a19a0039,48134e6047a19a0039
/uams/android/broadcast,48134e6047a19a0040,48134e6047a19a0040
/uams/android/broadcast,48134e6047a19a0041,48134e6047a19a0041
/uams/android/broadcast,48134e6047a19a0042,48134e6047a19a0042
/uams/android/broadcast,48134e6047a19a0043,48134e6047a19a0043
/uams/android/broadcast,48134e6047a19a0044,48134e6047a19a0044
/uams/android/broadcast,48134e6047a19a0045,48134e6047a19a0045
/uams/android/broadcast,48134e6047a19a0046,48134e6047a19a0046
/uams/android/broadcast,48134e6047a19a0047,48134e6047a19a0047
/uams/android/broadcast,48134e6047a19a0048,48134e6047a19a0048
/uams/android/broadcast,48134e6047a19a0049,48134e6047a19a0049
/uams/android/broadcast,48134e6047a19a0050,48134e6047a19a0050
/uams/android/broadcast,48134e6047a19a0051,48134e6047a19a0051
/uams/android/broadcast,48134e6047a19a0052,48134e6047a19a0052
/uams/android/broadcast,48134e6047a19a0053,48134e6047a19a0053
/uams/android/broadcast,48134e6047a19a0054,48134e6047a19a0054
/uams/android/broadcast,48134e6047a19a0055,48134e6047a19a0055
/uams/android/broadcast,48134e6047a19a0056,48134e6047a19a0056
/uams/android/broadcast,48134e6047a19a0057,48134e6047a19a0057
/uams/android/broadcast,48134e6047a19a0058,48134e6047a19a0058
/uams/android/broadcast,48134e6047a19a0059,48134e6047a19a0059
/uams/android/broadcast,48134e6047a19a0060,48134e6047a19a0060
/uams/android/broadcast,48134e6047a19a0061,48134e6047a19a0061
/uams/android/broadcast,48134e6047a19a0062,48134e6047a19a0062
/uams/android/broadcast,48134e6047a19a0063,48134e6047a19a0063
/uams/android/broadcast,48134e6047a19a0064,48134e6047a19a0064
/uams/android/broadcast,48134e6047a19a0065,48134e6047a19a0065
/uams/android/broadcast,48134e6047a19a0066,48134e6047a19a0066
/uams/android/broadcast,48134e6047a19a0067,48134e6047a19a0067
/uams/android/broadcast,48134e6047a19a0068,48134e6047a19a0068
/uams/android/broadcast,48134e6047a19a0069,48134e6047a19a0069
/uams/android/broadcast,48134e6047a19a0070,48134e6047a19a0070
/uams/android/broadcast,48134e6047a19a0071,48134e6047a19a0071
/uams/android/broadcast,48134e6047a19a0072,48134e6047a19a0072
/uams/android/broadcast,48134e6047a19a0073,48134e6047a19a0073
/uams/android/broadcast,48134e6047a19a0074,48134e6047a19a0074
/uams/android/broadcast,48134e6047a19a0075,48134e6047a19a0075
/uams/android/broadcast,48134e6047a19a0076,48134e6047a19a0076
/uams/android/broadcast,48134e6047a19a0077,48134e6047a19a0077
/uams/android/broadcast,48134e6047a19a0078,48134e6047a19a0078
/uams/android/broadcast,48134e6047a19a0079,48134e6047a19a0079
/uams/android/broadcast,48134e6047a19a0080,48134e6047a19a0080
/uams/android/broadcast,48134e6047a19a0081,48134e6047a19a0081
/uams/android/broadcast,48134e6047a19a0082,48134e6047a19a0082
/uams/android/broadcast,48134e6047a19a0083,48134e6047a19a0083
/uams/android/broadcast,48134e6047a19a0084,48134e6047a19a0084
/uams/android/broadcast,48134e6047a19a0085,48134e6047a19a0085
/uams/android/broadcast,48134e6047a19a0086,48134e6047a19a0086
/uams/android/broadcast,48134e6047a19a0087,48134e6047a19a0087
/uams/android/broadcast,48134e6047a19a0088,48134e6047a19a0088
/uams/android/broadcast,48134e6047a19a0089,48134e6047a19a0089
/uams/android/broadcast,48134e6047a19a0090,48134e6047a19a0090
/uams/android/broadcast,48134e6047a19a0091,48134e6047a19a0091
/uams/android/broadcast,48134e6047a19a0092,48134e6047a19a0092
/uams/android/broadcast,48134e6047a19a0093,48134e6047a19a0093
/uams/android/broadcast,48134e6047a19a0094,48134e6047a19a0094
/uams/android/broadcast,48134e6047a19a0095,48134e6047a19a0095
/uams/android/broadcast,48134e6047a19a0096,48134e6047a19a0096
/uams/android/broadcast,48134e6047a19a0097,48134e6047a19a0097
/uams/android/broadcast,48134e6047a19a0098,48134e6047a19a0098
/uams/android/broadcast,48134e6047a19a0099,48134e6047a19a0099
/uams/android/broadcast,48134e6047a19a0100,48134e6047a19a0100
topic,clientId,deviceId
/uams/android/broadcast,48134e6047a19a0001,48134e6047a19a0001
/uams/android/broadcast,48134e6047a19a0002,48134e6047a19a0002
/uams/android/broadcast,48134e6047a19a0003,48134e6047a19a0003
/uams/android/broadcast,48134e6047a19a0004,48134e6047a19a0004
/uams/android/broadcast,48134e6047a19a0005,48134e6047a19a0005
/uams/android/broadcast,48134e6047a19a0006,48134e6047a19a0006
/uams/android/broadcast,48134e6047a19a0007,48134e6047a19a0007
/uams/android/broadcast,48134e6047a19a0008,48134e6047a19a0008
/uams/android/broadcast,48134e6047a19a0009,48134e6047a19a0009
/uams/android/broadcast,48134e6047a19a0010,48134e6047a19a0010
/uams/android/broadcast,48134e6047a19a0011,48134e6047a19a0011
/uams/android/broadcast,48134e6047a19a0012,48134e6047a19a0012
/uams/android/broadcast,48134e6047a19a0013,48134e6047a19a0013
/uams/android/broadcast,48134e6047a19a0014,48134e6047a19a0014
/uams/android/broadcast,48134e6047a19a0015,48134e6047a19a0015
/uams/android/broadcast,48134e6047a19a0016,48134e6047a19a0016
/uams/android/broadcast,48134e6047a19a0017,48134e6047a19a0017
/uams/android/broadcast,48134e6047a19a0018,48134e6047a19a0018
/uams/android/broadcast,48134e6047a19a0019,48134e6047a19a0019
/uams/android/broadcast,48134e6047a19a0020,48134e6047a19a0020
/uams/android/broadcast,48134e6047a19a0021,48134e6047a19a0021
/uams/android/broadcast,48134e6047a19a0022,48134e6047a19a0022
/uams/android/broadcast,48134e6047a19a0023,48134e6047a19a0023
/uams/android/broadcast,48134e6047a19a0024,48134e6047a19a0024
/uams/android/broadcast,48134e6047a19a0025,48134e6047a19a0025
/uams/android/broadcast,48134e6047a19a0026,48134e6047a19a0026
/uams/android/broadcast,48134e6047a19a0027,48134e6047a19a0027
/uams/android/broadcast,48134e6047a19a0028,48134e6047a19a0028
/uams/android/broadcast,48134e6047a19a0029,48134e6047a19a0029
/uams/android/broadcast,48134e6047a19a0030,48134e6047a19a0030
/uams/android/broadcast,48134e6047a19a0031,48134e6047a19a0031
/uams/android/broadcast,48134e6047a19a0032,48134e6047a19a0032
/uams/android/broadcast,48134e6047a19a0033,48134e6047a19a0033
/uams/android/broadcast,48134e6047a19a0034,48134e6047a19a0034
/uams/android/broadcast,48134e6047a19a0035,48134e6047a19a0035
/uams/android/broadcast,48134e6047a19a0036,48134e6047a19a0036
/uams/android/broadcast,48134e6047a19a0037,48134e6047a19a0037
/uams/android/broadcast,48134e6047a19a0038,48134e6047a19a0038
/uams/android/broadcast,48134e6047a19a0039,48134e6047a19a0039
/uams/android/broadcast,48134e6047a19a0040,48134e6047a19a0040
/uams/android/broadcast,48134e6047a19a0041,48134e6047a19a0041
/uams/android/broadcast,48134e6047a19a0042,48134e6047a19a0042
/uams/android/broadcast,48134e6047a19a0043,48134e6047a19a0043
/uams/android/broadcast,48134e6047a19a0044,48134e6047a19a0044
/uams/android/broadcast,48134e6047a19a0045,48134e6047a19a0045
/uams/android/broadcast,48134e6047a19a0046,48134e6047a19a0046
/uams/android/broadcast,48134e6047a19a0047,48134e6047a19a0047
/uams/android/broadcast,48134e6047a19a0048,48134e6047a19a0048
/uams/android/broadcast,48134e6047a19a0049,48134e6047a19a0049
/uams/android/broadcast,48134e6047a19a0050,48134e6047a19a0050
/uams/android/broadcast,48134e6047a19a0051,48134e6047a19a0051
/uams/android/broadcast,48134e6047a19a0052,48134e6047a19a0052
/uams/android/broadcast,48134e6047a19a0053,48134e6047a19a0053
/uams/android/broadcast,48134e6047a19a0054,48134e6047a19a0054
/uams/android/broadcast,48134e6047a19a0055,48134e6047a19a0055
/uams/android/broadcast,48134e6047a19a0056,48134e6047a19a0056
/uams/android/broadcast,48134e6047a19a0057,48134e6047a19a0057
/uams/android/broadcast,48134e6047a19a0058,48134e6047a19a0058
/uams/android/broadcast,48134e6047a19a0059,48134e6047a19a0059
/uams/android/broadcast,48134e6047a19a0060,48134e6047a19a0060
/uams/android/broadcast,48134e6047a19a0061,48134e6047a19a0061
/uams/android/broadcast,48134e6047a19a0062,48134e6047a19a0062
/uams/android/broadcast,48134e6047a19a0063,48134e6047a19a0063
/uams/android/broadcast,48134e6047a19a0064,48134e6047a19a0064
/uams/android/broadcast,48134e6047a19a0065,48134e6047a19a0065
/uams/android/broadcast,48134e6047a19a0066,48134e6047a19a0066
/uams/android/broadcast,48134e6047a19a0067,48134e6047a19a0067
/uams/android/broadcast,48134e6047a19a0068,48134e6047a19a0068
/uams/android/broadcast,48134e6047a19a0069,48134e6047a19a0069
/uams/android/broadcast,48134e6047a19a0070,48134e6047a19a0070
/uams/android/broadcast,48134e6047a19a0071,48134e6047a19a0071
/uams/android/broadcast,48134e6047a19a0072,48134e6047a19a0072
/uams/android/broadcast,48134e6047a19a0073,48134e6047a19a0073
/uams/android/broadcast,48134e6047a19a0074,48134e6047a19a0074
/uams/android/broadcast,48134e6047a19a0075,48134e6047a19a0075
/uams/android/broadcast,48134e6047a19a0076,48134e6047a19a0076
/uams/android/broadcast,48134e6047a19a0077,48134e6047a19a0077
/uams/android/broadcast,48134e6047a19a0078,48134e6047a19a0078
/uams/android/broadcast,48134e6047a19a0079,48134e6047a19a0079
/uams/android/broadcast,48134e6047a19a0080,48134e6047a19a0080
/uams/android/broadcast,48134e6047a19a0081,48134e6047a19a0081
/uams/android/broadcast,48134e6047a19a0082,48134e6047a19a0082
/uams/android/broadcast,48134e6047a19a0083,48134e6047a19a0083
/uams/android/broadcast,48134e6047a19a0084,48134e6047a19a0084
/uams/android/broadcast,48134e6047a19a0085,48134e6047a19a0085
/uams/android/broadcast,48134e6047a19a0086,48134e6047a19a0086
/uams/android/broadcast,48134e6047a19a0087,48134e6047a19a0087
/uams/android/broadcast,48134e6047a19a0088,48134e6047a19a0088
/uams/android/broadcast,48134e6047a19a0089,48134e6047a19a0089
/uams/android/broadcast,48134e6047a19a0090,48134e6047a19a0090
/uams/android/broadcast,48134e6047a19a0091,48134e6047a19a0091
/uams/android/broadcast,48134e6047a19a0092,48134e6047a19a0092
/uams/android/broadcast,48134e6047a19a0093,48134e6047a19a0093
/uams/android/broadcast,48134e6047a19a0094,48134e6047a19a0094
/uams/android/broadcast,48134e6047a19a0095,48134e6047a19a0095
/uams/android/broadcast,48134e6047a19a0096,48134e6047a19a0096
/uams/android/broadcast,48134e6047a19a0097,48134e6047a19a0097
/uams/android/broadcast,48134e6047a19a0098,48134e6047a19a0098
/uams/android/broadcast,48134e6047a19a0099,48134e6047a19a0099
/uams/android/broadcast,48134e6047a19a0100,48134e6047a19a0100
/uams/android/broadcast,48134e6047a19a0101,48134e6047a19a0101
/uams/android/broadcast,48134e6047a19a0102,48134e6047a19a0102
/uams/android/broadcast,48134e6047a19a0103,48134e6047a19a0103
/uams/android/broadcast,48134e6047a19a0104,48134e6047a19a0104
/uams/android/broadcast,48134e6047a19a0105,48134e6047a19a0105
/uams/android/broadcast,48134e6047a19a0106,48134e6047a19a0106
/uams/android/broadcast,48134e6047a19a0107,48134e6047a19a0107
/uams/android/broadcast,48134e6047a19a0108,48134e6047a19a0108
/uams/android/broadcast,48134e6047a19a0109,48134e6047a19a0109
/uams/android/broadcast,48134e6047a19a0110,48134e6047a19a0110
/uams/android/broadcast,48134e6047a19a0111,48134e6047a19a0111
/uams/android/broadcast,48134e6047a19a0112,48134e6047a19a0112
/uams/android/broadcast,48134e6047a19a0113,48134e6047a19a0113
/uams/android/broadcast,48134e6047a19a0114,48134e6047a19a0114
/uams/android/broadcast,48134e6047a19a0115,48134e6047a19a0115
/uams/android/broadcast,48134e6047a19a0116,48134e6047a19a0116
/uams/android/broadcast,48134e6047a19a0117,48134e6047a19a0117
/uams/android/broadcast,48134e6047a19a0118,48134e6047a19a0118
/uams/android/broadcast,48134e6047a19a0119,48134e6047a19a0119
/uams/android/broadcast,48134e6047a19a0120,48134e6047a19a0120
/uams/android/broadcast,48134e6047a19a0121,48134e6047a19a0121
/uams/android/broadcast,48134e6047a19a0122,48134e6047a19a0122
/uams/android/broadcast,48134e6047a19a0123,48134e6047a19a0123
/uams/android/broadcast,48134e6047a19a0124,48134e6047a19a0124
/uams/android/broadcast,48134e6047a19a0125,48134e6047a19a0125
/uams/android/broadcast,48134e6047a19a0126,48134e6047a19a0126
/uams/android/broadcast,48134e6047a19a0127,48134e6047a19a0127
/uams/android/broadcast,48134e6047a19a0128,48134e6047a19a0128
/uams/android/broadcast,48134e6047a19a0129,48134e6047a19a0129
/uams/android/broadcast,48134e6047a19a0130,48134e6047a19a0130
/uams/android/broadcast,48134e6047a19a0131,48134e6047a19a0131
/uams/android/broadcast,48134e6047a19a0132,48134e6047a19a0132
/uams/android/broadcast,48134e6047a19a0133,48134e6047a19a0133
/uams/android/broadcast,48134e6047a19a0134,48134e6047a19a0134
/uams/android/broadcast,48134e6047a19a0135,48134e6047a19a0135
/uams/android/broadcast,48134e6047a19a0136,48134e6047a19a0136
/uams/android/broadcast,48134e6047a19a0137,48134e6047a19a0137
/uams/android/broadcast,48134e6047a19a0138,48134e6047a19a0138
/uams/android/broadcast,48134e6047a19a0139,48134e6047a19a0139
/uams/android/broadcast,48134e6047a19a0140,48134e6047a19a0140
/uams/android/broadcast,48134e6047a19a0141,48134e6047a19a0141
/uams/android/broadcast,48134e6047a19a0142,48134e6047a19a0142
/uams/android/broadcast,48134e6047a19a0143,48134e6047a19a0143
/uams/android/broadcast,48134e6047a19a0144,48134e6047a19a0144
/uams/android/broadcast,48134e6047a19a0145,48134e6047a19a0145
/uams/android/broadcast,48134e6047a19a0146,48134e6047a19a0146
/uams/android/broadcast,48134e6047a19a0147,48134e6047a19a0147
/uams/android/broadcast,48134e6047a19a0148,48134e6047a19a0148
/uams/android/broadcast,48134e6047a19a0149,48134e6047a19a0149
/uams/android/broadcast,48134e6047a19a0150,48134e6047a19a0150
/uams/android/broadcast,48134e6047a19a0151,48134e6047a19a0151
/uams/android/broadcast,48134e6047a19a0152,48134e6047a19a0152
/uams/android/broadcast,48134e6047a19a0153,48134e6047a19a0153
/uams/android/broadcast,48134e6047a19a0154,48134e6047a19a0154
/uams/android/broadcast,48134e6047a19a0155,48134e6047a19a0155
/uams/android/broadcast,48134e6047a19a0156,48134e6047a19a0156
/uams/android/broadcast,48134e6047a19a0157,48134e6047a19a0157
/uams/android/broadcast,48134e6047a19a0158,48134e6047a19a0158
/uams/android/broadcast,48134e6047a19a0159,48134e6047a19a0159
/uams/android/broadcast,48134e6047a19a0160,48134e6047a19a0160
/uams/android/broadcast,48134e6047a19a0161,48134e6047a19a0161
/uams/android/broadcast,48134e6047a19a0162,48134e6047a19a0162
/uams/android/broadcast,48134e6047a19a0163,48134e6047a19a0163
/uams/android/broadcast,48134e6047a19a0164,48134e6047a19a0164
/uams/android/broadcast,48134e6047a19a0165,48134e6047a19a0165
/uams/android/broadcast,48134e6047a19a0166,48134e6047a19a0166
/uams/android/broadcast,48134e6047a19a0167,48134e6047a19a0167
/uams/android/broadcast,48134e6047a19a0168,48134e6047a19a0168
/uams/android/broadcast,48134e6047a19a0169,48134e6047a19a0169
/uams/android/broadcast,48134e6047a19a0170,48134e6047a19a0170
/uams/android/broadcast,48134e6047a19a0171,48134e6047a19a0171
/uams/android/broadcast,48134e6047a19a0172,48134e6047a19a0172
/uams/android/broadcast,48134e6047a19a0173,48134e6047a19a0173
/uams/android/broadcast,48134e6047a19a0174,48134e6047a19a0174
/uams/android/broadcast,48134e6047a19a0175,48134e6047a19a0175
/uams/android/broadcast,48134e6047a19a0176,48134e6047a19a0176
/uams/android/broadcast,48134e6047a19a0177,48134e6047a19a0177
/uams/android/broadcast,48134e6047a19a0178,48134e6047a19a0178
/uams/android/broadcast,48134e6047a19a0179,48134e6047a19a0179
/uams/android/broadcast,48134e6047a19a0180,48134e6047a19a0180
/uams/android/broadcast,48134e6047a19a0181,48134e6047a19a0181
/uams/android/broadcast,48134e6047a19a0182,48134e6047a19a0182
/uams/android/broadcast,48134e6047a19a0183,48134e6047a19a0183
/uams/android/broadcast,48134e6047a19a0184,48134e6047a19a0184
/uams/android/broadcast,48134e6047a19a0185,48134e6047a19a0185
/uams/android/broadcast,48134e6047a19a0186,48134e6047a19a0186
/uams/android/broadcast,48134e6047a19a0187,48134e6047a19a0187
/uams/android/broadcast,48134e6047a19a0188,48134e6047a19a0188
/uams/android/broadcast,48134e6047a19a0189,48134e6047a19a0189
/uams/android/broadcast,48134e6047a19a0190,48134e6047a19a0190
/uams/android/broadcast,48134e6047a19a0191,48134e6047a19a0191
/uams/android/broadcast,48134e6047a19a0192,48134e6047a19a0192
/uams/android/broadcast,48134e6047a19a0193,48134e6047a19a0193
/uams/android/broadcast,48134e6047a19a0194,48134e6047a19a0194
/uams/android/broadcast,48134e6047a19a0195,48134e6047a19a0195
/uams/android/broadcast,48134e6047a19a0196,48134e6047a19a0196
/uams/android/broadcast,48134e6047a19a0197,48134e6047a19a0197
/uams/android/broadcast,48134e6047a19a0198,48134e6047a19a0198
/uams/android/broadcast,48134e6047a19a0199,48134e6047a19a0199
/uams/android/broadcast,48134e6047a19a0200,48134e6047a19a0200
topic,clientId,deviceId
/uams/android/broadcast,48134e6047a19a0001,48134e6047a19a0001
/uams/android/broadcast,48134e6047a19a0002,48134e6047a19a0002
/uams/android/broadcast,48134e6047a19a0003,48134e6047a19a0003
/uams/android/broadcast,48134e6047a19a0004,48134e6047a19a0004
/uams/android/broadcast,48134e6047a19a0005,48134e6047a19a0005
/uams/android/broadcast,48134e6047a19a0006,48134e6047a19a0006
/uams/android/broadcast,48134e6047a19a0007,48134e6047a19a0007
/uams/android/broadcast,48134e6047a19a0008,48134e6047a19a0008
/uams/android/broadcast,48134e6047a19a0009,48134e6047a19a0009
/uams/android/broadcast,48134e6047a19a0010,48134e6047a19a0010
/uams/android/broadcast,48134e6047a19a0011,48134e6047a19a0011
/uams/android/broadcast,48134e6047a19a0012,48134e6047a19a0012
/uams/android/broadcast,48134e6047a19a0013,48134e6047a19a0013
/uams/android/broadcast,48134e6047a19a0014,48134e6047a19a0014
/uams/android/broadcast,48134e6047a19a0015,48134e6047a19a0015
/uams/android/broadcast,48134e6047a19a0016,48134e6047a19a0016
/uams/android/broadcast,48134e6047a19a0017,48134e6047a19a0017
/uams/android/broadcast,48134e6047a19a0018,48134e6047a19a0018
/uams/android/broadcast,48134e6047a19a0019,48134e6047a19a0019
/uams/android/broadcast,48134e6047a19a0020,48134e6047a19a0020
/uams/android/broadcast,48134e6047a19a0021,48134e6047a19a0021
/uams/android/broadcast,48134e6047a19a0022,48134e6047a19a0022
/uams/android/broadcast,48134e6047a19a0023,48134e6047a19a0023
/uams/android/broadcast,48134e6047a19a0024,48134e6047a19a0024
/uams/android/broadcast,48134e6047a19a0025,48134e6047a19a0025
/uams/android/broadcast,48134e6047a19a0026,48134e6047a19a0026
/uams/android/broadcast,48134e6047a19a0027,48134e6047a19a0027
/uams/android/broadcast,48134e6047a19a0028,48134e6047a19a0028
/uams/android/broadcast,48134e6047a19a0029,48134e6047a19a0029
/uams/android/broadcast,48134e6047a19a0030,48134e6047a19a0030
/uams/android/broadcast,48134e6047a19a0031,48134e6047a19a0031
/uams/android/broadcast,48134e6047a19a0032,48134e6047a19a0032
/uams/android/broadcast,48134e6047a19a0033,48134e6047a19a0033
/uams/android/broadcast,48134e6047a19a0034,48134e6047a19a0034
/uams/android/broadcast,48134e6047a19a0035,48134e6047a19a0035
/uams/android/broadcast,48134e6047a19a0036,48134e6047a19a0036
/uams/android/broadcast,48134e6047a19a0037,48134e6047a19a0037
/uams/android/broadcast,48134e6047a19a0038,48134e6047a19a0038
/uams/android/broadcast,48134e6047a19a0039,48134e6047a19a0039
/uams/android/broadcast,48134e6047a19a0040,48134e6047a19a0040
/uams/android/broadcast,48134e6047a19a0041,48134e6047a19a0041
/uams/android/broadcast,48134e6047a19a0042,48134e6047a19a0042
/uams/android/broadcast,48134e6047a19a0043,48134e6047a19a0043
/uams/android/broadcast,48134e6047a19a0044,48134e6047a19a0044
/uams/android/broadcast,48134e6047a19a0045,48134e6047a19a0045
/uams/android/broadcast,48134e6047a19a0046,48134e6047a19a0046
/uams/android/broadcast,48134e6047a19a0047,48134e6047a19a0047
/uams/android/broadcast,48134e6047a19a0048,48134e6047a19a0048
/uams/android/broadcast,48134e6047a19a0049,48134e6047a19a0049
/uams/android/broadcast,48134e6047a19a0050,48134e6047a19a0050
/uams/android/broadcast,48134e6047a19a0051,48134e6047a19a0051
/uams/android/broadcast,48134e6047a19a0052,48134e6047a19a0052
/uams/android/broadcast,48134e6047a19a0053,48134e6047a19a0053
/uams/android/broadcast,48134e6047a19a0054,48134e6047a19a0054
/uams/android/broadcast,48134e6047a19a0055,48134e6047a19a0055
/uams/android/broadcast,48134e6047a19a0056,48134e6047a19a0056
/uams/android/broadcast,48134e6047a19a0057,48134e6047a19a0057
/uams/android/broadcast,48134e6047a19a0058,48134e6047a19a0058
/uams/android/broadcast,48134e6047a19a0059,48134e6047a19a0059
/uams/android/broadcast,48134e6047a19a0060,48134e6047a19a0060
/uams/android/broadcast,48134e6047a19a0061,48134e6047a19a0061
/uams/android/broadcast,48134e6047a19a0062,48134e6047a19a0062
/uams/android/broadcast,48134e6047a19a0063,48134e6047a19a0063
/uams/android/broadcast,48134e6047a19a0064,48134e6047a19a0064
/uams/android/broadcast,48134e6047a19a0065,48134e6047a19a0065
/uams/android/broadcast,48134e6047a19a0066,48134e6047a19a0066
/uams/android/broadcast,48134e6047a19a0067,48134e6047a19a0067
/uams/android/broadcast,48134e6047a19a0068,48134e6047a19a0068
/uams/android/broadcast,48134e6047a19a0069,48134e6047a19a0069
/uams/android/broadcast,48134e6047a19a0070,48134e6047a19a0070
/uams/android/broadcast,48134e6047a19a0071,48134e6047a19a0071
/uams/android/broadcast,48134e6047a19a0072,48134e6047a19a0072
/uams/android/broadcast,48134e6047a19a0073,48134e6047a19a0073
/uams/android/broadcast,48134e6047a19a0074,48134e6047a19a0074
/uams/android/broadcast,48134e6047a19a0075,48134e6047a19a0075
/uams/android/broadcast,48134e6047a19a0076,48134e6047a19a0076
/uams/android/broadcast,48134e6047a19a0077,48134e6047a19a0077
/uams/android/broadcast,48134e6047a19a0078,48134e6047a19a0078
/uams/android/broadcast,48134e6047a19a0079,48134e6047a19a0079
/uams/android/broadcast,48134e6047a19a0080,48134e6047a19a0080
/uams/android/broadcast,48134e6047a19a0081,48134e6047a19a0081
/uams/android/broadcast,48134e6047a19a0082,48134e6047a19a0082
/uams/android/broadcast,48134e6047a19a0083,48134e6047a19a0083
/uams/android/broadcast,48134e6047a19a0084,48134e6047a19a0084
/uams/android/broadcast,48134e6047a19a0085,48134e6047a19a0085
/uams/android/broadcast,48134e6047a19a0086,48134e6047a19a0086
/uams/android/broadcast,48134e6047a19a0087,48134e6047a19a0087
/uams/android/broadcast,48134e6047a19a0088,48134e6047a19a0088
/uams/android/broadcast,48134e6047a19a0089,48134e6047a19a0089
/uams/android/broadcast,48134e6047a19a0090,48134e6047a19a0090
/uams/android/broadcast,48134e6047a19a0091,48134e6047a19a0091
/uams/android/broadcast,48134e6047a19a0092,48134e6047a19a0092
/uams/android/broadcast,48134e6047a19a0093,48134e6047a19a0093
/uams/android/broadcast,48134e6047a19a0094,48134e6047a19a0094
/uams/android/broadcast,48134e6047a19a0095,48134e6047a19a0095
/uams/android/broadcast,48134e6047a19a0096,48134e6047a19a0096
/uams/android/broadcast,48134e6047a19a0097,48134e6047a19a0097
/uams/android/broadcast,48134e6047a19a0098,48134e6047a19a0098
/uams/android/broadcast,48134e6047a19a0099,48134e6047a19a0099
/uams/android/broadcast,48134e6047a19a0100,48134e6047a19a0100
/uams/android/broadcast,48134e6047a19a0101,48134e6047a19a0101
/uams/android/broadcast,48134e6047a19a0102,48134e6047a19a0102
/uams/android/broadcast,48134e6047a19a0103,48134e6047a19a0103
/uams/android/broadcast,48134e6047a19a0104,48134e6047a19a0104
/uams/android/broadcast,48134e6047a19a0105,48134e6047a19a0105
/uams/android/broadcast,48134e6047a19a0106,48134e6047a19a0106
/uams/android/broadcast,48134e6047a19a0107,48134e6047a19a0107
/uams/android/broadcast,48134e6047a19a0108,48134e6047a19a0108
/uams/android/broadcast,48134e6047a19a0109,48134e6047a19a0109
/uams/android/broadcast,48134e6047a19a0110,48134e6047a19a0110
/uams/android/broadcast,48134e6047a19a0111,48134e6047a19a0111
/uams/android/broadcast,48134e6047a19a0112,48134e6047a19a0112
/uams/android/broadcast,48134e6047a19a0113,48134e6047a19a0113
/uams/android/broadcast,48134e6047a19a0114,48134e6047a19a0114
/uams/android/broadcast,48134e6047a19a0115,48134e6047a19a0115
/uams/android/broadcast,48134e6047a19a0116,48134e6047a19a0116
/uams/android/broadcast,48134e6047a19a0117,48134e6047a19a0117
/uams/android/broadcast,48134e6047a19a0118,48134e6047a19a0118
/uams/android/broadcast,48134e6047a19a0119,48134e6047a19a0119
/uams/android/broadcast,48134e6047a19a0120,48134e6047a19a0120
/uams/android/broadcast,48134e6047a19a0121,48134e6047a19a0121
/uams/android/broadcast,48134e6047a19a0122,48134e6047a19a0122
/uams/android/broadcast,48134e6047a19a0123,48134e6047a19a0123
/uams/android/broadcast,48134e6047a19a0124,48134e6047a19a0124
/uams/android/broadcast,48134e6047a19a0125,48134e6047a19a0125
/uams/android/broadcast,48134e6047a19a0126,48134e6047a19a0126
/uams/android/broadcast,48134e6047a19a0127,48134e6047a19a0127
/uams/android/broadcast,48134e6047a19a0128,48134e6047a19a0128
/uams/android/broadcast,48134e6047a19a0129,48134e6047a19a0129
/uams/android/broadcast,48134e6047a19a0130,48134e6047a19a0130
/uams/android/broadcast,48134e6047a19a0131,48134e6047a19a0131
/uams/android/broadcast,48134e6047a19a0132,48134e6047a19a0132
/uams/android/broadcast,48134e6047a19a0133,48134e6047a19a0133
/uams/android/broadcast,48134e6047a19a0134,48134e6047a19a0134
/uams/android/broadcast,48134e6047a19a0135,48134e6047a19a0135
/uams/android/broadcast,48134e6047a19a0136,48134e6047a19a0136
/uams/android/broadcast,48134e6047a19a0137,48134e6047a19a0137
/uams/android/broadcast,48134e6047a19a0138,48134e6047a19a0138
/uams/android/broadcast,48134e6047a19a0139,48134e6047a19a0139
/uams/android/broadcast,48134e6047a19a0140,48134e6047a19a0140
/uams/android/broadcast,48134e6047a19a0141,48134e6047a19a0141
/uams/android/broadcast,48134e6047a19a0142,48134e6047a19a0142
/uams/android/broadcast,48134e6047a19a0143,48134e6047a19a0143
/uams/android/broadcast,48134e6047a19a0144,48134e6047a19a0144
/uams/android/broadcast,48134e6047a19a0145,48134e6047a19a0145
/uams/android/broadcast,48134e6047a19a0146,48134e6047a19a0146
/uams/android/broadcast,48134e6047a19a0147,48134e6047a19a0147
/uams/android/broadcast,48134e6047a19a0148,48134e6047a19a0148
/uams/android/broadcast,48134e6047a19a0149,48134e6047a19a0149
/uams/android/broadcast,48134e6047a19a0150,48134e6047a19a0150
/uams/android/broadcast,48134e6047a19a0151,48134e6047a19a0151
/uams/android/broadcast,48134e6047a19a0152,48134e6047a19a0152
/uams/android/broadcast,48134e6047a19a0153,48134e6047a19a0153
/uams/android/broadcast,48134e6047a19a0154,48134e6047a19a0154
/uams/android/broadcast,48134e6047a19a0155,48134e6047a19a0155
/uams/android/broadcast,48134e6047a19a0156,48134e6047a19a0156
/uams/android/broadcast,48134e6047a19a0157,48134e6047a19a0157
/uams/android/broadcast,48134e6047a19a0158,48134e6047a19a0158
/uams/android/broadcast,48134e6047a19a0159,48134e6047a19a0159
/uams/android/broadcast,48134e6047a19a0160,48134e6047a19a0160
/uams/android/broadcast,48134e6047a19a0161,48134e6047a19a0161
/uams/android/broadcast,48134e6047a19a0162,48134e6047a19a0162
/uams/android/broadcast,48134e6047a19a0163,48134e6047a19a0163
/uams/android/broadcast,48134e6047a19a0164,48134e6047a19a0164
/uams/android/broadcast,48134e6047a19a0165,48134e6047a19a0165
/uams/android/broadcast,48134e6047a19a0166,48134e6047a19a0166
/uams/android/broadcast,48134e6047a19a0167,48134e6047a19a0167
/uams/android/broadcast,48134e6047a19a0168,48134e6047a19a0168
/uams/android/broadcast,48134e6047a19a0169,48134e6047a19a0169
/uams/android/broadcast,48134e6047a19a0170,48134e6047a19a0170
/uams/android/broadcast,48134e6047a19a0171,48134e6047a19a0171
/uams/android/broadcast,48134e6047a19a0172,48134e6047a19a0172
/uams/android/broadcast,48134e6047a19a0173,48134e6047a19a0173
/uams/android/broadcast,48134e6047a19a0174,48134e6047a19a0174
/uams/android/broadcast,48134e6047a19a0175,48134e6047a19a0175
/uams/android/broadcast,48134e6047a19a0176,48134e6047a19a0176
/uams/android/broadcast,48134e6047a19a0177,48134e6047a19a0177
/uams/android/broadcast,48134e6047a19a0178,48134e6047a19a0178
/uams/android/broadcast,48134e6047a19a0179,48134e6047a19a0179
/uams/android/broadcast,48134e6047a19a0180,48134e6047a19a0180
/uams/android/broadcast,48134e6047a19a0181,48134e6047a19a0181
/uams/android/broadcast,48134e6047a19a0182,48134e6047a19a0182
/uams/android/broadcast,48134e6047a19a0183,48134e6047a19a0183
/uams/android/broadcast,48134e6047a19a0184,48134e6047a19a0184
/uams/android/broadcast,48134e6047a19a0185,48134e6047a19a0185
/uams/android/broadcast,48134e6047a19a0186,48134e6047a19a0186
/uams/android/broadcast,48134e6047a19a0187,48134e6047a19a0187
/uams/android/broadcast,48134e6047a19a0188,48134e6047a19a0188
/uams/android/broadcast,48134e6047a19a0189,48134e6047a19a0189
/uams/android/broadcast,48134e6047a19a0190,48134e6047a19a0190
/uams/android/broadcast,48134e6047a19a0191,48134e6047a19a0191
/uams/android/broadcast,48134e6047a19a0192,48134e6047a19a0192
/uams/android/broadcast,48134e6047a19a0193,48134e6047a19a0193
/uams/android/broadcast,48134e6047a19a0194,48134e6047a19a0194
/uams/android/broadcast,48134e6047a19a0195,48134e6047a19a0195
/uams/android/broadcast,48134e6047a19a0196,48134e6047a19a0196
/uams/android/broadcast,48134e6047a19a0197,48134e6047a19a0197
/uams/android/broadcast,48134e6047a19a0198,48134e6047a19a0198
/uams/android/broadcast,48134e6047a19a0199,48134e6047a19a0199
/uams/android/broadcast,48134e6047a19a0200,48134e6047a19a0200
/uams/android/broadcast,48134e6047a19a0201,48134e6047a19a0201
/uams/android/broadcast,48134e6047a19a0202,48134e6047a19a0202
/uams/android/broadcast,48134e6047a19a0203,48134e6047a19a0203
/uams/android/broadcast,48134e6047a19a0204,48134e6047a19a0204
/uams/android/broadcast,48134e6047a19a0205,48134e6047a19a0205
/uams/android/broadcast,48134e6047a19a0206,48134e6047a19a0206
/uams/android/broadcast,48134e6047a19a0207,48134e6047a19a0207
/uams/android/broadcast,48134e6047a19a0208,48134e6047a19a0208
/uams/android/broadcast,48134e6047a19a0209,48134e6047a19a0209
/uams/android/broadcast,48134e6047a19a0210,48134e6047a19a0210
/uams/android/broadcast,48134e6047a19a0211,48134e6047a19a0211
/uams/android/broadcast,48134e6047a19a0212,48134e6047a19a0212
/uams/android/broadcast,48134e6047a19a0213,48134e6047a19a0213
/uams/android/broadcast,48134e6047a19a0214,48134e6047a19a0214
/uams/android/broadcast,48134e6047a19a0215,48134e6047a19a0215
/uams/android/broadcast,48134e6047a19a0216,48134e6047a19a0216
/uams/android/broadcast,48134e6047a19a0217,48134e6047a19a0217
/uams/android/broadcast,48134e6047a19a0218,48134e6047a19a0218
/uams/android/broadcast,48134e6047a19a0219,48134e6047a19a0219
/uams/android/broadcast,48134e6047a19a0220,48134e6047a19a0220
/uams/android/broadcast,48134e6047a19a0221,48134e6047a19a0221
/uams/android/broadcast,48134e6047a19a0222,48134e6047a19a0222
/uams/android/broadcast,48134e6047a19a0223,48134e6047a19a0223
/uams/android/broadcast,48134e6047a19a0224,48134e6047a19a0224
/uams/android/broadcast,48134e6047a19a0225,48134e6047a19a0225
/uams/android/broadcast,48134e6047a19a0226,48134e6047a19a0226
/uams/android/broadcast,48134e6047a19a0227,48134e6047a19a0227
/uams/android/broadcast,48134e6047a19a0228,48134e6047a19a0228
/uams/android/broadcast,48134e6047a19a0229,48134e6047a19a0229
/uams/android/broadcast,48134e6047a19a0230,48134e6047a19a0230
/uams/android/broadcast,48134e6047a19a0231,48134e6047a19a0231
/uams/android/broadcast,48134e6047a19a0232,48134e6047a19a0232
/uams/android/broadcast,48134e6047a19a0233,48134e6047a19a0233
/uams/android/broadcast,48134e6047a19a0234,48134e6047a19a0234
/uams/android/broadcast,48134e6047a19a0235,48134e6047a19a0235
/uams/android/broadcast,48134e6047a19a0236,48134e6047a19a0236
/uams/android/broadcast,48134e6047a19a0237,48134e6047a19a0237
/uams/android/broadcast,48134e6047a19a0238,48134e6047a19a0238
/uams/android/broadcast,48134e6047a19a0239,48134e6047a19a0239
/uams/android/broadcast,48134e6047a19a0240,48134e6047a19a0240
/uams/android/broadcast,48134e6047a19a0241,48134e6047a19a0241
/uams/android/broadcast,48134e6047a19a0242,48134e6047a19a0242
/uams/android/broadcast,48134e6047a19a0243,48134e6047a19a0243
/uams/android/broadcast,48134e6047a19a0244,48134e6047a19a0244
/uams/android/broadcast,48134e6047a19a0245,48134e6047a19a0245
/uams/android/broadcast,48134e6047a19a0246,48134e6047a19a0246
/uams/android/broadcast,48134e6047a19a0247,48134e6047a19a0247
/uams/android/broadcast,48134e6047a19a0248,48134e6047a19a0248
/uams/android/broadcast,48134e6047a19a0249,48134e6047a19a0249
/uams/android/broadcast,48134e6047a19a0250,48134e6047a19a0250
/uams/android/broadcast,48134e6047a19a0251,48134e6047a19a0251
/uams/android/broadcast,48134e6047a19a0252,48134e6047a19a0252
/uams/android/broadcast,48134e6047a19a0253,48134e6047a19a0253
/uams/android/broadcast,48134e6047a19a0254,48134e6047a19a0254
/uams/android/broadcast,48134e6047a19a0255,48134e6047a19a0255
/uams/android/broadcast,48134e6047a19a0256,48134e6047a19a0256
/uams/android/broadcast,48134e6047a19a0257,48134e6047a19a0257
/uams/android/broadcast,48134e6047a19a0258,48134e6047a19a0258
/uams/android/broadcast,48134e6047a19a0259,48134e6047a19a0259
/uams/android/broadcast,48134e6047a19a0260,48134e6047a19a0260
/uams/android/broadcast,48134e6047a19a0261,48134e6047a19a0261
/uams/android/broadcast,48134e6047a19a0262,48134e6047a19a0262
/uams/android/broadcast,48134e6047a19a0263,48134e6047a19a0263
/uams/android/broadcast,48134e6047a19a0264,48134e6047a19a0264
/uams/android/broadcast,48134e6047a19a0265,48134e6047a19a0265
/uams/android/broadcast,48134e6047a19a0266,48134e6047a19a0266
/uams/android/broadcast,48134e6047a19a0267,48134e6047a19a0267
/uams/android/broadcast,48134e6047a19a0268,48134e6047a19a0268
/uams/android/broadcast,48134e6047a19a0269,48134e6047a19a0269
/uams/android/broadcast,48134e6047a19a0270,48134e6047a19a0270
/uams/android/broadcast,48134e6047a19a0271,48134e6047a19a0271
/uams/android/broadcast,48134e6047a19a0272,48134e6047a19a0272
/uams/android/broadcast,48134e6047a19a0273,48134e6047a19a0273
/uams/android/broadcast,48134e6047a19a0274,48134e6047a19a0274
/uams/android/broadcast,48134e6047a19a0275,48134e6047a19a0275
/uams/android/broadcast,48134e6047a19a0276,48134e6047a19a0276
/uams/android/broadcast,48134e6047a19a0277,48134e6047a19a0277
/uams/android/broadcast,48134e6047a19a0278,48134e6047a19a0278
/uams/android/broadcast,48134e6047a19a0279,48134e6047a19a0279
/uams/android/broadcast,48134e6047a19a0280,48134e6047a19a0280
/uams/android/broadcast,48134e6047a19a0281,48134e6047a19a0281
/uams/android/broadcast,48134e6047a19a0282,48134e6047a19a0282
/uams/android/broadcast,48134e6047a19a0283,48134e6047a19a0283
/uams/android/broadcast,48134e6047a19a0284,48134e6047a19a0284
/uams/android/broadcast,48134e6047a19a0285,48134e6047a19a0285
/uams/android/broadcast,48134e6047a19a0286,48134e6047a19a0286
/uams/android/broadcast,48134e6047a19a0287,48134e6047a19a0287
/uams/android/broadcast,48134e6047a19a0288,48134e6047a19a0288
/uams/android/broadcast,48134e6047a19a0289,48134e6047a19a0289
/uams/android/broadcast,48134e6047a19a0290,48134e6047a19a0290
/uams/android/broadcast,48134e6047a19a0291,48134e6047a19a0291
/uams/android/broadcast,48134e6047a19a0292,48134e6047a19a0292
/uams/android/broadcast,48134e6047a19a0293,48134e6047a19a0293
/uams/android/broadcast,48134e6047a19a0294,48134e6047a19a0294
/uams/android/broadcast,48134e6047a19a0295,48134e6047a19a0295
/uams/android/broadcast,48134e6047a19a0296,48134e6047a19a0296
/uams/android/broadcast,48134e6047a19a0297,48134e6047a19a0297
/uams/android/broadcast,48134e6047a19a0298,48134e6047a19a0298
/uams/android/broadcast,48134e6047a19a0299,48134e6047a19a0299
/uams/android/broadcast,48134e6047a19a0300,48134e6047a19a0300
topic,clientId,deviceId
/uams/android/broadcast,48134e6047a19a0001,48134e6047a19a0001
/uams/android/broadcast,48134e6047a19a0002,48134e6047a19a0002
/uams/android/broadcast,48134e6047a19a0003,48134e6047a19a0003
/uams/android/broadcast,48134e6047a19a0004,48134e6047a19a0004
/uams/android/broadcast,48134e6047a19a0005,48134e6047a19a0005
/uams/android/broadcast,48134e6047a19a0006,48134e6047a19a0006
/uams/android/broadcast,48134e6047a19a0007,48134e6047a19a0007
/uams/android/broadcast,48134e6047a19a0008,48134e6047a19a0008
/uams/android/broadcast,48134e6047a19a0009,48134e6047a19a0009
/uams/android/broadcast,48134e6047a19a0010,48134e6047a19a0010
/uams/android/broadcast,48134e6047a19a0011,48134e6047a19a0011
/uams/android/broadcast,48134e6047a19a0012,48134e6047a19a0012
/uams/android/broadcast,48134e6047a19a0013,48134e6047a19a0013
/uams/android/broadcast,48134e6047a19a0014,48134e6047a19a0014
/uams/android/broadcast,48134e6047a19a0015,48134e6047a19a0015
/uams/android/broadcast,48134e6047a19a0016,48134e6047a19a0016
/uams/android/broadcast,48134e6047a19a0017,48134e6047a19a0017
/uams/android/broadcast,48134e6047a19a0018,48134e6047a19a0018
/uams/android/broadcast,48134e6047a19a0019,48134e6047a19a0019
/uams/android/broadcast,48134e6047a19a0020,48134e6047a19a0020
/uams/android/broadcast,48134e6047a19a0021,48134e6047a19a0021
/uams/android/broadcast,48134e6047a19a0022,48134e6047a19a0022
/uams/android/broadcast,48134e6047a19a0023,48134e6047a19a0023
/uams/android/broadcast,48134e6047a19a0024,48134e6047a19a0024
/uams/android/broadcast,48134e6047a19a0025,48134e6047a19a0025
/uams/android/broadcast,48134e6047a19a0026,48134e6047a19a0026
/uams/android/broadcast,48134e6047a19a0027,48134e6047a19a0027
/uams/android/broadcast,48134e6047a19a0028,48134e6047a19a0028
/uams/android/broadcast,48134e6047a19a0029,48134e6047a19a0029
/uams/android/broadcast,48134e6047a19a0030,48134e6047a19a0030
/uams/android/broadcast,48134e6047a19a0031,48134e6047a19a0031
/uams/android/broadcast,48134e6047a19a0032,48134e6047a19a0032
/uams/android/broadcast,48134e6047a19a0033,48134e6047a19a0033
/uams/android/broadcast,48134e6047a19a0034,48134e6047a19a0034
/uams/android/broadcast,48134e6047a19a0035,48134e6047a19a0035
/uams/android/broadcast,48134e6047a19a0036,48134e6047a19a0036
/uams/android/broadcast,48134e6047a19a0037,48134e6047a19a0037
/uams/android/broadcast,48134e6047a19a0038,48134e6047a19a0038
/uams/android/broadcast,48134e6047a19a0039,48134e6047a19a0039
/uams/android/broadcast,48134e6047a19a0040,48134e6047a19a0040
/uams/android/broadcast,48134e6047a19a0041,48134e6047a19a0041
/uams/android/broadcast,48134e6047a19a0042,48134e6047a19a0042
/uams/android/broadcast,48134e6047a19a0043,48134e6047a19a0043
/uams/android/broadcast,48134e6047a19a0044,48134e6047a19a0044
/uams/android/broadcast,48134e6047a19a0045,48134e6047a19a0045
/uams/android/broadcast,48134e6047a19a0046,48134e6047a19a0046
/uams/android/broadcast,48134e6047a19a0047,48134e6047a19a0047
/uams/android/broadcast,48134e6047a19a0048,48134e6047a19a0048
/uams/android/broadcast,48134e6047a19a0049,48134e6047a19a0049
/uams/android/broadcast,48134e6047a19a0050,48134e6047a19a0050
/uams/android/broadcast,48134e6047a19a0051,48134e6047a19a0051
/uams/android/broadcast,48134e6047a19a0052,48134e6047a19a0052
/uams/android/broadcast,48134e6047a19a0053,48134e6047a19a0053
/uams/android/broadcast,48134e6047a19a0054,48134e6047a19a0054
/uams/android/broadcast,48134e6047a19a0055,48134e6047a19a0055
/uams/android/broadcast,48134e6047a19a0056,48134e6047a19a0056
/uams/android/broadcast,48134e6047a19a0057,48134e6047a19a0057
/uams/android/broadcast,48134e6047a19a0058,48134e6047a19a0058
/uams/android/broadcast,48134e6047a19a0059,48134e6047a19a0059
/uams/android/broadcast,48134e6047a19a0060,48134e6047a19a0060
/uams/android/broadcast,48134e6047a19a0061,48134e6047a19a0061
/uams/android/broadcast,48134e6047a19a0062,48134e6047a19a0062
/uams/android/broadcast,48134e6047a19a0063,48134e6047a19a0063
/uams/android/broadcast,48134e6047a19a0064,48134e6047a19a0064
/uams/android/broadcast,48134e6047a19a0065,48134e6047a19a0065
/uams/android/broadcast,48134e6047a19a0066,48134e6047a19a0066
/uams/android/broadcast,48134e6047a19a0067,48134e6047a19a0067
/uams/android/broadcast,48134e6047a19a0068,48134e6047a19a0068
/uams/android/broadcast,48134e6047a19a0069,48134e6047a19a0069
/uams/android/broadcast,48134e6047a19a0070,48134e6047a19a0070
/uams/android/broadcast,48134e6047a19a0071,48134e6047a19a0071
/uams/android/broadcast,48134e6047a19a0072,48134e6047a19a0072
/uams/android/broadcast,48134e6047a19a0073,48134e6047a19a0073
/uams/android/broadcast,48134e6047a19a0074,48134e6047a19a0074
/uams/android/broadcast,48134e6047a19a0075,48134e6047a19a0075
/uams/android/broadcast,48134e6047a19a0076,48134e6047a19a0076
/uams/android/broadcast,48134e6047a19a0077,48134e6047a19a0077
/uams/android/broadcast,48134e6047a19a0078,48134e6047a19a0078
/uams/android/broadcast,48134e6047a19a0079,48134e6047a19a0079
/uams/android/broadcast,48134e6047a19a0080,48134e6047a19a0080
/uams/android/broadcast,48134e6047a19a0081,48134e6047a19a0081
/uams/android/broadcast,48134e6047a19a0082,48134e6047a19a0082
/uams/android/broadcast,48134e6047a19a0083,48134e6047a19a0083
/uams/android/broadcast,48134e6047a19a0084,48134e6047a19a0084
/uams/android/broadcast,48134e6047a19a0085,48134e6047a19a0085
/uams/android/broadcast,48134e6047a19a0086,48134e6047a19a0086
/uams/android/broadcast,48134e6047a19a0087,48134e6047a19a0087
/uams/android/broadcast,48134e6047a19a0088,48134e6047a19a0088
/uams/android/broadcast,48134e6047a19a0089,48134e6047a19a0089
/uams/android/broadcast,48134e6047a19a0090,48134e6047a19a0090
/uams/android/broadcast,48134e6047a19a0091,48134e6047a19a0091
/uams/android/broadcast,48134e6047a19a0092,48134e6047a19a0092
/uams/android/broadcast,48134e6047a19a0093,48134e6047a19a0093
/uams/android/broadcast,48134e6047a19a0094,48134e6047a19a0094
/uams/android/broadcast,48134e6047a19a0095,48134e6047a19a0095
/uams/android/broadcast,48134e6047a19a0096,48134e6047a19a0096
/uams/android/broadcast,48134e6047a19a0097,48134e6047a19a0097
/uams/android/broadcast,48134e6047a19a0098,48134e6047a19a0098
/uams/android/broadcast,48134e6047a19a0099,48134e6047a19a0099
/uams/android/broadcast,48134e6047a19a0100,48134e6047a19a0100
/uams/android/broadcast,48134e6047a19a0101,48134e6047a19a0101
/uams/android/broadcast,48134e6047a19a0102,48134e6047a19a0102
/uams/android/broadcast,48134e6047a19a0103,48134e6047a19a0103
/uams/android/broadcast,48134e6047a19a0104,48134e6047a19a0104
/uams/android/broadcast,48134e6047a19a0105,48134e6047a19a0105
/uams/android/broadcast,48134e6047a19a0106,48134e6047a19a0106
/uams/android/broadcast,48134e6047a19a0107,48134e6047a19a0107
/uams/android/broadcast,48134e6047a19a0108,48134e6047a19a0108
/uams/android/broadcast,48134e6047a19a0109,48134e6047a19a0109
/uams/android/broadcast,48134e6047a19a0110,48134e6047a19a0110
/uams/android/broadcast,48134e6047a19a0111,48134e6047a19a0111
/uams/android/broadcast,48134e6047a19a0112,48134e6047a19a0112
/uams/android/broadcast,48134e6047a19a0113,48134e6047a19a0113
/uams/android/broadcast,48134e6047a19a0114,48134e6047a19a0114
/uams/android/broadcast,48134e6047a19a0115,48134e6047a19a0115
/uams/android/broadcast,48134e6047a19a0116,48134e6047a19a0116
/uams/android/broadcast,48134e6047a19a0117,48134e6047a19a0117
/uams/android/broadcast,48134e6047a19a0118,48134e6047a19a0118
/uams/android/broadcast,48134e6047a19a0119,48134e6047a19a0119
/uams/android/broadcast,48134e6047a19a0120,48134e6047a19a0120
/uams/android/broadcast,48134e6047a19a0121,48134e6047a19a0121
/uams/android/broadcast,48134e6047a19a0122,48134e6047a19a0122
/uams/android/broadcast,48134e6047a19a0123,48134e6047a19a0123
/uams/android/broadcast,48134e6047a19a0124,48134e6047a19a0124
/uams/android/broadcast,48134e6047a19a0125,48134e6047a19a0125
/uams/android/broadcast,48134e6047a19a0126,48134e6047a19a0126
/uams/android/broadcast,48134e6047a19a0127,48134e6047a19a0127
/uams/android/broadcast,48134e6047a19a0128,48134e6047a19a0128
/uams/android/broadcast,48134e6047a19a0129,48134e6047a19a0129
/uams/android/broadcast,48134e6047a19a0130,48134e6047a19a0130
/uams/android/broadcast,48134e6047a19a0131,48134e6047a19a0131
/uams/android/broadcast,48134e6047a19a0132,48134e6047a19a0132
/uams/android/broadcast,48134e6047a19a0133,48134e6047a19a0133
/uams/android/broadcast,48134e6047a19a0134,48134e6047a19a0134
/uams/android/broadcast,48134e6047a19a0135,48134e6047a19a0135
/uams/android/broadcast,48134e6047a19a0136,48134e6047a19a0136
/uams/android/broadcast,48134e6047a19a0137,48134e6047a19a0137
/uams/android/broadcast,48134e6047a19a0138,48134e6047a19a0138
/uams/android/broadcast,48134e6047a19a0139,48134e6047a19a0139
/uams/android/broadcast,48134e6047a19a0140,48134e6047a19a0140
/uams/android/broadcast,48134e6047a19a0141,48134e6047a19a0141
/uams/android/broadcast,48134e6047a19a0142,48134e6047a19a0142
/uams/android/broadcast,48134e6047a19a0143,48134e6047a19a0143
/uams/android/broadcast,48134e6047a19a0144,48134e6047a19a0144
/uams/android/broadcast,48134e6047a19a0145,48134e6047a19a0145
/uams/android/broadcast,48134e6047a19a0146,48134e6047a19a0146
/uams/android/broadcast,48134e6047a19a0147,48134e6047a19a0147
/uams/android/broadcast,48134e6047a19a0148,48134e6047a19a0148
/uams/android/broadcast,48134e6047a19a0149,48134e6047a19a0149
/uams/android/broadcast,48134e6047a19a0150,48134e6047a19a0150
/uams/android/broadcast,48134e6047a19a0151,48134e6047a19a0151
/uams/android/broadcast,48134e6047a19a0152,48134e6047a19a0152
/uams/android/broadcast,48134e6047a19a0153,48134e6047a19a0153
/uams/android/broadcast,48134e6047a19a0154,48134e6047a19a0154
/uams/android/broadcast,48134e6047a19a0155,48134e6047a19a0155
/uams/android/broadcast,48134e6047a19a0156,48134e6047a19a0156
/uams/android/broadcast,48134e6047a19a0157,48134e6047a19a0157
/uams/android/broadcast,48134e6047a19a0158,48134e6047a19a0158
/uams/android/broadcast,48134e6047a19a0159,48134e6047a19a0159
/uams/android/broadcast,48134e6047a19a0160,48134e6047a19a0160
/uams/android/broadcast,48134e6047a19a0161,48134e6047a19a0161
/uams/android/broadcast,48134e6047a19a0162,48134e6047a19a0162
/uams/android/broadcast,48134e6047a19a0163,48134e6047a19a0163
/uams/android/broadcast,48134e6047a19a0164,48134e6047a19a0164
/uams/android/broadcast,48134e6047a19a0165,48134e6047a19a0165
/uams/android/broadcast,48134e6047a19a0166,48134e6047a19a0166
/uams/android/broadcast,48134e6047a19a0167,48134e6047a19a0167
/uams/android/broadcast,48134e6047a19a0168,48134e6047a19a0168
/uams/android/broadcast,48134e6047a19a0169,48134e6047a19a0169
/uams/android/broadcast,48134e6047a19a0170,48134e6047a19a0170
/uams/android/broadcast,48134e6047a19a0171,48134e6047a19a0171
/uams/android/broadcast,48134e6047a19a0172,48134e6047a19a0172
/uams/android/broadcast,48134e6047a19a0173,48134e6047a19a0173
/uams/android/broadcast,48134e6047a19a0174,48134e6047a19a0174
/uams/android/broadcast,48134e6047a19a0175,48134e6047a19a0175
/uams/android/broadcast,48134e6047a19a0176,48134e6047a19a0176
/uams/android/broadcast,48134e6047a19a0177,48134e6047a19a0177
/uams/android/broadcast,48134e6047a19a0178,48134e6047a19a0178
/uams/android/broadcast,48134e6047a19a0179,48134e6047a19a0179
/uams/android/broadcast,48134e6047a19a0180,48134e6047a19a0180
/uams/android/broadcast,48134e6047a19a0181,48134e6047a19a0181
/uams/android/broadcast,48134e6047a19a0182,48134e6047a19a0182
/uams/android/broadcast,48134e6047a19a0183,48134e6047a19a0183
/uams/android/broadcast,48134e6047a19a0184,48134e6047a19a0184
/uams/android/broadcast,48134e6047a19a0185,48134e6047a19a0185
/uams/android/broadcast,48134e6047a19a0186,48134e6047a19a0186
/uams/android/broadcast,48134e6047a19a0187,48134e6047a19a0187
/uams/android/broadcast,48134e6047a19a0188,48134e6047a19a0188
/uams/android/broadcast,48134e6047a19a0189,48134e6047a19a0189
/uams/android/broadcast,48134e6047a19a0190,48134e6047a19a0190
/uams/android/broadcast,48134e6047a19a0191,48134e6047a19a0191
/uams/android/broadcast,48134e6047a19a0192,48134e6047a19a0192
/uams/android/broadcast,48134e6047a19a0193,48134e6047a19a0193
/uams/android/broadcast,48134e6047a19a0194,48134e6047a19a0194
/uams/android/broadcast,48134e6047a19a0195,48134e6047a19a0195
/uams/android/broadcast,48134e6047a19a0196,48134e6047a19a0196
/uams/android/broadcast,48134e6047a19a0197,48134e6047a19a0197
/uams/android/broadcast,48134e6047a19a0198,48134e6047a19a0198
/uams/android/broadcast,48134e6047a19a0199,48134e6047a19a0199
/uams/android/broadcast,48134e6047a19a0200,48134e6047a19a0200
/uams/android/broadcast,48134e6047a19a0201,48134e6047a19a0201
/uams/android/broadcast,48134e6047a19a0202,48134e6047a19a0202
/uams/android/broadcast,48134e6047a19a0203,48134e6047a19a0203
/uams/android/broadcast,48134e6047a19a0204,48134e6047a19a0204
/uams/android/broadcast,48134e6047a19a0205,48134e6047a19a0205
/uams/android/broadcast,48134e6047a19a0206,48134e6047a19a0206
/uams/android/broadcast,48134e6047a19a0207,48134e6047a19a0207
/uams/android/broadcast,48134e6047a19a0208,48134e6047a19a0208
/uams/android/broadcast,48134e6047a19a0209,48134e6047a19a0209
/uams/android/broadcast,48134e6047a19a0210,48134e6047a19a0210
/uams/android/broadcast,48134e6047a19a0211,48134e6047a19a0211
/uams/android/broadcast,48134e6047a19a0212,48134e6047a19a0212
/uams/android/broadcast,48134e6047a19a0213,48134e6047a19a0213
/uams/android/broadcast,48134e6047a19a0214,48134e6047a19a0214
/uams/android/broadcast,48134e6047a19a0215,48134e6047a19a0215
/uams/android/broadcast,48134e6047a19a0216,48134e6047a19a0216
/uams/android/broadcast,48134e6047a19a0217,48134e6047a19a0217
/uams/android/broadcast,48134e6047a19a0218,48134e6047a19a0218
/uams/android/broadcast,48134e6047a19a0219,48134e6047a19a0219
/uams/android/broadcast,48134e6047a19a0220,48134e6047a19a0220
/uams/android/broadcast,48134e6047a19a0221,48134e6047a19a0221
/uams/android/broadcast,48134e6047a19a0222,48134e6047a19a0222
/uams/android/broadcast,48134e6047a19a0223,48134e6047a19a0223
/uams/android/broadcast,48134e6047a19a0224,48134e6047a19a0224
/uams/android/broadcast,48134e6047a19a0225,48134e6047a19a0225
/uams/android/broadcast,48134e6047a19a0226,48134e6047a19a0226
/uams/android/broadcast,48134e6047a19a0227,48134e6047a19a0227
/uams/android/broadcast,48134e6047a19a0228,48134e6047a19a0228
/uams/android/broadcast,48134e6047a19a0229,48134e6047a19a0229
/uams/android/broadcast,48134e6047a19a0230,48134e6047a19a0230
/uams/android/broadcast,48134e6047a19a0231,48134e6047a19a0231
/uams/android/broadcast,48134e6047a19a0232,48134e6047a19a0232
/uams/android/broadcast,48134e6047a19a0233,48134e6047a19a0233
/uams/android/broadcast,48134e6047a19a0234,48134e6047a19a0234
/uams/android/broadcast,48134e6047a19a0235,48134e6047a19a0235
/uams/android/broadcast,48134e6047a19a0236,48134e6047a19a0236
/uams/android/broadcast,48134e6047a19a0237,48134e6047a19a0237
/uams/android/broadcast,48134e6047a19a0238,48134e6047a19a0238
/uams/android/broadcast,48134e6047a19a0239,48134e6047a19a0239
/uams/android/broadcast,48134e6047a19a0240,48134e6047a19a0240
/uams/android/broadcast,48134e6047a19a0241,48134e6047a19a0241
/uams/android/broadcast,48134e6047a19a0242,48134e6047a19a0242
/uams/android/broadcast,48134e6047a19a0243,48134e6047a19a0243
/uams/android/broadcast,48134e6047a19a0244,48134e6047a19a0244
/uams/android/broadcast,48134e6047a19a0245,48134e6047a19a0245
/uams/android/broadcast,48134e6047a19a0246,48134e6047a19a0246
/uams/android/broadcast,48134e6047a19a0247,48134e6047a19a0247
/uams/android/broadcast,48134e6047a19a0248,48134e6047a19a0248
/uams/android/broadcast,48134e6047a19a0249,48134e6047a19a0249
/uams/android/broadcast,48134e6047a19a0250,48134e6047a19a0250
/uams/android/broadcast,48134e6047a19a0251,48134e6047a19a0251
/uams/android/broadcast,48134e6047a19a0252,48134e6047a19a0252
/uams/android/broadcast,48134e6047a19a0253,48134e6047a19a0253
/uams/android/broadcast,48134e6047a19a0254,48134e6047a19a0254
/uams/android/broadcast,48134e6047a19a0255,48134e6047a19a0255
/uams/android/broadcast,48134e6047a19a0256,48134e6047a19a0256
/uams/android/broadcast,48134e6047a19a0257,48134e6047a19a0257
/uams/android/broadcast,48134e6047a19a0258,48134e6047a19a0258
/uams/android/broadcast,48134e6047a19a0259,48134e6047a19a0259
/uams/android/broadcast,48134e6047a19a0260,48134e6047a19a0260
/uams/android/broadcast,48134e6047a19a0261,48134e6047a19a0261
/uams/android/broadcast,48134e6047a19a0262,48134e6047a19a0262
/uams/android/broadcast,48134e6047a19a0263,48134e6047a19a0263
/uams/android/broadcast,48134e6047a19a0264,48134e6047a19a0264
/uams/android/broadcast,48134e6047a19a0265,48134e6047a19a0265
/uams/android/broadcast,48134e6047a19a0266,48134e6047a19a0266
/uams/android/broadcast,48134e6047a19a0267,48134e6047a19a0267
/uams/android/broadcast,48134e6047a19a0268,48134e6047a19a0268
/uams/android/broadcast,48134e6047a19a0269,48134e6047a19a0269
/uams/android/broadcast,48134e6047a19a0270,48134e6047a19a0270
/uams/android/broadcast,48134e6047a19a0271,48134e6047a19a0271
/uams/android/broadcast,48134e6047a19a0272,48134e6047a19a0272
/uams/android/broadcast,48134e6047a19a0273,48134e6047a19a0273
/uams/android/broadcast,48134e6047a19a0274,48134e6047a19a0274
/uams/android/broadcast,48134e6047a19a0275,48134e6047a19a0275
/uams/android/broadcast,48134e6047a19a0276,48134e6047a19a0276
/uams/android/broadcast,48134e6047a19a0277,48134e6047a19a0277
/uams/android/broadcast,48134e6047a19a0278,48134e6047a19a0278
/uams/android/broadcast,48134e6047a19a0279,48134e6047a19a0279
/uams/android/broadcast,48134e6047a19a0280,48134e6047a19a0280
/uams/android/broadcast,48134e6047a19a0281,48134e6047a19a0281
/uams/android/broadcast,48134e6047a19a0282,48134e6047a19a0282
/uams/android/broadcast,48134e6047a19a0283,48134e6047a19a0283
/uams/android/broadcast,48134e6047a19a0284,48134e6047a19a0284
/uams/android/broadcast,48134e6047a19a0285,48134e6047a19a0285
/uams/android/broadcast,48134e6047a19a0286,48134e6047a19a0286
/uams/android/broadcast,48134e6047a19a0287,48134e6047a19a0287
/uams/android/broadcast,48134e6047a19a0288,48134e6047a19a0288
/uams/android/broadcast,48134e6047a19a0289,48134e6047a19a0289
/uams/android/broadcast,48134e6047a19a0290,48134e6047a19a0290
/uams/android/broadcast,48134e6047a19a0291,48134e6047a19a0291
/uams/android/broadcast,48134e6047a19a0292,48134e6047a19a0292
/uams/android/broadcast,48134e6047a19a0293,48134e6047a19a0293
/uams/android/broadcast,48134e6047a19a0294,48134e6047a19a0294
/uams/android/broadcast,48134e6047a19a0295,48134e6047a19a0295
/uams/android/broadcast,48134e6047a19a0296,48134e6047a19a0296
/uams/android/broadcast,48134e6047a19a0297,48134e6047a19a0297
/uams/android/broadcast,48134e6047a19a0298,48134e6047a19a0298
/uams/android/broadcast,48134e6047a19a0299,48134e6047a19a0299
/uams/android/broadcast,48134e6047a19a0300,48134e6047a19a0300
topic,clientId,deviceId
/uams/android/broadcast,48134e6047a19a0001,48134e6047a19a0001
/uams/android/broadcast,48134e6047a19a0002,48134e6047a19a0002
/uams/android/broadcast,48134e6047a19a0003,48134e6047a19a0003
/uams/android/broadcast,48134e6047a19a0004,48134e6047a19a0004
/uams/android/broadcast,48134e6047a19a0005,48134e6047a19a0005
/uams/android/broadcast,48134e6047a19a0006,48134e6047a19a0006
/uams/android/broadcast,48134e6047a19a0007,48134e6047a19a0007
/uams/android/broadcast,48134e6047a19a0008,48134e6047a19a0008
/uams/android/broadcast,48134e6047a19a0009,48134e6047a19a0009
/uams/android/broadcast,48134e6047a19a0010,48134e6047a19a0010
/uams/android/broadcast,48134e6047a19a0011,48134e6047a19a0011
/uams/android/broadcast,48134e6047a19a0012,48134e6047a19a0012
/uams/android/broadcast,48134e6047a19a0013,48134e6047a19a0013
/uams/android/broadcast,48134e6047a19a0014,48134e6047a19a0014
/uams/android/broadcast,48134e6047a19a0015,48134e6047a19a0015
/uams/android/broadcast,48134e6047a19a0016,48134e6047a19a0016
/uams/android/broadcast,48134e6047a19a0017,48134e6047a19a0017
/uams/android/broadcast,48134e6047a19a0018,48134e6047a19a0018
/uams/android/broadcast,48134e6047a19a0019,48134e6047a19a0019
/uams/android/broadcast,48134e6047a19a0020,48134e6047a19a0020
/uams/android/broadcast,48134e6047a19a0021,48134e6047a19a0021
/uams/android/broadcast,48134e6047a19a0022,48134e6047a19a0022
/uams/android/broadcast,48134e6047a19a0023,48134e6047a19a0023
/uams/android/broadcast,48134e6047a19a0024,48134e6047a19a0024
/uams/android/broadcast,48134e6047a19a0025,48134e6047a19a0025
/uams/android/broadcast,48134e6047a19a0026,48134e6047a19a0026
/uams/android/broadcast,48134e6047a19a0027,48134e6047a19a0027
/uams/android/broadcast,48134e6047a19a0028,48134e6047a19a0028
/uams/android/broadcast,48134e6047a19a0029,48134e6047a19a0029
/uams/android/broadcast,48134e6047a19a0030,48134e6047a19a0030
/uams/android/broadcast,48134e6047a19a0031,48134e6047a19a0031
/uams/android/broadcast,48134e6047a19a0032,48134e6047a19a0032
/uams/android/broadcast,48134e6047a19a0033,48134e6047a19a0033
/uams/android/broadcast,48134e6047a19a0034,48134e6047a19a0034
/uams/android/broadcast,48134e6047a19a0035,48134e6047a19a0035
/uams/android/broadcast,48134e6047a19a0036,48134e6047a19a0036
/uams/android/broadcast,48134e6047a19a0037,48134e6047a19a0037
/uams/android/broadcast,48134e6047a19a0038,48134e6047a19a0038
/uams/android/broadcast,48134e6047a19a0039,48134e6047a19a0039
/uams/android/broadcast,48134e6047a19a0040,48134e6047a19a0040
/uams/android/broadcast,48134e6047a19a0041,48134e6047a19a0041
/uams/android/broadcast,48134e6047a19a0042,48134e6047a19a0042
/uams/android/broadcast,48134e6047a19a0043,48134e6047a19a0043
/uams/android/broadcast,48134e6047a19a0044,48134e6047a19a0044
/uams/android/broadcast,48134e6047a19a0045,48134e6047a19a0045
/uams/android/broadcast,48134e6047a19a0046,48134e6047a19a0046
/uams/android/broadcast,48134e6047a19a0047,48134e6047a19a0047
/uams/android/broadcast,48134e6047a19a0048,48134e6047a19a0048
/uams/android/broadcast,48134e6047a19a0049,48134e6047a19a0049
/uams/android/broadcast,48134e6047a19a0050,48134e6047a19a0050
/uams/android/broadcast,48134e6047a19a0051,48134e6047a19a0051
/uams/android/broadcast,48134e6047a19a0052,48134e6047a19a0052
/uams/android/broadcast,48134e6047a19a0053,48134e6047a19a0053
/uams/android/broadcast,48134e6047a19a0054,48134e6047a19a0054
/uams/android/broadcast,48134e6047a19a0055,48134e6047a19a0055
/uams/android/broadcast,48134e6047a19a0056,48134e6047a19a0056
/uams/android/broadcast,48134e6047a19a0057,48134e6047a19a0057
/uams/android/broadcast,48134e6047a19a0058,48134e6047a19a0058
/uams/android/broadcast,48134e6047a19a0059,48134e6047a19a0059
/uams/android/broadcast,48134e6047a19a0060,48134e6047a19a0060
/uams/android/broadcast,48134e6047a19a0061,48134e6047a19a0061
/uams/android/broadcast,48134e6047a19a0062,48134e6047a19a0062
/uams/android/broadcast,48134e6047a19a0063,48134e6047a19a0063
/uams/android/broadcast,48134e6047a19a0064,48134e6047a19a0064
/uams/android/broadcast,48134e6047a19a0065,48134e6047a19a0065
/uams/android/broadcast,48134e6047a19a0066,48134e6047a19a0066
/uams/android/broadcast,48134e6047a19a0067,48134e6047a19a0067
/uams/android/broadcast,48134e6047a19a0068,48134e6047a19a0068
/uams/android/broadcast,48134e6047a19a0069,48134e6047a19a0069
/uams/android/broadcast,48134e6047a19a0070,48134e6047a19a0070
/uams/android/broadcast,48134e6047a19a0071,48134e6047a19a0071
/uams/android/broadcast,48134e6047a19a0072,48134e6047a19a0072
/uams/android/broadcast,48134e6047a19a0073,48134e6047a19a0073
/uams/android/broadcast,48134e6047a19a0074,48134e6047a19a0074
/uams/android/broadcast,48134e6047a19a0075,48134e6047a19a0075
/uams/android/broadcast,48134e6047a19a0076,48134e6047a19a0076
/uams/android/broadcast,48134e6047a19a0077,48134e6047a19a0077
/uams/android/broadcast,48134e6047a19a0078,48134e6047a19a0078
/uams/android/broadcast,48134e6047a19a0079,48134e6047a19a0079
/uams/android/broadcast,48134e6047a19a0080,48134e6047a19a0080
/uams/android/broadcast,48134e6047a19a0081,48134e6047a19a0081
/uams/android/broadcast,48134e6047a19a0082,48134e6047a19a0082
/uams/android/broadcast,48134e6047a19a0083,48134e6047a19a0083
/uams/android/broadcast,48134e6047a19a0084,48134e6047a19a0084
/uams/android/broadcast,48134e6047a19a0085,48134e6047a19a0085
/uams/android/broadcast,48134e6047a19a0086,48134e6047a19a0086
/uams/android/broadcast,48134e6047a19a0087,48134e6047a19a0087
/uams/android/broadcast,48134e6047a19a0088,48134e6047a19a0088
/uams/android/broadcast,48134e6047a19a0089,48134e6047a19a0089
/uams/android/broadcast,48134e6047a19a0090,48134e6047a19a0090
/uams/android/broadcast,48134e6047a19a0091,48134e6047a19a0091
/uams/android/broadcast,48134e6047a19a0092,48134e6047a19a0092
/uams/android/broadcast,48134e6047a19a0093,48134e6047a19a0093
/uams/android/broadcast,48134e6047a19a0094,48134e6047a19a0094
/uams/android/broadcast,48134e6047a19a0095,48134e6047a19a0095
/uams/android/broadcast,48134e6047a19a0096,48134e6047a19a0096
/uams/android/broadcast,48134e6047a19a0097,48134e6047a19a0097
/uams/android/broadcast,48134e6047a19a0098,48134e6047a19a0098
/uams/android/broadcast,48134e6047a19a0099,48134e6047a19a0099
/uams/android/broadcast,48134e6047a19a0100,48134e6047a19a0100
/uams/android/broadcast,48134e6047a19a0101,48134e6047a19a0101
/uams/android/broadcast,48134e6047a19a0102,48134e6047a19a0102
/uams/android/broadcast,48134e6047a19a0103,48134e6047a19a0103
/uams/android/broadcast,48134e6047a19a0104,48134e6047a19a0104
/uams/android/broadcast,48134e6047a19a0105,48134e6047a19a0105
/uams/android/broadcast,48134e6047a19a0106,48134e6047a19a0106
/uams/android/broadcast,48134e6047a19a0107,48134e6047a19a0107
/uams/android/broadcast,48134e6047a19a0108,48134e6047a19a0108
/uams/android/broadcast,48134e6047a19a0109,48134e6047a19a0109
/uams/android/broadcast,48134e6047a19a0110,48134e6047a19a0110
/uams/android/broadcast,48134e6047a19a0111,48134e6047a19a0111
/uams/android/broadcast,48134e6047a19a0112,48134e6047a19a0112
/uams/android/broadcast,48134e6047a19a0113,48134e6047a19a0113
/uams/android/broadcast,48134e6047a19a0114,48134e6047a19a0114
/uams/android/broadcast,48134e6047a19a0115,48134e6047a19a0115
/uams/android/broadcast,48134e6047a19a0116,48134e6047a19a0116
/uams/android/broadcast,48134e6047a19a0117,48134e6047a19a0117
/uams/android/broadcast,48134e6047a19a0118,48134e6047a19a0118
/uams/android/broadcast,48134e6047a19a0119,48134e6047a19a0119
/uams/android/broadcast,48134e6047a19a0120,48134e6047a19a0120
/uams/android/broadcast,48134e6047a19a0121,48134e6047a19a0121
/uams/android/broadcast,48134e6047a19a0122,48134e6047a19a0122
/uams/android/broadcast,48134e6047a19a0123,48134e6047a19a0123
/uams/android/broadcast,48134e6047a19a0124,48134e6047a19a0124
/uams/android/broadcast,48134e6047a19a0125,48134e6047a19a0125
/uams/android/broadcast,48134e6047a19a0126,48134e6047a19a0126
/uams/android/broadcast,48134e6047a19a0127,48134e6047a19a0127
/uams/android/broadcast,48134e6047a19a0128,48134e6047a19a0128
/uams/android/broadcast,48134e6047a19a0129,48134e6047a19a0129
/uams/android/broadcast,48134e6047a19a0130,48134e6047a19a0130
/uams/android/broadcast,48134e6047a19a0131,48134e6047a19a0131
/uams/android/broadcast,48134e6047a19a0132,48134e6047a19a0132
/uams/android/broadcast,48134e6047a19a0133,48134e6047a19a0133
/uams/android/broadcast,48134e6047a19a0134,48134e6047a19a0134
/uams/android/broadcast,48134e6047a19a0135,48134e6047a19a0135
/uams/android/broadcast,48134e6047a19a0136,48134e6047a19a0136
/uams/android/broadcast,48134e6047a19a0137,48134e6047a19a0137
/uams/android/broadcast,48134e6047a19a0138,48134e6047a19a0138
/uams/android/broadcast,48134e6047a19a0139,48134e6047a19a0139
/uams/android/broadcast,48134e6047a19a0140,48134e6047a19a0140
/uams/android/broadcast,48134e6047a19a0141,48134e6047a19a0141
/uams/android/broadcast,48134e6047a19a0142,48134e6047a19a0142
/uams/android/broadcast,48134e6047a19a0143,48134e6047a19a0143
/uams/android/broadcast,48134e6047a19a0144,48134e6047a19a0144
/uams/android/broadcast,48134e6047a19a0145,48134e6047a19a0145
/uams/android/broadcast,48134e6047a19a0146,48134e6047a19a0146
/uams/android/broadcast,48134e6047a19a0147,48134e6047a19a0147
/uams/android/broadcast,48134e6047a19a0148,48134e6047a19a0148
/uams/android/broadcast,48134e6047a19a0149,48134e6047a19a0149
/uams/android/broadcast,48134e6047a19a0150,48134e6047a19a0150
/uams/android/broadcast,48134e6047a19a0151,48134e6047a19a0151
/uams/android/broadcast,48134e6047a19a0152,48134e6047a19a0152
/uams/android/broadcast,48134e6047a19a0153,48134e6047a19a0153
/uams/android/broadcast,48134e6047a19a0154,48134e6047a19a0154
/uams/android/broadcast,48134e6047a19a0155,48134e6047a19a0155
/uams/android/broadcast,48134e6047a19a0156,48134e6047a19a0156
/uams/android/broadcast,48134e6047a19a0157,48134e6047a19a0157
/uams/android/broadcast,48134e6047a19a0158,48134e6047a19a0158
/uams/android/broadcast,48134e6047a19a0159,48134e6047a19a0159
/uams/android/broadcast,48134e6047a19a0160,48134e6047a19a0160
/uams/android/broadcast,48134e6047a19a0161,48134e6047a19a0161
/uams/android/broadcast,48134e6047a19a0162,48134e6047a19a0162
/uams/android/broadcast,48134e6047a19a0163,48134e6047a19a0163
/uams/android/broadcast,48134e6047a19a0164,48134e6047a19a0164
/uams/android/broadcast,48134e6047a19a0165,48134e6047a19a0165
/uams/android/broadcast,48134e6047a19a0166,48134e6047a19a0166
/uams/android/broadcast,48134e6047a19a0167,48134e6047a19a0167
/uams/android/broadcast,48134e6047a19a0168,48134e6047a19a0168
/uams/android/broadcast,48134e6047a19a0169,48134e6047a19a0169
/uams/android/broadcast,48134e6047a19a0170,48134e6047a19a0170
/uams/android/broadcast,48134e6047a19a0171,48134e6047a19a0171
/uams/android/broadcast,48134e6047a19a0172,48134e6047a19a0172
/uams/android/broadcast,48134e6047a19a0173,48134e6047a19a0173
/uams/android/broadcast,48134e6047a19a0174,48134e6047a19a0174
/uams/android/broadcast,48134e6047a19a0175,48134e6047a19a0175
/uams/android/broadcast,48134e6047a19a0176,48134e6047a19a0176
/uams/android/broadcast,48134e6047a19a0177,48134e6047a19a0177
/uams/android/broadcast,48134e6047a19a0178,48134e6047a19a0178
/uams/android/broadcast,48134e6047a19a0179,48134e6047a19a0179
/uams/android/broadcast,48134e6047a19a0180,48134e6047a19a0180
/uams/android/broadcast,48134e6047a19a0181,48134e6047a19a0181
/uams/android/broadcast,48134e6047a19a0182,48134e6047a19a0182
/uams/android/broadcast,48134e6047a19a0183,48134e6047a19a0183
/uams/android/broadcast,48134e6047a19a0184,48134e6047a19a0184
/uams/android/broadcast,48134e6047a19a0185,48134e6047a19a0185
/uams/android/broadcast,48134e6047a19a0186,48134e6047a19a0186
/uams/android/broadcast,48134e6047a19a0187,48134e6047a19a0187
/uams/android/broadcast,48134e6047a19a0188,48134e6047a19a0188
/uams/android/broadcast,48134e6047a19a0189,48134e6047a19a0189
/uams/android/broadcast,48134e6047a19a0190,48134e6047a19a0190
/uams/android/broadcast,48134e6047a19a0191,48134e6047a19a0191
/uams/android/broadcast,48134e6047a19a0192,48134e6047a19a0192
/uams/android/broadcast,48134e6047a19a0193,48134e6047a19a0193
/uams/android/broadcast,48134e6047a19a0194,48134e6047a19a0194
/uams/android/broadcast,48134e6047a19a0195,48134e6047a19a0195
/uams/android/broadcast,48134e6047a19a0196,48134e6047a19a0196
/uams/android/broadcast,48134e6047a19a0197,48134e6047a19a0197
/uams/android/broadcast,48134e6047a19a0198,48134e6047a19a0198
/uams/android/broadcast,48134e6047a19a0199,48134e6047a19a0199
/uams/android/broadcast,48134e6047a19a0200,48134e6047a19a0200
/uams/android/broadcast,48134e6047a19a0201,48134e6047a19a0201
/uams/android/broadcast,48134e6047a19a0202,48134e6047a19a0202
/uams/android/broadcast,48134e6047a19a0203,48134e6047a19a0203
/uams/android/broadcast,48134e6047a19a0204,48134e6047a19a0204
/uams/android/broadcast,48134e6047a19a0205,48134e6047a19a0205
/uams/android/broadcast,48134e6047a19a0206,48134e6047a19a0206
/uams/android/broadcast,48134e6047a19a0207,48134e6047a19a0207
/uams/android/broadcast,48134e6047a19a0208,48134e6047a19a0208
/uams/android/broadcast,48134e6047a19a0209,48134e6047a19a0209
/uams/android/broadcast,48134e6047a19a0210,48134e6047a19a0210
/uams/android/broadcast,48134e6047a19a0211,48134e6047a19a0211
/uams/android/broadcast,48134e6047a19a0212,48134e6047a19a0212
/uams/android/broadcast,48134e6047a19a0213,48134e6047a19a0213
/uams/android/broadcast,48134e6047a19a0214,48134e6047a19a0214
/uams/android/broadcast,48134e6047a19a0215,48134e6047a19a0215
/uams/android/broadcast,48134e6047a19a0216,48134e6047a19a0216
/uams/android/broadcast,48134e6047a19a0217,48134e6047a19a0217
/uams/android/broadcast,48134e6047a19a0218,48134e6047a19a0218
/uams/android/broadcast,48134e6047a19a0219,48134e6047a19a0219
/uams/android/broadcast,48134e6047a19a0220,48134e6047a19a0220
/uams/android/broadcast,48134e6047a19a0221,48134e6047a19a0221
/uams/android/broadcast,48134e6047a19a0222,48134e6047a19a0222
/uams/android/broadcast,48134e6047a19a0223,48134e6047a19a0223
/uams/android/broadcast,48134e6047a19a0224,48134e6047a19a0224
/uams/android/broadcast,48134e6047a19a0225,48134e6047a19a0225
/uams/android/broadcast,48134e6047a19a0226,48134e6047a19a0226
/uams/android/broadcast,48134e6047a19a0227,48134e6047a19a0227
/uams/android/broadcast,48134e6047a19a0228,48134e6047a19a0228
/uams/android/broadcast,48134e6047a19a0229,48134e6047a19a0229
/uams/android/broadcast,48134e6047a19a0230,48134e6047a19a0230
/uams/android/broadcast,48134e6047a19a0231,48134e6047a19a0231
/uams/android/broadcast,48134e6047a19a0232,48134e6047a19a0232
/uams/android/broadcast,48134e6047a19a0233,48134e6047a19a0233
/uams/android/broadcast,48134e6047a19a0234,48134e6047a19a0234
/uams/android/broadcast,48134e6047a19a0235,48134e6047a19a0235
/uams/android/broadcast,48134e6047a19a0236,48134e6047a19a0236
/uams/android/broadcast,48134e6047a19a0237,48134e6047a19a0237
/uams/android/broadcast,48134e6047a19a0238,48134e6047a19a0238
/uams/android/broadcast,48134e6047a19a0239,48134e6047a19a0239
/uams/android/broadcast,48134e6047a19a0240,48134e6047a19a0240
/uams/android/broadcast,48134e6047a19a0241,48134e6047a19a0241
/uams/android/broadcast,48134e6047a19a0242,48134e6047a19a0242
/uams/android/broadcast,48134e6047a19a0243,48134e6047a19a0243
/uams/android/broadcast,48134e6047a19a0244,48134e6047a19a0244
/uams/android/broadcast,48134e6047a19a0245,48134e6047a19a0245
/uams/android/broadcast,48134e6047a19a0246,48134e6047a19a0246
/uams/android/broadcast,48134e6047a19a0247,48134e6047a19a0247
/uams/android/broadcast,48134e6047a19a0248,48134e6047a19a0248
/uams/android/broadcast,48134e6047a19a0249,48134e6047a19a0249
/uams/android/broadcast,48134e6047a19a0250,48134e6047a19a0250
/uams/android/broadcast,48134e6047a19a0251,48134e6047a19a0251
/uams/android/broadcast,48134e6047a19a0252,48134e6047a19a0252
/uams/android/broadcast,48134e6047a19a0253,48134e6047a19a0253
/uams/android/broadcast,48134e6047a19a0254,48134e6047a19a0254
/uams/android/broadcast,48134e6047a19a0255,48134e6047a19a0255
/uams/android/broadcast,48134e6047a19a0256,48134e6047a19a0256
/uams/android/broadcast,48134e6047a19a0257,48134e6047a19a0257
/uams/android/broadcast,48134e6047a19a0258,48134e6047a19a0258
/uams/android/broadcast,48134e6047a19a0259,48134e6047a19a0259
/uams/android/broadcast,48134e6047a19a0260,48134e6047a19a0260
/uams/android/broadcast,48134e6047a19a0261,48134e6047a19a0261
/uams/android/broadcast,48134e6047a19a0262,48134e6047a19a0262
/uams/android/broadcast,48134e6047a19a0263,48134e6047a19a0263
/uams/android/broadcast,48134e6047a19a0264,48134e6047a19a0264
/uams/android/broadcast,48134e6047a19a0265,48134e6047a19a0265
/uams/android/broadcast,48134e6047a19a0266,48134e6047a19a0266
/uams/android/broadcast,48134e6047a19a0267,48134e6047a19a0267
/uams/android/broadcast,48134e6047a19a0268,48134e6047a19a0268
/uams/android/broadcast,48134e6047a19a0269,48134e6047a19a0269
/uams/android/broadcast,48134e6047a19a0270,48134e6047a19a0270
/uams/android/broadcast,48134e6047a19a0271,48134e6047a19a0271
/uams/android/broadcast,48134e6047a19a0272,48134e6047a19a0272
/uams/android/broadcast,48134e6047a19a0273,48134e6047a19a0273
/uams/android/broadcast,48134e6047a19a0274,48134e6047a19a0274
/uams/android/broadcast,48134e6047a19a0275,48134e6047a19a0275
/uams/android/broadcast,48134e6047a19a0276,48134e6047a19a0276
/uams/android/broadcast,48134e6047a19a0277,48134e6047a19a0277
/uams/android/broadcast,48134e6047a19a0278,48134e6047a19a0278
/uams/android/broadcast,48134e6047a19a0279,48134e6047a19a0279
/uams/android/broadcast,48134e6047a19a0280,48134e6047a19a0280
/uams/android/broadcast,48134e6047a19a0281,48134e6047a19a0281
/uams/android/broadcast,48134e6047a19a0282,48134e6047a19a0282
/uams/android/broadcast,48134e6047a19a0283,48134e6047a19a0283
/uams/android/broadcast,48134e6047a19a0284,48134e6047a19a0284
/uams/android/broadcast,48134e6047a19a0285,48134e6047a19a0285
/uams/android/broadcast,48134e6047a19a0286,48134e6047a19a0286
/uams/android/broadcast,48134e6047a19a0287,48134e6047a19a0287
/uams/android/broadcast,48134e6047a19a0288,48134e6047a19a0288
/uams/android/broadcast,48134e6047a19a0289,48134e6047a19a0289
/uams/android/broadcast,48134e6047a19a0290,48134e6047a19a0290
/uams/android/broadcast,48134e6047a19a0291,48134e6047a19a0291
/uams/android/broadcast,48134e6047a19a0292,48134e6047a19a0292
/uams/android/broadcast,48134e6047a19a0293,48134e6047a19a0293
/uams/android/broadcast,48134e6047a19a0294,48134e6047a19a0294
/uams/android/broadcast,48134e6047a19a0295,48134e6047a19a0295
/uams/android/broadcast,48134e6047a19a0296,48134e6047a19a0296
/uams/android/broadcast,48134e6047a19a0297,48134e6047a19a0297
/uams/android/broadcast,48134e6047a19a0298,48134e6047a19a0298
/uams/android/broadcast,48134e6047a19a0299,48134e6047a19a0299
/uams/android/broadcast,48134e6047a19a0300,48134e6047a19a0300
/uams/android/broadcast,48134e6047a19a0301,48134e6047a19a0301
/uams/android/broadcast,48134e6047a19a0302,48134e6047a19a0302
/uams/android/broadcast,48134e6047a19a0303,48134e6047a19a0303
/uams/android/broadcast,48134e6047a19a0304,48134e6047a19a0304
/uams/android/broadcast,48134e6047a19a0305,48134e6047a19a0305
/uams/android/broadcast,48134e6047a19a0306,48134e6047a19a0306
/uams/android/broadcast,48134e6047a19a0307,48134e6047a19a0307
/uams/android/broadcast,48134e6047a19a0308,48134e6047a19a0308
/uams/android/broadcast,48134e6047a19a0309,48134e6047a19a0309
/uams/android/broadcast,48134e6047a19a0310,48134e6047a19a0310
/uams/android/broadcast,48134e6047a19a0311,48134e6047a19a0311
/uams/android/broadcast,48134e6047a19a0312,48134e6047a19a0312
/uams/android/broadcast,48134e6047a19a0313,48134e6047a19a0313
/uams/android/broadcast,48134e6047a19a0314,48134e6047a19a0314
/uams/android/broadcast,48134e6047a19a0315,48134e6047a19a0315
/uams/android/broadcast,48134e6047a19a0316,48134e6047a19a0316
/uams/android/broadcast,48134e6047a19a0317,48134e6047a19a0317
/uams/android/broadcast,48134e6047a19a0318,48134e6047a19a0318
/uams/android/broadcast,48134e6047a19a0319,48134e6047a19a0319
/uams/android/broadcast,48134e6047a19a0320,48134e6047a19a0320
/uams/android/broadcast,48134e6047a19a0321,48134e6047a19a0321
/uams/android/broadcast,48134e6047a19a0322,48134e6047a19a0322
/uams/android/broadcast,48134e6047a19a0323,48134e6047a19a0323
/uams/android/broadcast,48134e6047a19a0324,48134e6047a19a0324
/uams/android/broadcast,48134e6047a19a0325,48134e6047a19a0325
/uams/android/broadcast,48134e6047a19a0326,48134e6047a19a0326
/uams/android/broadcast,48134e6047a19a0327,48134e6047a19a0327
/uams/android/broadcast,48134e6047a19a0328,48134e6047a19a0328
/uams/android/broadcast,48134e6047a19a0329,48134e6047a19a0329
/uams/android/broadcast,48134e6047a19a0330,48134e6047a19a0330
/uams/android/broadcast,48134e6047a19a0331,48134e6047a19a0331
/uams/android/broadcast,48134e6047a19a0332,48134e6047a19a0332
/uams/android/broadcast,48134e6047a19a0333,48134e6047a19a0333
/uams/android/broadcast,48134e6047a19a0334,48134e6047a19a0334
/uams/android/broadcast,48134e6047a19a0335,48134e6047a19a0335
/uams/android/broadcast,48134e6047a19a0336,48134e6047a19a0336
/uams/android/broadcast,48134e6047a19a0337,48134e6047a19a0337
/uams/android/broadcast,48134e6047a19a0338,48134e6047a19a0338
/uams/android/broadcast,48134e6047a19a0339,48134e6047a19a0339
/uams/android/broadcast,48134e6047a19a0340,48134e6047a19a0340
/uams/android/broadcast,48134e6047a19a0341,48134e6047a19a0341
/uams/android/broadcast,48134e6047a19a0342,48134e6047a19a0342
/uams/android/broadcast,48134e6047a19a0343,48134e6047a19a0343
/uams/android/broadcast,48134e6047a19a0344,48134e6047a19a0344
/uams/android/broadcast,48134e6047a19a0345,48134e6047a19a0345
/uams/android/broadcast,48134e6047a19a0346,48134e6047a19a0346
/uams/android/broadcast,48134e6047a19a0347,48134e6047a19a0347
/uams/android/broadcast,48134e6047a19a0348,48134e6047a19a0348
/uams/android/broadcast,48134e6047a19a0349,48134e6047a19a0349
/uams/android/broadcast,48134e6047a19a0350,48134e6047a19a0350
/uams/android/broadcast,48134e6047a19a0351,48134e6047a19a0351
/uams/android/broadcast,48134e6047a19a0352,48134e6047a19a0352
/uams/android/broadcast,48134e6047a19a0353,48134e6047a19a0353
/uams/android/broadcast,48134e6047a19a0354,48134e6047a19a0354
/uams/android/broadcast,48134e6047a19a0355,48134e6047a19a0355
/uams/android/broadcast,48134e6047a19a0356,48134e6047a19a0356
/uams/android/broadcast,48134e6047a19a0357,48134e6047a19a0357
/uams/android/broadcast,48134e6047a19a0358,48134e6047a19a0358
/uams/android/broadcast,48134e6047a19a0359,48134e6047a19a0359
/uams/android/broadcast,48134e6047a19a0360,48134e6047a19a0360
/uams/android/broadcast,48134e6047a19a0361,48134e6047a19a0361
/uams/android/broadcast,48134e6047a19a0362,48134e6047a19a0362
/uams/android/broadcast,48134e6047a19a0363,48134e6047a19a0363
/uams/android/broadcast,48134e6047a19a0364,48134e6047a19a0364
/uams/android/broadcast,48134e6047a19a0365,48134e6047a19a0365
/uams/android/broadcast,48134e6047a19a0366,48134e6047a19a0366
/uams/android/broadcast,48134e6047a19a0367,48134e6047a19a0367
/uams/android/broadcast,48134e6047a19a0368,48134e6047a19a0368
/uams/android/broadcast,48134e6047a19a0369,48134e6047a19a0369
/uams/android/broadcast,48134e6047a19a0370,48134e6047a19a0370
/uams/android/broadcast,48134e6047a19a0371,48134e6047a19a0371
/uams/android/broadcast,48134e6047a19a0372,48134e6047a19a0372
/uams/android/broadcast,48134e6047a19a0373,48134e6047a19a0373
/uams/android/broadcast,48134e6047a19a0374,48134e6047a19a0374
/uams/android/broadcast,48134e6047a19a0375,48134e6047a19a0375
/uams/android/broadcast,48134e6047a19a0376,48134e6047a19a0376
/uams/android/broadcast,48134e6047a19a0377,48134e6047a19a0377
/uams/android/broadcast,48134e6047a19a0378,48134e6047a19a0378
/uams/android/broadcast,48134e6047a19a0379,48134e6047a19a0379
/uams/android/broadcast,48134e6047a19a0380,48134e6047a19a0380
/uams/android/broadcast,48134e6047a19a0381,48134e6047a19a0381
/uams/android/broadcast,48134e6047a19a0382,48134e6047a19a0382
/uams/android/broadcast,48134e6047a19a0383,48134e6047a19a0383
/uams/android/broadcast,48134e6047a19a0384,48134e6047a19a0384
/uams/android/broadcast,48134e6047a19a0385,48134e6047a19a0385
/uams/android/broadcast,48134e6047a19a0386,48134e6047a19a0386
/uams/android/broadcast,48134e6047a19a0387,48134e6047a19a0387
/uams/android/broadcast,48134e6047a19a0388,48134e6047a19a0388
/uams/android/broadcast,48134e6047a19a0389,48134e6047a19a0389
/uams/android/broadcast,48134e6047a19a0390,48134e6047a19a0390
/uams/android/broadcast,48134e6047a19a0391,48134e6047a19a0391
/uams/android/broadcast,48134e6047a19a0392,48134e6047a19a0392
/uams/android/broadcast,48134e6047a19a0393,48134e6047a19a0393
/uams/android/broadcast,48134e6047a19a0394,48134e6047a19a0394
/uams/android/broadcast,48134e6047a19a0395,48134e6047a19a0395
/uams/android/broadcast,48134e6047a19a0396,48134e6047a19a0396
/uams/android/broadcast,48134e6047a19a0397,48134e6047a19a0397
/uams/android/broadcast,48134e6047a19a0398,48134e6047a19a0398
/uams/android/broadcast,48134e6047a19a0399,48134e6047a19a0399
/uams/android/broadcast,48134e6047a19a0400,48134e6047a19a0400
/uams/android/broadcast,48134e6047a19a0401,48134e6047a19a0401
/uams/android/broadcast,48134e6047a19a0402,48134e6047a19a0402
/uams/android/broadcast,48134e6047a19a0403,48134e6047a19a0403
/uams/android/broadcast,48134e6047a19a0404,48134e6047a19a0404
/uams/android/broadcast,48134e6047a19a0405,48134e6047a19a0405
/uams/android/broadcast,48134e6047a19a0406,48134e6047a19a0406
/uams/android/broadcast,48134e6047a19a0407,48134e6047a19a0407
/uams/android/broadcast,48134e6047a19a0408,48134e6047a19a0408
/uams/android/broadcast,48134e6047a19a0409,48134e6047a19a0409
/uams/android/broadcast,48134e6047a19a0410,48134e6047a19a0410
/uams/android/broadcast,48134e6047a19a0411,48134e6047a19a0411
/uams/android/broadcast,48134e6047a19a0412,48134e6047a19a0412
/uams/android/broadcast,48134e6047a19a0413,48134e6047a19a0413
/uams/android/broadcast,48134e6047a19a0414,48134e6047a19a0414
/uams/android/broadcast,48134e6047a19a0415,48134e6047a19a0415
/uams/android/broadcast,48134e6047a19a0416,48134e6047a19a0416
/uams/android/broadcast,48134e6047a19a0417,48134e6047a19a0417
/uams/android/broadcast,48134e6047a19a0418,48134e6047a19a0418
/uams/android/broadcast,48134e6047a19a0419,48134e6047a19a0419
/uams/android/broadcast,48134e6047a19a0420,48134e6047a19a0420
/uams/android/broadcast,48134e6047a19a0421,48134e6047a19a0421
/uams/android/broadcast,48134e6047a19a0422,48134e6047a19a0422
/uams/android/broadcast,48134e6047a19a0423,48134e6047a19a0423
/uams/android/broadcast,48134e6047a19a0424,48134e6047a19a0424
/uams/android/broadcast,48134e6047a19a0425,48134e6047a19a0425
/uams/android/broadcast,48134e6047a19a0426,48134e6047a19a0426
/uams/android/broadcast,48134e6047a19a0427,48134e6047a19a0427
/uams/android/broadcast,48134e6047a19a0428,48134e6047a19a0428
/uams/android/broadcast,48134e6047a19a0429,48134e6047a19a0429
/uams/android/broadcast,48134e6047a19a0430,48134e6047a19a0430
/uams/android/broadcast,48134e6047a19a0431,48134e6047a19a0431
/uams/android/broadcast,48134e6047a19a0432,48134e6047a19a0432
/uams/android/broadcast,48134e6047a19a0433,48134e6047a19a0433
/uams/android/broadcast,48134e6047a19a0434,48134e6047a19a0434
/uams/android/broadcast,48134e6047a19a0435,48134e6047a19a0435
/uams/android/broadcast,48134e6047a19a0436,48134e6047a19a0436
/uams/android/broadcast,48134e6047a19a0437,48134e6047a19a0437
/uams/android/broadcast,48134e6047a19a0438,48134e6047a19a0438
/uams/android/broadcast,48134e6047a19a0439,48134e6047a19a0439
/uams/android/broadcast,48134e6047a19a0440,48134e6047a19a0440
/uams/android/broadcast,48134e6047a19a0441,48134e6047a19a0441
/uams/android/broadcast,48134e6047a19a0442,48134e6047a19a0442
/uams/android/broadcast,48134e6047a19a0443,48134e6047a19a0443
/uams/android/broadcast,48134e6047a19a0444,48134e6047a19a0444
/uams/android/broadcast,48134e6047a19a0445,48134e6047a19a0445
/uams/android/broadcast,48134e6047a19a0446,48134e6047a19a0446
/uams/android/broadcast,48134e6047a19a0447,48134e6047a19a0447
/uams/android/broadcast,48134e6047a19a0448,48134e6047a19a0448
/uams/android/broadcast,48134e6047a19a0449,48134e6047a19a0449
/uams/android/broadcast,48134e6047a19a0450,48134e6047a19a0450
/uams/android/broadcast,48134e6047a19a0451,48134e6047a19a0451
/uams/android/broadcast,48134e6047a19a0452,48134e6047a19a0452
/uams/android/broadcast,48134e6047a19a0453,48134e6047a19a0453
/uams/android/broadcast,48134e6047a19a0454,48134e6047a19a0454
/uams/android/broadcast,48134e6047a19a0455,48134e6047a19a0455
/uams/android/broadcast,48134e6047a19a0456,48134e6047a19a0456
/uams/android/broadcast,48134e6047a19a0457,48134e6047a19a0457
/uams/android/broadcast,48134e6047a19a0458,48134e6047a19a0458
/uams/android/broadcast,48134e6047a19a0459,48134e6047a19a0459
/uams/android/broadcast,48134e6047a19a0460,48134e6047a19a0460
/uams/android/broadcast,48134e6047a19a0461,48134e6047a19a0461
/uams/android/broadcast,48134e6047a19a0462,48134e6047a19a0462
/uams/android/broadcast,48134e6047a19a0463,48134e6047a19a0463
/uams/android/broadcast,48134e6047a19a0464,48134e6047a19a0464
/uams/android/broadcast,48134e6047a19a0465,48134e6047a19a0465
/uams/android/broadcast,48134e6047a19a0466,48134e6047a19a0466
/uams/android/broadcast,48134e6047a19a0467,48134e6047a19a0467
/uams/android/broadcast,48134e6047a19a0468,48134e6047a19a0468
/uams/android/broadcast,48134e6047a19a0469,48134e6047a19a0469
/uams/android/broadcast,48134e6047a19a0470,48134e6047a19a0470
/uams/android/broadcast,48134e6047a19a0471,48134e6047a19a0471
/uams/android/broadcast,48134e6047a19a0472,48134e6047a19a0472
/uams/android/broadcast,48134e6047a19a0473,48134e6047a19a0473
/uams/android/broadcast,48134e6047a19a0474,48134e6047a19a0474
/uams/android/broadcast,48134e6047a19a0475,48134e6047a19a0475
/uams/android/broadcast,48134e6047a19a0476,48134e6047a19a0476
/uams/android/broadcast,48134e6047a19a0477,48134e6047a19a0477
/uams/android/broadcast,48134e6047a19a0478,48134e6047a19a0478
/uams/android/broadcast,48134e6047a19a0479,48134e6047a19a0479
/uams/android/broadcast,48134e6047a19a0480,48134e6047a19a0480
/uams/android/broadcast,48134e6047a19a0481,48134e6047a19a0481
/uams/android/broadcast,48134e6047a19a0482,48134e6047a19a0482
/uams/android/broadcast,48134e6047a19a0483,48134e6047a19a0483
/uams/android/broadcast,48134e6047a19a0484,48134e6047a19a0484
/uams/android/broadcast,48134e6047a19a0485,48134e6047a19a0485
/uams/android/broadcast,48134e6047a19a0486,48134e6047a19a0486
/uams/android/broadcast,48134e6047a19a0487,48134e6047a19a0487
/uams/android/broadcast,48134e6047a19a0488,48134e6047a19a0488
/uams/android/broadcast,48134e6047a19a0489,48134e6047a19a0489
/uams/android/broadcast,48134e6047a19a0490,48134e6047a19a0490
/uams/android/broadcast,48134e6047a19a0491,48134e6047a19a0491
/uams/android/broadcast,48134e6047a19a0492,48134e6047a19a0492
/uams/android/broadcast,48134e6047a19a0493,48134e6047a19a0493
/uams/android/broadcast,48134e6047a19a0494,48134e6047a19a0494
/uams/android/broadcast,48134e6047a19a0495,48134e6047a19a0495
/uams/android/broadcast,48134e6047a19a0496,48134e6047a19a0496
/uams/android/broadcast,48134e6047a19a0497,48134e6047a19a0497
/uams/android/broadcast,48134e6047a19a0498,48134e6047a19a0498
/uams/android/broadcast,48134e6047a19a0499,48134e6047a19a0499
/uams/android/broadcast,48134e6047a19a0500,48134e6047a19a0500
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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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,0afee9b146a4abd6d2611eb87ed2099e,16,测试会议室1,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
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -3,20 +3,20 @@ ...@@ -3,20 +3,20 @@
#=============================================================================== #===============================================================================
# 脚本名称:auto_clean_deleted_ubains_v3.sh # 脚本名称:auto_clean_deleted_ubains_v3.sh
# 功能描述:已删除大文件自动清理与容器重启脚本 # 功能描述:已删除大文件自动清理与容器重启脚本
# 版本:V3.1 # 版本:V3.2
# 创建日期:2026-01-27 # 创建日期:2026-01-27
# 更新日期:2026-03-30 # 更新日期:2026-04-23
# #
# 监测对象: # 监测对象:
# 1. 进程占用的已删除大文件(>1GB) # 1. 进程占用的已删除大文件(>100MB)
# 2. 匹配关键字: ubains-INFO-AND-ERROR # 2. 匹配关键字: ubains-INFO-AND-ERROR
# 3. 自动清理并重启关联容器 # 3. 自动清理并重启关联容器
# 4. 日志文件自动轮转(5MB轮转、保留7天) # 4. 日志文件自动轮转(5MB轮转、保留7天)
# #
# 清理策略: # 清理策略:
# 1. 扫描所有进程的fd目录,查找deleted标记文件 # 1. 扫描所有进程的fd目录,查找deleted标记文件
# 2. 文件大小超过1GB时执行自动处理 # 2. 文件大小超过100MB时执行自动处理
# 3. 强制杀死占用进程 # 3. 优雅杀死占用进程(先SIGTERM,失败再SIGKILL)
# 4. 重启docker容器ujava2 # 4. 重启docker容器ujava2
# 5. 若进程属于特定应用,启动该应用 # 5. 若进程属于特定应用,启动该应用
# #
...@@ -30,7 +30,7 @@ ...@@ -30,7 +30,7 @@
# ================= 配置区域 ================= # ================= 配置区域 =================
TARGET_KEY="ubains-INFO-AND-ERROR" TARGET_KEY="ubains-INFO-AND-ERROR"
MIN_SIZE=$((1024*1024*1024)) # 1GB (单位:字节) MIN_SIZE=$((100*1024*1024)) # 100MB (单位:字节)
LOG_FILE="/var/log/scripts/auto_clean_deleted_ubains.log" LOG_FILE="/var/log/scripts/auto_clean_deleted_ubains.log"
MAX_LOG_SIZE=$((5*1024*1024)) # 5MB 日志大小限制 MAX_LOG_SIZE=$((5*1024*1024)) # 5MB 日志大小限制
LOG_RETENTION_DAYS=7 # 日志保留天数 LOG_RETENTION_DAYS=7 # 日志保留天数
...@@ -46,6 +46,10 @@ log() { ...@@ -46,6 +46,10 @@ log() {
# 日志轮转 # 日志轮转
rotate_logs() { rotate_logs() {
# 确保日志目录存在
log_dir=$(dirname "$LOG_FILE")
[ ! -d "$log_dir" ] && mkdir -p "$log_dir"
if [ -f "$LOG_FILE" ]; then if [ -f "$LOG_FILE" ]; then
FILE_SIZE=$(stat -c%s "$LOG_FILE") FILE_SIZE=$(stat -c%s "$LOG_FILE")
if [ "$FILE_SIZE" -ge "$MAX_LOG_SIZE" ]; then if [ "$FILE_SIZE" -ge "$MAX_LOG_SIZE" ]; then
...@@ -54,7 +58,8 @@ rotate_logs() { ...@@ -54,7 +58,8 @@ rotate_logs() {
log "日志文件超过 5MB,已自动轮转。" log "日志文件超过 5MB,已自动轮转。"
fi fi
fi fi
find "$(dirname "$0")" -name "auto_clean_deleted_ubains.log.*" -mtime +$LOG_RETENTION_DAYS -exec rm -f {} \; # 修复:日志清理路径与日志文件路径保持一致
find "$log_dir" -name "auto_clean_deleted_ubains.log.*" -mtime +$LOG_RETENTION_DAYS -exec rm -f {} \;
} }
rotate_logs rotate_logs
...@@ -62,12 +67,13 @@ rotate_logs ...@@ -62,12 +67,13 @@ rotate_logs
log "===============================================" log "==============================================="
log "开始扫描:检测 deleted 大文件并自动清理 (内核直读版)" log "开始扫描:检测 deleted 大文件并自动清理 (内核直读版)"
log "匹配关键字: $TARGET_KEY" log "匹配关键字: $TARGET_KEY"
log "大于尺寸: 1GB" log "大于尺寸: 100MB"
log "===============================================" log "==============================================="
FOUND=0 FOUND=0 # 标记是否发现匹配文件
PROCESSED=0 # 标记是否处理了文件(处理才需要重启)
NEED_RESTART=0 NEED_RESTART=0
NEED_APP_START=0 # 新增:标记是否需要启动特定应用 NEED_APP_START=0 # 标记是否需要启动特定应用
# 遍历所有进程的 fd 目录,寻找匹配关键字且标记为 deleted 的文件 # 遍历所有进程的 fd 目录,寻找匹配关键字且标记为 deleted 的文件
for fd_path in /proc/[0-9]*/fd/*; do for fd_path in /proc/[0-9]*/fd/*; do
...@@ -79,13 +85,20 @@ for fd_path in /proc/[0-9]*/fd/*; do ...@@ -79,13 +85,20 @@ for fd_path in /proc/[0-9]*/fd/*; do
# 提取 PID 和 FD # 提取 PID 和 FD
pid=$(echo "$fd_path" | cut -d'/' -f3) pid=$(echo "$fd_path" | cut -d'/' -f3)
# 检查进程是否存在(避免已退出的进程)
if [ ! -d "/proc/$pid" ]; then
log "进程 $pid 已退出,跳过。"
continue
fi
fd=$(echo "$fd_path" | cut -d'/' -f5) fd=$(echo "$fd_path" | cut -d'/' -f5)
# 获取进程名 # 获取进程名
proc_name="unknown" proc_name="unknown"
[ -f "/proc/$pid/comm" ] && proc_name=$(cat "/proc/$pid/comm") [ -f "/proc/$pid/comm" ] && proc_name=$(cat "/proc/$pid/comm")
# 获取文件大小 (字节) - 使用 stat -L 获取链接指向的实际文件状态 # 获取文件大小 (字节)
size_bytes=$(stat -L -c %s "$fd_path" 2>/dev/null || echo 0) size_bytes=$(stat -L -c %s "$fd_path" 2>/dev/null || echo 0)
size_mb=$((size_bytes / 1024 / 1024)) size_mb=$((size_bytes / 1024 / 1024))
...@@ -98,20 +111,37 @@ for fd_path in /proc/[0-9]*/fd/*; do ...@@ -98,20 +111,37 @@ for fd_path in /proc/[0-9]*/fd/*; do
log "大小: $size_mb MB" log "大小: $size_mb MB"
if [ "$size_bytes" -ge "$MIN_SIZE" ]; then if [ "$size_bytes" -ge "$MIN_SIZE" ]; then
log "⚠ 文件超过1GB,执行自动处理。" log "⚠ 文件超过100MB,执行自动处理。"
log "➡ 杀死进程 PID: $pid"
kill -9 "$pid" 2>/dev/null
sleep 1
NEED_RESTART=1
# 获取进程的当前工作目录,判断是否为特定应用 # 修复:在杀死进程前判断是否为特定应用(进程被杀死后无法获取cwd)
proc_cwd=$(readlink /proc/$pid/cwd 2>/dev/null) proc_cwd=$(readlink /proc/$pid/cwd 2>/dev/null)
if [ "$proc_cwd" == "$APP_PATH" ]; then if [ "$proc_cwd" == "$APP_PATH" ]; then
log "检测到被杀死的进程属于特定应用:$APP_PATH,将在容器重启后尝试启动。" log "检测到进程属于特定应用:$APP_PATH,将在容器重启后尝试启动。"
NEED_APP_START=1 NEED_APP_START=1
fi fi
# 修复:先尝试优雅终止(SIGTERM),失败再强制杀死(SIGKILL)
log "➡ 终止进程 PID: $pid(先发送SIGTERM)"
if kill -15 "$pid" 2>/dev/null; then
sleep 2
# 检查进程是否已终止
if [ -d "/proc/$pid" ]; then
log "➡ 进程未响应SIGTERM,发送SIGKILL强制终止"
kill -9 "$pid" 2>/dev/null
sleep 1
else
log "✔ 进程已优雅终止"
fi
else
log "➡ 发送SIGTERM失败,发送SIGKILL强制终止"
kill -9 "$pid" 2>/dev/null
sleep 1
fi
PROCESSED=1
NEED_RESTART=1
else else
log "⏩ 文件不足 1GB,跳过。" log "⏩ 文件不足 100MB,跳过。"
fi fi
fi fi
fi fi
......
...@@ -3,9 +3,9 @@ ...@@ -3,9 +3,9 @@
#=============================================================================== #===============================================================================
# 脚本名称:monitor_external_api_services_v2.sh # 脚本名称:monitor_external_api_services_v2.sh
# 功能描述:外部API服务监测与自愈脚本 # 功能描述:外部API服务监测与自愈脚本
# 版本:V1.2 # 版本:V1.3
# 创建日期:2026-01-27 # 创建日期:2026-01-27
# 更新日期:2026-03-30 # 更新日期:2026-04-23
# 基于文档:_PRD_预定系统外部API服务监控需求文档.md (V1.1) # 基于文档:_PRD_预定系统外部API服务监控需求文档.md (V1.1)
# #
# 监测对象: # 监测对象:
...@@ -37,39 +37,28 @@ STATE_DIR="/var/log/scripts/external_api_state" ...@@ -37,39 +37,28 @@ STATE_DIR="/var/log/scripts/external_api_state"
MAX_FAILURES=3 MAX_FAILURES=3
# 定义要监控的服务及其相关信息 # 定义要监控的服务及其相关信息
# 格式: "服务名:目录路径:启动脚本路径" # 格式: "服务名:目录路径:启动脚本路径:检查方式:检查参数"
# 检查方式:
# API - 通过HTTP接口检查,参数为URL地址
# PROCESS - 通过进程检测,参数为进程名关键字
SERVICES=( SERVICES=(
"ubains-meeting-api-1.0-SNAPSHOT.jar:/var/www/java/external-meeting-api:/var/www/java/external-meeting-api/run.sh" "ubains-meeting-api-1.0-SNAPSHOT.jar:/var/www/java/external-meeting-api:/var/www/java/external-meeting-api/run.sh:API:https://127.0.0.1/exapi/system/v2/login"
"malan:/var/www/malan:/var/www/malan/run.sh" "malan:/var/www/malan:/var/www/malan/run.sh:PROCESS:malan"
) )
# API 检查配置 # API 检查公共配置
API_URL="https://127.0.0.1/exapi/system/v2/login"
API_DATA='{ API_DATA='{
"account": "test", "account": "test",
"password": "test" "password": "test"
}' }'
REQUEST_TIMEOUT=10
#=============================================================================== #===============================================================================
# 函数定义 # 函数定义
#=============================================================================== #===============================================================================
# 获取锁函数(防止并发执行) # 获取锁函数(防止并发执行)- 使用flock实现原子锁
acquire_lock() { acquire_lock() {
# 检查 PID 文件是否存在
if [ -f "$PID_FILE" ]; then
local old_pid
old_pid=$(cat "$PID_FILE" 2>/dev/null)
# 检查该进程是否还在运行
if [ -n "$old_pid" ] && kill -0 "$old_pid" 2>/dev/null; then
echo "$(date '+%Y-%m-%d %H:%M:%S') - 警告: 上一次脚本执行仍在运行 (PID: $old_pid),本次跳过执行" | tee -a "$LOG_FILE"
exit 1
else
# 进程不存在,清理旧的 PID 文件
rm -f "$PID_FILE"
fi
fi
# 确保 PID 文件目录存在 # 确保 PID 文件目录存在
local pid_dir local pid_dir
pid_dir=$(dirname "$PID_FILE") pid_dir=$(dirname "$PID_FILE")
...@@ -77,11 +66,21 @@ acquire_lock() { ...@@ -77,11 +66,21 @@ acquire_lock() {
mkdir -p "$pid_dir" 2>/dev/null || true mkdir -p "$pid_dir" 2>/dev/null || true
fi fi
# 写入当前进程 PID # 使用文件描述符和flock实现原子锁
echo $$ > "$PID_FILE" exec 200>"$PID_FILE"
if ! flock -n 200; then
local old_pid
old_pid=$(cat "$PID_FILE" 2>/dev/null)
echo "$(date '+%Y-%m-%d %H:%M:%S') - 警告: 上一次脚本执行仍在运行 (PID: $old_pid),本次跳过执行" | tee -a "$LOG_FILE"
exit 1
fi
# 写入当前进程 PID 并获取锁
echo $$ >&200
flock -s 200 # 获取共享锁,允许后续检查但防止并发写入
# 设置退出时清理 PID 文件 # 设置退出时清理
trap 'rm -f "$PID_FILE"; exit' EXIT INT TERM HUP trap 'flock -u 200; rm -f "$PID_FILE"; exit' EXIT INT TERM HUP
} }
# 日志轮转函数 # 日志轮转函数
...@@ -89,9 +88,10 @@ rotate_logs() { ...@@ -89,9 +88,10 @@ rotate_logs() {
if [ -f "$LOG_FILE" ]; then if [ -f "$LOG_FILE" ]; then
FILE_SIZE=$(stat -c%s "$LOG_FILE" 2>/dev/null || echo 0) FILE_SIZE=$(stat -c%s "$LOG_FILE" 2>/dev/null || echo 0)
if [ "$FILE_SIZE" -ge "$MAX_LOG_SIZE" ]; then if [ "$FILE_SIZE" -ge "$MAX_LOG_SIZE" ]; then
mv "$LOG_FILE" "$LOG_FILE.$(date '+%Y%m%d%H%M%S')" local rotated_log="${LOG_FILE}.$(date '+%Y%m%d%H%M%S')"
touch "$LOG_FILE" # 使用cat和原子mv避免时序问题
echo "$(date '+%Y-%m-%d %H:%M:%S') - 日志文件超过 5MB,已自动轮转。" | tee -a "$LOG_FILE" cat "$LOG_FILE" > "$rotated_log" && : > "$LOG_FILE"
echo "$(date '+%Y-%m-%d %H:%M:%S') - 日志文件超过 5MB,已自动轮转至: $rotated_log" | tee -a "$LOG_FILE"
fi fi
fi fi
# 清理超过保留天数的旧日志文件 # 清理超过保留天数的旧日志文件
...@@ -112,51 +112,64 @@ get_service_state_file() { ...@@ -112,51 +112,64 @@ get_service_state_file() {
echo "${STATE_DIR}/${safe_name}.state" echo "${STATE_DIR}/${safe_name}.state"
} }
# 读取服务状态文件 # 安全读取状态值(避免source注入)
read_service_state() { read_state_value() {
local service_name="$1" local state_file="$1"
local state_file local key="$2"
state_file=$(get_service_state_file "$service_name")
if [ -f "$state_file" ]; then if [ -f "$state_file" ]; then
source "$state_file" # 只提取指定key=value的行,防止注入
echo "${FAILURE_COUNT:-0}" local value=$(grep "^${key}=" "$state_file" 2>/dev/null | head -1 | cut -d'=' -f2-)
echo "${value:-0}"
else else
echo "0" echo "0"
fi fi
} }
# 写入服务状态文件 # 读取服务失败计数
read_service_state() {
local service_name="$1"
local state_file
state_file=$(get_service_state_file "$service_name")
read_state_value "$state_file" "FAILURE_COUNT"
}
# 写入服务状态文件(原子操作)
write_service_state() { write_service_state() {
local service_name="$1" local service_name="$1"
local count="$2" local count="$2"
local state_file local state_file
state_file=$(get_service_state_file "$service_name") state_file=$(get_service_state_file "$service_name")
local timestamp
timestamp=$(date +%s)
# 确保状态目录存在 # 确保状态目录存在
mkdir -p "$STATE_DIR" mkdir -p "$STATE_DIR"
cat > "$state_file" << EOF # 先写入临时文件,再原子替换,防止状态文件损坏
local tmp_file="${state_file}.tmp"
cat > "$tmp_file" << EOF
FAILURE_COUNT=$count FAILURE_COUNT=$count
LAST_CHECK_TIME=$(date +%s) LAST_CHECK_TIME=$timestamp
EOF EOF
mv -f "$tmp_file" "$state_file"
} }
# 检查服务是否正常(通过 API 请求) # 检查服务是否正常(通过 API 请求)
is_service_healthy() { is_service_healthy() {
local service_name="$1" local service_name="$1"
local api_url="$2"
# 使用 curl 发送 POST 请求 # 使用 curl 发送 POST 请求
# -k: 忽略 SSL 证书检查 # -k: 忽略 SSL 证书检查
# -s: 静默模式 # -s: 静默模式
# -o /dev/null: 不输出响应体 # -o /dev/null: 不输出响应体
# -w "%{http_code}": 只输出 HTTP 状态码 # -w "%{http_code}": 只输出 HTTP 状态码
# --max-time 10: 设置超时时间为 10 秒 # --max-time: 设置超时时间
local http_code=$(curl -k -s -o /dev/null -w "%{http_code}" \ local http_code=$(curl -k -s -o /dev/null -w "%{http_code}" \
--location --request POST "$API_URL" \ --location --request POST "$api_url" \
--header 'Content-Type: application/json' \ --header 'Content-Type: application/json' \
--data-raw "$API_DATA" \ --data-raw "$API_DATA" \
--max-time 10) --max-time "$REQUEST_TIMEOUT")
if [ "$http_code" -eq 200 ]; then if [ "$http_code" -eq 200 ]; then
return 0 # 服务正常 return 0 # 服务正常
...@@ -166,6 +179,19 @@ is_service_healthy() { ...@@ -166,6 +179,19 @@ is_service_healthy() {
fi fi
} }
# 检查服务进程是否存在
is_process_running() {
local process_name="$1"
# 查找进程是否存在(排除grep本身)
local pid
pid=$(ps -ef | grep "$process_name" | grep -v grep | awk '{print $2}' | head -1)
if [ -n "$pid" ]; then
return 0 # 进程存在
else
return 1 # 进程不存在
fi
}
# 检查目录是否存在 # 检查目录是否存在
is_directory_exists() { is_directory_exists() {
local dir_path="$1" local dir_path="$1"
...@@ -178,11 +204,39 @@ is_script_executable() { ...@@ -178,11 +204,39 @@ is_script_executable() {
[ -x "$script_path" ] [ -x "$script_path" ]
} }
# 获取进程PID
get_process_pid() {
local process_name="$1"
ps -ef | grep "$process_name" | grep -v grep | awk '{print $2}' | head -1
}
# 健康检查分发函数
check_service_health() {
local service_name="$1"
local check_type="$2"
local check_param="$3"
case "$check_type" in
API)
is_service_healthy "$service_name" "$check_param"
;;
PROCESS)
is_process_running "$check_param"
;;
*)
log_message "错误: 未知的检查方式 '$check_type',服务: $service_name"
return 1
;;
esac
}
# 启动服务 # 启动服务
start_service() { start_service() {
local service_name="$1" local service_name="$1"
local dir_path="$2" local dir_path="$2"
local script_path="$3" local script_path="$3"
local check_type="$4"
local check_param="$5"
log_message "尝试启动服务 '$service_name'..." log_message "尝试启动服务 '$service_name'..."
...@@ -196,21 +250,57 @@ start_service() { ...@@ -196,21 +250,57 @@ start_service() {
return 1 return 1
fi fi
# 执行启动脚本 # 执行启动脚本,记录PID到pid文件
local startup_pid_file="${STATE_DIR}/${service_name}.pid"
nohup "./$(basename "$script_path")" > startup.log 2>&1 & nohup "./$(basename "$script_path")" > startup.log 2>&1 &
local pid=$!
echo "$pid" > "$startup_pid_file"
log_message "服务启动命令已执行,PID: $pid"
# 根据检查方式选择验证方法
local waited=0
local interval=5
local max_wait=300
log_message "等待服务启动并响应..."
case "$check_type" in
API)
# API 检查模式
while [ $waited -lt $max_wait ]; do
sleep $interval
waited=$((waited + interval))
# 检查进程是否还在
if ! kill -0 "$pid" 2>/dev/null; then
log_message "错误: 服务进程已退出"
return 1
fi
# 等待一段时间,让服务有足够时间启动并响应 API # 尝试检查服务健康状态
log_message "等待服务启动 (300秒)..." if is_service_healthy "$service_name" "$check_param"; then
sleep 300 log_message "服务 '$service_name' 启动并验证成功 (等待 ${waited}秒)"
# 再次检查服务是否正常
if is_service_healthy "$service_name"; then
log_message "服务 '$service_name' 启动并验证成功。"
return 0 return 0
else
log_message "错误: 服务 '$service_name' 启动后接口验证仍失败。"
return 1
fi fi
done
log_message "错误: 服务 '$service_name' 启动超时 (${max_wait}秒内未响应)"
;;
PROCESS)
# 进程检查模式
while [ $waited -lt $max_wait ]; do
sleep $interval
waited=$((waited + interval))
# 检查进程是否存在
if is_process_running "$check_param"; then
log_message "服务 '$service_name' 启动成功,进程检测正常 (等待 ${waited}秒)"
return 0
fi
done
log_message "错误: 服务 '$service_name' 启动超时 (${max_wait}秒内进程未出现)"
;;
esac
return 1
) )
} }
...@@ -225,18 +315,20 @@ acquire_lock ...@@ -225,18 +315,20 @@ acquire_lock
rotate_logs rotate_logs
# 初始化日志 # 初始化日志
log_message "=== 服务监控脚本开始执行 (API 检查模式) ===" log_message "=== 服务监控脚本开始执行 ==="
# 遍历所有服务 # 遍历所有服务
for service_info in "${SERVICES[@]}"; do for service_info in "${SERVICES[@]}"; do
# 解析服务信息 # 解析服务信息: 服务名:目录:启动脚本:检查方式:检查参数
IFS=':' read -r service_name dir_path script_path <<< "$service_info" IFS=':' read -r service_name dir_path script_path check_type check_param <<< "$service_info"
# 去除可能的前后空格 # 去除可能的前后空格
service_name=$(echo "$service_name" | xargs) service_name=$(echo "$service_name" | xargs)
dir_path=$(echo "$dir_path" | xargs) dir_path=$(echo "$dir_path" | xargs)
script_path=$(echo "$script_path" | xargs) script_path=$(echo "$script_path" | xargs)
check_type=$(echo "$check_type" | xargs)
check_param=$(echo "$check_param" | xargs)
log_message "检查服务: $service_name" log_message "检查服务: $service_name (检查方式: $check_type)"
# 读取当前失败次数 # 读取当前失败次数
failure_count=$(read_service_state "$service_name") failure_count=$(read_service_state "$service_name")
...@@ -249,13 +341,13 @@ for service_info in "${SERVICES[@]}"; do ...@@ -249,13 +341,13 @@ for service_info in "${SERVICES[@]}"; do
fi fi
# 检查服务是否正常 # 检查服务是否正常
if is_service_healthy "$service_name"; then if check_service_health "$service_name" "$check_type" "$check_param"; then
# 检查成功,清零计数器 # 检查成功,清零计数器
if [ "$failure_count" -gt 0 ]; then if [ "$failure_count" -gt 0 ]; then
write_service_state "$service_name" 0 write_service_state "$service_name" 0
log_message "检查成功,重置失败计数器为 0" log_message "检查成功,重置失败计数器为 0"
fi fi
log_message "服务 '$service_name' 运行正常 (HTTP 200)。" log_message "服务 '$service_name' 运行正常。"
else else
# 检查失败,累加计数器 # 检查失败,累加计数器
failure_count=$((failure_count + 1)) failure_count=$((failure_count + 1))
...@@ -268,9 +360,13 @@ for service_info in "${SERVICES[@]}"; do ...@@ -268,9 +360,13 @@ for service_info in "${SERVICES[@]}"; do
write_service_state "$service_name" 0 write_service_state "$service_name" 0
# 尝试启动服务 # 尝试启动服务
start_service "$service_name" "$dir_path" "$script_path" if start_service "$service_name" "$dir_path" "$script_path" "$check_type" "$check_param"; then
log_message "服务 '$service_name' 启动完成"
else
log_message "错误: 服务 '$service_name' 启动失败"
fi
else else
log_message "警告: 未达到启动阈值,等待下次检查确认" log_message "警告: 未达到启动阈值($failure_count/$MAX_FAILURES),等待下次检查确认"
fi fi
fi fi
done done
......
...@@ -463,7 +463,7 @@ class Mqtt: ...@@ -463,7 +463,7 @@ class Mqtt:
return json.dumps({ return json.dumps({
"type":"heartbeat", "type":"heartbeat",
"clientId" : config['clientId'], "clientId" : config['clientId'],
"appId":"com.ubains.uniplatform", "appId":"com.ubains.local.gviewer",
"deviceId": config['deviceId'] "deviceId": config['deviceId']
}) })
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论