SampleSwitch 和SampleLight例程,home 1.2.2
1.开关控制灯的时候,是通过zclGeneral_SendOnOff_CmdToggle函数去控制灯?
2.灯那边处理来自开关命令的是通过哪个函数执行开关灯动作的?
3.灯执行开关动作后,如果想把灯现在的状态再发给开关,用哪个函数发送?开关那边哪个函数接收并处理?
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
SampleSwitch 和SampleLight例程,home 1.2.2
1.开关控制灯的时候,是通过zclGeneral_SendOnOff_CmdToggle函数去控制灯?
2.灯那边处理来自开关命令的是通过哪个函数执行开关灯动作的?
3.灯执行开关动作后,如果想把灯现在的状态再发给开关,用哪个函数发送?开关那边哪个函数接收并处理?
zclGeneral_SendOnOff_CmdToggle,你可以定义这个函数,这是控制灯状态的反转。
有其他控制灯的ZCL command 函数,你定义这个都可以看见。
类似于:
/* * Send an On Off Command - COMMAND_ONOFF_OFF * Use like: * ZStatus_t zclGeneral_SendOnOff_CmdOff( uint16 srcEP, afAddrType_t *dstAddr, uint8 disableDefaultRsp, uint8 seqNum ); */ #define zclGeneral_SendOnOff_CmdOff(a,b,c,d) zcl_SendCommand( (a), (b), ZCL_CLUSTER_ID_GEN_ON_OFF, COMMAND_OFF, TRUE, ZCL_FRAME_CLIENT_SERVER_DIR, (c), 0, (d), 0, NULL ) /* * Send an On Off Command - COMMAND_ONOFF_ON * Use like: * ZStatus_t zclGeneral_SendOnOff_CmdOn( uint16 srcEP, afAddrType_t *dstAddr, uint8 disableDefaultRsp, uint8 seqNum ); */ #define zclGeneral_SendOnOff_CmdOn(a,b,c,d) zcl_SendCommand( (a), (b), ZCL_CLUSTER_ID_GEN_ON_OFF, COMMAND_ON, TRUE, ZCL_FRAME_CLIENT_SERVER_DIR, (c), 0, (d), 0, NULL ) /* * Send an On Off Command - COMMAND_ONOFF_TOGGLE * Use like: * ZStatus_t zclGeneral_SendOnOff_CmdToggle( uint16 srcEP, afAddrType_t *dstAddr, uint8 disableDefaultRsp, uint8 seqNum ); */ #define zclGeneral_SendOnOff_CmdToggle(a,b,c,d) zcl_SendCommand( (a), (b), ZCL_CLUSTER_ID_GEN_ON_OFF, COMMAND_TOGGLE, TRUE, ZCL_FRAME_CLIENT_SERVER_DIR, (c), 0, (d), 0, NULL )
至于如何反向,在light里面有回调可以看见,类似下面:
static zclGeneral_AppCallbacks_t zclSampleLight_CmdCallbacks =
{
zclSampleLight_BasicResetCB, // Basic Cluster Reset command
NULL, // Identify Trigger Effect command
zclSampleLight_OnOffCB, // On/Off cluster commands
NULL, // On/Off cluster enhanced command Off with Effect
NULL, // On/Off cluster enhanced command On with Recall Global Scene
NULL, // On/Off cluster enhanced command On with Timed Off
#ifdef ZCL_LEVEL_CTRL
zclSampleLight_LevelControlMoveToLevelCB, // Level Control Move to Level command
zclSampleLight_LevelControlMoveCB, // Level Control Move command
zclSampleLight_LevelControlStepCB, // Level Control Step command
zclSampleLight_LevelControlStopCB, // Level Control Stop command
#endif
#ifdef ZCL_GROUPS
NULL, // Group Response commands
#endif
#ifdef ZCL_SCENES
NULL, // Scene Store Request command
NULL, // Scene Recall Request command
NULL, // Scene Response command
#endif
#ifdef ZCL_ALARMS
NULL, // Alarm (Response) commands
#endif
#ifdef SE_UK_EXT
NULL, // Get Event Log command
NULL, // Publish Event Log command
#endif
NULL, // RSSI Location command
NULL // RSSI Location Response command
};
至于灯上报状态,在ZCL spec里面没有这个attitude ,你要走私有协议。
如果有疑问,建议先去看一下程序,上面的程序在demo里面写的很清晰。
附上ZCL 标准:
www.zigbee.org/.../07-5123-06-zigbee-cluster-library-specification.pdf
1. 识别switch
2. 使能zcl read/write/discover服務用的
3. 拿掉LCD_SUPPORTED=DEBUG
4. 建議使能NV_RESTORE
5. 终端低功耗要使能POWER_SAVING和-DRFD_RCVC_ALWAYS_ON=FALSE
你有个概念错误吧。
能否控制不取决于你的是否绑定。。。。
直接用短地址单播是最稳定的方式。
你开启NV,掉线重连就可以控制。
你掉线了,不重连怎么也控制不了。