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. Troubleshooting
  3. Repeater drops nodes

Repeater drops nodes

Scheduled Pinned Locked Moved Troubleshooting
34 Posts 5 Posters 3.1k 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.
  • T titvs

    @tekka using normal NRF24's on the nodes and a nrf24L01+ PA+LNA on the gateway.

    tekkaT Offline
    tekkaT Offline
    tekka
    Admin
    wrote on last edited by
    #21

    @titvs ok - I'd recommend to update all devices and re-run the test.

    T 1 Reply Last reply
    1
    • T titvs

      @tekka using normal NRF24's on the nodes and a nrf24L01+ PA+LNA on the gateway.

      I Offline
      I Offline
      itbeyond
      wrote on last edited by
      #22

      @titvs my testing seems to show that this updated version from @tekka does resolve the problem. I have added some questions about the release details etc in the post https://forum.mysensors.org/topic/9642/nrf24-transmission-of-data-works-fine-but-constant-nack-s-produced/12

      T 1 Reply Last reply
      0
      • I itbeyond

        @titvs my testing seems to show that this updated version from @tekka does resolve the problem. I have added some questions about the release details etc in the post https://forum.mysensors.org/topic/9642/nrf24-transmission-of-data-works-fine-but-constant-nack-s-produced/12

        T Offline
        T Offline
        titvs
        wrote on last edited by
        #23

        @itbeyond Nice! Will test it today and post my results.

        1 Reply Last reply
        0
        • tekkaT tekka

          @titvs ok - I'd recommend to update all devices and re-run the test.

          T Offline
          T Offline
          titvs
          wrote on last edited by titvs
          #24

          @tekka well, unfortunately i had the same problem. The far away node connected to the Repeater but after aprox 1h working ok, it stopped being updated at Domoticz with transportCheckUplink() false.
          You changed a timing setting, right? With the normal version the node stopped being updated at about 15-16 min and now it changed to about 1 hour…
          I have a node connected directly to the gateway with the nrf24L01+ PA+LNA working without problems, so it seems to be some kind of problem with the Repeater code and timings...

          tekkaT I 2 Replies Last reply
          0
          • T titvs

            @tekka well, unfortunately i had the same problem. The far away node connected to the Repeater but after aprox 1h working ok, it stopped being updated at Domoticz with transportCheckUplink() false.
            You changed a timing setting, right? With the normal version the node stopped being updated at about 15-16 min and now it changed to about 1 hour…
            I have a node connected directly to the gateway with the nrf24L01+ PA+LNA working without problems, so it seems to be some kind of problem with the Repeater code and timings...

            tekkaT Offline
            tekkaT Offline
            tekka
            Admin
            wrote on last edited by
            #25

            @titvs It would be helpful if you could post the debug log showing what you describe + the sketch you are using.

            T 1 Reply Last reply
            0
            • tekkaT tekka

              @titvs It would be helpful if you could post the debug log showing what you describe + the sketch you are using.

              T Offline
              T Offline
              titvs
              wrote on last edited by
              #26

              @tekka the debug log (MY_DEBUG)/sketch from the node that gets disconnected or the repeater?

              tekkaT 1 Reply Last reply
              0
              • T titvs

                @tekka well, unfortunately i had the same problem. The far away node connected to the Repeater but after aprox 1h working ok, it stopped being updated at Domoticz with transportCheckUplink() false.
                You changed a timing setting, right? With the normal version the node stopped being updated at about 15-16 min and now it changed to about 1 hour…
                I have a node connected directly to the gateway with the nrf24L01+ PA+LNA working without problems, so it seems to be some kind of problem with the Repeater code and timings...

                I Offline
                I Offline
                itbeyond
                wrote on last edited by
                #27

                @titvs I have tested a repeater and it is still working ok after 48 hours using the CE timing modified code.

                T 1 Reply Last reply
                0
                • I itbeyond

                  @titvs I have tested a repeater and it is still working ok after 48 hours using the CE timing modified code.

                  T Offline
                  T Offline
                  titvs
                  wrote on last edited by
                  #28

                  @itbeyond can you please post the initial code defines for your repeater and a node that connects to it? To see if I’m doing something wrong...
                  In the meantime I’m going to get the debug log and sketch code for my node.

                  1 Reply Last reply
                  0
                  • T titvs

                    @tekka the debug log (MY_DEBUG)/sketch from the node that gets disconnected or the repeater?

                    tekkaT Offline
                    tekkaT Offline
                    tekka
                    Admin
                    wrote on last edited by
                    #29

                    @titvs ideally both + sketch

                    T 1 Reply Last reply
                    0
                    • tekkaT tekka

                      @titvs ideally both + sketch

                      T Offline
                      T Offline
                      titvs
                      wrote on last edited by titvs
                      #30

                      @tekka Well, im running your beta code and like @itbeyond it seems to be working for 24h now. Uploaded the new compiles with the lib from the RF24Fix branch to all the nodes, gateway and repeater and it seems the drops stopped.
                      Built a couple of Relay nodes, one of which is connected to the repeater and they also seem to be working correctly.

                      Im linking the ZIP to the node log file with the RF24 verbose debug (its a tad big), if you want to take a look:

                      LOG

                      And this is my TEMP+HUM node sketch:

                      // Enable debug prints
                      //#define MY_DEBUG
                      //#define MY_DEBUG_VERBOSE_RF24
                      
                      // Enable and select radio type attached 
                      #define MY_RADIO_NRF24
                      //#define MY_RADIO_RFM69
                      //#define MY_RS485
                      
                      #define MY_RF24_CHANNEL 1   //////////////
                      #define MY_RF24_PA_LEVEL RF24_PA_HIGH
                      
                      // ONLY IF USING FIXED ID REPEATER
                      //#define MY_PARENT_NODE_ID 0            // REPEATER NODE ID
                      //#define MY_PARENT_NODE_IS_STATIC        // this will force your node to use only the repeater
                      
                      // #define MY_REPEATER_FEATURE
                      
                      #include <SPI.h>
                      #include <MySensors.h>  
                      #include <DHT.h>
                      
                      #include <U8g2lib.h>  //////////////////////
                      #include <Wire.h>    /////////////////////////
                      
                      U8G2_SSD1306_128X64_NONAME_1_HW_I2C u8g2(U8G2_R0, A5, A4);   // U8G2 Constructor (A5 - Clock SCL ; A4 - Data SDA)
                      
                      #define DHT_DATA_PIN 3
                      
                      #define SENSOR_TEMP_OFFSET 0
                      
                      static const uint64_t UPDATE_INTERVAL = 60000;
                      
                      static const uint8_t FORCE_UPDATE_N_READS = 10;
                      
                      #define CHILD_ID_HUM 0
                      #define CHILD_ID_TEMP 1
                      
                      float lastTemp;
                      float lastHum;
                      uint8_t nNoUpdatesTemp;
                      uint8_t nNoUpdatesHum;
                      bool metric = true;
                      
                      MyMessage msgHum(CHILD_ID_HUM, V_HUM);
                      MyMessage msgTemp(CHILD_ID_TEMP, V_TEMP);
                      DHT dht;
                      
                      void before(){
                      
                         u8g2.begin();
                      
                         u8g2.firstPage();
                         do {
                           u8g2.setFont(u8g2_font_helvR14_tf);
                           u8g2.drawStr(38,15,"OLED");
                           u8g2.drawStr(15,35,"Temp+Hum");
                           u8g2.drawStr(46,60,"v1.2");
                         } while ( u8g2.nextPage() );
                        
                        delay(3000);
                      
                        u8g2.clear();
                       
                         u8g2.firstPage();
                          do {
                           u8g2.drawStr(3, 32, "Connecting...");
                         } while ( u8g2.nextPage() );
                      }
                      
                      void presentation()  
                      { 
                      
                        // Send the sketch version information to the gateway
                        sendSketchInfo("TEMPHUM_OLED", "1.2");
                      
                        // Register all sensors to gw (they will be created as child devices)
                        present(CHILD_ID_HUM, S_HUM);
                        present(CHILD_ID_TEMP, S_TEMP);
                      
                        metric = getControllerConfig().isMetric;
                      }
                      
                      void setup()
                      {
                        
                        u8g2.clear();
                        
                        dht.setup(DHT_DATA_PIN); // set data pin of DHT sensor
                        if (UPDATE_INTERVAL <= dht.getMinimumSamplingPeriod()) {
                      
                          u8g2.firstPage();
                          do {
                              u8g2.setFont(u8g2_font_haxrcorp4089_tr); // 7 PIXEL HIGHT
                              u8g2.drawStr(1,12,"WARNING: UPDATE_INTERVAL");
                             u8g2.drawStr(1,24,"is smaller than supported by");
                              u8g2.drawStr(1,36,"the sensor!");
                             } while ( u8g2.nextPage() );
                          delay(4000);
                      
                        }
                      
                        sleep(dht.getMinimumSamplingPeriod());
                      }
                      
                      void loop()      
                      {  
                      
                       while (transportCheckUplink() == false){
                      
                        u8g2.firstPage();
                        do {
                          u8g2.setFont(u8g2_font_helvR14_tf); // 14 px height
                          u8g2.drawStr(3, 32, "Disconnected!");
                          } while ( u8g2.nextPage() );
                       }
                      
                        dht.readSensor(true);
                      
                        float temperature = dht.getTemperature();
                        if (isnan(temperature)) {
                          Serial.println("Failed reading temperature from DHT!");
                      
                        } else if (temperature != lastTemp || nNoUpdatesTemp == FORCE_UPDATE_N_READS) {
                          // Only send temperature if it changed since the last measurement or if we didn't send an update for n times
                          lastTemp = temperature;
                      
                          // apply the offset before converting to something different than Celsius degrees
                          temperature += SENSOR_TEMP_OFFSET;
                      
                          if (!metric) {
                            temperature = dht.toFahrenheit(temperature);
                          }
                          // Reset no updates counter
                          nNoUpdatesTemp = 0;
                          send(msgTemp.set(temperature, 1));
                      
                          #ifdef MY_DEBUG
                          Serial.print("T: ");
                          Serial.println(temperature);
                          #endif
                        } else {
                          // Increase no update counter if the temperature stayed the same
                          nNoUpdatesTemp++;
                        }
                      
                        // Get humidity from DHT library
                        float humidity = dht.getHumidity();
                        if (isnan(humidity)) {
                          Serial.println("Failed reading humidity from DHT");
                        } else if (humidity != lastHum || nNoUpdatesHum == FORCE_UPDATE_N_READS) {
                          // Only send humidity if it changed since the last measurement or if we didn't send an update for n times
                          lastHum = humidity;
                          // Reset no updates counter
                          nNoUpdatesHum = 0;
                          send(msgHum.set(humidity, 1));
                      
                          #ifdef MY_DEBUG
                          Serial.print("H: ");
                          Serial.println(humidity);
                          #endif
                        } else {
                          // Increase no update counter if the humidity stayed the same
                          nNoUpdatesHum++;
                        }
                      
                        u8g2.firstPage();
                        do {
                        
                        u8g2.setFont(u8g2_font_fub30_tn);
                        u8g2.setCursor(2, 35);
                        u8g2.print(temperature, 1);
                        u8g2.setFont(u8g2_font_inb16_mf);
                        u8g2.drawGlyph(88, 35, 0x00b0); // degree
                        u8g2.drawStr(100, 35, "C");
                        u8g2.setCursor(70, 60);
                        u8g2.print(humidity, 0);
                        u8g2.drawStr(100, 60, "%");
                        u8g2.setFont(u8g2_font_open_iconic_thing_2x_t); // 16 pix height
                        u8g2.drawGlyph(45, 60, 0x0048); // drop
                        
                        } while ( u8g2.nextPage() );
                        
                        // Sleep for a while to save energy
                        //sleep(UPDATE_INTERVAL); 
                        
                        delay(UPDATE_INTERVAL);  // POWERED NODE
                      }
                      
                      
                      
                      tekkaT 1 Reply Last reply
                      0
                      • T titvs

                        @tekka Well, im running your beta code and like @itbeyond it seems to be working for 24h now. Uploaded the new compiles with the lib from the RF24Fix branch to all the nodes, gateway and repeater and it seems the drops stopped.
                        Built a couple of Relay nodes, one of which is connected to the repeater and they also seem to be working correctly.

                        Im linking the ZIP to the node log file with the RF24 verbose debug (its a tad big), if you want to take a look:

                        LOG

                        And this is my TEMP+HUM node sketch:

                        // Enable debug prints
                        //#define MY_DEBUG
                        //#define MY_DEBUG_VERBOSE_RF24
                        
                        // Enable and select radio type attached 
                        #define MY_RADIO_NRF24
                        //#define MY_RADIO_RFM69
                        //#define MY_RS485
                        
                        #define MY_RF24_CHANNEL 1   //////////////
                        #define MY_RF24_PA_LEVEL RF24_PA_HIGH
                        
                        // ONLY IF USING FIXED ID REPEATER
                        //#define MY_PARENT_NODE_ID 0            // REPEATER NODE ID
                        //#define MY_PARENT_NODE_IS_STATIC        // this will force your node to use only the repeater
                        
                        // #define MY_REPEATER_FEATURE
                        
                        #include <SPI.h>
                        #include <MySensors.h>  
                        #include <DHT.h>
                        
                        #include <U8g2lib.h>  //////////////////////
                        #include <Wire.h>    /////////////////////////
                        
                        U8G2_SSD1306_128X64_NONAME_1_HW_I2C u8g2(U8G2_R0, A5, A4);   // U8G2 Constructor (A5 - Clock SCL ; A4 - Data SDA)
                        
                        #define DHT_DATA_PIN 3
                        
                        #define SENSOR_TEMP_OFFSET 0
                        
                        static const uint64_t UPDATE_INTERVAL = 60000;
                        
                        static const uint8_t FORCE_UPDATE_N_READS = 10;
                        
                        #define CHILD_ID_HUM 0
                        #define CHILD_ID_TEMP 1
                        
                        float lastTemp;
                        float lastHum;
                        uint8_t nNoUpdatesTemp;
                        uint8_t nNoUpdatesHum;
                        bool metric = true;
                        
                        MyMessage msgHum(CHILD_ID_HUM, V_HUM);
                        MyMessage msgTemp(CHILD_ID_TEMP, V_TEMP);
                        DHT dht;
                        
                        void before(){
                        
                           u8g2.begin();
                        
                           u8g2.firstPage();
                           do {
                             u8g2.setFont(u8g2_font_helvR14_tf);
                             u8g2.drawStr(38,15,"OLED");
                             u8g2.drawStr(15,35,"Temp+Hum");
                             u8g2.drawStr(46,60,"v1.2");
                           } while ( u8g2.nextPage() );
                          
                          delay(3000);
                        
                          u8g2.clear();
                         
                           u8g2.firstPage();
                            do {
                             u8g2.drawStr(3, 32, "Connecting...");
                           } while ( u8g2.nextPage() );
                        }
                        
                        void presentation()  
                        { 
                        
                          // Send the sketch version information to the gateway
                          sendSketchInfo("TEMPHUM_OLED", "1.2");
                        
                          // Register all sensors to gw (they will be created as child devices)
                          present(CHILD_ID_HUM, S_HUM);
                          present(CHILD_ID_TEMP, S_TEMP);
                        
                          metric = getControllerConfig().isMetric;
                        }
                        
                        void setup()
                        {
                          
                          u8g2.clear();
                          
                          dht.setup(DHT_DATA_PIN); // set data pin of DHT sensor
                          if (UPDATE_INTERVAL <= dht.getMinimumSamplingPeriod()) {
                        
                            u8g2.firstPage();
                            do {
                                u8g2.setFont(u8g2_font_haxrcorp4089_tr); // 7 PIXEL HIGHT
                                u8g2.drawStr(1,12,"WARNING: UPDATE_INTERVAL");
                               u8g2.drawStr(1,24,"is smaller than supported by");
                                u8g2.drawStr(1,36,"the sensor!");
                               } while ( u8g2.nextPage() );
                            delay(4000);
                        
                          }
                        
                          sleep(dht.getMinimumSamplingPeriod());
                        }
                        
                        void loop()      
                        {  
                        
                         while (transportCheckUplink() == false){
                        
                          u8g2.firstPage();
                          do {
                            u8g2.setFont(u8g2_font_helvR14_tf); // 14 px height
                            u8g2.drawStr(3, 32, "Disconnected!");
                            } while ( u8g2.nextPage() );
                         }
                        
                          dht.readSensor(true);
                        
                          float temperature = dht.getTemperature();
                          if (isnan(temperature)) {
                            Serial.println("Failed reading temperature from DHT!");
                        
                          } else if (temperature != lastTemp || nNoUpdatesTemp == FORCE_UPDATE_N_READS) {
                            // Only send temperature if it changed since the last measurement or if we didn't send an update for n times
                            lastTemp = temperature;
                        
                            // apply the offset before converting to something different than Celsius degrees
                            temperature += SENSOR_TEMP_OFFSET;
                        
                            if (!metric) {
                              temperature = dht.toFahrenheit(temperature);
                            }
                            // Reset no updates counter
                            nNoUpdatesTemp = 0;
                            send(msgTemp.set(temperature, 1));
                        
                            #ifdef MY_DEBUG
                            Serial.print("T: ");
                            Serial.println(temperature);
                            #endif
                          } else {
                            // Increase no update counter if the temperature stayed the same
                            nNoUpdatesTemp++;
                          }
                        
                          // Get humidity from DHT library
                          float humidity = dht.getHumidity();
                          if (isnan(humidity)) {
                            Serial.println("Failed reading humidity from DHT");
                          } else if (humidity != lastHum || nNoUpdatesHum == FORCE_UPDATE_N_READS) {
                            // Only send humidity if it changed since the last measurement or if we didn't send an update for n times
                            lastHum = humidity;
                            // Reset no updates counter
                            nNoUpdatesHum = 0;
                            send(msgHum.set(humidity, 1));
                        
                            #ifdef MY_DEBUG
                            Serial.print("H: ");
                            Serial.println(humidity);
                            #endif
                          } else {
                            // Increase no update counter if the humidity stayed the same
                            nNoUpdatesHum++;
                          }
                        
                          u8g2.firstPage();
                          do {
                          
                          u8g2.setFont(u8g2_font_fub30_tn);
                          u8g2.setCursor(2, 35);
                          u8g2.print(temperature, 1);
                          u8g2.setFont(u8g2_font_inb16_mf);
                          u8g2.drawGlyph(88, 35, 0x00b0); // degree
                          u8g2.drawStr(100, 35, "C");
                          u8g2.setCursor(70, 60);
                          u8g2.print(humidity, 0);
                          u8g2.drawStr(100, 60, "%");
                          u8g2.setFont(u8g2_font_open_iconic_thing_2x_t); // 16 pix height
                          u8g2.drawGlyph(45, 60, 0x0048); // drop
                          
                          } while ( u8g2.nextPage() );
                          
                          // Sleep for a while to save energy
                          //sleep(UPDATE_INTERVAL); 
                          
                          delay(UPDATE_INTERVAL);  // POWERED NODE
                        }
                        
                        
                        
                        tekkaT Offline
                        tekkaT Offline
                        tekka
                        Admin
                        wrote on last edited by
                        #31

                        @titvs ok, do you also have the repeater log + sketch? btw, for powered nodes I'd recommend using wait() instead of delay() - this ensures a proper functionality of the communcation stack.

                        T 1 Reply Last reply
                        0
                        • tekkaT tekka

                          @titvs ok, do you also have the repeater log + sketch? btw, for powered nodes I'd recommend using wait() instead of delay() - this ensures a proper functionality of the communcation stack.

                          T Offline
                          T Offline
                          titvs
                          wrote on last edited by
                          #32

                          @tekka i didnt save the log from the Repeater but if it helps i'm going to collect it. As for the Repeater sketch, its the default:

                          // Enable debug prints to serial monitor
                          //#define MY_DEBUG
                          
                          // Enable and select radio type attached
                          #define MY_RADIO_NRF24
                          //#define MY_RADIO_NRF5_ESB
                          //#define MY_RADIO_RFM69
                          //#define MY_RADIO_RFM95
                          
                          #define MY_NODE_ID 51    // FIXED NODE ID
                          #define MY_PARENT_NODE_ID 0
                          #define MY_PARENT_NODE_IS_STATIC
                          
                          #define MY_RF24_CHANNEL 1
                          #define MY_RF24_PA_LEVEL RF24_PA_HIGH
                          
                          // Enabled repeater feature for this node
                          #define MY_REPEATER_FEATURE
                          
                          #include <MySensors.h>
                          
                          void setup()
                          {
                          }
                          
                          void presentation()
                          {
                            //Send the sensor node sketch version information to the gateway
                            sendSketchInfo("Repeater Node", "1.0");
                          }
                          
                          void loop()
                          {
                          }```
                          tekkaT 1 Reply Last reply
                          0
                          • T titvs

                            @tekka i didnt save the log from the Repeater but if it helps i'm going to collect it. As for the Repeater sketch, its the default:

                            // Enable debug prints to serial monitor
                            //#define MY_DEBUG
                            
                            // Enable and select radio type attached
                            #define MY_RADIO_NRF24
                            //#define MY_RADIO_NRF5_ESB
                            //#define MY_RADIO_RFM69
                            //#define MY_RADIO_RFM95
                            
                            #define MY_NODE_ID 51    // FIXED NODE ID
                            #define MY_PARENT_NODE_ID 0
                            #define MY_PARENT_NODE_IS_STATIC
                            
                            #define MY_RF24_CHANNEL 1
                            #define MY_RF24_PA_LEVEL RF24_PA_HIGH
                            
                            // Enabled repeater feature for this node
                            #define MY_REPEATER_FEATURE
                            
                            #include <MySensors.h>
                            
                            void setup()
                            {
                            }
                            
                            void presentation()
                            {
                              //Send the sensor node sketch version information to the gateway
                              sendSketchInfo("Repeater Node", "1.0");
                            }
                            
                            void loop()
                            {
                            }```
                            tekkaT Offline
                            tekkaT Offline
                            tekka
                            Admin
                            wrote on last edited by
                            #33

                            @titvs Would be great if you collect the debug log of the repeater, especially when the NACKs happen - this may help to understand the origin of the issue

                            T 1 Reply Last reply
                            0
                            • tekkaT tekka

                              @titvs Would be great if you collect the debug log of the repeater, especially when the NACKs happen - this may help to understand the origin of the issue

                              T Offline
                              T Offline
                              titvs
                              wrote on last edited by
                              #34

                              @tekka Here it is: REPEATER LOG

                              It seems to be working ok but there are still some NACKs on the log. Radio issues perhaps? Neverthless, im not getting the node dropouts i got with the 2.3.0 version...

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


                              18

                              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