Fixed memory leaks in rainmaker examples (#7965)

* task: Added Rainmaker partition to esp32 wrover and
s3 box

* fix: memory leaks in rainmaker examples

* Rainmaker: Improved error log messages

* task: format Rainmaker examples
This commit is contained in:
Sanket Wadekar 2023-03-31 16:16:48 +05:30 committed by GitHub
parent 8ebf7581a5
commit c0737f53f2
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 252 additions and 195 deletions

View file

@ -1012,6 +1012,9 @@ esp32wrover.menu.PartitionScheme.min_spiffs.build.partitions=min_spiffs
esp32wrover.menu.PartitionScheme.min_spiffs.upload.maximum_size=1966080 esp32wrover.menu.PartitionScheme.min_spiffs.upload.maximum_size=1966080
esp32wrover.menu.PartitionScheme.fatflash=16M Flash (2MB APP/12.5MB FATFS) esp32wrover.menu.PartitionScheme.fatflash=16M Flash (2MB APP/12.5MB FATFS)
esp32wrover.menu.PartitionScheme.fatflash.build.partitions=ffat esp32wrover.menu.PartitionScheme.fatflash.build.partitions=ffat
esp32wrover.menu.PartitionScheme.rainmaker=RainMaker
esp32wrover.menu.PartitionScheme.rainmaker.build.partitions=rainmaker
esp32wrover.menu.PartitionScheme.rainmaker.upload.maximum_size=3145728
esp32wrover.menu.FlashMode.qio=QIO esp32wrover.menu.FlashMode.qio=QIO
esp32wrover.menu.FlashMode.qio.build.flash_mode=dio esp32wrover.menu.FlashMode.qio.build.flash_mode=dio
@ -1238,6 +1241,9 @@ esp32s3box.menu.PartitionScheme.fatflash.upload.maximum_size=2097152
esp32s3box.menu.PartitionScheme.app3M_fat9M_16MB=16M Flash (3MB APP/9.9MB FATFS) esp32s3box.menu.PartitionScheme.app3M_fat9M_16MB=16M Flash (3MB APP/9.9MB FATFS)
esp32s3box.menu.PartitionScheme.app3M_fat9M_16MB.build.partitions=app3M_fat9M_16MB esp32s3box.menu.PartitionScheme.app3M_fat9M_16MB.build.partitions=app3M_fat9M_16MB
esp32s3box.menu.PartitionScheme.app3M_fat9M_16MB.upload.maximum_size=3145728 esp32s3box.menu.PartitionScheme.app3M_fat9M_16MB.upload.maximum_size=3145728
esp32s3box.menu.PartitionScheme.rainmaker=RainMaker
esp32s3box.menu.PartitionScheme.rainmaker.build.partitions=rainmaker
esp32s3box.menu.PartitionScheme.rainmaker.upload.maximum_size=3145728
esp32s3box.menu.DebugLevel.none=None esp32s3box.menu.DebugLevel.none=None
esp32s3box.menu.DebugLevel.none.build.code_debug=0 esp32s3box.menu.DebugLevel.none.build.code_debug=0
@ -1686,6 +1692,9 @@ esp32wroverkit.menu.PartitionScheme.min_spiffs.build.partitions=min_spiffs
esp32wroverkit.menu.PartitionScheme.min_spiffs.upload.maximum_size=1966080 esp32wroverkit.menu.PartitionScheme.min_spiffs.upload.maximum_size=1966080
esp32wroverkit.menu.PartitionScheme.fatflash=16M Flash (2MB APP/12.5MB FATFS) esp32wroverkit.menu.PartitionScheme.fatflash=16M Flash (2MB APP/12.5MB FATFS)
esp32wroverkit.menu.PartitionScheme.fatflash.build.partitions=ffat esp32wroverkit.menu.PartitionScheme.fatflash.build.partitions=ffat
esp32wroverkit.menu.PartitionScheme.rainmaker=RainMaker
esp32wroverkit.menu.PartitionScheme.rainmaker.build.partitions=rainmaker
esp32wroverkit.menu.PartitionScheme.rainmaker.upload.maximum_size=3145728
esp32wroverkit.menu.FlashMode.qio=QIO esp32wroverkit.menu.FlashMode.qio=QIO
esp32wroverkit.menu.FlashMode.qio.build.flash_mode=dio esp32wroverkit.menu.FlashMode.qio.build.flash_mode=dio
esp32wroverkit.menu.FlashMode.qio.build.boot=qio esp32wroverkit.menu.FlashMode.qio.build.boot=qio

View file

@ -22,7 +22,7 @@ bool dimmer_state = true;
// The framework provides some standard device types like switch, lightbulb, fan, temperature sensor. // The framework provides some standard device types like switch, lightbulb, fan, temperature sensor.
// But, you can also define custom devices using the 'Device' base class object, as shown here // But, you can also define custom devices using the 'Device' base class object, as shown here
static Device my_device("Dimmer", "custom.device.dimmer", &gpio_dimmer); static Device *my_device = NULL;
void sysProvEvent(arduino_event_t *sys_event) void sysProvEvent(arduino_event_t *sys_event)
{ {
@ -71,22 +71,25 @@ void setup()
Node my_node; Node my_node;
my_node = RMaker.initNode("ESP RainMaker Node"); my_node = RMaker.initNode("ESP RainMaker Node");
my_device = new Device("Dimmer", "custom.device.dimmer", &gpio_dimmer);
if (!my_device) {
return;
}
//Create custom dimmer device //Create custom dimmer device
my_device.addNameParam(); my_device->addNameParam();
my_device.addPowerParam(DEFAULT_POWER_MODE); my_device->addPowerParam(DEFAULT_POWER_MODE);
my_device.assignPrimaryParam(my_device.getParamByName(ESP_RMAKER_DEF_POWER_NAME)); my_device->assignPrimaryParam(my_device->getParamByName(ESP_RMAKER_DEF_POWER_NAME));
//Create and add a custom level parameter //Create and add a custom level parameter
Param level_param("Level", "custom.param.level", value(DEFAULT_DIMMER_LEVEL), PROP_FLAG_READ | PROP_FLAG_WRITE); Param level_param("Level", "custom.param.level", value(DEFAULT_DIMMER_LEVEL), PROP_FLAG_READ | PROP_FLAG_WRITE);
level_param.addBounds(value(0), value(100), value(1)); level_param.addBounds(value(0), value(100), value(1));
level_param.addUIType(ESP_RMAKER_UI_SLIDER); level_param.addUIType(ESP_RMAKER_UI_SLIDER);
my_device.addParam(level_param); my_device->addParam(level_param);
my_device.addCb(write_callback); my_device->addCb(write_callback);
//Add custom dimmer device to the node //Add custom dimmer device to the node
my_node.addDevice(my_device); my_node.addDevice(*my_device);
//This is optional //This is optional
RMaker.enableOTA(OTA_USING_TOPICS); RMaker.enableOTA(OTA_USING_TOPICS);
@ -117,7 +120,9 @@ void loop()
// Key debounce handling // Key debounce handling
delay(100); delay(100);
int startTime = millis(); int startTime = millis();
while(digitalRead(gpio_0) == LOW) delay(50); while (digitalRead(gpio_0) == LOW) {
delay(50);
}
int endTime = millis(); int endTime = millis();
if ((endTime - startTime) > 10000) { if ((endTime - startTime) > 10000) {
@ -132,7 +137,9 @@ void loop()
// Toggle device state // Toggle device state
dimmer_state = !dimmer_state; dimmer_state = !dimmer_state;
Serial.printf("Toggle State to %s.\n", dimmer_state ? "true" : "false"); Serial.printf("Toggle State to %s.\n", dimmer_state ? "true" : "false");
my_device.updateAndReportParam(ESP_RMAKER_DEF_POWER_NAME, dimmer_state); if (my_device) {
my_device->updateAndReportParam(ESP_RMAKER_DEF_POWER_NAME, dimmer_state);
}
(dimmer_state == false) ? digitalWrite(gpio_dimmer, LOW) : digitalWrite(gpio_dimmer, HIGH); (dimmer_state == false) ? digitalWrite(gpio_dimmer, LOW) : digitalWrite(gpio_dimmer, HIGH);
} }
} }

View file

@ -39,7 +39,7 @@ bool power_state = true;
// The framework provides some standard device types like switch, lightbulb, fan, temperature sensor. // The framework provides some standard device types like switch, lightbulb, fan, temperature sensor.
// But, you can also define custom devices using the 'Device' base class object, as shown here // But, you can also define custom devices using the 'Device' base class object, as shown here
static Device my_device("Air Cooler", "my.device.air-cooler", NULL); static Device *my_device = NULL;
void sysProvEvent(arduino_event_t *sys_event) void sysProvEvent(arduino_event_t *sys_event)
{ {
@ -112,41 +112,50 @@ void setup()
pinMode(gpio_swing, OUTPUT); pinMode(gpio_swing, OUTPUT);
digitalWrite(gpio_swing, DEFAULT_SWING); digitalWrite(gpio_swing, DEFAULT_SWING);
pinMode(gpio_mode_auto, OUTPUT); pinMode(gpio_mode_auto, OUTPUT);
if (strcmp(DEFAULT_MODE, "Auto") == 0) digitalWrite(gpio_mode_auto, HIGH); if (strcmp(DEFAULT_MODE, "Auto") == 0) {
digitalWrite(gpio_mode_auto, HIGH);
}
pinMode(gpio_mode_cool, OUTPUT); pinMode(gpio_mode_cool, OUTPUT);
if (strcmp(DEFAULT_MODE, "Cool") == 0) digitalWrite(gpio_mode_auto, HIGH); if (strcmp(DEFAULT_MODE, "Cool") == 0) {
digitalWrite(gpio_mode_auto, HIGH);
}
pinMode(gpio_mode_heat, OUTPUT); pinMode(gpio_mode_heat, OUTPUT);
if (strcmp(DEFAULT_MODE, "Heat") == 0) digitalWrite(gpio_mode_auto, HIGH); if (strcmp(DEFAULT_MODE, "Heat") == 0) {
digitalWrite(gpio_mode_auto, HIGH);
}
pinMode(gpio_speed, OUTPUT); pinMode(gpio_speed, OUTPUT);
analogWrite(gpio_speed, DEFAULT_SPEED); analogWrite(gpio_speed, DEFAULT_SPEED);
Node my_node; Node my_node;
my_node = RMaker.initNode("ESP RainMaker Node"); my_node = RMaker.initNode("ESP RainMaker Node");
my_device = new Device("Air Cooler", "my.device.air-cooler", NULL);
if (!my_device) {
return;
}
//Create custom air cooler device //Create custom air cooler device
my_device.addNameParam(); my_device->addNameParam();
my_device.addPowerParam(DEFAULT_POWER_MODE); my_device->addPowerParam(DEFAULT_POWER_MODE);
my_device.assignPrimaryParam(my_device.getParamByName(ESP_RMAKER_DEF_POWER_NAME)); my_device->assignPrimaryParam(my_device->getParamByName(ESP_RMAKER_DEF_POWER_NAME));
Param swing("Swing", ESP_RMAKER_PARAM_TOGGLE, value(DEFAULT_SWING), PROP_FLAG_READ | PROP_FLAG_WRITE); Param swing("Swing", ESP_RMAKER_PARAM_TOGGLE, value(DEFAULT_SWING), PROP_FLAG_READ | PROP_FLAG_WRITE);
swing.addUIType(ESP_RMAKER_UI_TOGGLE); swing.addUIType(ESP_RMAKER_UI_TOGGLE);
my_device.addParam(swing); my_device->addParam(swing);
Param speed("Speed", ESP_RMAKER_PARAM_RANGE, value(DEFAULT_SPEED), PROP_FLAG_READ | PROP_FLAG_WRITE); Param speed("Speed", ESP_RMAKER_PARAM_RANGE, value(DEFAULT_SPEED), PROP_FLAG_READ | PROP_FLAG_WRITE);
speed.addUIType(ESP_RMAKER_UI_SLIDER); speed.addUIType(ESP_RMAKER_UI_SLIDER);
speed.addBounds(value(0), value(255), value(1)); speed.addBounds(value(0), value(255), value(1));
my_device.addParam(speed); my_device->addParam(speed);
static const char *modes[] = { "Auto", "Cool", "Heat" }; static const char *modes[] = { "Auto", "Cool", "Heat" };
Param mode_param("Mode", ESP_RMAKER_PARAM_MODE, value("Auto"), PROP_FLAG_READ | PROP_FLAG_WRITE); Param mode_param("Mode", ESP_RMAKER_PARAM_MODE, value("Auto"), PROP_FLAG_READ | PROP_FLAG_WRITE);
mode_param.addValidStrList(modes, 3); mode_param.addValidStrList(modes, 3);
mode_param.addUIType(ESP_RMAKER_UI_DROPDOWN); mode_param.addUIType(ESP_RMAKER_UI_DROPDOWN);
my_device.addParam(mode_param); my_device->addParam(mode_param);
my_device.addCb(write_callback); my_device->addCb(write_callback);
//Add custom Air Cooler device to the node //Add custom Air Cooler device to the node
my_node.addDevice(my_device); my_node.addDevice(*my_device);
//This is optional //This is optional
// RMaker.enableOTA(OTA_USING_TOPICS); // RMaker.enableOTA(OTA_USING_TOPICS);
@ -177,7 +186,9 @@ void loop()
// Key debounce handling // Key debounce handling
delay(100); delay(100);
int startTime = millis(); int startTime = millis();
while(digitalRead(gpio_reset) == LOW) delay(50); while (digitalRead(gpio_reset) == LOW) {
delay(50);
}
int press_duration = millis() - startTime; int press_duration = millis() - startTime;
if (press_duration > 10000) { if (press_duration > 10000) {
@ -192,7 +203,9 @@ void loop()
// Toggle device state // Toggle device state
power_state = !power_state; power_state = !power_state;
Serial.printf("Toggle power state to %s.\n", power_state ? "true" : "false"); Serial.printf("Toggle power state to %s.\n", power_state ? "true" : "false");
my_device.updateAndReportParam(ESP_RMAKER_DEF_POWER_NAME, power_state); if (my_device) {
my_device->updateAndReportParam(ESP_RMAKER_DEF_POWER_NAME, power_state);
}
(power_state == false) ? digitalWrite(gpio_power, LOW) : digitalWrite(gpio_power, HIGH); (power_state == false) ? digitalWrite(gpio_power, LOW) : digitalWrite(gpio_power, HIGH);
} }
} }

View file

@ -31,8 +31,8 @@ LightSwitch switch_ch1 = {gpio_switch1, false};
LightSwitch switch_ch2 = {gpio_switch2, false}; LightSwitch switch_ch2 = {gpio_switch2, false};
//The framework provides some standard device types like switch, lightbulb, fan, temperature sensor. //The framework provides some standard device types like switch, lightbulb, fan, temperature sensor.
static Switch my_switch1; static Switch *my_switch1 = NULL;
static Switch my_switch2; static Switch *my_switch2 = NULL;
void sysProvEvent(arduino_event_t *sys_event) void sysProvEvent(arduino_event_t *sys_event)
{ {
@ -93,7 +93,8 @@ void write_callback(Device *device, Param *param, const param_val_t val, void *p
} }
void ARDUINO_ISR_ATTR isr(void* arg) { void ARDUINO_ISR_ATTR isr(void *arg)
{
LightSwitch *s = static_cast<LightSwitch *>(arg); LightSwitch *s = static_cast<LightSwitch *>(arg);
s->pressed = true; s->pressed = true;
} }
@ -125,16 +126,19 @@ void setup()
my_node = RMaker.initNode("Sonoff Dual R3"); my_node = RMaker.initNode("Sonoff Dual R3");
//Initialize switch device //Initialize switch device
my_switch1 = Switch("Switch_ch1", &gpio_relay1); my_switch1 = new Switch("Switch_ch1", &gpio_relay1);
my_switch2 = Switch("Switch_ch2", &gpio_relay2); my_switch2 = new Switch("Switch_ch2", &gpio_relay2);
if (!my_switch1 || !my_switch2) {
return;
}
//Standard switch device //Standard switch device
my_switch1.addCb(write_callback); my_switch1->addCb(write_callback);
my_switch2.addCb(write_callback); my_switch2->addCb(write_callback);
//Add switch device to the node //Add switch device to the node
my_node.addDevice(my_switch1); my_node.addDevice(*my_switch1);
my_node.addDevice(my_switch2); my_node.addDevice(*my_switch2);
//This is optional //This is optional
RMaker.enableOTA(OTA_USING_TOPICS); RMaker.enableOTA(OTA_USING_TOPICS);
@ -173,7 +177,9 @@ void loop()
// Toggle switch 1 device state // Toggle switch 1 device state
switch_state_ch1 = !switch_state_ch1; switch_state_ch1 = !switch_state_ch1;
Serial.printf("Toggle State to %s.\n", switch_state_ch1 ? "true" : "false"); Serial.printf("Toggle State to %s.\n", switch_state_ch1 ? "true" : "false");
my_switch1.updateAndReportParam(ESP_RMAKER_DEF_POWER_NAME, switch_state_ch1); if (my_switch1) {
my_switch1->updateAndReportParam(ESP_RMAKER_DEF_POWER_NAME, switch_state_ch1);
}
(switch_state_ch1 == false) ? digitalWrite(gpio_relay1, LOW) : digitalWrite(gpio_relay1, HIGH); (switch_state_ch1 == false) ? digitalWrite(gpio_relay1, LOW) : digitalWrite(gpio_relay1, HIGH);
} else if (switch_ch2.pressed) { } else if (switch_ch2.pressed) {
Serial.printf("Switch 2 has been changed\n"); Serial.printf("Switch 2 has been changed\n");
@ -181,7 +187,9 @@ void loop()
// Toggle switch 2 device state // Toggle switch 2 device state
switch_state_ch2 = !switch_state_ch2; switch_state_ch2 = !switch_state_ch2;
Serial.printf("Toggle State to %s.\n", switch_state_ch2 ? "true" : "false"); Serial.printf("Toggle State to %s.\n", switch_state_ch2 ? "true" : "false");
my_switch2.updateAndReportParam(ESP_RMAKER_DEF_POWER_NAME, switch_state_ch2); if (my_switch2) {
my_switch2->updateAndReportParam(ESP_RMAKER_DEF_POWER_NAME, switch_state_ch2);
}
(switch_state_ch2 == false) ? digitalWrite(gpio_relay2, LOW) : digitalWrite(gpio_relay2, HIGH); (switch_state_ch2 == false) ? digitalWrite(gpio_relay2, LOW) : digitalWrite(gpio_relay2, HIGH);
} }
@ -191,7 +199,9 @@ void loop()
// Key debounce handling // Key debounce handling
delay(100); delay(100);
int startTime = millis(); int startTime = millis();
while(digitalRead(gpio_reset) == LOW) delay(50); while (digitalRead(gpio_reset) == LOW) {
delay(50);
}
int endTime = millis(); int endTime = millis();
if ((endTime - startTime) > 10000) { if ((endTime - startTime) > 10000) {

View file

@ -20,18 +20,21 @@ static int gpio_switch = 16;
/* Variable for reading pin status*/ /* Variable for reading pin status*/
bool switch_state = true; bool switch_state = true;
//The framework provides some standard device types like switch, lightbulb, fan, temperaturesensor. // The framework provides some standard device types like switch, lightbulb,
static Switch my_switch; // fan, temperaturesensor.
static Switch *my_switch = NULL;
void sysProvEvent(arduino_event_t *sys_event) void sysProvEvent(arduino_event_t *sys_event)
{ {
switch (sys_event->event_id) { switch (sys_event->event_id) {
case ARDUINO_EVENT_PROV_START: case ARDUINO_EVENT_PROV_START:
#if CONFIG_IDF_TARGET_ESP32S2 #if CONFIG_IDF_TARGET_ESP32S2
Serial.printf("\nProvisioning Started with name \"%s\" and PoP \"%s\" on SoftAP\n", service_name, pop); Serial.printf("\nProvisioning Started with name \"%s\" and PoP \"%s\" on SoftAP\n",
service_name, pop);
printQR(service_name, pop, "softap"); printQR(service_name, pop, "softap");
#else #else
Serial.printf("\nProvisioning Started with name \"%s\" and PoP \"%s\" on BLE\n", service_name, pop); Serial.printf("\nProvisioning Started with name \"%s\" and PoP \"%s\" on BLE\n",
service_name, pop);
printQR(service_name, pop, "ble"); printQR(service_name, pop, "ble");
#endif #endif
break; break;
@ -45,15 +48,18 @@ void sysProvEvent(arduino_event_t *sys_event)
} }
} }
void write_callback(Device *device, Param *param, const param_val_t val, void *priv_data, write_ctx_t *ctx) void write_callback(Device *device, Param *param, const param_val_t val,
void *priv_data, write_ctx_t *ctx)
{ {
const char *device_name = device->getDeviceName(); const char *device_name = device->getDeviceName();
const char *param_name = param->getParamName(); const char *param_name = param->getParamName();
if (strcmp(param_name, "Power") == 0) { if (strcmp(param_name, "Power") == 0) {
Serial.printf("Received value = %s for %s - %s\n", val.val.b? "true" : "false", device_name, param_name); Serial.printf("Received value = %s for %s - %s\n",
val.val.b ? "true" : "false", device_name, param_name);
switch_state = val.val.b; switch_state = val.val.b;
(switch_state == false) ? digitalWrite(gpio_switch, LOW) : digitalWrite(gpio_switch, HIGH); (switch_state == false) ? digitalWrite(gpio_switch, LOW)
: digitalWrite(gpio_switch, HIGH);
param->updateAndReport(val); param->updateAndReport(val);
} }
} }
@ -69,20 +75,24 @@ void setup()
my_node = RMaker.initNode("ESP RainMaker Node"); my_node = RMaker.initNode("ESP RainMaker Node");
// Initialize switch device // Initialize switch device
my_switch = Switch("Switch", &gpio_switch); my_switch = new Switch("Switch", &gpio_switch);
if (!my_switch) {
return;
}
// Standard switch device // Standard switch device
my_switch.addCb(write_callback); my_switch->addCb(write_callback);
// Add switch device to the node // Add switch device to the node
my_node.addDevice(my_switch); my_node.addDevice(*my_switch);
// This is optional // This is optional
RMaker.enableOTA(OTA_USING_TOPICS); RMaker.enableOTA(OTA_USING_TOPICS);
//If you want to enable scheduling, set time zone for your region using setTimeZone(). // If you want to enable scheduling, set time zone for your region using
//The list of available values are provided here https://rainmaker.espressif.com/docs/time-service.html // setTimeZone(). The list of available values are provided here
// https://rainmaker.espressif.com/docs/time-service.html
// RMaker.setTimeZone("Asia/Shanghai"); // RMaker.setTimeZone("Asia/Shanghai");
// Alternatively, enable the Timezone service and let the phone apps set the appropriate timezone // Alternatively, enable the Timezone service and let the phone apps set the
// appropriate timezone
RMaker.enableTZService(); RMaker.enableTZService();
RMaker.enableSchedule(); RMaker.enableSchedule();
@ -93,9 +103,11 @@ void setup()
WiFi.onEvent(sysProvEvent); WiFi.onEvent(sysProvEvent);
#if CONFIG_IDF_TARGET_ESP32S2 #if CONFIG_IDF_TARGET_ESP32S2
WiFiProv.beginProvision(WIFI_PROV_SCHEME_SOFTAP, WIFI_PROV_SCHEME_HANDLER_NONE, WIFI_PROV_SECURITY_1, pop, service_name); WiFiProv.beginProvision(WIFI_PROV_SCHEME_SOFTAP, WIFI_PROV_SCHEME_HANDLER_NONE,
WIFI_PROV_SECURITY_1, pop, service_name);
#else #else
WiFiProv.beginProvision(WIFI_PROV_SCHEME_BLE, WIFI_PROV_SCHEME_HANDLER_FREE_BTDM, WIFI_PROV_SECURITY_1, pop, service_name); WiFiProv.beginProvision(WIFI_PROV_SCHEME_BLE, WIFI_PROV_SCHEME_HANDLER_FREE_BTDM,
WIFI_PROV_SECURITY_1, pop, service_name);
#endif #endif
} }
@ -106,7 +118,9 @@ void loop()
// Key debounce handling // Key debounce handling
delay(100); delay(100);
int startTime = millis(); int startTime = millis();
while(digitalRead(gpio_0) == LOW) delay(50); while (digitalRead(gpio_0) == LOW) {
delay(50);
}
int endTime = millis(); int endTime = millis();
if ((endTime - startTime) > 10000) { if ((endTime - startTime) > 10000) {
@ -121,8 +135,12 @@ void loop()
// Toggle device state // Toggle device state
switch_state = !switch_state; switch_state = !switch_state;
Serial.printf("Toggle State to %s.\n", switch_state ? "true" : "false"); Serial.printf("Toggle State to %s.\n", switch_state ? "true" : "false");
my_switch.updateAndReportParam(ESP_RMAKER_DEF_POWER_NAME, switch_state); if (my_switch) {
(switch_state == false) ? digitalWrite(gpio_switch, LOW) : digitalWrite(gpio_switch, HIGH); my_switch->updateAndReportParam(ESP_RMAKER_DEF_POWER_NAME,
switch_state);
}
(switch_state == false) ? digitalWrite(gpio_switch, LOW)
: digitalWrite(gpio_switch, HIGH);
} }
} }
delay(100); delay(100);

View file

@ -33,7 +33,7 @@ esp_err_t Device::deleteDevice()
{ {
err = esp_rmaker_device_delete(getDeviceHandle()); err = esp_rmaker_device_delete(getDeviceHandle());
if(err != ESP_OK) { if(err != ESP_OK) {
log_e("Device deletion error"); log_e("Failed to delete device");
return err; return err;
} }
return ESP_OK; return ESP_OK;
@ -45,7 +45,7 @@ void Device::addCb(deviceWriteCb writeCb, deviceReadCb readCb)
read_cb = readCb; read_cb = readCb;
err = esp_rmaker_device_add_cb(getDeviceHandle(), write_callback, read_callback); err = esp_rmaker_device_add_cb(getDeviceHandle(), write_callback, read_callback);
if(err != ESP_OK) { if(err != ESP_OK) {
log_e("Callback register error"); log_e("Failed to register callback");
} }
} }
@ -64,7 +64,7 @@ esp_err_t Device::addParam(Param parameter)
{ {
err = esp_rmaker_device_add_param(getDeviceHandle(), parameter.getParamHandle()); err = esp_rmaker_device_add_param(getDeviceHandle(), parameter.getParamHandle());
if(err != ESP_OK) { if(err != ESP_OK) {
log_e("Adding custom parameter error"); log_e("Failed to add custom parameter");
return err; return err;
} }
return ESP_OK; return ESP_OK;
@ -140,7 +140,7 @@ esp_err_t Device::assignPrimaryParam(param_handle_t *param)
{ {
err = esp_rmaker_device_assign_primary_param(getDeviceHandle(), param); err = esp_rmaker_device_assign_primary_param(getDeviceHandle(), param);
if(err != ESP_OK){ if(err != ESP_OK){
log_e("Assigning primary param error"); log_e("Failed to assign primary parameter");
} }
return err; return err;
} }
@ -157,7 +157,7 @@ esp_err_t Device::updateAndReportParam(const char *param_name, bool my_val)
param_val_t val = esp_rmaker_bool(my_val); param_val_t val = esp_rmaker_bool(my_val);
err = esp_rmaker_param_update_and_report(param, val); err = esp_rmaker_param_update_and_report(param, val);
if(err != ESP_OK) { if(err != ESP_OK) {
log_e("Update paramter failed"); log_e("Update parameter failed");
return err; return err;
}else { }else {
log_i("Device : %s, Param Name : %s, Val : %s", getDeviceName(), param_name, my_val ? "true" : "false"); log_i("Device : %s, Param Name : %s, Val : %s", getDeviceName(), param_name, my_val ? "true" : "false");
@ -171,7 +171,7 @@ esp_err_t Device::updateAndReportParam(const char *param_name, int my_val)
param_val_t val = esp_rmaker_int(my_val); param_val_t val = esp_rmaker_int(my_val);
esp_err_t err = esp_rmaker_param_update_and_report(param, val); esp_err_t err = esp_rmaker_param_update_and_report(param, val);
if(err != ESP_OK) { if(err != ESP_OK) {
log_e("Update paramter failed"); log_e("Update parameter failed");
return err; return err;
}else { }else {
log_i("Device : %s, Param Name : %s, Val : %d", getDeviceName(), param_name, my_val); log_i("Device : %s, Param Name : %s, Val : %d", getDeviceName(), param_name, my_val);
@ -185,7 +185,7 @@ esp_err_t Device::updateAndReportParam(const char *param_name, float my_val)
param_val_t val = esp_rmaker_float(my_val); param_val_t val = esp_rmaker_float(my_val);
esp_err_t err = esp_rmaker_param_update_and_report(param, val); esp_err_t err = esp_rmaker_param_update_and_report(param, val);
if(err != ESP_OK) { if(err != ESP_OK) {
log_e("Update paramter failed"); log_e("Update parameter failed");
return err; return err;
}else { }else {
log_i("Device : %s, Param Name : %s, Val : %f", getDeviceName(), param_name, my_val); log_i("Device : %s, Param Name : %s, Val : %f", getDeviceName(), param_name, my_val);
@ -199,7 +199,7 @@ esp_err_t Device::updateAndReportParam(const char *param_name, const char *my_va
param_val_t val = esp_rmaker_str(my_val); param_val_t val = esp_rmaker_str(my_val);
esp_err_t err = esp_rmaker_param_update_and_report(param, val); esp_err_t err = esp_rmaker_param_update_and_report(param, val);
if(err != ESP_OK) { if(err != ESP_OK) {
log_e("Update paramter failed"); log_e("Update parameter failed");
return err; return err;
}else { }else {
log_i("Device : %s, Param Name : %s, Val : %s", getDeviceName(), param_name, my_val); log_i("Device : %s, Param Name : %s, Val : %s", getDeviceName(), param_name, my_val);