I have defined a group 0x0001 having endpoints 1,3and 5 of nodeid 0xF883, endpoint 1 of nodeid 0x4D44 and endpoints 1,2 of nodeid 0x3EF5. The Scene Store command has been used to store the scene 0x0A on this group. Execution of View scene command with group id 0x0001 and scene id 0x0A on these endpoints shows that scene exists and shows scene data as well of this type: 0x06 0x00 0x01 0x01
When we invoke eCLD_ScenesRecall() with groupid 0x0001 and sceneid 0x0A from the scenes cluster client on endpoint 6 of nodeid 0xF883, it invokes the scene ONLY on the endpoints 1,3 and 5 of local nodeid 0xF883 and will have no effect on other remote nodes belonging to the group 0x0001. [Note: I am planning to use endpoint 6 on 0xF883 as Scene Selector device]
However the Scene Recall command issued from the co-ordinator recalls the scene on all nodeid's present in the group 0x0001.
I would like to know whether it is possible to groupcast the scene recall from the scenes cluster client on endpoint6 of nodeid 0xF883 (Scene Selector Device) so that all nodes in that group receive the scene recall command.
Also can anyone please explain the difference between eCLD_ScenesRecall() Vs eCLD_ScenesCommandRecallSceneRequestSend() functions? Should I use eCLD_ScenesCommandRecallSceneRequestSend() instead of eCLD_ScenesRecall()?
We have total number of 6 endpoints.
1 - 5 as server scene
6 as client scene
Please find the code snippet
Code snippet:
PUBLIC void vSetAddress(tsZCL_Address * psAddress, bool_t bBroadcast,uint16_t GrpID)
{
if (bBroadcast)
{
psAddress->eAddressMode = E_ZCL_AM_BROADCAST;
psAddress->uAddress.eBroadcastMode = ZPS_E_APL_AF_BROADCAST_RX_ON;
}
else
{
psAddress->eAddressMode = E_ZCL_AM_GROUP;
psAddress->uAddress.u16GroupAddress = GrpID;
}
}
PUBLIC void vAppRecallSceneById( uint8 u8EndPt, uint8 u8SceneId, uint16 u16GroupId)
{
tsCLD_ScenesRecallSceneRequestPayload sRequest;
tsZCL_Address sAddress;
uint8 u8Seq;
teZCL_Status eStatus;
sRequest.u16GroupId = u16GroupId;
sRequest.u8SceneId = u8SceneId;
sRequest.u16TransitionTime = 0xF;//ZNC_RTN_U16 ( au8LinkRxBuffer, 8 );
vSetAddress(&sAddress, FALSE, u16GroupId);
eStatus = eCLD_ScenesCommandRecallSceneRequestSend ( u8EndPt, E_ZCL_AM_GROUP,
&sAddress,
&u8Seq,
&sRequest );
DBG_vPrintf(TRACE_APP, "\n eCLD_ScenesCommandRecallSceneRequestSend eStatus = %d", eStatus);
}
We are using the Endpoint 6 for above Scene recall which has scene client cluster enabled and registered using eZLO_RegisterOnOffLightSwitchEndPoint.
But scene recall do not work when using eCLD_ScenesRecall or eCLD_ScenesCommandRecallSceneRequestSend with end point 6.
When I call endpoint 1 to 5 with eCLD_ScenesRecall. Scene recall is successful and local endpoint can remember OnOff state with respect to scene and group.
But only local endpoint are recalled not other endpoint which is in same network.
We request you to let us know how to recall a scene (from our product) which works on both local and global endpoint in the same network.
Hi @Shaik_meera,
I am really sorry for the late reply.
What are the coordinator and the end device that you are working on?
Did you try to follow the same process with the JN-AN-1216 example, and the tool??
Do you have any sniffer tools? Do you have a JN USB Dongle?
Please look at the file attached. I capture the scene to show the process.
Regards,
Mario
We are using k32w061dk6_zigbee_router_bm. We do not have sniffer dongle. But as said by @ccsasif we are able to recall scene using telegesis co-ordinator and scene recall is effective on local and remote nodes (local endpoint and remote endpoints).
we couldn't recall the scene in remote node using eCLD_ScenesCommandRecallSceneRequestSend or eCLD_ScenesRecall in our code.
Please help us how to recall scene from our device.
I referred the sniffer log I hope it working for you, which is the case for us using the telegesis dongle.
Hi @Shaik_meera,
I will try to test by my side. However, do you have a USB-Dongle-JN5189?
You could also test it with the JN5189 Device that you have, we also provide a bin file for a sniffer.
"C:\nxp\SDKPackages\JN5189DK6\tools\sniffer\Sniffer_1000000baud_8N1_NoFlowControl.bin"
You could also download the tool, Kinetis Protocol Analyzer that we provide.
I will get back to you.
Regards,
Mario
we can't flash sniffer tool bin since we have only one dev kit. So after flashing cannot sniff any device.
I request you to test from your side how to recall scene for local and remote endpoints.
Hi @Shaik_meera,
You could use the Dongle to capture the packets over the air, and work with 2 different modules OM15076
However, I tested by my side. We provide a Scene example for the client and server.
I recommend looking at the JN-AN-1247 Coordinator that provides a GUI Tool and acts as scene client, also the JN-AN-1244 that supports the scene server.
The steps below were the process that I followed to send the scene recall.
Also, you could find in the coordinator how is the process for calling this API.
case (E_SL_MSG_RECALL_SCENE):
{
tsCLD_ScenesRecallSceneRequestPayload sRequest;
sRequest.u16GroupId = ZNC_RTN_U16 ( au8LinkRxBuffer, 5 );
sRequest.u8SceneId = au8LinkRxBuffer[7];
sRequest.u16TransitionTime = 0xFFFF;
u8Status = eCLD_ScenesCommandRecallSceneRequestSend
(au8LinkRxBuffer [ 3 ],
au8LinkRxBuffer [ 4 ],
&sAddress,
&u8SeqNum,
&sRequest );
Is it possible that you could test with the ANs JN-AN-1247 and JN-AN-1244?
Regards,
Mario
Hi @ccsasif,
I hope you are doing great.
Is it possible that you could provide the sniffer log of the process that you are doing?
What is the example that you are working on to create the group?
The difference for the functions are, for example:
eCLD_ScenesRecall: Can be used by other clusters or the application to recall scenes.
eCLD_ScenesCommandRecallSceneRequestSend: Builds and sends a scenes cluster command, used for the client role.
Regards,
Mario
We are registering the Endpoint 6 which has scene client cluster enabled using eZLO_RegisterOnOffLightSwitchEndPoint
Please find the code snippet as below
Code snippet:
PUBLIC void vSetAddress(tsZCL_Address * psAddress, bool_t bBroadcast,uint16_t GrpID)
{
if (bBroadcast)
{
psAddress->eAddressMode = E_ZCL_AM_BROADCAST;
psAddress->uAddress.eBroadcastMode = ZPS_E_APL_AF_BROADCAST_RX_ON;
}
else
{
psAddress->eAddressMode = E_ZCL_AM_GROUP;
psAddress->uAddress.u16GroupAddress = GrpID;
}
}
PUBLIC void vAppRecallSceneById( uint8 u8EndPt, uint8 u8SceneId, uint16 u16GroupId)
{
tsCLD_ScenesRecallSceneRequestPayload sRequest;
tsZCL_Address sAddress;
uint8 u8Seq;
teZCL_Status eStatus;
sRequest.u16GroupId = u16GroupId;
sRequest.u8SceneId = u8SceneId;
sRequest.u16TransitionTime = 0xF;//ZNC_RTN_U16 ( au8LinkRxBuffer, 8 );
vSetAddress(&sAddress, FALSE, u16GroupId);
eStatus = eCLD_ScenesCommandRecallSceneRequestSend ( u8EndPt, E_ZCL_AM_GROUP,
&sAddress,
&u8Seq,
&sRequest );
DBG_vPrintf(TRACE_APP, "\n eCLD_ScenesCommandRecallSceneRequestSend eStatus = %d", eStatus);
}
When I call endpoint 1 to 5 with eCLD_ScenesRecall. Scene recall is successful and local endpoint can remember OnOff state with respect to scene and group.
But only local endpoints are recalled not other endpoints on other nodeids which is in same network.
We request you to let us know how to recall a scene (from our product) which works on both local and global endpoint in the same network.