有奖捉虫:行业应用 & 管理与支持文档专题 HOT

为什么物模型日志最新值和最新时间为空?

用户设备已成功连接到平台,并成功发布了数据至平台,为什么物模型日志如下图红色线框所示,没有展示设备上报的最新值以及最新的更新时间戳。
首先判断设备发布数据到平台的 Topic 是否是$thing/up/property/产品ID/${deviceName} 这类 Topic,如果不是该 Topic,则最新值、更新时间不会显示。只有 Topic 为$thing/up/property/产品ID/${deviceName} 才会在物模型日志显示对应的属性、事件、行为日志。若是自定义 Topic 或者物模型 Topic 的明细报文,则可以在“内容日志”查看。
其次判断设备上报的物模型 JSON 格式是否是正确的 JSON 格式,若格式不正确也无法显示。
?
?
?
?

设备上报物模型属性到平台,为什么控制台的物模型日志无法查看设备上报的数据?

当设备端向 Topic $thing/up/property/{ProductID}/{DeviceName} 发布消息时,无法查看到设备属性、设备日志中的数据,需要检查上报的报文是否符合以下要求,若不符合,则在控制台无法查看到。可通过 物模型协议了解详细报文细节。
报文格式是否是正确的 JSON 格式。
时间戳 timestamp 格式必须为 UNIX 系统时间戳,不能是类似"2021-08-01 10:00:00"这类格式。
检查 params 结构中的属性标识符是否与物模型定义中的标识符一致。
检查 params 结构中的 value 部分的类型是否与物模型定义的数据类型一致。
检查 params 结构中 value 的范围是否超出数据定义范围。

设备上报物模型属性到平台的常见错误

设备端向 Topic $thing/up/property/{ProductID}/{DeviceName} 发布消息时,若接收到返回报文的code为406的返回报文时,通常是如下错误。

非法的JSON格式

当设备端向 Topic $thing/up/property/{ProductID}/{DeviceName} 发布消息为非法JSON格式时,物模型日志的最新值无法展示,在内容日志将可查询到系统日志为“json format illegal”,如下图所示:
?
?
?
由于设备上报的 JSON 报文错误,如下“lac”:9 后面还有个逗号。所以用户设备向$thing/up/property/{ProductID}/{DeviceName} 发布消息前,需验证上报的是合法的 JSON 报文。
{
"method": "report",
"clientToken": "IUZ9DQISGJ-10",
"params": {
"cid": 8,
"lac": 9,
}
}

上报数据值的类型与物模型定义的数据类型不匹配

当设备端向 Topic $thing/up/property/{ProductID}/{DeviceName} 发布的 JSON 消息中,若数值型的 Key 设置为字符串类型的值、字符串类型的Key设置为数值型时,也会出现类型检测错误。
{
"method": "report",
"clientToken": "IUZ9DQISGJ-10",
"params": {
"cid": 8,
"lac": "9",
"str_model": 133
}
}
如上述 JSON 中,若 lac 在物模型的定义是数值类型,但对应的 Value 为字符串类型9;str_model 的物模型的定义为字符串型,但是对应的 Value 为数值型133,当这样的格式上报后,系统会分别提示如下错误:
{"method":"report_reply","clientToken":"IUZ9DQISGJ-10","code":406,"status":"check report data err: readNumberAsString: invalid number, error found in #0 byte of ...|\\"str\\"|..., bigger context ...|\\"str\\"|..."}
{"method":"report_reply","clientToken":"IUZ9DQISGJ-10","code":406,"status":"check report data err: ReadString: expects \\" or n, but found 1, error found in #1 byte of ...|133|..., bigger context ...|133|..."}

数值范围越界错误

布尔型的值超出0或1范围,数值型上报的数值超过物模型所定义的数据范围,则会出现越界错误。
{
"method": "report",
"clientToken": "IUZ9DQISGJ-10",
"params": {
"win_switch":3,
"altitude": 9999999
}
}
如上述 JSON 中,若 win_switch 在物模型的定义是布尔型,但对应的 Value 为3;altitude 的物模型的定义为数值型,但是对应的数值范围为:-1000至20000,当上述格式上报后,系统会分别提示如下错误:
{"method":"report_reply","clientToken":"IUZ9DQISGJ-10","code":406,"status":"check report data err: win_switch value 3 out of range:[0,1]"}
{"method":"report_reply","clientToken":"IUZ9DQISGJ-10","code":406,"status":"check report data err: altitude value 9999999 out of range:[-1000,20000]"}

枚举值不存在

枚举整型的值若上报的枚举值不在物模型所定义的枚举值,则会出现枚举项未定义的错误。
{
"method": "report",
"clientToken": "IUZ9DQISGJ-10",
"params": {
"work_mode":3
}
}
上述报文返回是设备端上报上报枚举类型 work_mode 的值,上报枚举键值为3,但实际物模型定义,并没有枚举键值3,平台将会返回如下报文。
{"method":"report_reply","clientToken":"IUZ9DQISGJ-10","code":406,"status":"check report data err: work_mode value 3 enum not defined"}
?
?
?


http://www.vxiaotou.com