• 运动健康南向设备接入服务传输数据解析举例


    随着穿戴设备的普及,运动数据的采集变的更加便捷,越来越多的运动健康类App步入人们的视野。对于日常运动数据的跟踪记录,成为形形色色运动类App的核心功能。

    华为运动健康服务提供的南向服务-设备接入服务,可以帮助开发者实现运动数据的写入。开发者在开发过程中,需要在App中对设备回传的数据进行字段解析,还原成对应的参数,在App的用户界面进行展示。

    那么运动设备返回的数据该如何解析呢?

    首先我们要了解,华为运动健康提供的设备接入服务,是基于标准FTMS协议进行数据传输的,所谓FTMS - 健身器材服务是标准蓝牙协议针对运动健身中的训练数据传输做出的单独定义

    从协议文档中我们可以了解到,标准的FMTS协议已经定义了运动状态(热身,低强度,高强度等),健身器材状态(开启,停滞等),以及支持的健身器材类型(跑步机,交叉训练器,阶梯攀登者,爬楼梯者,划艇者,室内自行车)

    对于不同健身器材类型的支持情况,可以参考FTMS协议第三章

    对于特定健身器材支持的具体参数,可以参考FTMS协议第四章

    需要注意的是,在FTMS协议中,我们已经对字节顺序已经做了约定,FTMS协议中均采用小端序(little endian),即高的地址位存储的是低字节位数据。具体描述可以参考FTMS协议3.2章节

    FMTS协议文档链接如下:
    https://www.bluetooth.com/specifications/specs/fitness-machine-service-1-0/

    好了,具备了上述基础,我们来举个例子

    以划船机为例(Rower Data),我们收到划船机发来的一串数据,他代表什么含义呢

    7e19002700d69c0000000061000000e4000d0000000024000000

    我们先看下协议中的数据格式,数据可以分为两大段,第一段是Flags,第二段是参数

    Flags字段解析

    依据上图,我们看到数据是以2字节(16比特位)的Flags开头的,即7E19,这个16进制的表示转换成二进制,即为0111 1110 0001 1001

    但是不要忘了,FTMS是小端序,即左边8位存储的其实是低比特位的数据,所以实际上的读取顺序应该是

    依据文档,我们可以发现,这个Flags标识这段数据上报了以下字段的内容(需要参考FTMS协议中描述的字段含义)

    比特位

    定义

    数据

    意义

    0

    More Data

    0

    已上报,需解析

    1

    Average Stroke

    1

    已上报,需解析

    2

    Total Distance

    1

    已上报,需解析

    3

    Instantaneous Pace

    1

    已上报,需解析

    4

    Average Pace

    1

    已上报,需解析

    5

    Instantaneous Power

    1

    已上报,需解析

    6

    Average Power

    1

    已上报,需解析

    7

    Resistance Level

    0

    未上报,无需解析

    8

    Expended Energy

    1

    已上报,需解析

    9

    Heart Rate

    0

    未上报,无需解析

    10

    Metabolic Equivalent

    0

    未上报,无需解析

    11

    Elapsed Time

    1

    已上报,需解析

    12

    Remaining Time

    1

    已上报,需解析

    13

    保留

    0

    未上报,无需解析

    14

    保留

    0

    未上报,无需解析

    15

    保留

    0

    未上报,无需解析

      

    此时此刻,我们再参考一下FTMS标准协议中4.8.1.1 Flags Field的描述,我们就可以知道这个Flag指示的后续字段包含的信息;

    这里需要注意的是,每个比特位标识的参数个数并不相同,存在一个比特位对应多个参数的情况,本例中具体的比特位与参数的对应情况可参考下表

    No.

    比特位

    参数

    1

    More Data

    Stroke Rate

    2

    Stroke Count

    3

    Average Stroke

    Average Stroke Rate

    4

    Total Distance

    Total Distance

    5

    Instantaneous Pace

    Instantaneous Pace

    6

    Average Pace

    Average Pace

    7

    Instantaneous Power

    Instantaneous Power

    8

    Average Power

    Average Power

    9

    Resistance Level

    Resistance Level

    10

    Expended Energy

    Total Energy

    11

    Energy Per Hour

    12

    Energy Per Minute

    13

    Heart Rate

    Heart Rate

    14

    Metabolic Equivalent

    Metabolic Equivalent

    15

    Elapsed Time

    Elapsed Time

    16

    Remaining Time

    Remaining Time

    综上,我们知道这条数据Flags段告诉我们,接下来的参数段,包含了以下13个参数:

    Stroke Rate

    Stroke Count

    Average Stroke Rate

    Total Distance

    Instantaneous Pace

    Average Pace

    Instantaneous Power

    Average Power

    Total Energy

    Energy Per Hour

    Energy Per Minute

    Elapsed Time

    Remaining Time

    接下来就可以开始具体参数的解析了

    Parameter字段解析

    参考指导文档中对各个参数的格式定义,我们可以将参数段的数据按照格式定义的长度进行划分,以匹配到各个参数,此例数据分割如下:

    00-2700-d6-9c0000-0000-6100-0000-e400-0d00-0000-00-2400-0000

    参数

    格式

    Stroke Rate

    Uint8

    Stroke Count

    Uint16

    Average Stroke Rate

    Uint8

    Total Distance

    Uint24

    Instantaneous Pace

    Uint16

    Average Pace

    Uint16

    Instantaneous Power

    Sint16

    Average Power

    Sint16

    Total Energy

    Uint16

    Energy Per Hour

    Uint16

    Energy Per Minute

    Uint8

    Elapsed Time

    Uint16

    Remaining Time

    Uint16

    我们将上述分割好的参数字节段转换成十进制,即可知晓每个参数的含义了。这里依然不要忘记FTMS的字节顺序,将各字段的16进制的数据转换为十进制时,依然要注意读取顺序。解析结果如下:

    参数

    格式

    数据(HEX)

    数据(OCT)

    单位

    Stroke Rate

    Uint8

    00

    0

    0.5 stroke/m

    Stroke Count

    Uint16

    2700

    47

    Unitless

    Average Stroke Rate

    Uint8

    D6

    326

    0.5 stroke/m

    Total Distance

    Uint24

    9C0000

    234

    metre

    Instantaneous Pace

    Uint16

    0000

    0

    Seconds(500m)

    Average Pace

    Uint16

    6100

    141

    Seconds(500m)

    Instantaneous Power

    Sint16

    0000

    0

    watt

    Average Power

    Sint16

    E400

    344

    watt

    Total Energy

    Uint16

    0D00

    15

    Unitless

    Energy Per Hour

    Uint16

    0000

    0

    kcal

    Energy Per Minute

    Uint8

    00

    0

    kcal

    Elapsed Time

    Uint16

    2400

    44

    kcal

    Remaining Time

    Uint16

    0000

    0

    Beats/m

    至此,这样一条运动数据就解读完成了,我们可以看到,此用户在这次划船机运动中,共计划动了234米,消耗了15千卡的能量;另外我们还可以了解具体的划桨数,浆频,运动消耗的时间等数据。

    通过这样一条条运动数据的传递及解读,我们可以记录跟踪用户的锻炼情况及日常运动情况,已帮助用户实现对自身健康和健身的管理需求。

    更多设备的接入,请参考

    https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides-V5/rd-0000001050725868-V5?ha__source=hms1

    欲了解HMS Core更多详情,请参阅:
    >>华为开发者联盟官网

    >>获取开发指导文档
    >>参与开发者讨论请到CSDN社区或者Reddit社区
    >>下载demo和示例代码请到Github或者Gitee
    >>解决集成问题请到Stack Overflow

     原文链接:https://developer.huawei.com/...
    原作者:胡椒

  • 相关阅读:
    自定义圆形图片控件CircleImageView的实现
    AutoCompleteTextView实现搜索提示功能的实现
    AsyncTask的使用
    Dialog对话框的几种方式使用实现
    自定义Dialog布局的弹窗功能的简单实现
    什么是 AIDL 以及如何使用
    使用谷歌提供的SwipeRefreshLayout下拉控件,并自定义实现下拉加载的功能
    使用谷歌提供的SwipeRefreshLayout下拉控件进行下拉刷新的实现数据的刷新
    从资产目录里拷贝资源工具类
    AppInfoProvider提供应用信息的工具类
  • 原文地址:https://www.cnblogs.com/developer-huawei/p/15109654.html
Copyright © 2020-2023  润新知