Skip to content
  • 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. Feature Requests
  3. Build retry funtionality into the mysensors library
  • Getting Started
  • Controller
  • Build
  • Hardware
  • Download/API
  • Forum
  • Store

Build retry funtionality into the mysensors library

Scheduled Pinned Locked Moved Feature Requests
26 Posts 7 Posters 734 Views 7 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.
  • rozpruwaczR rozpruwacz

    @mfalkvidd said in Build retry funtionality into the mysensors library:

    I guess some sort of timestamp when the last send attempt occurred, and a retry counter is needed to be stored per message as well?

    Yes, could be useful for debugging purposes. In the ideal setup retry counter should be always 0 :)

    mfalkviddM Offline
    mfalkviddM Offline
    mfalkvidd
    Mod
    wrote on last edited by
    #17

    @rozpruwacz you use a constant interval between retries? (No exponential backoff)?

    rozpruwaczR 1 Reply Last reply
    0
    • mfalkviddM mfalkvidd

      @rozpruwacz you use a constant interval between retries? (No exponential backoff)?

      rozpruwaczR Offline
      rozpruwaczR Offline
      rozpruwacz
      wrote on last edited by rozpruwacz
      #18

      @mfalkvidd said in Build retry funtionality into the mysensors library:

      (No exponential backoff)?

      its expotential, but no more than hardcoded value (don't remember what value)

      1 Reply Last reply
      0
      • mfalkviddM mfalkvidd

        @rozpruwacz that sounds like an interesting solution. Do you statically allocate the ram needed to store the transmitted values, or are you able to do it dynamically without causing fragmentation? How much extra ram is required? Is there support for larger messages, such as V_TEXT? How do you handle if the same actuator is changed multiple times before the earlier changes have been reliably delivered?

        Would be awesome if we could work towards a pull request that could add this functionality to MySensors. Dropping support for repeaters would be a very big drawback for some uses though. Many users already complain about the ram requirements, so we'd have to consider our options regarding ram as well.

        Sergio RiusS Offline
        Sergio RiusS Offline
        Sergio Rius
        wrote on last edited by
        #19

        @mfalkvidd said in Build retry funtionality into the mysensors library:

        How do you handle if the same actuator is changed multiple times before the earlier changes have been reliably delivered?

        How MQTT qos 1 does? I think it should be similar to it.

        Also I don't think changes in between should be dropped. That would be like dropouts in a metered system (logged to influx, fEx) and probably do strange things with scenes and group switching.

        rozpruwaczR 1 Reply Last reply
        0
        • Sergio RiusS Sergio Rius

          @mfalkvidd said in Build retry funtionality into the mysensors library:

          How do you handle if the same actuator is changed multiple times before the earlier changes have been reliably delivered?

          How MQTT qos 1 does? I think it should be similar to it.

          Also I don't think changes in between should be dropped. That would be like dropouts in a metered system (logged to influx, fEx) and probably do strange things with scenes and group switching.

          rozpruwaczR Offline
          rozpruwaczR Offline
          rozpruwacz
          wrote on last edited by
          #20

          @sergio-rius said in Build retry funtionality into the mysensors library:

          How MQTT qos 1 does? I think it should be similar to it.
          Also I don't think changes in between should be dropped. That would be like dropouts in a metered system (logged to influx, fEx) and probably do strange things with scenes and group switching.

          But MQTT broker is not running on the 1kB ram mcu. Having lots of memory available it is not a brain teaser to implement such functionality. For a small mcu You have to make some compromise. In one case droping messages is completely ok, but for other is not. It may turn out that there is no ONE algorithm that will fit all cases ...

          Sergio RiusS 1 Reply Last reply
          0
          • alowhumA Offline
            alowhumA Offline
            alowhum
            Plugin Developer
            wrote on last edited by
            #21

            @rozpruwacz said in Build retry funtionality into the mysensors library:

            It may turn out that there is no ONE algorithm that will fit all cases ...

            Agreed. It seems to me that a small home with about 10 to 15 devices should be able to run on Arduino Nano's and offer a decent level of predictability. If all devices send, on average, one message per minute, then this would mean one message every 70 milliseconds. Most of these devices will be connected to the gateway directly. Let's say half of them require

            So in a basic home situation a buffer for two messages would be fine, and three would be a luxury.

            If you want to run a large scale sensor network, then it makes sense to upgrade your parts too (bigger antenna on the gateway, more ram on nodes that extend the network).

            Retry functionality, in the normal home scenario, probably isn't so much about how many messages are buffered, but about how long people turn on the microwave oven, which disrupts the network. So for me it's about having control over the (exponential) time period that the node keeps retrying. The memory/buffering capacity of my home network is fine, it's just that I don't want to implement this "keep retrying for longer" routine myself.

            Which #define values could I already change today to get the nodes to keep retrying for longer than just a few seconds?

            YveauxY 1 Reply Last reply
            0
            • alowhumA alowhum

              @rozpruwacz said in Build retry funtionality into the mysensors library:

              It may turn out that there is no ONE algorithm that will fit all cases ...

              Agreed. It seems to me that a small home with about 10 to 15 devices should be able to run on Arduino Nano's and offer a decent level of predictability. If all devices send, on average, one message per minute, then this would mean one message every 70 milliseconds. Most of these devices will be connected to the gateway directly. Let's say half of them require

              So in a basic home situation a buffer for two messages would be fine, and three would be a luxury.

              If you want to run a large scale sensor network, then it makes sense to upgrade your parts too (bigger antenna on the gateway, more ram on nodes that extend the network).

              Retry functionality, in the normal home scenario, probably isn't so much about how many messages are buffered, but about how long people turn on the microwave oven, which disrupts the network. So for me it's about having control over the (exponential) time period that the node keeps retrying. The memory/buffering capacity of my home network is fine, it's just that I don't want to implement this "keep retrying for longer" routine myself.

              Which #define values could I already change today to get the nodes to keep retrying for longer than just a few seconds?

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

              @alowhum said in Build retry funtionality into the mysensors library:

              So in a basic home situation a buffer for two messages would be fine, and three would be a luxury.

              Each nrf24 has this luxury of a 3 message hardware buffer :-)

              http://yveaux.blogspot.nl

              1 Reply Last reply
              0
              • rozpruwaczR rozpruwacz

                @sergio-rius said in Build retry funtionality into the mysensors library:

                How MQTT qos 1 does? I think it should be similar to it.
                Also I don't think changes in between should be dropped. That would be like dropouts in a metered system (logged to influx, fEx) and probably do strange things with scenes and group switching.

                But MQTT broker is not running on the 1kB ram mcu. Having lots of memory available it is not a brain teaser to implement such functionality. For a small mcu You have to make some compromise. In one case droping messages is completely ok, but for other is not. It may turn out that there is no ONE algorithm that will fit all cases ...

                Sergio RiusS Offline
                Sergio RiusS Offline
                Sergio Rius
                wrote on last edited by
                #23

                @rozpruwacz said in Build retry funtionality into the mysensors library:

                But MQTT broker is not running on the 1kB ram mcu

                I'm not saying to make a mqtt broker run on an arduino. Just picking the process logic as a guideline.
                MQTT is not a protocol made for raspberries, it's only that often run on them.

                1 Reply Last reply
                0
                • mfalkviddM Offline
                  mfalkviddM Offline
                  mfalkvidd
                  Mod
                  wrote on last edited by
                  #24

                  The main thing mqtt has (that MySensors doesn’t) is ”packet identifier” in mqtt lingo. It is similar to tcp’s sequence number.

                  Mqtt also assumes that

                  • the broker (I guess the analogue is the MySensors gateway) has persistent storage, or at least sufficient ram to buffer all messages until they have been marked as delivered
                  • everything is single hop (no repeaters)
                  • there is a DUP flag
                  • clients have sufficient ram to buffer all outgoing messages until they have been marked as delivered, and has timers to retransmit messages

                  I am not sure how mqtt handles ordering of messages. I think mqtt doesn’t guarantee ordering, regardless of qos level.

                  1 Reply Last reply
                  0
                  • Sergio RiusS Offline
                    Sergio RiusS Offline
                    Sergio Rius
                    wrote on last edited by
                    #25

                    Voilá.
                    And it maintains a live inventory of clients.
                    Some points are so difficult to achieve. But I was looking at message identification as a response to the sequence switch problem.

                    1 Reply Last reply
                    1
                    • efix durovE Offline
                      efix durovE Offline
                      efix durov
                      wrote on last edited by
                      #26

                      I am not sure how retrying even more times will help anything

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


                      16

                      Online

                      11.7k

                      Users

                      11.2k

                      Topics

                      113.0k

                      Posts


                      Copyright 2019 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
                      • OpenHardware.io
                      • Categories
                      • Recent
                      • Tags
                      • Popular