Add switch device.

This commit is contained in:
2025-05-27 11:44:44 +03:00
parent ebaebef24c
commit 45d644c54c
3 changed files with 102 additions and 14 deletions

View File

@@ -22,10 +22,17 @@
#include <app_insights.h>
#include "app_priv.h"
#include "esp_err.h"
static const char *TAG = "app_main";
static const char *gpio_device_name = "GPIO";
static const char *rgb_device_name = "RGB-Light";
static const char *switch_device_name = "Switch";
esp_rmaker_device_t *gpio_device;
esp_rmaker_device_t *light_device;
esp_rmaker_device_t *switch_device;
#ifdef CONFIG_ESP_RMAKER_CMD_RESP_ENABLE
@@ -127,9 +134,23 @@ static esp_err_t write_cb(const esp_rmaker_device_t *device, const esp_rmaker_pa
if (ctx) {
ESP_LOGI(TAG, "Received write request via : %s", esp_rmaker_device_cb_src_to_str(ctx->src));
}
if (app_driver_set_gpio(esp_rmaker_param_get_name(param), val.val.b) == ESP_OK) {
esp_rmaker_param_update(param, val);
const char *device_name = esp_rmaker_device_get_name(device);
// const char *param_name = esp_rmaker_param_get_name(param);
esp_err_t ret = ESP_OK;
if (strcmp(device_name, gpio_device_name) == 0) {
ret = app_driver_set_gpio(esp_rmaker_param_get_name(param), val.val.b);
}
else if (strcmp(device_name, switch_device_name) == 0) {
ret = app_switch_set_state(val.val.b);
}
else {
ESP_LOGI(TAG, "Unexpected device %s", device_name);
}
if (ret == ESP_OK)
esp_rmaker_param_update(param, val);
return ESP_OK;
}
@@ -159,7 +180,7 @@ void app_main()
esp_rmaker_config_t rainmaker_cfg = {
.enable_time_sync = false,
};
esp_rmaker_node_t *node = esp_rmaker_node_init(&rainmaker_cfg, "ESP RainMaker Device", "GPIO-Device");
esp_rmaker_node_t *node = esp_rmaker_node_init(&rainmaker_cfg, "ESP RainMaker Multi Device", "Multi Device");
if (!node) {
ESP_LOGE(TAG, "Could not initialise node. Aborting!!!");
vTaskDelay(5000/portTICK_PERIOD_MS);
@@ -167,25 +188,25 @@ void app_main()
}
/* Create a device and add the relevant parameters to it */
esp_rmaker_device_t *gpio_device = esp_rmaker_device_create("GPIO-Device", NULL, NULL);
gpio_device = esp_rmaker_device_create(gpio_device_name, NULL, NULL);
esp_rmaker_device_add_cb(gpio_device, write_cb, NULL);
esp_rmaker_param_t *red_param = esp_rmaker_param_create("Red", NULL, esp_rmaker_bool(false), PROP_FLAG_READ | PROP_FLAG_WRITE);
esp_rmaker_param_t *red_param = esp_rmaker_param_create(GPIO_DEVICE_OUT1_NAME, NULL, esp_rmaker_bool(false), PROP_FLAG_READ | PROP_FLAG_WRITE);
esp_rmaker_param_add_ui_type(red_param, ESP_RMAKER_UI_TOGGLE);
esp_rmaker_device_add_param(gpio_device, red_param);
esp_rmaker_param_t *green_param = esp_rmaker_param_create("Green", NULL, esp_rmaker_bool(false), PROP_FLAG_READ | PROP_FLAG_WRITE);
esp_rmaker_param_t *green_param = esp_rmaker_param_create(GPIO_DEVICE_OUT2_NAME, NULL, esp_rmaker_bool(false), PROP_FLAG_READ | PROP_FLAG_WRITE);
esp_rmaker_param_add_ui_type(green_param, ESP_RMAKER_UI_TOGGLE);
esp_rmaker_device_add_param(gpio_device, green_param);
esp_rmaker_param_t *blue_param = esp_rmaker_param_create("Blue", NULL, esp_rmaker_bool(false), PROP_FLAG_READ | PROP_FLAG_WRITE);
esp_rmaker_param_t *blue_param = esp_rmaker_param_create(GPIO_DEVICE_OUT3_NAME, NULL, esp_rmaker_bool(false), PROP_FLAG_READ | PROP_FLAG_WRITE);
esp_rmaker_param_add_ui_type(blue_param, ESP_RMAKER_UI_TOGGLE);
esp_rmaker_device_add_param(gpio_device, blue_param);
esp_rmaker_node_add_device(node, gpio_device);
// Create the light device
light_device = esp_rmaker_lightbulb_device_create("Light", NULL, RGB_POWER_DEFAULT);
light_device = esp_rmaker_lightbulb_device_create(rgb_device_name, NULL, RGB_POWER_DEFAULT);
esp_rmaker_device_add_bulk_cb(light_device, bulk_write_cb, NULL);
esp_rmaker_device_add_param(light_device, esp_rmaker_brightness_param_create(ESP_RMAKER_DEF_BRIGHTNESS_NAME, RGB_BRIGHTNESS_DEFAULT));
@@ -194,6 +215,11 @@ void app_main()
esp_rmaker_node_add_device(node, light_device);
// Create the switch device
switch_device = esp_rmaker_switch_device_create(switch_device_name, NULL, false);
esp_rmaker_device_add_cb(switch_device, write_cb, NULL);
esp_rmaker_node_add_device(node, switch_device);
/* Enable OTA */
esp_rmaker_ota_enable_default();