Rainmaker will not change relay state using external input

I am using the Rainmaker app, with an ESP32 and a 16 relay module, as a supplementary controller for a 15 zone lawn irrigation system. I can control the zone relays with Rainmaker. The issue is that I want Rainmaker to indicate if the irrigation system is active because I do not want to interfere with the irrigation system if it is active.

An acs712 module determines the state of the irrigation system by current draw. It energizes
Normally Closed relay 16, via an if-else statement, cutting power to the 15 relays if the irrigation system is in use. I was hoping the app button would indicate on or off by digitalWrite ( RELAY_16, HIGH or LOW). I can not get the Relay_16 app Switch button to physically turn the relay on or off although the button does print on or off when pressed. Interestingly the output pin momentarily registers 3.3 volts when the on button is pressed and momentarily 0 volts when off is pressed. The N/C RELAY 16 output pin registers 3.3 volts when the irrigation system is on and 0 volts when off, as it should.
My code is listed below and the acs712 current statement begins in the first line of the void loop and controls the N/C Relay 16 on pin23.

I am a novice Arduino IDE coder and have not previously worked with Rainmaker and would appreciate any advice.


#include "RMaker.h"
#include "WiFi.h"
#include "WiFiProv.h"
#include "ACS712.h"

ACS712 ACS(36, 4.978, 1023, 152); // best parameters for mA reading. Keeps mA to +/- .020 of actual

//---------------------------------------------------
const char *service_name = "sprinklers";
const char *pop = "12345678";
//---------------------------------------------------


// define the Device Names
char device1[] = "ZONE1";
char device2[] = "ZONE2";
char device3[] = "ZONE3";
char device4[] = "ZONE4";
char device5[] = "ZONE5";
char device6[] = "ZONE6";
char device7[] = "ZONE7";
char device8[] = "ZONE8";
char device9[] = "ZONE9";
char device10[] = "ZONE10";
char device11[] = "ZONE11";
char device12[] = "ZONE12";
char device13[] = "ZONE13";
char device14[] = "ZONE14";
char device15[] = "ZONE15";
char device16[] = "Rainbird";
//---------------------------------------------------
// define the GPIO connected with Relays and switches
static uint8_t RELAY_1 = 15;   //D23
static uint8_t RELAY_2 = 14;   //D22
static uint8_t RELAY_3 = 4;    //D21
static uint8_t RELAY_4 = 27;   //D19
static uint8_t RELAY_5 = 16;   //D23
static uint8_t RELAY_6 = 26;   //D22
static uint8_t RELAY_7 = 17;   //D21
static uint8_t RELAY_8 = 25;   //D19
static uint8_t RELAY_9 = 5;    //D23
static uint8_t RELAY_10 = 33;  //D22
static uint8_t RELAY_11 = 18;  //D21
static uint8_t RELAY_12 = 32;  //D19
static uint8_t RELAY_13 = 19;  //D23
static uint8_t RELAY_14 = 22;  //D22
static uint8_t RELAY_15 = 21;  //D21
static uint8_t RELAY_16 = 23;  //D19

//---------------------------------------------------
static uint8_t WIFI_LED = 2;  //D2
static uint8_t gpio_reset = 0;
//---------------------------------------------------
// Relay State
bool STATE_RELAY_1 = LOW;
bool STATE_RELAY_2 = LOW;
bool STATE_RELAY_3 = LOW;
bool STATE_RELAY_4 = LOW;
bool STATE_RELAY_5 = LOW;
bool STATE_RELAY_6 = LOW;
bool STATE_RELAY_7 = LOW;
bool STATE_RELAY_8 = LOW;
bool STATE_RELAY_9 = LOW;
bool STATE_RELAY_10 = LOW;
bool STATE_RELAY_11 = LOW;
bool STATE_RELAY_12 = LOW;
bool STATE_RELAY_13 = LOW;
bool STATE_RELAY_14 = LOW;
bool STATE_RELAY_15 = LOW;
bool STATE_RELAY_16 = HIGH;// to prevent inadvertent activation of relays if irrigation system is on or more than one zone turned on


//The framework provides some standard device types
//like switch, lightbulb, fan, temperature sensor.
static Switch my_switch1(device1, &RELAY_1);
static Switch my_switch2(device2, &RELAY_2);
static Switch my_switch3(device3, &RELAY_3);
static Switch my_switch4(device4, &RELAY_4);
static Switch my_switch5(device5, &RELAY_5);
static Switch my_switch6(device6, &RELAY_6);
static Switch my_switch7(device7, &RELAY_7);
static Switch my_switch8(device8, &RELAY_8);
static Switch my_switch9(device9, &RELAY_9);
static Switch my_switch10(device10, &RELAY_10);
static Switch my_switch11(device11, &RELAY_11);
static Switch my_switch12(device12, &RELAY_12);
static Switch my_switch13(device13, &RELAY_13);
static Switch my_switch14(device14, &RELAY_14);
static Switch my_switch15(device15, &RELAY_15);
static Switch my_switch16(device16, &RELAY_16);


/****************************************************************************************************
 * sysProvEvent Function
*****************************************************************************************************/
void sysProvEvent(arduino_event_t *sys_event) {
  switch (sys_event->event_id) {
    case ARDUINO_EVENT_PROV_START:
#if CONFIG_IDF_TARGET_ESP32
      Serial.printf("\nProvisioning Started with name \"%s\" and PoP \"%s\" on BLE\n", service_name, pop);
      printQR(service_name, pop, "ble");
#else
      Serial.printf("\nProvisioning Started with name \"%s\" and PoP \"%s\" on SoftAP\n", service_name, pop);
      printQR(service_name, pop, "softap");
#endif
      break;
    case ARDUINO_EVENT_WIFI_STA_CONNECTED:
      Serial.printf("\nConnected to Wi-Fi!\n");
      digitalWrite(WIFI_LED, HIGH);
      break;
  }
}

/****************************************************************************************************
 * write_callback Function
*****************************************************************************************************/
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 *param_name = param->getParamName();
  //----------------------------------------------------------------------------------
  if (strcmp(device_name, device1) == 0) {

    Serial.printf("Switch value = %s\n", val.val.b ? "true" : "false");

    if (strcmp(param_name, "Power") == 0) {
      Serial.printf("Received value = %s for %s - %s\n", val.val.b ? "true" : "false", device_name, param_name);
      STATE_RELAY_1 = val.val.b;
      STATE_RELAY_1 = !STATE_RELAY_1;
      control_relay(1, RELAY_1, STATE_RELAY_1);
      (STATE_RELAY_1 == true) ? digitalWrite(RELAY_1, HIGH) : digitalWrite(RELAY_1, LOW);
      param->updateAndReport(val);
    }
  }
  //----------------------------------------------------------------------------------
  else if (strcmp(device_name, device2) == 0) {

    Serial.printf("Switch value = %s\n", val.val.b ? "true" : "false");

    if (strcmp(param_name, "Power") == 0) {
      Serial.printf("Received value = %s for %s - %s\n", val.val.b ? "true" : "false", device_name, param_name);
      STATE_RELAY_2 = val.val.b;
      STATE_RELAY_2 = !STATE_RELAY_2;
      control_relay(2, RELAY_2, STATE_RELAY_2);
      (STATE_RELAY_2 == true) ? digitalWrite(RELAY_2, HIGH) : digitalWrite(RELAY_2, LOW);
      param->updateAndReport(val);
    }
  }
  //----------------------------------------------------------------------------------
  else if (strcmp(device_name, device3) == 0) {

    Serial.printf("Switch value = %s\n", val.val.b ? "true" : "false");

    if (strcmp(param_name, "Power") == 0) {
      Serial.printf("Received value = %s for %s - %s\n", val.val.b ? "true" : "false", device_name, param_name);
      STATE_RELAY_3 = val.val.b;
      STATE_RELAY_3 = !STATE_RELAY_3;
      control_relay(3, RELAY_3, STATE_RELAY_3);
      (STATE_RELAY_3 == true) ? digitalWrite(RELAY_3, HIGH) : digitalWrite(RELAY_3, LOW);
      param->updateAndReport(val);
    }

  }
  //----------------------------------------------------------------------------------
  else if (strcmp(device_name, device4) == 0) {

    Serial.printf("Switch value = %s\n", val.val.b ? "true" : "false");

    if (strcmp(param_name, "Power") == 0) {
      Serial.printf("Received value = %s for %s - %s\n", val.val.b ? "true" : "false", device_name, param_name);
      STATE_RELAY_4 = val.val.b;
      STATE_RELAY_4 = !STATE_RELAY_4;
      control_relay(4, RELAY_4, STATE_RELAY_4);
      (STATE_RELAY_4 == true) ? digitalWrite(RELAY_4, HIGH) : digitalWrite(RELAY_4, LOW);
      param->updateAndReport(val);
    }
  }
  //----------------------------------------------------------------------------------
  if (strcmp(device_name, device5) == 0) {

    Serial.printf("Switch value = %s\n", val.val.b ? "true" : "false");

    if (strcmp(param_name, "Power") == 0) {
      Serial.printf("Received value = %s for %s - %s\n", val.val.b ? "true" : "false", device_name, param_name);
      STATE_RELAY_5 = val.val.b;
      STATE_RELAY_5 = !STATE_RELAY_5;
      control_relay(5, RELAY_5, STATE_RELAY_5);
      (STATE_RELAY_5 == true) ? digitalWrite(RELAY_5, HIGH) : digitalWrite(RELAY_5, LOW);
      param->updateAndReport(val);
    }
  }
  //----------------------------------------------------------------------------------
  else if (strcmp(device_name, device6) == 0) {

    Serial.printf("Switch value = %s\n", val.val.b ? "true" : "false");

    if (strcmp(param_name, "Power") == 0) {
      Serial.printf("Received value = %s for %s - %s\n", val.val.b ? "true" : "false", device_name, param_name);
      STATE_RELAY_6 = val.val.b;
      STATE_RELAY_6 = !STATE_RELAY_6;
      control_relay(6, RELAY_6, STATE_RELAY_6);
      (STATE_RELAY_6 == true) ? digitalWrite(RELAY_6, HIGH) : digitalWrite(RELAY_6, LOW);
      param->updateAndReport(val);
    }
  }
  //----------------------------------------------------------------------------------
  else if (strcmp(device_name, device7) == 0) {

    Serial.printf("Switch value = %s\n", val.val.b ? "true" : "false");

    if (strcmp(param_name, "Power") == 0) {
      Serial.printf("Received value = %s for %s - %s\n", val.val.b ? "true" : "false", device_name, param_name);
      STATE_RELAY_7 = val.val.b;
      STATE_RELAY_7 = !STATE_RELAY_7;
      control_relay(7, RELAY_7, STATE_RELAY_7);
      (STATE_RELAY_7 == true) ? digitalWrite(RELAY_7, HIGH) : digitalWrite(RELAY_7, LOW);
      param->updateAndReport(val);
    }

  }
  //----------------------------------------------------------------------------------
  else if (strcmp(device_name, device8) == 0) {

    Serial.printf("Switch value = %s\n", val.val.b ? "true" : "false");

    if (strcmp(param_name, "Power") == 0) {
      Serial.printf("Received value = %s for %s - %s\n", val.val.b ? "true" : "false", device_name, param_name);
      STATE_RELAY_8 = val.val.b;
      STATE_RELAY_8 = !STATE_RELAY_8;
      control_relay(8, RELAY_8, STATE_RELAY_8);
      (STATE_RELAY_8 == true) ? digitalWrite(RELAY_8, HIGH) : digitalWrite(RELAY_8, LOW);
      param->updateAndReport(val);
    }
  }
  if (strcmp(device_name, device9) == 0) {

    Serial.printf("Switch value = %s\n", val.val.b ? "true" : "false");

    if (strcmp(param_name, "Power") == 0) {
      Serial.printf("Received value = %s for %s - %s\n", val.val.b ? "true" : "false", device_name, param_name);
      STATE_RELAY_9 = val.val.b;
      STATE_RELAY_9 = !STATE_RELAY_9;
      control_relay(9, RELAY_9, STATE_RELAY_9);
      (STATE_RELAY_9 == true) ? digitalWrite(RELAY_9, HIGH) : digitalWrite(RELAY_9, LOW);
      param->updateAndReport(val);
    }
  }
  //----------------------------------------------------------------------------------
  else if (strcmp(device_name, device10) == 0) {

    Serial.printf("Switch value = %s\n", val.val.b ? "true" : "false");
    if (strcmp(param_name, "Power") == 0) {
      Serial.printf("Received value = %s for %s - %s\n", val.val.b ? "true" : "false", device_name, param_name);
      STATE_RELAY_10 = val.val.b;
      STATE_RELAY_10 = !STATE_RELAY_10;
      control_relay(10, RELAY_10, STATE_RELAY_10);
      (STATE_RELAY_10 == true) ? digitalWrite(RELAY_10, HIGH) : digitalWrite(RELAY_10, LOW);
      param->updateAndReport(val);
    }
  }
  //----------------------------------------------------------------------------------
  else if (strcmp(device_name, device11) == 0) {

    Serial.printf("Switch value = %s\n", val.val.b ? "true" : "false");
    if (strcmp(param_name, "Power") == 0) {
      Serial.printf("Received value = %s for %s - %s\n", val.val.b ? "true" : "false", device_name, param_name);
      STATE_RELAY_11 = val.val.b;
      STATE_RELAY_11 = !STATE_RELAY_11;
      control_relay(11, RELAY_11, STATE_RELAY_11);
      (STATE_RELAY_11 == true) ? digitalWrite(RELAY_11, HIGH) : digitalWrite(RELAY_11, LOW);
      param->updateAndReport(val);
    }

  }
  //----------------------------------------------------------------------------------
  else if (strcmp(device_name, device12) == 0) {

    Serial.printf("Switch value = %s\n", val.val.b ? "true" : "false");
    if (strcmp(param_name, "Power") == 0) {
      Serial.printf("Received value = %s for %s - %s\n", val.val.b ? "true" : "false", device_name, param_name);
      STATE_RELAY_12 = val.val.b;
      STATE_RELAY_12 = !STATE_RELAY_12;
      control_relay(12, RELAY_12, STATE_RELAY_12);
      (STATE_RELAY_12 == true) ? digitalWrite(RELAY_12, HIGH) : digitalWrite(RELAY_12, LOW);
      param->updateAndReport(val);
    }
  }
  //----------------------------------------------------------------------------------
  if (strcmp(device_name, device13) == 0) {

    Serial.printf("Switch value = %s\n", val.val.b ? "true" : "false");

    if (strcmp(param_name, "Power") == 0) {
      Serial.printf("Received value = %s for %s - %s\n", val.val.b ? "true" : "false", device_name, param_name);
      STATE_RELAY_13 = val.val.b;
      STATE_RELAY_13 = !STATE_RELAY_13;
      control_relay(13, RELAY_13, STATE_RELAY_13);
      (STATE_RELAY_13 == true) ? digitalWrite(RELAY_13, HIGH) : digitalWrite(RELAY_13, LOW);
      param->updateAndReport(val);
    }
  }
  //----------------------------------------------------------------------------------
  else if (strcmp(device_name, device14) == 0) {

    Serial.printf("Switch value = %s\n", val.val.b ? "true" : "false");
    if (strcmp(param_name, "Power") == 0) {
      Serial.printf("Received value = %s for %s - %s\n", val.val.b ? "true" : "false", device_name, param_name);
      STATE_RELAY_14 = val.val.b;
      STATE_RELAY_14 = !STATE_RELAY_14;
      control_relay(14, RELAY_14, STATE_RELAY_14);
      (STATE_RELAY_14 == true) ? digitalWrite(RELAY_14, HIGH) : digitalWrite(RELAY_14, LOW);
      param->updateAndReport(val);
    }
  }
  //----------------------------------------------------------------------------------
  else if (strcmp(device_name, device15) == 0) {

    Serial.printf("Switch value = %s\n", val.val.b ? "true" : "false");
    if (strcmp(param_name, "Power") == 0) {
      Serial.printf("Received value = %s for %s - %s\n", val.val.b ? "true" : "false", device_name, param_name);
      STATE_RELAY_15 = val.val.b;
      STATE_RELAY_15 = !STATE_RELAY_15;
      control_relay(15, RELAY_15, STATE_RELAY_15);
      (STATE_RELAY_15 == true) ? digitalWrite(RELAY_15, HIGH) : digitalWrite(RELAY_15, LOW);
      param->updateAndReport(val);
    }

  }
  //----------------------------------------------------------------------------------
  else if (strcmp(device_name, device16) == 0) {

    Serial.printf("Switch value = %s\n", val.val.b ? "true" : "false");
    if (strcmp(param_name, "Power") == 0) {
      Serial.printf("Received value = %s for %s - %s\n", val.val.b ? "true" : "false", device_name, param_name);
      STATE_RELAY_16 = val.val.b;
      STATE_RELAY_16 = !STATE_RELAY_16;
      control_relay(16, RELAY_16, STATE_RELAY_16);
      (STATE_RELAY_16 == true) ? digitalWrite(RELAY_16, HIGH) : digitalWrite(RELAY_16, LOW);
      param->updateAndReport(val);
    }
  }
  //----------------------------------------------------------------------------------
}

/****************************************************************************************************
 * setup Function
*****************************************************************************************************/
void setup() {
  
  uint32_t chipId = 0;
  Serial.begin(115200);
  //------------------------------------------------------------------------------
 
  // Set the Relays GPIOs as output mode
  pinMode(RELAY_1, OUTPUT);
  pinMode(RELAY_2, OUTPUT);
  pinMode(RELAY_3, OUTPUT);
  pinMode(RELAY_4, OUTPUT);
  pinMode(RELAY_5, OUTPUT);
  pinMode(RELAY_6, OUTPUT);
  pinMode(RELAY_7, OUTPUT);
  pinMode(RELAY_8, OUTPUT);
  pinMode(RELAY_9, OUTPUT);
  pinMode(RELAY_10, OUTPUT);
  pinMode(RELAY_11, OUTPUT);
  pinMode(RELAY_12, OUTPUT);
  pinMode(RELAY_13, OUTPUT);
  pinMode(RELAY_14, OUTPUT);
  pinMode(RELAY_15, OUTPUT);
  pinMode(RELAY_16, OUTPUT);
  pinMode(36, INPUT);

    //------------------------------------------------------------------------------
  pinMode(gpio_reset, INPUT);
  pinMode(WIFI_LED, OUTPUT);
  digitalWrite(WIFI_LED, LOW);
  //------------------------------------------------------------------------------
  // Write to the GPIOs the default state on booting
  digitalWrite(RELAY_1, !STATE_RELAY_1);
  digitalWrite(RELAY_2, !STATE_RELAY_2);
  digitalWrite(RELAY_3, !STATE_RELAY_3);
  digitalWrite(RELAY_4, !STATE_RELAY_4);
  digitalWrite(RELAY_5, !STATE_RELAY_5);
  digitalWrite(RELAY_6, !STATE_RELAY_6);
  digitalWrite(RELAY_7, !STATE_RELAY_7);
  digitalWrite(RELAY_8, !STATE_RELAY_8);
  digitalWrite(RELAY_9, !STATE_RELAY_9);
  digitalWrite(RELAY_10, !STATE_RELAY_10);
  digitalWrite(RELAY_11, !STATE_RELAY_11);
  digitalWrite(RELAY_12, !STATE_RELAY_12);
  digitalWrite(RELAY_13, !STATE_RELAY_13);
  digitalWrite(RELAY_14, !STATE_RELAY_14);
  digitalWrite(RELAY_15, !STATE_RELAY_15);
  digitalWrite(RELAY_16, !STATE_RELAY_16);

  //------------------------------------------------------------------------------
  Node my_node;
  my_node = RMaker.initNode("sprinklers");
  //------------------------------------------------------------------------------
  //Standard switch device
  my_switch1.addCb(write_callback);
  my_switch2.addCb(write_callback);
  my_switch3.addCb(write_callback);
  my_switch4.addCb(write_callback);
  my_switch5.addCb(write_callback);
  my_switch6.addCb(write_callback);
  my_switch7.addCb(write_callback);
  my_switch8.addCb(write_callback);
  my_switch9.addCb(write_callback);
  my_switch10.addCb(write_callback);
  my_switch11.addCb(write_callback);
  my_switch12.addCb(write_callback);
  my_switch13.addCb(write_callback);
  my_switch14.addCb(write_callback);
  my_switch15.addCb(write_callback);
  my_switch16.addCb(write_callback);

  
  //Add switch device to the node
  my_node.addDevice(my_switch1);
  my_node.addDevice(my_switch2);
  my_node.addDevice(my_switch3);
  my_node.addDevice(my_switch4);
  my_node.addDevice(my_switch5);
  my_node.addDevice(my_switch6);
  my_node.addDevice(my_switch7);
  my_node.addDevice(my_switch8);
  my_node.addDevice(my_switch9);
  my_node.addDevice(my_switch10);
  my_node.addDevice(my_switch11);
  my_node.addDevice(my_switch12);
  my_node.addDevice(my_switch13);
  my_node.addDevice(my_switch14);
  my_node.addDevice(my_switch15);
  my_node.addDevice(my_switch16);

  //------------------------------------------------------------------------------
  //This is optional
  RMaker.enableOTA(OTA_USING_PARAMS);
  //If you want to enable scheduling, set time zone for your region using setTimeZone().
  //The list of available values are provided here https://rainmaker.espressif.com/docs/time-service.html
  // RMaker.setTimeZone("Asia/Shanghai");
  // Alternatively, enable the Timezone service and let the phone apps set the appropriate timezone
  RMaker.enableTZService();
  RMaker.enableSchedule();
  //------------------------------------------------------------------------------
  //Service Name
  for (int i = 0; i < 17; i = i + 8) {
    chipId |= ((ESP.getEfuseMac() >> (40 - i)) & 0xff) << i;
  }

  Serial.printf("\nChip ID:  %d Service Name: %s\n", chipId, service_name);
  //------------------------------------------------------------------------------
  Serial.printf("\nStarting ESP-RainMaker\n");
  RMaker.start();
  //------------------------------------------------------------------------------
  WiFi.onEvent(sysProvEvent);
#if CONFIG_IDF_TARGET_ESP32
  WiFiProv.beginProvision(WIFI_PROV_SCHEME_BLE, WIFI_PROV_SCHEME_HANDLER_FREE_BTDM, WIFI_PROV_SECURITY_1, pop, service_name);
#else
  WiFiProv.beginProvision(WIFI_PROV_SCHEME_SOFTAP, WIFI_PROV_SCHEME_HANDLER_NONE, WIFI_PROV_SECURITY_1, pop, service_name);
#endif
  //------------------------------------------------------------------------------

  digitalWrite(RELAY_1, STATE_RELAY_1);
  digitalWrite(RELAY_2, STATE_RELAY_2);
  digitalWrite(RELAY_3, STATE_RELAY_3);
  digitalWrite(RELAY_4, STATE_RELAY_4);
  digitalWrite(RELAY_5, STATE_RELAY_5);
  digitalWrite(RELAY_6, STATE_RELAY_6);
  digitalWrite(RELAY_7, STATE_RELAY_7);
  digitalWrite(RELAY_8, STATE_RELAY_8);
  digitalWrite(RELAY_9, STATE_RELAY_9);
  digitalWrite(RELAY_10, STATE_RELAY_10);
  digitalWrite(RELAY_11, STATE_RELAY_11);
  digitalWrite(RELAY_12, STATE_RELAY_12);
  digitalWrite(RELAY_13, STATE_RELAY_13);
  digitalWrite(RELAY_14, STATE_RELAY_14);
  digitalWrite(RELAY_15, STATE_RELAY_15);
  digitalWrite(RELAY_16, STATE_RELAY_16);


  my_switch1.updateAndReportParam(ESP_RMAKER_DEF_POWER_NAME, STATE_RELAY_1);
  my_switch2.updateAndReportParam(ESP_RMAKER_DEF_POWER_NAME, STATE_RELAY_2);
  my_switch3.updateAndReportParam(ESP_RMAKER_DEF_POWER_NAME, STATE_RELAY_3);
  my_switch4.updateAndReportParam(ESP_RMAKER_DEF_POWER_NAME, STATE_RELAY_4);
  my_switch5.updateAndReportParam(ESP_RMAKER_DEF_POWER_NAME, STATE_RELAY_5);
  my_switch6.updateAndReportParam(ESP_RMAKER_DEF_POWER_NAME, STATE_RELAY_6);
  my_switch7.updateAndReportParam(ESP_RMAKER_DEF_POWER_NAME, STATE_RELAY_7);
  my_switch8.updateAndReportParam(ESP_RMAKER_DEF_POWER_NAME, STATE_RELAY_8);
  my_switch9.updateAndReportParam(ESP_RMAKER_DEF_POWER_NAME, STATE_RELAY_9);
  my_switch10.updateAndReportParam(ESP_RMAKER_DEF_POWER_NAME, STATE_RELAY_10);
  my_switch11.updateAndReportParam(ESP_RMAKER_DEF_POWER_NAME, STATE_RELAY_11);
  my_switch12.updateAndReportParam(ESP_RMAKER_DEF_POWER_NAME, STATE_RELAY_12);
  my_switch13.updateAndReportParam(ESP_RMAKER_DEF_POWER_NAME, STATE_RELAY_13);
  my_switch14.updateAndReportParam(ESP_RMAKER_DEF_POWER_NAME, STATE_RELAY_14);
  my_switch15.updateAndReportParam(ESP_RMAKER_DEF_POWER_NAME, STATE_RELAY_15);
  my_switch16.updateAndReportParam(ESP_RMAKER_DEF_POWER_NAME, STATE_RELAY_16);

  Serial.printf("Relay1 is %s \n", STATE_RELAY_1 ? "ON" : "OFF");
  Serial.printf("Relay2 is %s \n", STATE_RELAY_2 ? "ON" : "OFF");
  Serial.printf("Relay3 is %s \n", STATE_RELAY_3 ? "ON" : "OFF");
  Serial.printf("Relay4 is %s \n", STATE_RELAY_4 ? "ON" : "OFF");
  Serial.printf("Relay5 is %s \n", STATE_RELAY_5 ? "ON" : "OFF");
  Serial.printf("Relay6 is %s \n", STATE_RELAY_6 ? "ON" : "OFF");
  Serial.printf("Relay7 is %s \n", STATE_RELAY_7 ? "ON" : "OFF");
  Serial.printf("Relay8 is %s \n", STATE_RELAY_8 ? "ON" : "OFF");
  Serial.printf("Relay9 is %s \n", STATE_RELAY_9 ? "ON" : "OFF");
  Serial.printf("Relay10 is %s \n", STATE_RELAY_10 ? "ON" : "OFF");
  Serial.printf("Relay11 is %s \n", STATE_RELAY_11 ? "ON" : "OFF");
  Serial.printf("Relay12 is %s \n", STATE_RELAY_12 ? "ON" : "OFF");
  Serial.printf("Relay13 is %s \n", STATE_RELAY_13 ? "ON" : "OFF");
  Serial.printf("Relay14 is %s \n", STATE_RELAY_14 ? "ON" : "OFF");
  Serial.printf("Relay15 is %s \n", STATE_RELAY_15 ? "ON" : "OFF");
  Serial.printf("Relay16 is %s \n", STATE_RELAY_16 ? "ON" : "OFF");
  
}

/****************************************************************************************************
 * loop Function
*****************************************************************************************************/
void loop() {
  float mA = (.0001 * ACS.mA_AC());  // added .0001 to get millamps
  Serial.println(mA, 3);

  if (mA < .350) {
  //  digitalWrite(23, LOW); 
  digitalWrite(RELAY_16, LOW);  // digitalWrite(STATE_RELAY_16, LOW); // sets  pin 23 to off
  } else if (mA > .355) {
  //  digitalWrite(23, HIGH);
  digitalWrite(RELAY_16, HIGH);   //  digitalWrite(STATE_RELAY_16, HIGH)?
  
  }

  delay(1000);

  
  // Read GPIO0 (external button to reset device
  if (digitalRead(gpio_reset) == LOW) {  //Push button pressed
    Serial.printf("Reset Button Pressed!\n");
    // Key debounce handling
    delay(100);
    int startTime = millis();
    while (digitalRead(gpio_reset) == LOW) delay(50);
    int endTime = millis();
    //_______________________________________________________________________
    if ((endTime - startTime) > 10000) {
      // If key pressed for more than 10secs, reset all
      Serial.printf("Reset to factory.\n");
      RMakerFactoryReset(2);
    }
    //_______________________________________________________________________
    else if ((endTime - startTime) > 3000) {
      Serial.printf("Reset Wi-Fi.\n");
      // If key pressed for more than 3secs, but less than 10, reset Wi-Fi
      RMakerWiFiReset(2);
    }
    
  }
  //------------------------------------------------------------------------------
  delay(100);

  if (WiFi.status() != WL_CONNECTED) {
    //Serial.println("WiFi Not Connected");
    digitalWrite(WIFI_LED, LOW);
  } else {
    //Serial.println("WiFi Connected");
    digitalWrite(WIFI_LED, HIGH);
  }

}


/****************************************************************************************************
 * control_relay Function
*****************************************************************************************************/
void control_relay(int relay_no, int relay_pin, boolean &status) {
  status = !status;
  digitalWrite(relay_pin, status);
  
  String text = (status) ? "ON" : "OFF";
  Serial.println("Relay" + String(relay_no) + " is " + text);
}

Hello vicjs

I´v made a small code review.

In general - Arrays and structs are your friends.
Don't duplicate code in your sketch. Write code once - use it multiple times.

Have a nice day and enjoy coding in C++.

This probably isn't the issue but out of curiosity why in your void loops do you have the if and if else statement skip .005 mA?

void loop() {
  float mA = (.0001 * ACS.mA_AC());  // added .0001 to get millamps
  Serial.println(mA, 3);

  if (mA < .350) {
  //  digitalWrite(23, LOW); 
  digitalWrite(RELAY_16, LOW);  // digitalWrite(STATE_RELAY_16, LOW); // sets  pin 23 to off
  } else if (mA > .355) {
  //  digitalWrite(23, HIGH);
  digitalWrite(RELAY_16, HIGH);   //  digitalWrite(STATE_RELAY_16, HIGH)?
  
  }

I was fine tuning trigger levels just before I posted the code and mistyped the number.
Thanks for catching it.

After reviewing other poster issues I noticed they were using much more efficient methods for coding. I did a lot of typing for nothing. Since I don't have time right now to clean up my code and since it is basically working I will leave it alone. Also I need to learn a lot more about the syntax of the better coding practices. Unfortunately coding is not innately self evident and for me it is a steep learning curve..
Just have to fix this issue so my family using Alexa via Rainmaker can water the lawn while I am away!

Hi, I was wondering if you could provide some suggestions, and" I'm not interested" would be a very acceptable reply.
I have tried a lot of fixes that did not work. Would it be reasonable to change the Device Name
char device16[] = "Rainbird"; to "Irrigantion on" or "Irrgation off" based on the state of the input pin, perhaps using a switch case structure? I don't care if the actual app switch works or not. Changing the name of the switch if fine.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.