I have an arduino that has connected one NRF24L01 + module and a motion sensor and other arduino that has just connected a NRF24L01 module configured as the father of the first . The gateway receives packets of motion sensor but does not return the ack
This is the source code or gateway
#include <MySensor.h>
#include <MySigningNone.h>
#include <MyTransportNRF24.h>
#include <MyHwATMega328.h>
#include <SPI.h>
 
#define NODE_ID 0
#define MOTION_SENSOR_ID 0
#define MOTION_SENSOR_NODE 1
#define BEGIN_TRANSMISSION "BEGIN"
#define END_TRANSMISSION "END"
#define WHO_AM_I "WHO_AM_I"
#define WHICH_SENSOR "WHICH_SENSOR"
#define WHATH "WHATH"
#define SEND_TELEGRAM "SEND_TELEGRAM"
#define OK "OK"
MyTransportNRF24 transport(7, 8,RF24_PA_HIGH);
MySigningNone signer;
MyHwATMega328 hw;
MySensor gw(transport,hw);
bool begin_transmission=false;
int who_am_i=-1;
int which_sensor=-1;
int whath=-1;
String send_telegram="";
unsigned long timeout=10000;
unsigned long begin_transmission_time=millis();
MyMessage msg(MOTION_SENSOR_ID,V_VAR1);
void response(const MyMessage &m){
    
  String message_text=m.getString();
  Serial.println(message_text);
  if(message_text==BEGIN_TRANSMISSION && !begin_transmission){
    begin_transmission=true;
    begin_transmission_time=millis();
  }
  if(begin_transmission){
    if(who_am_i<0 && message_text.startsWith(WHO_AM_I)){
      who_am_i=message_text.substring(String(WHO_AM_I).length()+1).toInt();
    } 
    else if(which_sensor<0 && message_text.startsWith(WHICH_SENSOR)){
      which_sensor=message_text.substring(String(WHICH_SENSOR).length()+1).toInt();
    }
    else if(whath<0 && message_text.startsWith(WHATH)){
      whath=message_text.substring(String(WHATH).length()+1).toInt();
    }
    else if(message_text.startsWith(SEND_TELEGRAM)){
      send_telegram+=message_text.substring(String(SEND_TELEGRAM).length()+1);
    }
    else if(message_text.startsWith(END_TRANSMISSION)){
      begin_transmission=false;
      if(send_telegram!=""){
        String telegram=String("Node ")+who_am_i+String(" Sensor ")+which_sensor+String(" Valor ")+whath+String(" ")+send_telegram+String("*");
        who_am_i=-1;
        which_sensor=-1;
        whath=-1;
        send_telegram="";
        Serial.println(telegram);
      }
     }
    }
  msg.setDestination(MOTION_SENSOR_NODE);
  gw.send(msg.set(OK),true);
}
 
void setup() 
{ 
  Serial.begin(115200);
  gw.begin(response,NODE_ID,false,NULL);
  
}
 
void loop()
{
     gw.process();
     gw.wait(10000); // Wait 10 seconds
     if((begin_transmission_time+timeout)<millis()){
      begin_transmission=false;
      who_am_i=-1;
      which_sensor=-1;
      whath=-1;
      send_telegram="";
     }
}
And this is the source code of motion sensor sketch
#include <MySensor.h>
#include <MySigningNone.h>
#include <MyTransportNRF24.h>
#include <MyHwATMega328.h>
#include <SPI.h>
 
#define MOTION_SENSOR_ID 0
#define MOTION_SENSOR_PIN 5
#define NODE_ID 1
#define PARENT_ID 0
#define BEGIN_TRANSMISSION "BEGIN"
#define END_TRANSMISSION "END"
#define WHO_AM_I "WHO_AM_I"
#define WHICH_SENSOR "WHICH_SENSOR"
#define WHATH "WHATH"
#define SEND_TELEGRAM "SEND_TELEGRAM"
String who_am_i;
String which_sensor;
String whath;
String send_telegram;
bool ack_received=false;
unsigned long send_time=millis();
int retry_times=5;
MyTransportNRF24 transport(7, 8,RF24_PA_HIGH);
MySigningNone signer;
MyHwATMega328 hw;
MySensor gw(transport,hw);
MyMessage msg(MOTION_SENSOR_ID, V_TRIPPED);
void response(const MyMessage &m){
  ack_received=m.isAck();
  Serial.print("ack_received ");
  Serial.println(ack_received);
}
void send_message(const char* text){
  for(int i=0;i<retry_times && !ack_received;++i){
    gw.send(msg.set(text),true);
    delay(100);
  }
}
 
void setup() 
{ 
  Serial.begin(115200);
  gw.begin(response,NODE_ID,false,PARENT_ID);
  gw.sendSketchInfo("Motion sensor", "0.1");
  gw.present(MOTION_SENSOR_ID,S_MOTION,"Motion sensor",false); 
  Serial.print("Id ");
  Serial.println(gw.getNodeId());
  pinMode(MOTION_SENSOR_PIN, INPUT);
}
 
void loop()
{
     gw.process();
     if(digitalRead(MOTION_SENSOR_PIN)){
      
      send_message(BEGIN_TRANSMISSION);
      //Who am I
      if(ack_received){
        ack_received=false;
        who_am_i=String(WHO_AM_I)+" "+gw.getNodeId();
        send_message(who_am_i.c_str());
      }
      //Which sensor
      if(ack_received){
        ack_received=false;
        which_sensor=String(WHICH_SENSOR)+" "+MOTION_SENSOR_ID;
        send_message(which_sensor.c_str());
      }
      //Whath
      if(ack_received){
        ack_received=false;
        whath=String(WHATH)+" "+1;
        send_message(whath.c_str());
      }
      //Telegram
      if(ack_received){
        int string_pos=0;
        String message_text=String(" Detectada presencia");
        while(string_pos<message_text.length()){
          ack_received=false;
          send_telegram=String(SEND_TELEGRAM)+" "+message_text.substring(string_pos,string_pos+25-String(SEND_TELEGRAM).length());
          send_message(send_telegram.c_str());
          string_pos=string_pos+25-String(SEND_TELEGRAM).length()-1;
        }
      }
      //End transmission
      if(ack_received){
        ack_received=false;
        send_message(END_TRANSMISSION);
      }
      ack_received=false;
     }
     
     gw.wait(1000); // Wait 10 seconds
}
Serial port output for gateway is
0;0;3;0;9;gateway started, id=0, parent=0, distance=0
0;0;3;0;9;read: 1-1-0 s=0,c=1,t=16,pt=0,l=5,sg=0:BEGIN
0;0;3;0;9;send: 0-0-0-1 s=0,c=1,t=16,pt=0,l=5,sg=0,st=fail:BEGIN
BEGIN
0;0;3;0;9;send: 0-0-0-1 s=0,c=1,t=24,pt=0,l=2,sg=0,st=fail:OK
0;0;3;0;9;read: 1-1-0 s=0,c=1,t=16,pt=0,l=5,sg=0:BEGIN
0;0;3;0;9;send: 0-0-0-1 s=0,c=1,t=16,pt=0,l=5,sg=0,st=fail:BEGIN
BEGIN
0;0;3;0;9;send: 0-0-0-1 s=0,c=1,t=24,pt=0,l=2,sg=0,st=fail:OK
0;0;3;0;9;read: 1-1-0 s=0,c=1,t=16,pt=0,l=5,sg=0:BEGIN
0;0;3;0;9;send: 0-0-0-1 s=0,c=1,t=16,pt=0,l=5,sg=0,st=fail:BEGIN
BEGIN
0;0;3;0;9;send: 0-0-0-1 s=0,c=1,t=24,pt=0,l=2,sg=0,st=fail:OK
0;0;3;0;9;read: 1-1-0 s=0,c=1,t=16,pt=0,l=5,sg=0:BEGIN
0;0;3;0;9;send: 0-0-0-1 s=0,c=1,t=16,pt=0,l=5,sg=0,st=fail:BEGIN
BEGIN
And serial port output for motion sensor sketch is
send: 1-1-0-0 s=255,c=0,t=17,pt=0,l=5,sg=0,st=ok:1.5.4
send: 1-1-0-0 s=255,c=3,t=6,pt=1,l=1,sg=0,st=ok:0
sensor started, id=1, parent=0, distance=1
send: 1-1-0-0 s=255,c=3,t=11,pt=0,l=13,sg=0,st=ok:Motion sensor
send: 1-1-0-0 s=255,c=3,t=12,pt=0,l=3,sg=0,st=fail:0.1
send: 1-1-0-0 s=0,c=0,t=1,pt=0,l=13,sg=0,st=ok:Motion sensor
Id 1
send: 1-1-0-0 s=0,c=1,t=16,pt=0,l=5,sg=0,st=ok:BEGIN
send: 1-1-0-0 s=0,c=1,t=16,pt=0,l=5,sg=0,st=ok:BEGIN
send: 1-1-0-0 s=0,c=1,t=16,pt=0,l=5,sg=0,st=ok:BEGIN
send: 1-1-0-0 s=0,c=1,t=16,pt=0,l=5,sg=0,st=ok:BEGIN
send: 1-1-0-0 s=0,c=1,t=16,pt=0,l=5,sg=0,st=ok:BEGIN
send: 1-1-0-0 s=0,c=1,t=16,pt=0,l=5,sg=0,st=ok:BEGIN
send: 1-1-0-0 s=0,c=1,t=16,pt=0,l=5,sg=0,st=ok:BEGIN
send: 1-1-0-0 s=0,c=1,t=16,pt=0,l=5,sg=0,st=ok:BEGIN
send: 1-1-0-0 s=0,c=1,t=16,pt=0,l=5,sg=0,st=ok:BEGIN
send: 1-1-0-0 s=0,c=1,t=16,pt=0,l=5,sg=0,st=ok:BEGIN
Where is the problem?  It seems that the gateway can not find the motion sensor.
Moreover, there is a method in the myMessage class to know id of  node sending a message?
Thanks