1、安防设备是别家公司的,协调器时自己的;
2、安防设备在入网时,Announce和描述符获取都没问题,读出来的Zone Type也是对的,但是入网后的设备,报警触发后,都不能发出报警信息,在抓包时智能看见设备在发送几个“Data Request”;
3、与设备厂家联系,说是设备没有ENROLL,但是测试了好几遍也没有看到设备在入网后发出“ENROLL Request”;
4、后来又联系了设备厂家,说需要协调器先给设备发送“WriteIAS_CIE_Address”,我们协议栈用的ZHA1.2.2a中的例程“SampleCIE”修改的,例程中有一个执行它的函数:
if( keys & HAL_KEY_SW_3 )
{
// send write CIE IEEE attribute request to IAS Zone Server (e.g. fire detector) in network zclSampleCIE_WriteIAS_CIE_Address(&afDstAddr);
}
但是需要进行按键,我们的协调器程序是把按键和LCD显示的部分都屏蔽了的。所以我在设备入网后我在协调器程序里获取到设备的Zone Type后,人为添加了zclSampleCIE_WriteIAS_CIE_Address(&afDstAddr);这个函数,在抓包数据中也能看到命令执行下去了:

5、但是为什么安防设备还是没有“Enroll Request”?
Alvin Chen:
你应该去询问你这个厂家,他为什么没有。
TI的Fire_Alarm_System可以参考如下:
processors.wiki.ti.com/…/Fire_Alarm_System
YiKai Chen:
應該是协调器要先给设备发送“WriteIAS_CIE_Address”,设备才會发出“ENROLL Request”;
user5020974:
回复 YiKai Chen:
您好,请问下协调器给设备发送“WriteIAS_CIE_Address”是应该加在协调器程序的什么地方呢?看着我抓包数据里这个动作也执行了,但是没有效果
user5020974:
回复 Alvin Chen:
对方厂家询问了,就是说没有“WriteIAS_CIE_Address”,但是我添加了这个操作也还是没有用,但是我看了他们自己网关添加设备的抓包数据,确实能正常Enroll。是不是我添加的地方不对?应该加哪块呢?用的ZHA1.2.2a中的例程“SampleCIE”做的模板
Alvin Chen:
回复 user5020974:
在你的成功入网之后加入
SW3: Write CIE IEEE Address Attribute on last commissioned IAS Zone device
user5020974:
回复 Alvin Chen:
您好,请问下设备成功入网后是根据什么来判断的呢?是在协调器收到设备入网的“device announce”的消息吗?在应运程序中相关的消息处理吗?
例程中是按按键SW3来发送Write CIE IEEE Address的,怎么能够自动发送呢?
在uint16 zclSampleCIE_event_loop( uint8 task_id, uint16 events )这个轮询里边,有什么事件可以表明有设备新入网了,而且是个IAS ZONE设备?
Alvin Chen:
回复 user5020974:
先注册 ZDO_RegisterForZDOMsg(task_id, Device_annce);" 在初始化.
在xxxx_ProcessZDOMsgs中处理ZDO_DeviceAnnce_t devAnnce;
if ( pMsg->clusterID == Device_annce )ZDO_ParseDeviceAnnce( pMsg, &devAnnce );
//用unicast
zclSampleCIE_WriteIAS_CIE_Address(&afDstAddr);
user5020974:
回复 Alvin Chen:
在应运程序中初始化Device_annce的ZDO消息后,不会影响协议栈系统本身对这条消息的处理吗?应运中注册了这个ZDO消息,在协调器收到设备的入网Device_annce后,是只有应运的轮询触发,还是系统本身的轮询和应运的轮询都触发之歌事件?
我看协议栈中本身有对这个消息的处理:
CONST zdpMsgProcItem_t zdpMsgProcs[] =
{
#if ( RFD_RCVC_ALWAYS_ON==TRUE ) || ( ZG_BUILD_RTR_TYPE )// These aren't processed by sleeping end devices.{ NWK_addr_req,zdpProcessAddrReq },{ Device_annce,ZDO_ProcessDeviceAnnce },
#endif
#if ( ZG_BUILD_RTR_TYPE )// These aren't processed by end devices.{ Parent_annce,ZDO_ProcessParentAnnce },{ Parent_annce_rsp,ZDO_ProcessParentAnnceRsp },
#endif
YiKai Chen:
回复 user5020974:
你可以參考一下 git.ti.com/…/CIE-FD-WD-ZHA1.2.2a 裡面的範例
TI中文支持网