0.9.0 connection/stability issue with mesh networks?

Is there a known issue with 0.9.0 firmware that would force me to reset the gateway Argon to get my Xenons back online after flashing code to a Xenon? It doesn’t happen every time, but quite frequently my Xenons will show as offline, unable to flash or get variables. The device itself will be breathing cyan. Sometimes restarting the Xenon will help but typically I have to restart the Argon to get them to come back online. In rare cases I’ll also have to reset the Xenon. What’s annoying is that this happens for other devices that aren’t being flashed, that have run without issue for days. So now every time I flash new firmware I have to check my other 2-4 Xenons on the mesh network to make sure they all remain online. I didn’t have this problem with rc27.

One other thing, may be related because restarting the Argon fixes this as well. My Xenons will run for 5-30min and then reset themselves. This will go on for hours, until I notice it and restart the Argon. At that point everything starts working fine again and they’ll stay connected for long periods of time.

What kind of code are you running on the gateway and your nodes?

I’m seeing similar issues with a Boron LTE and 8 Xenon Nodes.

If I flash or reset the Boron then the Xenons most of the time will not respond to the Borons request even though all devices are breathing Cyan.

I have found 2 ways to get the Xenons to reconnect.

#1. Disconnect the Boron until all Xenons start flashing green, which takes 15 mins usually. Then I Plug the Boron into power and all Xenons will reconnect just fine.

#2. I have to manually reset the Xenons to get them to reconnect.

I’m running the Marco Polo test code.

1 Like

After this started happening I stripped my gateway code down to the bare minimum, essentially a publish relay so my IFTTT trigger will send me an email on behalf of a Xenon. There is nothing connected to this device besides it’s antenna and USB power.

#include "Particle.h"

// This strips the path from the filename
#define __FILENAME__ (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__)


//Device info/Version variables.
const char version[] = "ArgonRelay_v1.0.1";
char deviceInfo[120];  //adjust size as required
int messagesSent = 0;

void setup() {
    snprintf(deviceInfo, sizeof(deviceInfo)
        ,"App: %s, Date: %s, Time: %s, Sysver: %s"
        ,__FILENAME__
        ,__DATE__
        ,__TIME__
        ,(const char*)System.version()  // cast required for String
    );

    Particle.variable("version", version);
    Particle.variable("deviceInfo", deviceInfo);
    Particle.variable("messagesSent", messagesSent);
    Mesh.subscribe("relayAlert", relayAlert);
    pinMode(D7, OUTPUT);
}

void relayAlert(const char *name, const char *message) {
    char data[255];
    snprintf(data, arraySize(data)-1, message);
    Particle.publish("email", data, 60, PRIVATE);
    messagesSent++;
}

        
void loop() {

    digitalWrite(D7, HIGH);
    processDelay(500);
    digitalWrite(D7, LOW);
    processDelay(3000);
}

void processDelay(unsigned long delayTime)
{
    unsigned long start = millis();
    while (millis()-start < delayTime) {
        Particle.process();
    }
}

The Xenon’s all have an i2c temp/humidity sensor plus either USB power or a Lipo battery. The code is much longer but basically gathers this data, creates some averages and periodically publishes it. Rather than post and scrutinize it, I’ll try putting an empty program on a few and see if they survive these odd semi-outages.

1 Like