新年发福利,MAC地址白名单过滤解决方案最新版。(ZigBee智能家居必备)
基于IAR for 8051 8.30和ARM 7.30编译的白名单库。
其中.lib文件是CC2530用,.a文件是CC2538用的。
使用方法:
1,将文件解压
2,在你们自己的z-stack工程下,文件夹Components\stack\zdo,删除ZApp.c,ZDConfig.c,ZDApp.h,ZDConfig.h四个文件。
3,解压后的文件,全部拷入文件夹Components\stack\zdo。
4,IAR打开z-stack的工程,IAR工程下删除ZApp.c文件,并且根据工程类型(协调器,路由器,终端节点和全功能节点)添加Coord-ZOD.lib,Router-ZDO.lib,EndDevice-ZDO.lib,All-ZDO.lib。
5,重新编译你的z-stack工程。
如何使用白名单功能?
1,在tasksArr[]中,添加ZDE_event_loop,注意要先#include"ZDEnhanced.h",然后在osalInitTasks添加ZDE_Init( taskID++ ),ZDE_event_loop的顺序要与ZDE_Init相同。
2,在你的Z-stack应用层任务中,用函数ZDE_RegisterJoinDeniedCB注册一个回调函数API_JoinDenied(函数名可以自己定义),然后这个函数实体如下
void API_JoinDenied(uint16 parent,ZDE_JoinDenied_t denied) { }
这个函数的参数parent是当前有新节点正在通过网络地址为parent的路由加入网络,denied是一个结构体,其中的extAddr是新设备的MAC地址,capability是设备类型,0xE0为路由,0x00为终端,Rejoin如果为FALSE,则为Associate模式加入,如果为TRUE则为Rejoin Unsecured模式,而Rejoin Secured的设备是直接通过认证。在这个函数中,可以添加你的上位机与协调器之间的通讯代码,让协调器把正在试图加入网络的新设备的MAC地址告诉上位机。
如果上位机允许一个新设备加入网络,协调器则需要输入新设备的MAC地址,即白名单过滤通过。
如果是把白名单发给其它路由器,可以使用函数ZDE_JoinAcceptReq,输入给协调器直接使用函数ZDE_WhiteListInput即可。
ZDE_JoinAcceptReq使用方法:
zAddrType_t dest; ZDE_JoinAcceptReq_t accept; dest.addrMode = afAddr16Bit; dest.addr.shortAddr = parent; //发给路由器 sAddrExtCpy(accept.extAddrs,denied.extAddr); //设备MAC地址 accept.life = 60;//白名单超时,最大254秒 ZDE_JoinAcceptReq(&dest, &accept, 0);
ZDE_WhiteListInput使用方法基本同上,只是不需要输入路由器的地址。
手动点赞!谢谢分享!
@Aries Lord,
您好,我想问下您是否尝试过在此方案的基础上加入查询节点是否在线的机制?即当我通过串口向协调器输入了多个需要入网的节点的MAC地址后,发送查询指令即可列出刚才所输入的所有MAC地址,并指示哪些MAC地址在线哪些不在线的功能。我目前的想法是将MAC地址录入到协调器的NV中,不设超时机制,只要在线节点数和所输入的MAC地址数相同就关闭入网功能,并每隔一段时间更新节点的在线情况。不知道您对于查询节点是否在线的机制有没更好的想法?可否一起交流一下?
可以实现的,你需要注册zdo_device_annce这条cluster ID,在收到节点入网后就更新你的白名单数据库
@Aries Lord,
您好,您觉得在NV中建立白名单数据库空间是否足够?还是再搭载一个单片机辅助建立会更好一点?
白名单是动态的数据,默认存在协调器或者各个路由器的RAM中,每条白名单只有4分钟的生存时间,一旦白名单中的设备入网,就可以删除这条白名单。你用这个库,可以再增加一个静态的白名单,存在上位机或者外扩存储器中,再根据当前环境,将静态白名单的数据添加至动态白名单中。
你好 按照你的步骤移植 报错了
前辈您好,我是做智能家居相关的学生党,对白名单入网认证方比较感兴趣,前辈能否分享一下生成lib之前的源代码或者分享一下详细的实现步骤,谢谢,我的邮箱是:mhming@126.com
哈哈,我也是哦,看来搬用别人的方法是么用的,还是自己把基本的搞懂才好,互勉哈
你好,我最近在弄入网过滤,看了你的帖子,但是不懂这个(根据工程类型(协调器,路由器,终端节点和全功能节点)添加Coord-ZOD.lib,Router-ZDO.lib,EndDevice-ZDO.lib,All-ZDO.lib)是在哪里添加啊?然后看你了你的整个过程还是很模糊,希望大神你能分享一下详细的步骤。
现在正在研究入网过滤。大神有没有,源代码,工程文件或者详细调试步骤?
学习下,邮箱:1047381010@qq.com
谢谢。
怎么没有看到文件,能发一份给我吗,she_xiang@yeah.net 是我邮箱。 多谢。
谢谢分享!
2530的库文件发我一份吧! 谢谢! 304943490@qq.com
大神我想请问下,有没有想过终端加入特定路由器的子下?
求一份打包文件,谢谢 chenxiang_k@163.com
文件?
有偿获一份 Z-stack Home或者Z-stack mesh版本的串口透传源码带白名单,qq405471113
那个lib库到哪下载啊 要是有的话能不能发一个啊 QQ1752734529 谢了
表示链接已经失效,但是还是感谢楼主提供思路
怎么添加的,我也想知道,求教!
前辈你好
我是刚入门的新手,我想解决白名单入网问题,我看了这个帖子,但是看不太懂,能否发给我一份源代码,或详细的文档资料
还有你在文章中提到的.lib库在在哪里下载啊,能一同发给我一份呢?感激不尽
我的qq邮箱是2840824715@qq.com
您好,能发我一份吗?我的邮箱是1373830394@qq.com
Aries Lord 你好,请教您一个问题,
白名单通过在协调器输入终端节点MAC地址的方式与网上使用NLME_DirectJoinRequest 的“直接加入模式” 的方法,
比较主要的区别和和优势能详细说明一下吗?
Coord-ZOD.lib,Router-ZDO.lib,EndDevice-ZDO.lib,All-ZDO.lib。你好,这些文件在哪可以找到呢
我是做智能家居相关的学生党,对白名单入网认证方比较感兴趣,前辈能否分享一下生成lib之前的源代码或者分享一下详细的实现步骤,谢谢,我的邮箱是:495830239@qq.com