OTA updates not working

After searching for a while and only finding a 4 paragraph explanation on how to use OTA updates, I tried to do an OTA update on multiple devices and none of them have worked.

I have a few questions I’d like help answering.

  1. How does the device receive the update? (I read a post from ~2 years ago that said it was sent via SMS?)
  2. Does the device need to be powered on for the OTA update? i.e. My application puts the Dash into Deep Sleep and only wakes up once every 5 minutes for about 15 seconds to get readings from sensors.
  3. Is there a certain signal strength needed for the Dash to receive the update?
  4. Do OTA updates incur data charges?
  5. Is there a way to track OTA update history via the Dashboard?
  6. What version of the firmware is best for OTA updates? (Some are running 0.9.14 and others on 0.10.3)
  7. When the reset button is pressed, does the Dash disconnect from the Cloud?

Here is what I have tried so far:
My original code was using a VL53L0X sensor from Adafruit. This device would come on and detect if there was something in front of it and transmitting that to the cloud. After updating the code, I wanted to try an OTA update. I followed the instructions for doing the OTA update and got this message from the Arduino IDE console:

Pushing firmware to device ID #(my 6 digit device ID)
Uploading
Firmware ID #(my 4 digit firmware ID) created
Executing push to device
OTA update sent
Update Complete

This is the same message I get every time I try and push an update via OTA. My most recent effort to reduce the number of variables is by opening and activating a new Dash and loading the most basic program on it.

void setup() {
  HologramCloud.setRGB(0xFFC0CB); // Pink
  HologramCloud.connect();
}

void loop() {
  if (HologramCloud.isConnected()) { HologramCloud.setRGB(0xFF0000); } // Red
  // if (HologramCloud.isConnected()) { HologramCloud.setRGB(0x00FF00); } // Green
  // if (HologramCloud.isConnected()) { HologramCloud.setRGB(0x0000FF); } // Blue
}

I am simply loading this code onto a Dash with an if statement uncommented in the loop. When I do an upload via USB, then the code works. The RGB LED is pink until it connects after which it is Red in this case. After I ensure that the code is working, I comment out the line and uncomment another color. This time, I push the update OTA. It gives me the same message in the Arduino IDE console.

I have noticed that (sometimes not always) when I still have the Dash plugged in via USB that it will make the disconnecting sound in Windows and then the reconnecting sound even though I have not unplugged it. There is no change in the color of the LED even after this. I assume this means that some sort of update has reached the device and was reset.

I have also tried removing the USB cable from the Dash allowing it to be powered off completely. Then I insert a battery and allow it to boot. When it boots, there has not been any change. (OTA update did not work).

I have also tried loading the dash_repl_basic example on the device to make sure that everything was kosher on the Dash. It connected to the cloud, it could read information about the battery, it could send messages to the cloud, etc. I have also tried giving the Dash an SMS number in hopes that the post from 2 years ago was correct about sending update notifications to the device via SMS. That did not work either.

Any help or further guidance would be great. @ChrisGammell

Hi Kevin,
In answer to your questions:

  1. OTA is triggered via SMS but the download of the firmware happens via HTTP
  2. It doesn’t have to be powered on exactly when you send it as the SMS will queue up on the cellular network until the modem connects
  3. It needs to at least be able to establish a data connection
  4. Yes
  5. Not at the moment, but it’s something we’re considering for the future
  6. Use the latest firmware. It’s much more reliable
  7. On the latest Dash, the reset button only touches the user module so I think the modem will stay connected but will need to double check on that

As far as your code, can you try sticking a delay(10); call in the loop() function? I just want to rule out that it would be looping too fast to allow other tasks to process.

Hey Reuben,
Thanks for the quick reply!

So if the update is triggered via SMS, does that mean that I need an SMS number for each device that I would like to do OTA updates for?

I have added the delay(10); into the loop() function and there is no change. I tried sending the update while it was plugged into USB as well as on battery only. I sent both of these updates after a power cycle.

When it was on battery and I had sent the update, a short time later the LED flashed to pink and back to the same connected color as before

No need to buy a phone number. It uses an internal connection we have to the cell carriers to send down the SMS to the SIM’s non-geographic phone number.

We’ll take a look at our system and make sure everything is functioning correctly on your account. Will try to reply back here soon.

1 Like

Hi, it looks like a recent deployment did break OTA. I’m sorry about that. We’ll get some engineers working to fix that right away

1 Like

Whew! Glad to hear that I’m not crazy. Thanks for looking into this so quickly

Actually it looks like it should be fixed now. Just an infrastructure setting got corrupted. Can you give it another try and see if it works?

Yes it is working now. The system LED on the backend of the device turned on when it was receiving a new update and as soon as it was applied, the LED changed colors. It is working great now!

Ok that’s great. Glad to hear. Sorry again for the trouble. We’ve fixed this in our deployment procedure so it shouldn’t happen again.
I’m going to go ahead and close this topic since the issue is resolved.

2 Likes