• Categories
    • Recent
    • Tags
    • Popular
    • Register
    • Login

    OTA firmware update with external MQTT broker

    Scheduled Pinned Locked Moved General Discussion
    46 Posts 6 Posters 31.6k Views 4 Watching
    Loading More Posts
    • 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.
    • Y Offline
      yd
      last edited by yd

      First of all, Thank you for your all effort. This is nice and easy mysensors controller!

      Nowadays I'm trying to use OTA with mysensors.
      OTA works with serial gateway with MYSController but doesn't work with MyController with ESP8266 MQTT gateway.
      Probably I didn't know how to use OTA properly with MyController.

      Here is what I have been doing.

      1. Add firmware with Types and Version on Utilities => Firmware
      2. Select firmware from Resources => Node => detail => edit .

      Node run every 15minutes but nothing happen after 1hr later.
      No log at all..

      Here is my configuration

      Mysensors : 2.0.0

      Gateway :
      ESP8266 Devkit V3 MQTT Gateway
      Node :
      MySBootLoader : 1.1
      Using Smartsleep on Battery powered Arduino pro mini

      mosquitto MQTT on same server with myController

      Thank you.

      jkandasaJ 1 Reply Last reply Reply Quote 0
      • jkandasaJ Offline
        jkandasa @yd
        last edited by

        @yd If your MQTT gateway have the fix for MQTT it will work properly.

        1 Reply Last reply Reply Quote 0
        • Y Offline
          yd
          last edited by yd

          @jkandasa Hi Jkandasa, Thank you for your reply!
          I have been working on this last couple of days and check what's different between MYSController and MYController.
          First, I have to set battery powered node on MYSController otherwise doesn't work either.
          However MYController can update firmware successfully when node is rebooted.
          I did send reboot command but seems not working properly.
          I think there is some different between normal node and battery powered node. ( Probably buffered in controller for battery powered node)
          My node can be shown on MYScontroller as battery powered node..

          Now I'm loading new firmware with wait(300) before/after smartsleep().

          Can you point what I'm missing please?

          Thank you.

          1 Reply Last reply Reply Quote 0
          • Y Offline
            yd
            last edited by

            @jkandasa I upload new firmware with wait(300) before/after smartsleep() but nothing happen.
            From following article, MYSController does something for battery powered node.

            https://forum.mysensors.org/topic/1563/cannot-remotely-reboot-a-node/2

            1 Reply Last reply Reply Quote 0
            • Y Offline
              yd
              last edited by

              Is there any way to reboot battery powered node when I need?
              I did try to use rule but seems not triggered properly.
              I think if I can reboot node after load new firmware, it will work for me.

              Thank you in advance.

              jkandasaJ 1 Reply Last reply Reply Quote 0
              • jkandasaJ Offline
                jkandasa @yd
                last edited by

                @yd I forget to mention a thing. You have to map your firmware with your node. If there is a reboot, your node will check with controller this is my firmware. Controller will respond as we have new firmware use this, Then node will request each block. This is how firmware update works. So you have to map your frimware with your node on MyController node page.

                1 Reply Last reply Reply Quote 1
                • Y Offline
                  yd
                  last edited by

                  @jkandasa Thanks. Finally I've solved the issue but not in MyController.
                  You are right. I did map new firmware and push reset button then it works however MYSController behavior is a little bit different for battery powered node.

                  When I look into smartsleep(), it send heartbeat() before going to sleep.
                  I guess MYSController check firmware version between MYSController and node then if it's different, it send reboot command automatically. Then node restart and process firmware upgrade. So firmware upgrade works well with battery powered node.
                  If you add this function to MyController, it will be great.

                  Thanks.

                  jkandasaJ 1 Reply Last reply Reply Quote 1
                  • jkandasaJ Offline
                    jkandasa @yd
                    last edited by

                    @yd Sure, I will add this. Kindly create feature request on https://github.com/mycontroller-org/mycontroller/issues

                    1 Reply Last reply Reply Quote 0
                    • imediaI Offline
                      imedia
                      last edited by

                      @yd, Would you be willing to share how you got the bootloader loaded to your nodes and got OTA firmware updates working with MyController?

                      I've been trying for days now and every guide, or forum post I've found is way over my head. I'm confused with all the fuse settings etc that people are discussing and just want to load MYSBootloader to my nodes so I can push the updates from the Controller. All the other jargon is bogging me down.

                      I'm running MySensors 2.0 on a Serial Gateway and the nodes, and My Controller v0.0.3-FINAL2

                      Thanks,

                      1 Reply Last reply Reply Quote 0
                      • Y Offline
                        yd
                        last edited by

                        @imedia You don't need to change fuse for OTA. It's mostly for low battery.
                        I've use mysensors boot loader from MYSController 0_1_2_282.
                        However you need usbasp bootloader burning cable and also I use avrdudess s/w to burn boot loader.
                        I don't know why but I was unable to burn bootloader from arduino or any other s/w.
                        Only problem is after you use mysensors bootloader, you can't use arduino to burn firmware on it.
                        Ah I use arduino pro mini 3.3V version.

                        After you load firmware on MYController, you have to reset node to start burn firmware from controller.

                        Hope this save your time.

                        Thanks.

                        1 Reply Last reply Reply Quote 1
                        • imediaI Offline
                          imedia
                          last edited by

                          Thanks for the info @yd, going to give this a try shortly..

                          Just to confirm, I export the sketch (firmware) using Sketch > Export compiled binary in the Arduino IDE correct? I then import that file into MySensors on the Firmware page. However, on that page it says "Nothing Selected" for both the Type and Version. There is also nothing appearing in the drop downs to select something and you cannot save and upload the firmware without selecting both these drope downs. Maybe @jkandasa can advise on that?

                          So Let's assume I can get the firmware loaded into MyController. How does the node know to connect this specific Gateway / MyController and download it's specific firmware? There needs to be a relationship between the two created correct? If so how is that created and ensure the correct node is getting the correct firmware from the correct controller?

                          Thanks,

                          Y 2 Replies Last reply Reply Quote 0
                          • Y Offline
                            yd @imedia
                            last edited by

                            @imedia

                            Well you'd better see following link to get HEX file.
                            https://www.mysensors.org/about/ota (search "How to upload a new sketch just with OTA")
                            Then you can find hex file in build.path

                            In MyController, you have to create new type and version first then you can select the type and version then upload HEX file.

                            Once you upload firmware, you can go Resources => Node then you can select any node which you want to uplpad firmware. Then edit node and select firmware.

                            Don't forget reset node to get new firmware.

                            Cheers,
                            YD

                            imediaI 1 Reply Last reply Reply Quote 0
                            • Y Offline
                              yd @imedia
                              last edited by

                              @imedia One more thing you need to know.
                              Once you got New boot loader, you are unable to use arduino sketch to put new firmware.
                              You have to use OTA. It took 5-10minutes;; Not sure what's wrong with this but it looks like mysensors boot loader bug or how it works.

                              Cheers~

                              1 Reply Last reply Reply Quote 0
                              • imediaI Offline
                                imedia @yd
                                last edited by

                                @yd I'm not sure where you create the new "type" and "version" you are referring to? Can you please be more specific?

                                Also, I understand that the firmwares will need to be loaded to the nodes via MyController once the node is running the MYSBootloader. My question is, how does the node with just a bootloader installed know where to find its firmware? What tells a newly loaded node with only the bootloader on it where and what firmware it should be running?

                                Let's say I get a brand new Pro Mini, I flash it with the bootloader. Then what? Is there some type of configuration I need to do on the bootloader before loading it so it has a unique ID or something? How does it find home when it doesn't know where home is?

                                Y 1 Reply Last reply Reply Quote 0
                                • Y Offline
                                  yd @imedia
                                  last edited by

                                  @imedia
                                  Add type
                                  Utilities => Firmwares => Click "Types" on right top => click "Add firmware type" right next => add new record
                                  Add version
                                  Utilities => Firmwares => Click "Versions" on right top => click "Add firmware version" right next => add new record

                                  After you flash MYSBootLoader, you will see the node ID in MYController node list.
                                  You can select the node and click action then you can edit node.
                                  From that screen, you will be able to select one of firmware which you have uploaded in utilities.

                                  Once you upload MYSBootloader, Once you have new bootloader, the node doesn't have firmware so keep sending request to controller to get firmware. Obviously your gateway should work as expected.
                                  Hope this help you.

                                  Cheers~

                                  1 Reply Last reply Reply Quote 0
                                  • imediaI Offline
                                    imedia
                                    last edited by

                                    Thank you so much. I feel dumb for not figuring out the adding of the Types and Versions.. I guess when I saw those buttons there I thought they were for sorting rather than managing sub-lists. Maybe some UI improvements needed here, or maybe I'm just tired. Eiter way, thanks for clarifying on that.

                                    I think I have a better idea what to do now. We should get a WIKI going as I can't seem to come up with much in terms of documentation other than the forum? +1? 🙂

                                    Y 1 Reply Last reply Reply Quote 0
                                    • Y Offline
                                      yd @imedia
                                      last edited by

                                      @imedia
                                      Seem you are on the right track. If you make a simple wiki document for newbie after you success, it will be huge help for the community.
                                      English is my second language so it will take long time for me and afraid not crystal clear for everyone^^;

                                      imediaI 1 Reply Last reply Reply Quote 0
                                      • imediaI Offline
                                        imedia @yd
                                        last edited by

                                        @yd / @jkandasa ,

                                        I would be more than happy to do the writing, I am quite new to the platform however so I'm still discovering the system myself as you can see...

                                        With your help I can write the documentation once I understand what exactly it is I'm documenting. I see @jkandasa has already an outline created on GIT hub, we just need to add moer specifics to that. Hotlinking to support right in the application will also be a huge help to users.

                                        jkandasaJ 1 Reply Last reply Reply Quote 0
                                        • jkandasaJ Offline
                                          jkandasa @imedia
                                          last edited by

                                          @imedia Have you checked user manual? Which is available on http://www.mycontroller.org/files/docs/0.0.3.Alpha2.pdf for the last released version. I hope this manual will help you to understand more on configuration.

                                          How node gets new firmware from Controller?

                                          Once you installed and turned on brand new node, following actions done.

                                          • Requests node id from controller, Controller gives next available node for the new node. Node id will be stores on eeprom, So this is permanent node id for this node(Until we trigger Erase configuration from controller).
                                          • By default brand new node has type id as 65535 and version id as 65535. node sends this information to MyController.
                                          • If you have enabled and configured, Support default firmware on MyController, default firmware will be sent to node. Otherwise controller will not respond for the firmware request, as controller does not know which firmware have to send.
                                          • Once node appeared on nodes list. You have to select your firmware for that node and trigger reboot.
                                          • Now your node will request with 65535 as version id and type id. However controller has different type id and version id for this node. Controller will send configured firmware type id and version id. Now node takes the controller configuration and requests firmware for that configuration.
                                          • New firmware will be loaded on your node.(Which is configured on controller's node page)

                                          Hope this will help you to understand more depth about firmware update on node.

                                          1 Reply Last reply Reply Quote 1
                                          • imediaI Offline
                                            imedia
                                            last edited by

                                            Great, thanks again @jkandasa!

                                            I tried this and got it to work, however, some clarification is still needed as my results are inconsistent.

                                            First thing I noticed is, when the .hex file is generated by the Arduino IDE two .hex files are created:

                                            • SketchName.ino.hex

                                            • SketchName.ino.with_bootloader.hex

                                            Which one should be uploaded to the MyController Firmware section? Does it matter?

                                            Next, a little more clarification on the update process...

                                            Once a new version of the firmware is uploaded into MyController, how do we push that out to the node?

                                            I know there is an option to select the node and then from the Actions Menu choose "Upload firmware". Does that initiate the upload immediately and refresh refresh the node or must a "Reboot" be selected after pushing "Upload firmware"?

                                            If a reboot is needed, can it be done immediately after choosing "Upload firmware"? If not how long should we wait before clicking "Reboot"?

                                            I'm able to get the updates out eventually but that is just because I keep clicking reboot and upload, and even resetting the node manually. That seems like a poor way to achieve what I am doing. There must be a certain order to doing this with consistent results. I would like to know what part of what I am doing is actually necessary and what is not.

                                            Can you please provide a step by step guide.

                                            Also, is there any way we could monitor the Firmware Upload progress in MyController? That would be very helpful. Should I add that feature request to GitHub?

                                            jkandasaJ 1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            0

                                            Online

                                            587

                                            Users

                                            529

                                            Topics

                                            3.4k

                                            Posts
                                            Copyright © 2015-2025 MyController.org | Contributors | Localization