TI中文支持网
TI专业的中文技术问题搜集分享网站

ZHA Coordinator 如何控制不同scene的Light

ZHA Coordinator 如何控制不同scene的Light,

灯有几种scene,协调器如何控制灯在不同的scene之间切换?

协调器 zstack home 1.2.2   CC2538

 

YiKai Chen:

透過 zclGeneral_SendSceneRecall

user5367314:

回复 YiKai Chen:

1.灯是买的成品的,zclGeneral_SendSceneRecall的参数groupID和 sceneID是从哪里获取的?
2.协调器控制灯,是一个协调器控制多个灯,应该是广播的形式发送指令吧?

YiKai Chen:

回复 user5367314:

1. 可以是你從协调器透過zclGeneral_SendSceneStore設置過去的
2. 應該說是group cast但也可歸類成广播的形式

user5367314:

回复 YiKai Chen:

按照我的理解相同的灯应该是加入相同的组里,
相同的灯在初次入网的时候都加入相同的组,
协调器控制的时候直接按照组ID合场景ID去控制就可以了
不知理解的是否正确?
现在有个问题就是相同的灯怎么弄到同一个组里面?
不同的场景ID厂家提供 了(总共有1-6六个场景)

YiKai Chen:

回复 user5367314:

用zclGeneral_SendGroupAdd去設定组

user5367314:

回复 YiKai Chen:

ZLL的例程里有SampleBridge和SampleRemote,
1.我参考这个例程,作为协调器,参考哪个例程?SampleBridge还是SampleRemote?
2.关于组的添加例程里有按键添加和if ( events & SAMPLEREMOTE_SEND_GRP_ADD_EVT )方式添加,
不知事件方式添加是怎么添加的?节点入网的时候触发的事件还是?

Alvin Chen:

回复 user5367314:

建议你按键操作,你应该参考remote 那个例程,里面 recall 和Store 分别对应了等的call back。

YiKai Chen:

回复 user5367314:

1. zll沒有协调器,如果你是要參考如何設定组,你可以參考SampleRemote
2. 不知事件方式添加是怎么添加的?–>节点入网的时候触发的事件,在zllSampleRemote_ProcessTL

user5367314:

回复 YiKai Chen:

协调器去控制灯,协调器代码添加如下:

第一步:

if ( keys == GROUP_ADD_KEY ) { uint8 emptyGroupName[2] = {0}; if ( groupSelId == 0 ) { groupSelId = 1; } zclGeneral_SendGroupAdd( SAMPLEREMOTE_ENDPOINT, &zllSampleRemote_DstAddr, groupSelId, emptyGroupName, FALSE, sampleRemoteSeqNum++ ); }

第二步:

if ( keys == GROUP_1_SEL_KEY ) { zllSampleRemote_DstAddr.addr.shortAddr = 1; groupSelId = 1; zllSampleRemote_DstAddr.addrMode = (afAddrMode_t)AddrGroup;

zclGeneral_SendIdentify( SAMPLEREMOTE_ENDPOINT, &zllSampleRemote_DstAddr, SAMPLEREMOTE_CMD_IDENTIFY_TIME, FALSE, sampleRemoteSeqNum++ ); }

第三步:

if ( keys == SCENE_1_SEL_KEY ) { sceneSelId = 1; if ( ( RELEASE_KEY ) && ( !SCENE_RECALL_KEY ) ) { sceneKeyPressTime = osal_getClock(); } }

最后:

if ( keys == SCENE_STORE_KEY ) { if ( groupSelId == 0 ) { groupSelId = 1; } zclGeneral_SendSceneStore( SAMPLEREMOTE_ENDPOINT, &zllSampleRemote_DstAddr, groupSelId, sceneSelId, FALSE, sampleRemoteSeqNum++ ); }

if ( keys == SCENE_RECALL_KEY ) { if ( groupSelId == 0 ) { groupSelId = 1; } zclGeneral_SendSceneRecall( SAMPLEREMOTE_ENDPOINT, &zllSampleRemote_DstAddr, groupSelId, sceneSelId, FALSE, sampleRemoteSeqNum++ ); }

这个步骤对吗?另外请问SCENE_STORE和SCENE_RECALL是什么区别?

YiKai Chen:

回复 user5367314:

基本上看來步骤是对的,但是要注意 dstAddr內容是不是对的,SCENE_STORE是把目前的scene存起來和SCENE_RECALL是執行指定的scene

赞(0)
未经允许不得转载:TI中文支持网 » ZHA Coordinator 如何控制不同scene的Light
分享到: 更多 (0)