Scene Recall working on local node only

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Scene Recall working on local node only

1,615 Views
ccsasif
Contributor I

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()?

 

0 Kudos
10 Replies

1,546 Views
Shaik_meera
Contributor I

Hi @mario_castaneda 

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. 

0 Kudos

1,422 Views
mario_castaneda
NXP TechSupport
NXP TechSupport

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

 

0 Kudos

1,405 Views
Shaik_meera
Contributor I

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. 

0 Kudos

1,370 Views
mario_castaneda
NXP TechSupport
NXP TechSupport

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

0 Kudos

1,333 Views
Shaik_meera
Contributor I

@mario_castaneda 

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. 

0 Kudos

1,313 Views
mario_castaneda
NXP TechSupport
NXP TechSupport

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.

  1. Create a group
  2. Store or create the scene
  3. Recall Scene

mario_castaneda_0-1642441998586.png

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

0 Kudos

1,577 Views
mario_castaneda
NXP TechSupport
NXP TechSupport

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

 

0 Kudos

1,471 Views
ccsazeez1
Contributor I

@mario_castaneda Hi Mario, our colleagues have given their inputs to your questions. Can you provide your inputs. It is urgent. Thank You. 

1,497 Views
ccsazeez1
Contributor I

@mario_castaneda awaiting your reply please. Thank You

1,522 Views
ccsasif
Contributor I

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.

0 Kudos