diff --git a/components/esp_rainmaker/include/esp_rmaker_core.h b/components/esp_rainmaker/include/esp_rmaker_core.h index 5483734..0fea4f1 100644 --- a/components/esp_rainmaker/include/esp_rmaker_core.h +++ b/components/esp_rainmaker/include/esp_rmaker_core.h @@ -518,6 +518,18 @@ esp_err_t esp_rmaker_node_add_device(const esp_rmaker_node_t *node, const esp_rm */ esp_err_t esp_rmaker_node_remove_device(const esp_rmaker_node_t *node, const esp_rmaker_device_t *device); +/** Get device by name + * + * Get handle for a device based on the name. + * + * @param[in] node Node handle. + * @param[in] device_name Device name to search. + * + * @return Device handle on success. + * @return NULL in case of failure. + */ +esp_rmaker_device_t *esp_rmaker_node_get_device_by_name(const esp_rmaker_node_t *node, const char *device_name); + /** Add a Device attribute * * @note Device attributes are reported only once after a boot-up as part of the node diff --git a/components/esp_rainmaker/src/core/esp_rmaker_node.c b/components/esp_rainmaker/src/core/esp_rmaker_node.c index 1108d23..996c02c 100644 --- a/components/esp_rainmaker/src/core/esp_rmaker_node.c +++ b/components/esp_rainmaker/src/core/esp_rmaker_node.c @@ -271,6 +271,22 @@ esp_err_t esp_rmaker_node_remove_device(const esp_rmaker_node_t *node, const esp return ESP_OK; } +esp_rmaker_device_t *esp_rmaker_node_get_device_by_name(const esp_rmaker_node_t *node, const char *device_name) +{ + if (!node || !device_name) { + ESP_LOGE(TAG, "Node handle or device name cannot be NULL"); + return NULL; + } + _esp_rmaker_device_t *device = ((_esp_rmaker_node_t *)node)->devices; + while(device) { + if (strcmp(device->name, device_name) == 0) { + break; + } + device = device->next; + } + return (esp_rmaker_device_t *)device; +} + _esp_rmaker_device_t *esp_rmaker_node_get_first_device(const esp_rmaker_node_t *node) { _esp_rmaker_node_t *_node = (_esp_rmaker_node_t *)node;