After correcting the issues found by @syrinxtech, I re-started the test. And after several hours all 6 devices started going offline/online. A called a function about 8-10 times during the day. I called a variable a couple of times only.
I reboot my router mid-test for a different reason, not sure it could have influenced the test.
Here is the latest version. Tomorrow Iāll start to cut some parts to see whatās the core issue.
// FIRMWARE VERSION **********************
#define FIRMWARE_VERSION "cloud_test_3";
const int NUM_SCHEDULES = 25;
const int SCHEDULE_LENGTH = 27;
// FUNCTION DECLARATIONS ********************************
int transmit(const char * command);
int setSchedule(const char * command);
int setVariable(const char * command);
int callTest(const char * command);
// Variables
char scheduleString[NUM_SCHEDULES * SCHEDULE_LENGTH];
char strcountTcpUsage[20];
char statusVariables[] = FIRMWARE_VERSION;
char networkVariables[200];
char lastSchedule[100]; //schedule + time
char lastTransmit[25];
char locationVar[200];
char lastLostSubscription[26];
IPAddress myLocalIp;
const char* myPublicIP;
const char* ssid;
char rssi[10];
char freeMemory[10];
char bufferPublish[255];
const char* serialName;
unsigned long previousMillis;
unsigned long cycleTimer_ms;
void setup() {
Particle.function("transmit", transmit);
Particle.function("setschedule", setSchedule);
Particle.function("setvariable", setVariable);
Particle.function("calltest", callTest);
// Exposed Variables - max 20 (max name length is 12 char)
Particle.variable("status", statusVariables);
Particle.variable("network", networkVariables);
Particle.variable("schedulelist", scheduleString);
Particle.variable("lastschedule", lastSchedule);
Particle.variable("lastLostSubs", lastLostSubscription);
Particle.variable("lasttransmit", lastTransmit);
Particle.variable("location", locationVar);
Particle.variable("countTcpCall", strcountTcpUsage);
// Subscriptions
Particle.subscribe("particle/", handler); // to handle Spartk web responses, like the Public IP
updateWiFiInfo();
}
void loop() {
cycleTimer_ms = millis() - previousMillis;
if(millis() - previousMillis > 250){
snprintf(bufferPublish, sizeof(bufferPublish), "loop_delay = %dms, free_memory = %d", cycleTimer_ms, System.freeMemory());
Particle.publish("debug/loop_delay", bufferPublish, 60, PRIVATE );
}
previousMillis = millis();
}
int transmit(const char * command){
Particle.publish("debug/transmit", command, 60, PRIVATE );
return 1;
}
int setSchedule(const char * command){
return 1;
}
int setVariable(const char * command){
updateWiFiInfo();
return 1;
}
int callTest(const char * command){
if(strncmp(command,"reset",5) == 0){
System.reset();
}
else if(strncmp(command,"rssi",4) == 0){
snprintf (bufferPublish, sizeof(bufferPublish), "rssi = %d", WiFi.RSSI());
Particle.publish("debug/rssi", bufferPublish, 60, PRIVATE );
}
else if(strncmp(command,"memory",6) == 0){
snprintf (bufferPublish, sizeof(bufferPublish), "free memory = %d", System.freeMemory());
Particle.publish("debug/free_memory", bufferPublish , 60, PRIVATE );
}
else if(strncmp(command,"ssid",4) == 0){
Particle.publish("debug/ssid", ssid, 60, PRIVATE );
}
return 1;
}
void updateWiFiInfo(){
snprintf (rssi, sizeof(rssi), "%d", WiFi.RSSI());
ssid = WiFi.SSID();
myLocalIp = WiFi.localIP();
if (Particle.connected()){
Particle.publish("particle/device/ip");
Particle.publish("particle/device/name");
}
}
void handler(const char *topic, const char *data) {
//Spark.publish("received " + String(topic) + ": " + String(data));
if(strncmp (topic,"particle/device/ip",18) == 0){
myPublicIP = data;
}
else if(strncmp (topic,"particle/device/name",20) == 0){
serialName = data;
}
}