Scene Client
The Scene Client model remotely controls the state of a Scene Server model.
Unlike the Scene Server model, the Scene Client only creates a single model instance in the mesh composition data. The Scene Client can send messages to both the Scene Server and the Scene Setup Server, as long as it has the right application keys.
Extended models
None.
Persistent storage
None.
Shell commands
The Bluetooth mesh shell subsystem provides a set of commands to interact with the Scene Client model instantiated on a device.
To make these commands available, enable the following Kconfig options:
- mesh models scene instance get-all
Print all instances of the Scene Client model on the device.
- mesh models scene instance set <elem_idx>
Select the Scene Client model instantiated on the specified element ID. This instance will be used in message sending. If no model instance is selected, the first model instance found on the device will be used by default.
elem_idx
- Element index where the model instance is found.
- mesh models scene get
Get the current state of the Scene Server.
- mesh models scene register-get
Get the full scene register of the Scene Server.
- mesh models scene store <scene>
Store the current state as a scene and wait for a response.
store
- Scene number to store.
- mesh models scene store-unack <scene>
Store the current state as a scene without requesting a response.
store
- Scene number to store.
- mesh models scene delete <scene>
Delete the given scene and wait for a response.
store
- Scene number to delete.
- mesh models scene delete-unack <scene>
Delete the given scene without requesting a response.
scene
- Scene number to delete.
- mesh models scene recall <scene> [transition_time_ms [delay_ms]]
Recall the given scene and wait for a response.
scene
- Scene number to recall.transition_time_ms
- If present, defines the transition time in the message in milliseconds.delay_ms
- If present, defines the delay in the message in milliseconds.
- mesh models scene recall-unack <scene> [transition_time_ms [delay_ms]]
Recall the given scene without requesting a response.
scene
- Scene number to recall.transition_time_ms
- If present, defines the transition time in the message in milliseconds.delay_ms
- If present, defines the delay in the message in milliseconds.
API documentation
include/bluetooth/mesh/scene_cli.h
subsys/bluetooth/mesh/scene_cli.c
- group bt_mesh_scene_cli
API for the Scene Client model.
Defines
-
BT_MESH_MODEL_SCENE_CLI(_cli)
Scene Client model composition data entry.
- Parameters
_cli – [in] Pointer to a Scene Client model instance.
Functions
-
int bt_mesh_scene_cli_get(struct bt_mesh_scene_cli *cli, struct bt_mesh_msg_ctx *ctx, struct bt_mesh_scene_state *rsp)
Get the current state of a Scene Server.
This call is blocking if the
rsp
buffer is non-NULL. The response will always be passed to the bt_mesh_scene_cli::status callback.- Parameters
cli – [in] Scene client model.
ctx – [in] Message context to send with, or NULL to use the configured publication parameters.
rsp – [out] Response buffer, or NULL to keep from blocking.
- Return values
0 – Successfully got the scene state.
-EALREADY – A blocking request is already in progress.
-EADDRNOTAVAIL – A message context was not provided and publishing is not configured.
-EAGAIN – The device has not been provisioned.
-ETIMEDOUT – The request timed out without a response.
-
int bt_mesh_scene_cli_register_get(struct bt_mesh_scene_cli *cli, struct bt_mesh_msg_ctx *ctx, struct bt_mesh_scene_register *rsp)
Get the full scene register of a Scene Server.
This call is blocking if the
rsp
buffer is non-NULL. The response will always be passed to the bt_mesh_scene_cli::scene_register callback.- Parameters
cli – [in] Scene client model.
ctx – [in] Message context to send with, or NULL to use the configured publication parameters.
rsp – [out] Response buffer, or NULL to keep from blocking. If the
rsp.scenes
parameter points to a valid buffer, it will be filled with at mostrsp.count
number of scenes, andrsp.count
will be changed to reflect the number of retrieved scenes.
- Return values
0 – Successfully got the scene register.
-EALREADY – A blocking request is already in progress.
-EADDRNOTAVAIL – A message context was not provided and publishing is not configured.
-EAGAIN – The device has not been provisioned.
-ETIMEDOUT – The request timed out without a response.
-
int bt_mesh_scene_cli_store(struct bt_mesh_scene_cli *cli, struct bt_mesh_msg_ctx *ctx, uint16_t scene, struct bt_mesh_scene_register *rsp)
Store the current state as a scene.
This call is blocking if the
rsp
buffer is non-NULL. The response will always be passed to the bt_mesh_scene_cli::scene_register callback.- Parameters
cli – [in] Scene client model.
ctx – [in] Message context to send with, or NULL to use the configured publication parameters.
scene – [in] Scene number to store. Cannot be BT_MESH_SCENE_NONE.
rsp – [out] Response buffer, or NULL to keep from blocking. If the
rsp.scenes
parameter points to a valid buffer, it will be filled with at mostrsp.count
number of scenes, andrsp.count
will be changed to reflect the number of retrieved scenes.
- Return values
0 – Successfully sent the store message and processed the response.
-EINVAL – Invalid scene number.
-EALREADY – A blocking request is already in progress.
-EADDRNOTAVAIL – A message context was not provided and publishing is not configured.
-EAGAIN – The device has not been provisioned.
-ETIMEDOUT – The request timed out without a response.
-
int bt_mesh_scene_cli_store_unack(struct bt_mesh_scene_cli *cli, struct bt_mesh_msg_ctx *ctx, uint16_t scene)
Store the current state as a scene without requesting a response.
- Parameters
cli – [in] Scene client model.
ctx – [in] Message context to send with, or NULL to use the configured publication parameters.
scene – [in] Scene number to store. Cannot be BT_MESH_SCENE_NONE.
- Return values
0 – Successfully sent the store message.
-EINVAL – Invalid scene number.
-EADDRNOTAVAIL – A message context was not provided and publishing is not configured.
-EAGAIN – The device has not been provisioned.
-
int bt_mesh_scene_cli_delete(struct bt_mesh_scene_cli *cli, struct bt_mesh_msg_ctx *ctx, uint16_t scene, struct bt_mesh_scene_register *rsp)
Delete the given scene.
This call is blocking if the
rsp
buffer is non-NULL. The response will always be passed to the bt_mesh_scene_cli::scene_register callback.- Parameters
cli – [in] Scene client model.
ctx – [in] Message context to send with, or NULL to use the configured publication parameters.
scene – [in] Scene to delete. Cannot be BT_MESH_SCENE_NONE.
rsp – [out] Response buffer, or NULL to keep from blocking. If the
rsp.scenes
parameter points to a valid buffer, it will be filled with at mostrsp.count
number of scenes, andrsp.count
will be changed to reflect the number of retrieved scenes.
- Return values
0 – Successfully sent the delete message and processed the response.
-EINVAL – Invalid scene number.
-EALREADY – A blocking request is already in progress.
-EADDRNOTAVAIL – A message context was not provided and publishing is not configured.
-EAGAIN – The device has not been provisioned.
-ETIMEDOUT – The request timed out without a response.
-
int bt_mesh_scene_cli_delete_unack(struct bt_mesh_scene_cli *cli, struct bt_mesh_msg_ctx *ctx, uint16_t scene)
Delete the given scene without requesting a response.
- Parameters
cli – [in] Scene client model.
ctx – [in] Message context to send with, or NULL to use the configured publication parameters.
scene – [in] Scene to delete. Cannot be BT_MESH_SCENE_NONE.
- Return values
0 – Successfully sent the delete message.
-EINVAL – Invalid scene number.
-EADDRNOTAVAIL – A message context was not provided and publishing is not configured.
-EAGAIN – The device has not been provisioned.
-
int bt_mesh_scene_cli_recall(struct bt_mesh_scene_cli *cli, struct bt_mesh_msg_ctx *ctx, uint16_t scene, const struct bt_mesh_model_transition *transition, struct bt_mesh_scene_state *rsp)
Recall the given scene.
All models that participate in the scene will transition to the stored scene state with the given transition parameters.
This call is blocking if the
rsp
buffer is non-NULL. The response will always be passed to the bt_mesh_scene_cli::status callback.- Parameters
cli – [in] Scene client model.
ctx – [in] Message context to send with, or NULL to use the configured publication parameters.
scene – [in] Scene to recall. Cannot be BT_MESH_SCENE_NONE.
transition – [in] Parameters for the scene transition, or NULL to use the target’s default parameters.
rsp – [out] Response buffer, or NULL to keep from blocking.
- Return values
0 – Successfully sent the recall message and processed the response.
-EINVAL – Invalid scene number or transition parameters.
-EALREADY – A blocking request is already in progress.
-EADDRNOTAVAIL – A message context was not provided and publishing is not configured.
-EAGAIN – The device has not been provisioned.
-ETIMEDOUT – The request timed out without a response.
-
int bt_mesh_scene_cli_recall_unack(struct bt_mesh_scene_cli *cli, struct bt_mesh_msg_ctx *ctx, uint16_t scene, const struct bt_mesh_model_transition *transition)
Recall the given scene without requesting a response.
All models that participate in the scene will transition to the stored scene state with the given transition parameters.
- Parameters
cli – [in] Scene client model.
ctx – [in] Message context to send with, or NULL to use the configured publication parameters.
scene – [in] Scene to recall. Cannot be BT_MESH_SCENE_NONE.
transition – [in] Parameters for the scene transition, or NULL to use the target’s default parameters.
- Return values
0 – Successfully sent the recall message.
-EINVAL – Invalid scene number or transition parameters.
-EADDRNOTAVAIL – A message context was not provided and publishing is not configured.
-EAGAIN – The device has not been provisioned.
-
struct bt_mesh_scene_register
- #include <scene_cli.h>
Scene register parameters
Public Members
-
enum bt_mesh_scene_status status
Status of the previous operation.
-
uint16_t current
Current scene.
-
size_t count
Number of entries in the scenes list.
-
uint16_t *scenes
Optional list of scenes to populate.
-
enum bt_mesh_scene_status status
-
struct bt_mesh_scene_cli
- #include <scene_cli.h>
Scene client model instance.
Public Members
-
void (*status)(struct bt_mesh_scene_cli *cli, struct bt_mesh_msg_ctx *ctx, const struct bt_mesh_scene_state *state)
Status message callback.
- Param cli
[in] Scene client model.
- Param ctx
[in] Message context parameters.
- Param state
[in] Received scene state.
-
void (*scene_register)(struct bt_mesh_scene_cli *cli, struct bt_mesh_msg_ctx *ctx, const struct bt_mesh_scene_register *reg)
Scene register message callback.
- Param cli
[in] Scene client model.
- Param ctx
[in] Message context parameters.
- Param reg
[in] Received scene register.
-
void (*status)(struct bt_mesh_scene_cli *cli, struct bt_mesh_msg_ctx *ctx, const struct bt_mesh_scene_state *state)
-
BT_MESH_MODEL_SCENE_CLI(_cli)