!TSM:FPAR:NO REPLY



  • Hi there!

    My new NRF24L01+ modules arrived today and I'm trying to test them.

    I had an unknown device listed in my Domoticz MySensors Gateway with USB so I deleted it in the Domoticz GUI. I thought it would be able to re-register with the Domoticz gateway but it fails. At least that's what I think. Anyway, I'm not able to get it back in the Domoticz device listing. I've restarted the gateway and tried the inclusion button etc but nothing seems to help. Below is the serial monitor debugging info. Any ideas?

    0 MCO:BGN:INIT NODE,CP=RNNNA--,VER=2.1.1
    32 TSM:INIT
    49 TSF:WUR:MS=0
    81 TSM:INIT:TSP OK
    98 TSF:SID:OK,ID=10
    114 TSM:FPAR
    180 TSF:MSG:SEND,10-10-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
    2277 !TSM:FPAR:NO REPLY
    2293 TSM:FPAR
    2359 TSF:MSG:SEND,10-10-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
    4456 !TSM:FPAR:NO REPLY
    4472 TSM:FPAR
    4538 TSF:MSG:SEND,10-10-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
    6635 !TSM:FPAR:NO REPLY
    6651 TSM:FPAR
    6717 TSF:MSG:SEND,10-10-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
    8814 !TSM:FPAR:FAIL
    8830 TSM:FAIL:CNT=1
    8847 TSM:FAIL:PDT



  • I think we both have the same problem:

    https://forum.mysensors.org/topic/6135/no-new-node-possible



  • @gloob
    Thanks, I will follow Your thread. The problem looks similar.



  • My problem was caused by the fact that the radio was inserted into a socket. The 4.7uF stabilizing capacitor was put on the main board side of the socket. Moving the capacitor to the radio board or just soldering the radio to the main board (without using a socket) solved the problem. So, don't use a socket between the radio and the stabilizing capacitor.

    Another interesting thing is that by putting a finger onto the antenna also solved the problem. I could use that method for testing all my radios (using the socket) before permanently soldering them onto the main board.



  • @รอเรือ
    use a 100uf capacitor for radio and use

    #define MY_RF24_PA_LEVEL RF24_PA_HIGH
    

    for gateway and nodes.
    this is not excellent but work better with little error



  • I had the same problem.

    For some reason I'd connected NRF_CE to Pin D4 instead of D9.

    Simply putting #define MY_RF24_CE_PIN 4 made all the problems go away but I lost a couple of days figuring that out. I assumed the radio was connected fine as it was talking to the gateway, it would just not ACK messages.

    The gateway would show:

    7222879 !TSF:MSG:SEND,0-0-6-6,s=255,c=3,t=8,pt=1,l=1,sg=0,ft=0,st=NACK:0
    

    (Running 2.2.0.rc2)


  • Plugin Developer

    I fixed it by adding:

    #define MY_NODE_ID 11
    #define MY_PARENT_NODE_ID 0
    #define MY_PARENT_NODE_IS_STATIC
    

    I had been noticing that the gateway was overwriting old nodes that hadn't connected for a while. Oddly, I can see the following ID's in Domoticz:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    123


  • Plugin Developer

    And then fixed it some more by clearing the eeprom of my nodes. There's special sketch for that under examples.



  • @alowhum Thanks for that solution.

    This is an old topic but I recently started to have these problems again.

    From the debug output:

    !TSM:FPAR:NO REPLY
    

    I've tried so many different capacitors without success. The funny thing is that if I touch the antenna, communication starts to work.

    Then I tried

    #define MY_PARENT_NODE_ID 0
    #define MY_PARENT_NODE_IS_STATIC
    

    And now it works. I suspect this is not a case of bad radio clones. It's something else. That's my guess.

    I use MySensors 2.3.0 on my node and on my gateway. I also have a repeater node, I believe it has MySensors version 2.2.0. (Arduino 1.8.5)

    You guys who know a lot, does this sound like that I've got a problem with my repeater node? Do you have any suggestions how I can find out what's the cause of the issue?

    Thanks!

    EDIT: One day after: The solution above stopped to work for some reason. I sound like an idiot, don't I? I have been working many hours trying to figure out what's the cause. Today nothing seemed to work (If touching the antenna it works but I can't do that all the time.) Anyway, I desoldered the radio and put a new one in. No change. I removed the power regulator and fed the radio with 3v battery, no change. I desoldered the radio again and put a socket so I can switch radio easily. I measured that the socket cnnections on the PCB works. Suddenly it works quite well with most radios that I've tried. I get a few NACK occasionally on some of the radios. Soldering additional capacitors on top of the radio doesn't seem to improve anything. It works quite well now but I can't accept that the socket is the solution that makes the radios work.



  • Looks like I stared facing simillar issues

    Logs from node (assembled on NewbiPCB) with 100uF cap.

    111382 !TSM:FPAR:NO REPLY
    111384 TSM:FPAR
    111421 TSF:MSG:SEND,4-4-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
    113430 !TSM:FPAR:NO REPLY
    113432 TSM:FPAR
    113469 TSF:MSG:SEND,4-4-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
    115478 !TSM:FPAR:NO REPLY
    115480 TSM:FPAR
    115517 TSF:MSG:SEND,4-4-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
    117526 !TSM:FPAR:FAIL
    117528 TSM:FAIL:CNT=7
    117530 TSM:FAIL:DIS
    117532 TSF:TDI:TSL
    

    Gateway

    Sep 29 21:30:17 DEBUG !TSF:MSG:SEND,0-0-4-4,s=255,c=3,t=8,pt=1,l=1,sg=0,ft=0,st=NACK:0
    Sep 29 21:30:18 DEBUG TSF:MSG:READ,4-4-255,s=255,c=3,t=7,pt=0,l=0,sg=0:
    Sep 29 21:30:18 DEBUG TSF:MSG:BC
    Sep 29 21:30:18 DEBUG TSF:MSG:FPAR REQ,ID=4
    Sep 29 21:30:18 DEBUG TSF:CKU:OK,FCTRL
    Sep 29 21:30:18 DEBUG TSF:MSG:GWL OK
    Sep 29 21:30:19 DEBUG !TSF:MSG:SEND,0-0-4-4,s=255,c=3,t=8,pt=1,l=1,sg=0,ft=0,st=NACK:0
    Sep 29 21:30:20 DEBUG TSF:MSG:READ,4-4-255,s=255,c=3,t=7,pt=0,l=0,sg=0:
    Sep 29 21:30:20 DEBUG TSF:MSG:BC
    Sep 29 21:30:20 DEBUG TSF:MSG:FPAR REQ,ID=4
    Sep 29 21:30:20 DEBUG TSF:CKU:OK,FCTRL
    Sep 29 21:30:20 DEBUG TSF:MSG:GWL OK
    Sep 29 21:30:21 DEBUG !TSF:MSG:SEND,0-0-4-4,s=255,c=3,t=8,pt=1,l=1,sg=0,ft=0,st=NACK:0
    Sep 29 21:30:22 DEBUG TSF:MSG:READ,4-4-255,s=255,c=3,t=7,pt=0,l=0,sg=0:
    Sep 29 21:30:22 DEBUG TSF:MSG:BC
    Sep 29 21:30:22 DEBUG TSF:MSG:FPAR REQ,ID=4
    Sep 29 21:30:22 DEBUG TSF:CKU:OK,FCTRL
    Sep 29 21:30:22 DEBUG TSF:MSG:GWL OK
    Sep 29 21:30:23 DEBUG !TSF:MSG:SEND,0-0-4-4,s=255,c=3,t=8,pt=1,l=1,sg=0,ft=0,st=NACK:0
    

    Today I'm on development branch. I switched from 2.3.0 which had simillar issues hoping the problem will be resolved.

    My sketch which isn't clean because I'm experimenting, trying to find solution

    #define MY_DEBUG
    //#define MY_PASSIVE_NODE
    #define MY_TRANSPORT_WAIT_READY_MS 1
    #define MY_RADIO_NRF24
    #define MY_NODE_ID 4
    //#define MY_PARENT_NODE_ID 0
    //#define MY_PARENT_NODE_IS_STATIC
    //#define MY_RF24_PA_LEVEL RF24_PA_MAX
    
    #include <MySensors.h>
    // MYSENSORS_LIBRARY_VERSION
    
    // https://github.com/finitespace/BME280
    #include <BME280I2C.h>
    
    typedef struct BatteryStatus {
      float voltage;
      int level;
    
      BatteryStatus() {
        voltage = 0;
        level = 0;
      }
    } BatteryStatus;
    
    typedef struct Weather {
      float temperature;
      float humidity;
      float baro;
    
      Weather() {
        temperature = -127.0;
        humidity = -127.0;
        baro = -127.0;
      }
    } Weather;
    
    const uint32_t SLEEP_TIME = 15*60*1000ul;
    const bool DEBUG = true;
    const float VBAT_FULL = 2.8;
    const float VBAT_EMPTY = 2.0;
    const byte BATTERY_VOLTAGE_SENSOR_ID = 3;
    const byte TEMPERATURE_SENSOR_ID = 1;
    const byte HUMIDITY_SENSOR_ID = 2;
    const byte BARO_SENSOR_ID = 4;
    
    // current sensors readings
    BatteryStatus batteryStatus;
    Weather weather;
    
    // define mysensors messages
    MyMessage vbatMsg(BATTERY_VOLTAGE_SENSOR_ID, V_VOLTAGE);
    MyMessage temperatureMsg(TEMPERATURE_SENSOR_ID, V_TEMP);
    MyMessage humidityMsg(HUMIDITY_SENSOR_ID, V_HUM);
    MyMessage baroMsg(BARO_SENSOR_ID, V_PRESSURE);
    
    // configure BME280 sensor
    BME280I2C::Settings settings(
       BME280::OSR_X1,
       BME280::OSR_X1,
       BME280::OSR_X1,
       BME280::Mode_Forced,            // Forced sample.  After taking the measurement the chip goes back to sleep.
       BME280::StandbyTime_1000ms,
       BME280::Filter_Off,
       BME280::SpiEnable_False,
       0x76                            // I2C address. I2C specific.
    );
    
    BME280I2C bme(settings);
    BME280::TempUnit temperatureUnit(BME280::TempUnit_Celsius);
    BME280::PresUnit baroUnit(BME280::PresUnit_hPa);
    
    void readBatteryStatus(BatteryStatus& batteryStatus) {
      int val = analogRead(A0);
      float voltage  = val * 0.0033464521;
      int level;
      if (voltage > VBAT_FULL) {
        level = 100;
      } else if (voltage < VBAT_EMPTY) {
        level = 0;
      } else {
        level = (int) ((voltage - VBAT_EMPTY) * 100.0 / (VBAT_FULL - VBAT_EMPTY));
      }
      if (DEBUG) {
        Serial.print("readBatteryStatus: ");
        Serial.print("val=");
        Serial.print(val);
        Serial.print(", level=");
        Serial.print(level);
        Serial.print("%, ");
        Serial.print("voltage=");
        Serial.print(voltage);
        Serial.print("V");
        Serial.println();
      }
      batteryStatus.voltage = voltage;
      batteryStatus.level = level;
    }
    
    void readWeather(Weather& weather) {
      bme.read(weather.baro, weather.temperature, weather.humidity, temperatureUnit, baroUnit);
    
      if (DEBUG) {
        Serial.print("readWeather: ");
        Serial.print("temperature=");
        Serial.print(weather.temperature);
        Serial.print("C");
        Serial.print(", humidity=");
        Serial.print(weather.humidity);
        Serial.print("%");
        Serial.print(", baro=");
        Serial.print(weather.baro);
        Serial.println("hPa");
      }
    }
    
    void send(Weather& weather) {
      //send_hard(temperatureMsg.set(weather.temperature, 1));
      //send_hard(humidityMsg.set(weather.humidity, 1));
      //send_hard(baroMsg.set(weather.baro, 1));
    }
    
    void send(BatteryStatus& batteryStatus) {
      //send_hard(vbatMsg.set(batteryStatus.voltage, 2));
      sendBatteryLevel(batteryStatus.level);
    }
    
    void send_hard(MyMessage& msg) {
      int retry = 5;
      while (retry--) {
        if (send(msg)) {
          return;
        }
        Serial.println("RETRY");
        wait(50); // TODO: Add some random value to send
      }
    }
    
    void setup() {
      // configure analog pin and do the first read
      // looks like first read always returns MAX value,
      // subsequent reads seems to be accurate
      analogReference(INTERNAL);
      analogRead(A0);
    
      int bmeRetry = 10;
      while(!bme.begin() && bmeRetry > 0)
      {
        Serial.println("Could not find BME280I2C sensor!");
        delay(1000);
        bmeRetry--;
      }
    }
    
    void presentation() {
      sendSketchInfo("Weather", "1.0");
      present(BATTERY_VOLTAGE_SENSOR_ID, S_MULTIMETER, "BAT/VOLTAGE");
      present(BARO_SENSOR_ID, S_BARO, "BARO");
      present(TEMPERATURE_SENSOR_ID, S_TEMP, "TEMPERATURE");
      present(HUMIDITY_SENSOR_ID, S_HUM, "HUMIDITY");
      Serial.println("mmmmmmm");
    }
    
    void loop() {
      readWeather(weather);
      send(weather);
    
      readBatteryStatus(batteryStatus);
      send(batteryStatus);
    
      if (DEBUG) {
        Serial.print("batteryStatus.level=");
        Serial.print(batteryStatus.level);
        Serial.print("%, batteryStatus.voltage=");
        Serial.print(batteryStatus.voltage);
        Serial.println("V");
        Serial.print("weather: ");
        Serial.print("temperature=");
        Serial.print(weather.temperature);
        Serial.print("C");
        Serial.print(", humidity=");
        Serial.print(weather.humidity);
        Serial.print("%");
        Serial.print(", baro=");
        Serial.print(weather.baro);
        Serial.println("hPa");
        Serial.println();
      }
    
      if (DEBUG) {
        wait(10*1000ul);
      } else {
        wait(SLEEP_TIME);
      }
    }
    

  • Plugin Developer

    Isn't this a bit rigorous? This makes it skip trying to make a connection after 1 millisecond?

    #define MY_TRANSPORT_WAIT_READY_MS 1
    


  • @alowhum said in !TSM:FPAR:NO REPLY:

    MY_TRANSPORT_WAIT_READY_MS

    I must admit that now I'm in "experimenting mode" trying every idea and see whether it helps.
    Maybe you are right but the default is 0ms (see MyConfig.h)



  • Hmmm.... today I managed to connect this node to gateway. I just rebooted gateway...


Log in to reply
 

Suggested Topics

  • 3
  • 2
  • 5
  • 6
  • 8

0
Online

11.4k
Users

11.1k
Topics

112.7k
Posts