最近研究蓝牙mesh设置时间时发现手机发送的时间戳有点奇怪。
[LIB]:rcv access layer,retransaction:0,ttl:10,src:0x0001,dst:0xffff op:0x005c,par_len:10,par:fa 08 84 28 00 00 00 00 00 60
[LIB]:mesh tx NoAck,op:0x5d,src:0x0026,dst:0x0001,par_len:10 par:fa 08 84 28 00 00 00 00 00 60
opcode:0x005c是设置时间指令。
时间戳:fa 08 84 28 00
即0x00288408FA,转10进制,679741690
查阅Mesh文档,发现Mesh的基准时间是从2000年开始的,而unix时间戳是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数。
30年的差距,即946684800秒。
使用python进行简单的时间戳转换
当前时间戳 1626656370
当前时间UTC+0 2021-07-19 00:59:30
当前时间UTC+8 2021-07-19 08:59:30
将几天前手机发送时间戳转换下:
手机发送时间戳679741690
手机发送时间 UTC+0 2021-07-16 09:08:10
本地时区通过指令的最后一个数据0x60设置,计算方式如下
(0x60-0x40)*15min = (96-64)*15=480min=8hours
手机发送时间 UTC+8 2021-07-16 17:08:10