使用Python将外部日志导入Otii 3项目

在分析联网设备的能耗时,仅一项功耗数据通常是不够的。为了全面理解系统行为,工程师需要将随着时间变化的电流消耗,与协议事件、固件状态或网络信令等信息进行关联分析。

本应用场景演示了如何使用 Otii TCP Python API,将外部信令日志CSV文件导入到现有的 Otii 3 项目中。导入后的日志将以用户日志的形式显示,并与已记录的功耗测量数据对齐,从而实现事件与能耗之间的精确时间关联。

该方法在以下场景中尤为适用:

  • 将蜂窝(或无线)信号事件(如LTE、NB-IoT、Wi-Fi、BLE)与电流尖峰进行关联分析
  • 将固件调试输出与功耗测量数据对齐
  • 在能耗分析过程中,实现状态转换的可视化
  • 对由调制解调器、网络模拟器或协议分析仪生成的日志进行后处理分析

所需产品

Otii应用程序操作

日志形式

本案例中要导入的日志csv文件,使用如下形式:


Timestamp,text
0.0,[Starting line - setting up]
22.134,['Random Access Preamble'] ['L2 message'] ['UE --> SS']
22.134,['Random Access Response'] ['L2 message'] ['UE <-- SS']
22.254,['Description_none'] ['RRCConnectionRequest'] ['UE --> SS']
22.254,['Description_none'] ['RRCConnectionSetup'] ['UE <-- SS']
23.172,['ATTACH REQUEST (Combined)'] ['RRCConnectionSetupComplete'] ['UE --> SS']
...
  • timestamp: 以秒为单位的时间戳,相当于测量开始时刻
  • message: 用于描述事件的自由文本信息

在本示例中,使用的是来自网络分析仪 Anritsu MT8121C 的一个名为 signaling_trace.csv 的 CSV 文件,其中时间戳以秒为单位记录,并包含上述格式的文本消息。时间戳必须与 Otii 记录的时间基准对齐,以确保实现正确的关联分析。

设置

在本示例中,我们将使用一个 Python 脚本。该Python脚本 可在 GitHub 上获取 。首先创建一个名为 *import_log.py* 的基础脚本用于连接到正在运行的 Otii 3 实例。

从整体流程来看,该脚本执行以下步骤:

  • 通过 TCP API 连接到正在运行的 Otii 3 应用
  • 访问当前处于活动状态的项目
  • 创建一个新的用户日志(在本示例中命名为 MT8121C
  • 获取项目中最新的一条记录(recording)
  • 逐行读取 CSV 文件
  • 按指定时间戳将每条日志条目添加到记录中

Python 脚本

import csv
from otii_tcp_client import otii_client

LOG_NAME ='MT8121C'
LOG_FILE ='signaling_trace.log'

def import_log(otii: otii_client.Connect) -> None:
    ''' Import text log '''
    project = otii.get_active_project()
    log_id = project.create_user_log(LOG_NAME)
    recording = project.get_last_recording()
    assert recording is not None

    with open(LOG_FILE, newline='', encoding='utf-8') as file:
        reader = csv.DictReader(file)
        for row in reader:
            timestamp =float(row['timestamp'])
            message = row['message']
            recording.append_user_log(log_id, timestamp, message)

def main() -> None:
    '''Connect to the Otii 3 application and run the import'''
    client = otii_client.OtiiClient()

    with client.connect() as otii:
        import_log(otii)

if __name__ == '__main__':
    main()

自动登录许可证(可选)

如果用户希望脚本自动登录并预留许可证,请在同一目录下创建一个名为 credentials.json 的文件:

{
    "username":"YOUR_USERNAME",
    "password":"YOUR_PASSWORD"
}

对于运行持续集成、远程环境或者共享实验室设置背景,本功能尤其强大。

Otii应用程序中的结果

启动Otii 3 应用程序,打开一项现有项目,然后运行import_log.py。用户将把外部日志作为新的测量数据添加到项目中。

运行脚本后:

  • 项目中会出现一个名为MT8121C的新用户日志轨迹
  • 每个导入的时间都会显示在对应的时间戳
  • 功耗和协议或者系统的事件实现关联并可视化

Otii中导入日志并与功耗曲线相关联

欢迎关注官方微信公众号和视频号"Qoitech"获取更多信息,或联系小编(微信qoitech_cn)索要Otii付费许可证的试用哦!