Skip to content
  • MySensors
  • OpenHardware.io
  • Categories
  • Recent
  • Tags
  • Popular
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Brand Logo
  1. Home
  2. General Discussion
  3. Over the air updates

Over the air updates

Scheduled Pinned Locked Moved General Discussion
87 Posts 15 Posters 50.5k Views 12 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • DammeD Damme

    I deleted my last message because I though I made a big mistake..

    I've been working on a SD <-> OTA loader node, and got most of if working but got stuck on the last piece which is communication.. (i'll release it then I'm finished Ive made a small change in myotabootloader, add on line ~156 msg.destination = OTAGATEWAY; to configure custom ota address)

    I cant figure the following out:
    Just ignore contents of packages. not relevant.

    • Node: (Ota<->sd loader)

      read: 34-0-254 s=255,c=4,t=0,pt=6,l=4:FFFFFFFF
      send: 254-254-0-34 s=255,c=4,t=1,pt=8,l=4,st=ok:0100020000304200
      
    • GW:
      0;0;3;0;9;read: 34-34-0 s=255,c=3,t=7,pt=0,l=0:
      0;0;3;0;9;send: 0-0-34-34 s=255,c=3,t=8,pt=1,l=1,st=ok:0
      0;0;3;0;9;read: 34-34-0 s=255,c=3,t=7,pt=0,l=0:
      0;0;3;0;9;send: 0-0-34-34 s=255,c=3,t=8,pt=1,l=1,st=ok:0
      0;0;3;0;9;read: 34-34-254 s=255,c=4,t=0,pt=6,l=4:FFFFFFFF
      0;0;3;0;9;send: 34-0-254-254 s=255,c=4,t=0,pt=6,l=4,st=ok:FFFFFFFF
      0;0;3;0;9;read: 254-254-34 s=255,c=4,t=1,pt=6,l=8:0100020000304200
      0;0;3;0;9;send: 254-0-0-34 s=255,c=4,t=1,pt=6,l=8,st=fail:0100020000304200

    • OTA bootloader:
      Go
      <- 34,34,0,2,3,7,255,
      <- 34,34,0,2,3,7,255,
      -> 0,0,34,10,35,8,255,0,
      <- 34,34,254,34,196,0,255,255,255,255,255,

    What am I missing? package from 254 to 34 wont get delivered.
    I've also noticed that then 254 tries to send, it wont receive the next transmitted message from OTAbootloader. the next thereafter is received.

    T Offline
    T Offline
    ToSa
    Code Contributor
    wrote on last edited by
    #60

    @Damme
    I need to better understand the setup to think about what's going on. My take from the above:

    You have three nodes:

    • Gateway (address 0)
    • SD OTA Loader Node ?!? (address 254)
    • Sensor Node (address 34)

    Is that right?

    DammeD 1 Reply Last reply
    0
    • T ToSa

      @Damme
      I need to better understand the setup to think about what's going on. My take from the above:

      You have three nodes:

      • Gateway (address 0)
      • SD OTA Loader Node ?!? (address 254)
      • Sensor Node (address 34)

      Is that right?

      DammeD Offline
      DammeD Offline
      Damme
      Code Contributor
      wrote on last edited by
      #61

      @ToSa Yes, And I think I figured it out.. I by mistake changed BROADCAST_ADDRESS to GATEWAY_ADDRESS in the bootloader then I was playing around. Testing the correct version now.. :)

      T 1 Reply Last reply
      0
      • DammeD Damme

        @ToSa Yes, And I think I figured it out.. I by mistake changed BROADCAST_ADDRESS to GATEWAY_ADDRESS in the bootloader then I was playing around. Testing the correct version now.. :)

        T Offline
        T Offline
        ToSa
        Code Contributor
        wrote on last edited by ToSa
        #62

        @Damme
        interesting setup :+1:
        to make it work with non-static addressed nodes you should probably keep the destination set to GATEWAY_ADDRESS for the REQUEST_ID call and only change afterwards.

        Never mind - looking at the line number you mentioned that's probably what you did :)

        DammeD 1 Reply Last reply
        0
        • T ToSa

          @Damme
          interesting setup :+1:
          to make it work with non-static addressed nodes you should probably keep the destination set to GATEWAY_ADDRESS for the REQUEST_ID call and only change afterwards.

          Never mind - looking at the line number you mentioned that's probably what you did :)

          DammeD Offline
          DammeD Offline
          Damme
          Code Contributor
          wrote on last edited by Damme
          #63

          @ToSa Now I remember why I changed some things in there. (broadcast to gateway)

          From the beginning I had problem getting it to talk with the GW. It only sends out
          <- 255,255,255,2,3,7,255, and gets no response, The GW tries to send but fails. (wierd..) (I dont have any relay nodes)

          This is with no modifications at all.

          0;0;3;0;9;read: 255-255-255 s=255,c=3,t=7,pt=0,l=0:
          0;0;3;0;9;send: 0-0-255-255 s=255,c=3,t=8,pt=1,l=1,st=fail:0
          0;0;3;0;9;read: 255-255-255 s=255,c=3,t=7,pt=0,l=0:
          0;0;3;0;9;send: 0-0-255-255 s=255,c=3,t=8,pt=1,l=1,st=fail:0
          other packages send out works just fine.. (To other nodes)

          and the OTA bootloader can receive other packages
          Go
          <- 255,255,255,2,3,7,255,
          -> 23,23,0,42,225,1,11,205,204,90,66,1,
          <- 255,255,255,2,3,7,255,
          <- 255,255,255,2,3,7,255,
          <- 255,255,255,2,3,7,255,

          (from a temp / hum node)

          Any ideas how to fix this?

          1 Reply Last reply
          0
          • T ToSa

            Really really nice project !!!

            I worked on a similar setup about two years ago with different RF modules but didn't finish. Now I was about to restart and realized that the nRF24 modules are waaaaay less expensive. I just started adjusting the old code for the nRF24 modules I ordered when I found this great project. The raspberry PI for me is the way to go as I own two sitting almost idle and don't own a Vera.

            The one feature I'm missing after reading through the majority of the available documentation is over the air updates of the sensor node software. As this is one of the features I completed for my old design, I'll go ahead and try to port the bootloader and the RPi based state-less firmware server to work with the protocol and routing implemented here... if successful I'll post the results.

            If you worked already on over the air updates or you know somebody who did, please let me know and I'll focus my efforts on something else :-)

            Tobias

            DammeD Offline
            DammeD Offline
            Damme
            Code Contributor
            wrote on last edited by Damme
            #64

            @ToSa I finally figured out why my OTA bootloader didn't read any answers from my GW (Both on I_FIND_PARENT and I_ID_REQUEST) - The answers came to quick! First I tried hardcode a delay 125ms on the GW and it worked, so I changed the code on send write to the following and now all messages arrive. Been testing it for a couple of reboots now. I'm using 5v (at 3.3v) and 16MHz
            edit; noticed it misses packages sometimes now but not close to 100% like before, more like 5% now. I'llinvestigate futher then I'm trying to upload data.

              static uint8_t sendAndWait(uint8_t reqType, uint8_t resType) {
              	msg.type = reqType;
              	for (uint8_t i = 0; i < 10; i++) {
              		sendWrite(msg);
              		for (uint8_t j = 0; j < 20; j++) {
              			for (uint8_t j = 0; j < 100; j++) {
              				uint8_t pipe;
              				boolean avail = available(&pipe);
              				wdt_reset();
              				if (avail && pipe<=6) {
              					read(rmsg.array,pipe);
              					if(!(mGetVersion(rmsg) == PROTOCOL_VERSION))
              						continue;
              					if (rmsg.destination == nc.nodeId) {
              						if (mGetCommand(rmsg) == C_INTERNAL) {
              							if (rmsg.type == I_FIND_PARENT_RESPONSE) {
              								if (rmsg.data[0] < nc.distance - 1) {
              									nc.distance = rmsg.data[0] + 1;
              									nc.parentNodeId = rmsg.sender;
              									eeprom_write_byte((uint8_t*)EEPROM_PARENT_NODE_ID_ADDRESS, nc.parentNodeId);
              									eeprom_write_byte((uint8_t*)EEPROM_DISTANCE_ADDRESS, nc.distance);
              								}
              							}
              						}
              						if ((mGetCommand(rmsg) == mGetCommand(msg)) && (rmsg.type == resType))
              							return 1;
              					}
              				}
              				delaym(1);
              			}
              		}
              	}
              	return 0;
              }
            
            D 1 Reply Last reply
            0
            • DammeD Offline
              DammeD Offline
              Damme
              Code Contributor
              wrote on last edited by Damme
              #65

              I had to put my project in the trash bin.. There is not enough RAM in the atmega328 to fit mysensors and SD-lib :) Tried 3 different versions..Too bad..! I could only transmit one package before SRAM got overrunned.

              YveauxY Z T 3 Replies Last reply
              0
              • DammeD Damme

                I had to put my project in the trash bin.. There is not enough RAM in the atmega328 to fit mysensors and SD-lib :) Tried 3 different versions..Too bad..! I could only transmit one package before SRAM got overrunned.

                YveauxY Offline
                YveauxY Offline
                Yveaux
                Mod
                wrote on last edited by
                #66

                @Damme Now do you get why I abandoned the MQTT implementation on the ATMega itself? ;-)

                http://yveaux.blogspot.nl

                1 Reply Last reply
                0
                • DammeD Damme

                  I had to put my project in the trash bin.. There is not enough RAM in the atmega328 to fit mysensors and SD-lib :) Tried 3 different versions..Too bad..! I could only transmit one package before SRAM got overrunned.

                  Z Offline
                  Z Offline
                  Zeph
                  Hero Member
                  wrote on last edited by Zeph
                  #67

                  @Damme said:

                  I had to put my project in the trash bin.. There is not enough RAM in the atmega328 to fit mysensors and SD-lib :) Tried 3 different versions..Too bad..! I could only transmit one package before SRAM got overrunned.

                  If you want to stay with the AVR:

                  ATMega1284 based: http://lowpowerlab.com/moteino/#whatisitMEGA $20+shipping. This can add a RF69* radio, but you could instead (or also) attach a nRF24L01+

                  ATMega2560 based: http://www.ebay.com/itm/121391548557 $15 shipped This has even more lines broken out than the Arduino Mega2560. (If you don't mind the larger form, Arduino Mega2560 clones start under $14 shipped).

                  Or you can switch to an embedded ARM system. Teensy 3.1 for $17+ship. STM32F103 board on eBay for $7. DUE clone on eBay for $18. STM Nucleo from distributors for $11+ship (eMed programmed).

                  And of course you can use the Raspberry Pi or BeagleBone Black with a faster but power hungry ARM running Linux.

                  1 Reply Last reply
                  0
                  • DammeD Damme

                    I had to put my project in the trash bin.. There is not enough RAM in the atmega328 to fit mysensors and SD-lib :) Tried 3 different versions..Too bad..! I could only transmit one package before SRAM got overrunned.

                    T Offline
                    T Offline
                    ToSa
                    Code Contributor
                    wrote on last edited by
                    #68

                    @Damme said:

                    I had to put my project in the trash bin.. There is not enough RAM in the atmega328 to fit mysensors and SD-lib :) Tried 3 different versions..Too bad..! I could only transmit one package before SRAM got overrunned.

                    Did you try not using MySensors but the reduced nRF24 driver version I used for the bootloader itself? If the node does not need to do routing and is expected to only respond to one or two types of messages, that might be an option and is definitely smaller...

                    1 Reply Last reply
                    0
                    • greglG Offline
                      greglG Offline
                      gregl
                      Hero Member
                      wrote on last edited by
                      #69

                      Hi @ToSa

                      Do you know if your OTA Bootloader uses more flash mem on the atmega328 vs the Optiboot bootloader?

                      I have a sketch which needs Optiboot to fit and really hoping i can one day use your cool OTA stuff.

                      Looking at your github it seems MyOtaBootloader.hex is 9.36k whereas Optiboot v5,0a the optiboot_atmega328.hex is 1.418k ( but there is also a optiboot_atmega328.lst file at 19.778k - I dont know enough to know if this is part of the bootloader or if its just the source???)

                      Cheers,
                      Greg

                      1 Reply Last reply
                      0
                      • Z Offline
                        Z Offline
                        Zeph
                        Hero Member
                        wrote on last edited by
                        #70

                        OptiBoot fits in 1/2 KiB (the binary on-chip size, not the hex file).
                        The OTA Bootloader is obviously larger. If you are using close to 31.5KiB on an ATMega328p, it won't fit with any bootloader larger than OptiBoot.
                        .
                        Make sure you use the latest compiler - 1.5.7 seems to squeeze harder (smaller binary), and I presume 1.0.6 (which has also been upgraded to a newer compiler) will also do so.

                        How big does the compiler say your sketch is, at the end of a compile?

                        1 Reply Last reply
                        0
                        • greglG Offline
                          greglG Offline
                          gregl
                          Hero Member
                          wrote on last edited by
                          #71

                          @Zeph said:

                          use the latest compiler - 1.5.7 seems to squeeze harder (smaller binary), and I presume 1.0.6 (which has also been upgraded to a newer compiler) will also do so.

                          How big does the compiler say your sketch is, at the end of a compile?

                          I'll check when i get home tonight.

                          Very interesting about the new compiler. I'm pretty sure im using 1.0.5-r2, and i've recently begun using Atmel studio with Visual Micro addon - just soooo much better when dealing with long sketches!!!

                          Cheers,
                          Greg

                          T 1 Reply Last reply
                          0
                          • greglG gregl

                            @Zeph said:

                            use the latest compiler - 1.5.7 seems to squeeze harder (smaller binary), and I presume 1.0.6 (which has also been upgraded to a newer compiler) will also do so.

                            How big does the compiler say your sketch is, at the end of a compile?

                            I'll check when i get home tonight.

                            Very interesting about the new compiler. I'm pretty sure im using 1.0.5-r2, and i've recently begun using Atmel studio with Visual Micro addon - just soooo much better when dealing with long sketches!!!

                            Cheers,
                            Greg

                            T Offline
                            T Offline
                            ToSa
                            Code Contributor
                            wrote on last edited by
                            #72

                            @gregl the fuses determine how much space is reserved for the bootloader. I don't have the datasheet at hand but I think it varies from .5k to 4k. Optiboot is one of the smallest out there and the OTA bootloader consumes the full space because it needt to includs the (shrinked) wireless driver.

                            1 Reply Last reply
                            0
                            • Z Offline
                              Z Offline
                              Zeph
                              Hero Member
                              wrote on last edited by Zeph
                              #73

                              I think the OTA bootloader which does not rely on any extra memory is a great option!

                              And I think the option of having external flash may work out well too. Sending an image to be written to SPI flash might not expand the application code as much (it already has the library). Then the bootloader just has to copy from SPI to application flash. I'm thinking that might make for a smaller total footprint, since there would be no need to fit 2 nRF libraries in the 32KiB flash - a trimmed down nRF library in the boot section plus the full nRF library in application section.

                              Of course, if the application gets hosed, you would not be able to do OTA bootloading and would have to physically access the node to recover, but if it's a matter of fitting or not fitting into FLASH, that might be a risk one is willing to take.

                              marceltrapmanM 1 Reply Last reply
                              0
                              • Z Zeph

                                I think the OTA bootloader which does not rely on any extra memory is a great option!

                                And I think the option of having external flash may work out well too. Sending an image to be written to SPI flash might not expand the application code as much (it already has the library). Then the bootloader just has to copy from SPI to application flash. I'm thinking that might make for a smaller total footprint, since there would be no need to fit 2 nRF libraries in the 32KiB flash - a trimmed down nRF library in the boot section plus the full nRF library in application section.

                                Of course, if the application gets hosed, you would not be able to do OTA bootloading and would have to physically access the node to recover, but if it's a matter of fitting or not fitting into FLASH, that might be a risk one is willing to take.

                                marceltrapmanM Offline
                                marceltrapmanM Offline
                                marceltrapman
                                Mod
                                wrote on last edited by
                                #74

                                @Zeph said:

                                Sending an image to be written to SPI flash might not expand the application code as much (it already has the library).

                                Because I am sure that Flash memory will come in handy sooner or later I have added the Winbond W25X40 to the first version of my board already :).

                                Fulltime Servoy Developer
                                Parttime Moderator MySensors board

                                I use Domoticz as controller for Z-Wave and MySensors (previously Indigo and OpenHAB).
                                I have a FABtotum to print cases.

                                1 Reply Last reply
                                0
                                • tekkaT Offline
                                  tekkaT Offline
                                  tekka
                                  Admin
                                  wrote on last edited by
                                  #75

                                  just managed to optimize the OTA bootloader to under 2k - 2k more for sketches with OTA.

                                  T 1 Reply Last reply
                                  0
                                  • tekkaT tekka

                                    just managed to optimize the OTA bootloader to under 2k - 2k more for sketches with OTA.

                                    T Offline
                                    T Offline
                                    ToSa
                                    Code Contributor
                                    wrote on last edited by
                                    #76

                                    @tekka
                                    That sounds great! Can you post your code (or share a pull request)? This would either allow us to free up the remaining space or to add encryption :)
                                    The only neck-breaker would be if any of the size reduction increases the risk for a bricked node that needs manual intervention (e.g. reset / power cycle etc.).

                                    1 Reply Last reply
                                    1
                                    • tbowmoT Offline
                                      tbowmoT Offline
                                      tbowmo
                                      Admin
                                      wrote on last edited by
                                      #77

                                      what is the current status of the OTA firmware updates? Is external flash necessary at all? Is someone working on it?

                                      Right now I am trying to get DualOptiboot from lowpowerlabs.com to work with my board, and an external flash / eeprom. But was wondering if it would be used at all.

                                      Then when I got the bootloader working, I need to test firmware updates, but the road is still long and windy to get there (at the moment, only have 1 hour here, and there, to work on the hardware)

                                      1 Reply Last reply
                                      1
                                      • tekkaT Offline
                                        tekkaT Offline
                                        tekka
                                        Admin
                                        wrote on last edited by
                                        #78

                                        @tbowmo
                                        Did some work on the OTA bootloader: combined optiboot (for uploads via IDE / avrdude) + OTA bootloader with some major modifications. Current version is stable and works for regular OTA updates :)

                                        I will post the source once I find some spare time to clean and comment it.

                                        1 Reply Last reply
                                        3
                                        • klimK Offline
                                          klimK Offline
                                          klim
                                          wrote on last edited by
                                          #79

                                          hi, is your work on ota based on internal o external flash?

                                          1 Reply Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          20

                                          Online

                                          11.7k

                                          Users

                                          11.2k

                                          Topics

                                          113.1k

                                          Posts


                                          Copyright 2025 TBD   |   Forum Guidelines   |   Privacy Policy   |   Terms of Service
                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • MySensors
                                          • OpenHardware.io
                                          • Categories
                                          • Recent
                                          • Tags
                                          • Popular