Code:
/* Includes ------------------------------------------------------------------*/
#include "NCD2Relay/NCD2Relay.h"
NCD2Relay relayController;
SYSTEM_MODE(AUTOMATIC);
int triggerRelay(String command);
void klaxonHandler(const char *event, const char *data);
bool tripped[6];
int debugTrips[6];
int minTrips = 5;
/* This function is called once at start up ----------------------------------*/
void setup()
{
Particle.function("controlRelay", triggerRelay);
Particle.subscribe("klaxon", klaxonHandler);
Serial.begin(115200);
relayController.setAddress(0, 0, 0);
}
/* This function loops forever --------------------------------------------*/
void loop()
{
//
}
int triggerRelay(String command) {
if (command.equalsIgnoreCase("turnonallrelays")) {
relayController.turnOnAllRelays();
return 1;
}
if (command.equalsIgnoreCase("turnoffallrelays")) {
relayController.turnOffAllRelays();
return 1;
}
if (command.startsWith("setBankStatus:")) {
int status = command.substring(14).toInt();
if (status < 0 || status > 255) {
return 0;
}
Serial.print("Setting bank status to: ");
Serial.println(status);
relayController.setBankStatus(status);
Serial.println("done");
return 1;
}
//Relay Specific Command
int relayNumber = command.substring(0, 1).toInt();
Serial.print("relayNumber: ");
Serial.println(relayNumber);
String relayCommand = command.substring(1);
Serial.print("relayCommand:");
Serial.print(relayCommand);
Serial.println(".");
if (relayCommand.equalsIgnoreCase("on")) {
Serial.println("Turning on relay");
relayController.turnOnRelay(relayNumber);
Serial.println("returning");
return 1;
}
if (relayCommand.equalsIgnoreCase("off")) {
relayController.turnOffRelay(relayNumber);
return 1;
}
if (relayCommand.equalsIgnoreCase("toggle")) {
relayController.toggleRelay(relayNumber);
return 1;
}
if (relayCommand.equalsIgnoreCase("momentary")) {
relayController.turnOnRelay(relayNumber);
delay(300);
relayController.turnOffRelay(relayNumber);
return 1;
}
return 0;
}
void klaxonHandler(const char *event, const char *data) {
if (event == "klaxon" && data == "on") {
//triggerRelay("turnonallrelays");
relayController.turnOnAllRelays();
} else if (event == "klaxon" && data == "off") {
//triggerRelay("turnoffallrelays");
relayController.turnOffAllRelays();
}
}
So for some reason this won’t actually trigger the relays… Could it be that an actual device has to issue the command? I am actually publishing an event to cloud via a node app the I’ve been working on for the past couple of days. I know it’s hitting the cloud because I see in the logs.
I think this has something to do with an error I’ve made in the subscription handler…
Cheers,