农业物联网设备资料中,DevEUI和DevAddr都带有标识意味,却承担不同的身份描述。The Things Industries的文档将DevEUI定义为制造商赋予设备的64位唯一标识,联系到设备硬件;DevAddr则是32位地址,用于当前网络中的终端识别。[1] 对整理环境监测设备资料的读者,这个区别首先关乎一串标识究竟描述硬件,还是描述网络中的地址。
按该文档的表述,DevEUI与硬件相连,不能改变。这使它在这份说明中具有设备硬件身份的含义。DevAddr的定义带着另一项重要限定:它并非唯一,不同设备可以具有相同的DevAddr。[1] 因而,两份设备资料出现相同地址,单凭这一个字段还不能把它们合并成同一硬件对象。这里采用的是文档明确给出的地址性质,并非对某个农场设备清单的实际查验。
DevAddr内部还有命名层次。原文将其描述为NwkAddr加上NwkID前缀的结构。[1] 这说明地址的组成与网络标识相连,也使32位地址拥有比“设备编号”更具体的语境。设备资料若只把DevEUI和DevAddr统一翻译成一个编号名,就会丢掉硬件身份和当前网络地址之间这层区别。
官方End Device APIs中的EndDeviceIdentifiers字段表,进一步把不同身份放在同一个对象内列明。device_id的类型是string,最大长度约束为36;application_ids则是ApplicationIdentifiers类型,并标为required。[2] 这两项分别保留设备字符串标识与应用标识对象,表明这个接口对象并非只容纳一个硬件号码。这里讨论的是字段定义,不是创建应用或登记设备的流程。
同一张字段表将dev_eui和join_eui列为bytes,长度约束各为8;dev_addr也是bytes,长度约束为4。[2] 其中DevEUI的64位和8字节、DevAddr的32位和4字节,在这些定义中能够相互对应。字段表还为这几个字节字段列出ignore_empty条件,因此长度约束应连同该条件理解,不能据页面里的空值示例虚构一个真实设备地址。
这组资料给设备说明书的转述带来一个具体办法:保留字段原名,并写清每一项所指的身份与类型。比如,一份说明同时列出字符串device_id和dev_eui时,可以分别说明它们在接口表中的位置;若另有dev_addr,就继续保留其当前网络地址的含义。这里的整理思路来自字段之间确切的关系,不推断通信是否成功,也不以地址相同代替硬件身份核验。
本文限定于上述文档中的身份定义及EndDeviceIdentifiers字段,不展开激活、密钥或设备控制内容。两份网页首次发布日期均未确认。对农业物联网资料而言,硬件身份、设备的字符串标识和网络地址各有自己的对象;把它们准确保留下来,后续讨论设备记录时才有明确的指向。
资料:[1] https://www.thethingsindustries.com/docs/hardware/devices/concepts/abp-vs-otaa/ ;[2] https://www.thethingsindustries.com/docs/api/reference/grpc/end_device/
信息来源
- The Things Industries:ABP vs OTAA — DevEUI and DevAddr definitions
- The Things Industries:End Device APIs — EndDeviceIdentifiers
本文基于上述公开资料整理,未使用来源页面的图片、视频或嵌入媒体。