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 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


                      31

                      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