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. Development
  3. Node to Node Communication via Gatreway

Node to Node Communication via Gatreway

Scheduled Pinned Locked Moved Development
19 Posts 5 Posters 3.9k Views 3 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.
  • F Offline
    F Offline
    FullMetal
    wrote on last edited by
    #10

    Hello,

    Sorry to resort to an old topic ...
    I am currently using mysensors RS485, and I would like to extend my installation with this protocol.
    and I would like to make the nodes communicate with each other through the gateway.
    But I can't do what I want ... help!
    on my node 4, I have an input and 1 output, the input activates and deactivates the output. (here no worries).
    On my node 5, I have an input to activate the output of node 4, so I can turn it off but not turn it on, and I don't see any frames towards the gateway

    here is the code for my node 5:

    // MySensors 
    #define MY_PARENT_NODE_ID 0                   // define if fixed parent
    #define MY_PARENT_NODE_IS_STATIC
    #undef MY_REGISTRATION_FEATURE                  // sketch moves on if no registration
    #define MY_NODE_ID 5                     // fixed node number
    
    // Enable debug prints to serial monitor
    #define MY_DEBUG
    
    // Enable RS485 transport layer
    #define MY_RS485
    
    // Define this to enables DE-pin management on defined pin
    #define MY_RS485_DE_PIN 2
    
    // Set RS485 baud rate to use
    #define MY_RS485_BAUD_RATE 9600
    
    // Set blinking period
    #define MY_DEFAULT_LED_BLINK_PERIOD 300
    
    // Flash leds on rx/tx/err
    //#define MY_DEFAULT_ERR_LED_PIN 4  // Error led pin
    //#define MY_DEFAULT_RX_LED_PIN  5  // Receive led pin
    //#define MY_DEFAULT_TX_LED_PIN  6  // the PCB, on board LED
    
    
    // Enable this if RS485 is connected to a hardware serial port
    //#define MY_RS485_HWSERIAL Serial1
    //#include <MqttClient.h>
    #include <SPI.h>
    #include <MySensors.h>
    #include <Bounce2.h>
    
    #define CHILD_ID 4
    #define BUTTON_PIN  3  // Arduino Digital I/O pin for button/reed switch
    
    Bounce debouncer = Bounce(); 
    int oldValue=0;
    bool state;
    
    // Change to V_LIGHT if you use S_LIGHT in presentation below
    MyMessage msg(CHILD_ID,V_LIGHT);
    
    void setup()  
    {  
      // Setup the button
      pinMode(BUTTON_PIN,INPUT_PULLUP);
      // Activate internal pull-up
      //digitalWrite(BUTTON_PIN,HIGH);
      
      // After setting up the button, setup debouncer
      debouncer.attach(BUTTON_PIN);
      debouncer.interval(5);
      
    }
    
    void presentation() {
      // Register binary input sensor to gw (they will be created as child devices)
      // You can use S_DOOR, S_MOTION or S_LIGHT here depending on your usage. 
      // If S_LIGHT is used, remember to update variable type you send in. See "msg" above.
      sendSketchInfo("Button", "1.1");
    
      
      present(CHILD_ID, S_LIGHT);  
    }
    
    
    //  Check if digital input has changed and send in new value
    void loop() 
    {
      debouncer.update();
      // Get the update value
      int value = debouncer.read();
      if (value != oldValue && value==0) {
          msg.setDestination(4);
          send(msg.set(state?false:true), false);// Send new state and request ack back
      }
      oldValue = value;
    }  
    
    rejoe2R 1 Reply Last reply
    0
    • F FullMetal

      Hello,

      Sorry to resort to an old topic ...
      I am currently using mysensors RS485, and I would like to extend my installation with this protocol.
      and I would like to make the nodes communicate with each other through the gateway.
      But I can't do what I want ... help!
      on my node 4, I have an input and 1 output, the input activates and deactivates the output. (here no worries).
      On my node 5, I have an input to activate the output of node 4, so I can turn it off but not turn it on, and I don't see any frames towards the gateway

      here is the code for my node 5:

      // MySensors 
      #define MY_PARENT_NODE_ID 0                   // define if fixed parent
      #define MY_PARENT_NODE_IS_STATIC
      #undef MY_REGISTRATION_FEATURE                  // sketch moves on if no registration
      #define MY_NODE_ID 5                     // fixed node number
      
      // Enable debug prints to serial monitor
      #define MY_DEBUG
      
      // Enable RS485 transport layer
      #define MY_RS485
      
      // Define this to enables DE-pin management on defined pin
      #define MY_RS485_DE_PIN 2
      
      // Set RS485 baud rate to use
      #define MY_RS485_BAUD_RATE 9600
      
      // Set blinking period
      #define MY_DEFAULT_LED_BLINK_PERIOD 300
      
      // Flash leds on rx/tx/err
      //#define MY_DEFAULT_ERR_LED_PIN 4  // Error led pin
      //#define MY_DEFAULT_RX_LED_PIN  5  // Receive led pin
      //#define MY_DEFAULT_TX_LED_PIN  6  // the PCB, on board LED
      
      
      // Enable this if RS485 is connected to a hardware serial port
      //#define MY_RS485_HWSERIAL Serial1
      //#include <MqttClient.h>
      #include <SPI.h>
      #include <MySensors.h>
      #include <Bounce2.h>
      
      #define CHILD_ID 4
      #define BUTTON_PIN  3  // Arduino Digital I/O pin for button/reed switch
      
      Bounce debouncer = Bounce(); 
      int oldValue=0;
      bool state;
      
      // Change to V_LIGHT if you use S_LIGHT in presentation below
      MyMessage msg(CHILD_ID,V_LIGHT);
      
      void setup()  
      {  
        // Setup the button
        pinMode(BUTTON_PIN,INPUT_PULLUP);
        // Activate internal pull-up
        //digitalWrite(BUTTON_PIN,HIGH);
        
        // After setting up the button, setup debouncer
        debouncer.attach(BUTTON_PIN);
        debouncer.interval(5);
        
      }
      
      void presentation() {
        // Register binary input sensor to gw (they will be created as child devices)
        // You can use S_DOOR, S_MOTION or S_LIGHT here depending on your usage. 
        // If S_LIGHT is used, remember to update variable type you send in. See "msg" above.
        sendSketchInfo("Button", "1.1");
      
        
        present(CHILD_ID, S_LIGHT);  
      }
      
      
      //  Check if digital input has changed and send in new value
      void loop() 
      {
        debouncer.update();
        // Get the update value
        int value = debouncer.read();
        if (value != oldValue && value==0) {
            msg.setDestination(4);
            send(msg.set(state?false:true), false);// Send new state and request ack back
        }
        oldValue = value;
      }  
      
      rejoe2R Offline
      rejoe2R Offline
      rejoe2
      wrote on last edited by
      #11

      @FullMetal Imo, you have to specify all send-settings in one line, e.g. like this:

      send(buttonMsg.setDestination(MY_SISTER_NODE_ID).setSensor(CHILD_ID_RESET).set( button[i] ? "1" : "0"));
      

      Controller: FHEM; MySensors: 2.3.1, RS485,nRF24,RFM69, serial Gateways

      F 1 Reply Last reply
      0
      • rejoe2R rejoe2

        @FullMetal Imo, you have to specify all send-settings in one line, e.g. like this:

        send(buttonMsg.setDestination(MY_SISTER_NODE_ID).setSensor(CHILD_ID_RESET).set( button[i] ? "1" : "0"));
        
        F Offline
        F Offline
        FullMetal
        wrote on last edited by
        #12

        @rejoe2
        thank you for your return,
        but I have the same problem, I manage to activate the relay of node 4 from node 5, but I cannot deactivate it. and when I act on node 5 the gateway does not receive frames since it calls node 4.
        I think that node 4 should send the relay status to node 5 so that it knows whether it is activated or not.

        tekkaT rejoe2R 2 Replies Last reply
        1
        • F FullMetal

          @rejoe2
          thank you for your return,
          but I have the same problem, I manage to activate the relay of node 4 from node 5, but I cannot deactivate it. and when I act on node 5 the gateway does not receive frames since it calls node 4.
          I think that node 4 should send the relay status to node 5 so that it knows whether it is activated or not.

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

          @FullMetal Please post a full debug log of both nodes showing the observed behaviour.

          F 1 Reply Last reply
          0
          • F FullMetal

            @rejoe2
            thank you for your return,
            but I have the same problem, I manage to activate the relay of node 4 from node 5, but I cannot deactivate it. and when I act on node 5 the gateway does not receive frames since it calls node 4.
            I think that node 4 should send the relay status to node 5 so that it knows whether it is activated or not.

            rejoe2R Offline
            rejoe2R Offline
            rejoe2
            wrote on last edited by
            #14

            @FullMetal Pls add also code from node 4.

            In general:

            • if you want also info from node 5 to be sent to your controller/gateway, you have to add a second (normal) send command.
            • wrt. to how node 4 reacts on the messages, you may better use sth. like a toggle logic.

            Controller: FHEM; MySensors: 2.3.1, RS485,nRF24,RFM69, serial Gateways

            1 Reply Last reply
            0
            • tekkaT tekka

              @FullMetal Please post a full debug log of both nodes showing the observed behaviour.

              F Offline
              F Offline
              FullMetal
              wrote on last edited by
              #15

              @tekka @rejoe2
              Désolé de revenir si tard ..
              J'ai modifié mon code sur mes nœuds, mais le résultat n'est toujours pas là!

              Voici mes codes:

              node 4:

              // MySensors 
              #define MY_PARENT_NODE_ID 0                   // define if fixed parent
              #define MY_PARENT_NODE_IS_STATIC
              #undef MY_REGISTRATION_FEATURE                  // sketch moves on if no registration
              #define MY_NODE_ID 4                    // fixed node number
              
              // Enable debug prints to serial monitor
              #define MY_DEBUG
              
              // Enable RS485 transport layer
              #define MY_RS485
              
              // Define this to enables DE-pin management on defined pin
              #define MY_RS485_DE_PIN 2
              
              // Set RS485 baud rate to use
              #define MY_RS485_BAUD_RATE 9600
              
              // Set blinking period
              #define MY_DEFAULT_LED_BLINK_PERIOD 300
              
              // Flash leds on rx/tx/err
              //#define MY_DEFAULT_ERR_LED_PIN 4  // Error led pin
              //#define MY_DEFAULT_RX_LED_PIN  5  // Receive led pin
              //#define MY_DEFAULT_TX_LED_PIN  6  // the PCB, on board LED
              
              
              
              #include <MySensors.h>
              #include <Bounce2.h>
              
              #define RELAY_PIN  4  // Arduino Digital I/O pin number for relay 
              #define BUTTON_PIN  3  // Arduino Digital I/O pin number for button 
              #define CHILD_ID 1   // Id of the sensor child
              #define SYSTER_ID 5
              #define RELAY_ON 1
              #define RELAY_OFF 0
              
              Bounce debouncer = Bounce(); 
              int oldValue=0;
              bool state;
              
              MyMessage msg(CHILD_ID,V_LIGHT);
              //MyMessage msgconf(CHILD_ID,V_VAR1);
              
              void setup()  
              {  
                // Setup the button
                pinMode(BUTTON_PIN,INPUT_PULLUP);
                // Activate internal pull-up
                //digitalWrite(BUTTON_PIN,HIGH);
                
                // After setting up the button, setup debouncer
                debouncer.attach(BUTTON_PIN);
                debouncer.interval(5);
              
                // Make sure relays are off when starting up
                digitalWrite(RELAY_PIN, RELAY_OFF);
                // Then set relay pins in output mode
                pinMode(RELAY_PIN, OUTPUT);   
                    
                // Set relay to last known state (using eeprom storage) 
                state = loadState(CHILD_ID);
                digitalWrite(RELAY_PIN, state?RELAY_ON:RELAY_OFF);
              }
              
              void presentation()  {
                // Send the sketch version information to the gateway and Controller
                sendSketchInfo("Relay & Button", "1.0");
              
                // Register all sensors to gw (they will be created as child devices)
                present(CHILD_ID, S_LIGHT);
              }
              
              /*
              *  Example on how to asynchronously check for new messages from gw
              */
              void loop() 
              {
                debouncer.update();
                // Get the update value
                int value = debouncer.read();
                if (value != oldValue && value==0) {
                    send(msg.setDestination(MY_PARENT_NODE_ID).setSensor(CHILD_ID).set(state?false:true), true); // Send new state and request ack back
                    wait(100);
                    send(msg.setDestination(SYSTER_ID).setSensor(CHILD_ID).set(state?false:true), true);
                }
                oldValue = value;
              } 
               
              void receive(const MyMessage &message) {
                // We only expect one type of message from controller. But we better check anyway.
                if (message.isAck()) {
                   Serial.println("This is an ack from gateway");
                }
              
                if (message.type == V_LIGHT) {
                   // Change relay state
                   state = message.getBool();
                   digitalWrite(RELAY_PIN, state?RELAY_ON:RELAY_OFF);
                   // Store state in eeprom
                   saveState(CHILD_ID, state);
                     
                   // Write some debug info
                   Serial.print("Incoming change for sensor:");
                   Serial.print(message.sensor);
                   Serial.print(", New status: ");
                   Serial.println(message.getBool());
                 } 
              
              }
              

              node 5:

              // MySensors 
              #define MY_PARENT_NODE_ID 0                   // define if fixed parent
              #define MY_PARENT_NODE_IS_STATIC
              #undef MY_REGISTRATION_FEATURE                  // sketch moves on if no registration
              #define MY_NODE_ID 5                     // fixed node number
              
              // Enable debug prints to serial monitor
              #define MY_DEBUG
              
              // Enable RS485 transport layer
              #define MY_RS485
              
              // Define this to enables DE-pin management on defined pin
              #define MY_RS485_DE_PIN 2
              
              // Set RS485 baud rate to use
              #define MY_RS485_BAUD_RATE 9600
              
              // Set blinking period
              #define MY_DEFAULT_LED_BLINK_PERIOD 300
              
              // Flash leds on rx/tx/err
              //#define MY_DEFAULT_ERR_LED_PIN 4  // Error led pin
              //#define MY_DEFAULT_RX_LED_PIN  5  // Receive led pin
              //#define MY_DEFAULT_TX_LED_PIN  6  // the PCB, on board LED
              
              
              // Enable this if RS485 is connected to a hardware serial port
              //#define MY_RS485_HWSERIAL Serial1
              //#include <MqttClient.h>
              #include <SPI.h>
              #include <MySensors.h>
              #include <Bounce2.h>
              
              #define CHILD_ID 1
              #define SYSTER_ID 4
              #define BUTTON_PIN  3  // Arduino Digital I/O pin for button/reed switch
              
              Bounce debouncer = Bounce(); 
              int oldValue=0;
              bool state;
              
              // Change to V_LIGHT if you use S_LIGHT in presentation below
              MyMessage msg(CHILD_ID,V_LIGHT);
              
              void setup()  
              {  
                // Setup the button
                pinMode(BUTTON_PIN,INPUT_PULLUP);
                // Activate internal pull-up
                //digitalWrite(BUTTON_PIN,HIGH);
                
                // After setting up the button, setup debouncer
                debouncer.attach(BUTTON_PIN);
                debouncer.interval(5);
                
              }
              
              void presentation() {
                // Register binary input sensor to gw (they will be created as child devices)
                // You can use S_DOOR, S_MOTION or S_LIGHT here depending on your usage. 
                // If S_LIGHT is used, remember to update variable type you send in. See "msg" above.
                sendSketchInfo("Button", "1.1");
              
                
                present(CHILD_ID, S_LIGHT);  
              }
              
              
              //  Check if digital input has changed and send in new value
              void loop() 
              {
                debouncer.update();
                // Get the update value
                int value = debouncer.read();
                if (value != oldValue && value==0) {
                    send(msg.setDestination(MY_PARENT_NODE_ID).setSensor(CHILD_ID).set(state?false:true), false);// Send new state and request ack back
                    Serial.println("wait 1/10sec");
                    wait(100);
                    send(msg.setDestination(SYSTER_ID).setSensor(CHILD_ID).set(state?false:true), false);
                }
                oldValue = value;
              }  
              void receive(const MyMessage &message) {
                // We only expect one type of message from controller. But we better check anyway.
                if (message.isAck()) {
                   Serial.println("This is an ack from gateway");
                }
              
                if (message.type == V_LIGHT) {
                   // Change relay state
                   state = message.getBool();
                   //digitalWrite(RELAY_PIN, state?RELAY_ON:RELAY_OFF);
                   // Store state in eeprom
                   saveState(SYSTER_ID, state);
                     
                   // Write some debug info
                   Serial.print("Incoming change for sensor:");
                   Serial.print(message.sensor);
                   Serial.print(", New status: ");
                   Serial.println(message.getBool());
                 } 
              
              }
              

              From node 4, my output is activated and deactivated immediately, due to double sending

              from node 5, I can activate or deactivate if I launch the command from node 4 before otherwise.

              tekkaT 1 Reply Last reply
              0
              • F FullMetal

                @tekka @rejoe2
                Désolé de revenir si tard ..
                J'ai modifié mon code sur mes nœuds, mais le résultat n'est toujours pas là!

                Voici mes codes:

                node 4:

                // MySensors 
                #define MY_PARENT_NODE_ID 0                   // define if fixed parent
                #define MY_PARENT_NODE_IS_STATIC
                #undef MY_REGISTRATION_FEATURE                  // sketch moves on if no registration
                #define MY_NODE_ID 4                    // fixed node number
                
                // Enable debug prints to serial monitor
                #define MY_DEBUG
                
                // Enable RS485 transport layer
                #define MY_RS485
                
                // Define this to enables DE-pin management on defined pin
                #define MY_RS485_DE_PIN 2
                
                // Set RS485 baud rate to use
                #define MY_RS485_BAUD_RATE 9600
                
                // Set blinking period
                #define MY_DEFAULT_LED_BLINK_PERIOD 300
                
                // Flash leds on rx/tx/err
                //#define MY_DEFAULT_ERR_LED_PIN 4  // Error led pin
                //#define MY_DEFAULT_RX_LED_PIN  5  // Receive led pin
                //#define MY_DEFAULT_TX_LED_PIN  6  // the PCB, on board LED
                
                
                
                #include <MySensors.h>
                #include <Bounce2.h>
                
                #define RELAY_PIN  4  // Arduino Digital I/O pin number for relay 
                #define BUTTON_PIN  3  // Arduino Digital I/O pin number for button 
                #define CHILD_ID 1   // Id of the sensor child
                #define SYSTER_ID 5
                #define RELAY_ON 1
                #define RELAY_OFF 0
                
                Bounce debouncer = Bounce(); 
                int oldValue=0;
                bool state;
                
                MyMessage msg(CHILD_ID,V_LIGHT);
                //MyMessage msgconf(CHILD_ID,V_VAR1);
                
                void setup()  
                {  
                  // Setup the button
                  pinMode(BUTTON_PIN,INPUT_PULLUP);
                  // Activate internal pull-up
                  //digitalWrite(BUTTON_PIN,HIGH);
                  
                  // After setting up the button, setup debouncer
                  debouncer.attach(BUTTON_PIN);
                  debouncer.interval(5);
                
                  // Make sure relays are off when starting up
                  digitalWrite(RELAY_PIN, RELAY_OFF);
                  // Then set relay pins in output mode
                  pinMode(RELAY_PIN, OUTPUT);   
                      
                  // Set relay to last known state (using eeprom storage) 
                  state = loadState(CHILD_ID);
                  digitalWrite(RELAY_PIN, state?RELAY_ON:RELAY_OFF);
                }
                
                void presentation()  {
                  // Send the sketch version information to the gateway and Controller
                  sendSketchInfo("Relay & Button", "1.0");
                
                  // Register all sensors to gw (they will be created as child devices)
                  present(CHILD_ID, S_LIGHT);
                }
                
                /*
                *  Example on how to asynchronously check for new messages from gw
                */
                void loop() 
                {
                  debouncer.update();
                  // Get the update value
                  int value = debouncer.read();
                  if (value != oldValue && value==0) {
                      send(msg.setDestination(MY_PARENT_NODE_ID).setSensor(CHILD_ID).set(state?false:true), true); // Send new state and request ack back
                      wait(100);
                      send(msg.setDestination(SYSTER_ID).setSensor(CHILD_ID).set(state?false:true), true);
                  }
                  oldValue = value;
                } 
                 
                void receive(const MyMessage &message) {
                  // We only expect one type of message from controller. But we better check anyway.
                  if (message.isAck()) {
                     Serial.println("This is an ack from gateway");
                  }
                
                  if (message.type == V_LIGHT) {
                     // Change relay state
                     state = message.getBool();
                     digitalWrite(RELAY_PIN, state?RELAY_ON:RELAY_OFF);
                     // Store state in eeprom
                     saveState(CHILD_ID, state);
                       
                     // Write some debug info
                     Serial.print("Incoming change for sensor:");
                     Serial.print(message.sensor);
                     Serial.print(", New status: ");
                     Serial.println(message.getBool());
                   } 
                
                }
                

                node 5:

                // MySensors 
                #define MY_PARENT_NODE_ID 0                   // define if fixed parent
                #define MY_PARENT_NODE_IS_STATIC
                #undef MY_REGISTRATION_FEATURE                  // sketch moves on if no registration
                #define MY_NODE_ID 5                     // fixed node number
                
                // Enable debug prints to serial monitor
                #define MY_DEBUG
                
                // Enable RS485 transport layer
                #define MY_RS485
                
                // Define this to enables DE-pin management on defined pin
                #define MY_RS485_DE_PIN 2
                
                // Set RS485 baud rate to use
                #define MY_RS485_BAUD_RATE 9600
                
                // Set blinking period
                #define MY_DEFAULT_LED_BLINK_PERIOD 300
                
                // Flash leds on rx/tx/err
                //#define MY_DEFAULT_ERR_LED_PIN 4  // Error led pin
                //#define MY_DEFAULT_RX_LED_PIN  5  // Receive led pin
                //#define MY_DEFAULT_TX_LED_PIN  6  // the PCB, on board LED
                
                
                // Enable this if RS485 is connected to a hardware serial port
                //#define MY_RS485_HWSERIAL Serial1
                //#include <MqttClient.h>
                #include <SPI.h>
                #include <MySensors.h>
                #include <Bounce2.h>
                
                #define CHILD_ID 1
                #define SYSTER_ID 4
                #define BUTTON_PIN  3  // Arduino Digital I/O pin for button/reed switch
                
                Bounce debouncer = Bounce(); 
                int oldValue=0;
                bool state;
                
                // Change to V_LIGHT if you use S_LIGHT in presentation below
                MyMessage msg(CHILD_ID,V_LIGHT);
                
                void setup()  
                {  
                  // Setup the button
                  pinMode(BUTTON_PIN,INPUT_PULLUP);
                  // Activate internal pull-up
                  //digitalWrite(BUTTON_PIN,HIGH);
                  
                  // After setting up the button, setup debouncer
                  debouncer.attach(BUTTON_PIN);
                  debouncer.interval(5);
                  
                }
                
                void presentation() {
                  // Register binary input sensor to gw (they will be created as child devices)
                  // You can use S_DOOR, S_MOTION or S_LIGHT here depending on your usage. 
                  // If S_LIGHT is used, remember to update variable type you send in. See "msg" above.
                  sendSketchInfo("Button", "1.1");
                
                  
                  present(CHILD_ID, S_LIGHT);  
                }
                
                
                //  Check if digital input has changed and send in new value
                void loop() 
                {
                  debouncer.update();
                  // Get the update value
                  int value = debouncer.read();
                  if (value != oldValue && value==0) {
                      send(msg.setDestination(MY_PARENT_NODE_ID).setSensor(CHILD_ID).set(state?false:true), false);// Send new state and request ack back
                      Serial.println("wait 1/10sec");
                      wait(100);
                      send(msg.setDestination(SYSTER_ID).setSensor(CHILD_ID).set(state?false:true), false);
                  }
                  oldValue = value;
                }  
                void receive(const MyMessage &message) {
                  // We only expect one type of message from controller. But we better check anyway.
                  if (message.isAck()) {
                     Serial.println("This is an ack from gateway");
                  }
                
                  if (message.type == V_LIGHT) {
                     // Change relay state
                     state = message.getBool();
                     //digitalWrite(RELAY_PIN, state?RELAY_ON:RELAY_OFF);
                     // Store state in eeprom
                     saveState(SYSTER_ID, state);
                       
                     // Write some debug info
                     Serial.print("Incoming change for sensor:");
                     Serial.print(message.sensor);
                     Serial.print(", New status: ");
                     Serial.println(message.getBool());
                   } 
                
                }
                

                From node 4, my output is activated and deactivated immediately, due to double sending

                from node 5, I can activate or deactivate if I launch the command from node 4 before otherwise.

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

                @FullMetal said in Node to Node Communication via Gatreway: Please upload the debug logs for further troubleshooting.

                F 2 Replies Last reply
                0
                • tekkaT tekka

                  @FullMetal said in Node to Node Communication via Gatreway: Please upload the debug logs for further troubleshooting.

                  F Offline
                  F Offline
                  FullMetal
                  wrote on last edited by
                  #17

                  @tekka said in Node to Node Communication via Gatreway:

                  @FullMetal said in Node to Node Communication via Gatreway: Please upload the debug logs for further troubleshooting.

                  Sorry

                  Debug logs node 4
                  Press button node 4

                  08:16:01.668 -> 13555 TSF:MSG:SEND,4-4-0-0,s=1,c=1,t=2,pt=1,l=1,sg=0,ft=0,st=OK:0
                  08:16:01.701 -> 13582 TSF:MSG:READ,0-0-4,s=1,c=1,t=2,pt=1,l=1,sg=0:0
                  08:16:01.701 -> 13586 TSF:MSG:ECHO
                  08:16:01.701 -> This is an ack from gateway

                  08:16:01.701 -> Incoming change for sensor:1, New status: 0

                  08:16:01.800 -> 13678 TSF:MSG:SEND,4-4-5-5,s=1,c=1,t=2,pt=1,l=1,sg=0,ft=0,st=OK:1
                  08:16:01.800 -> 13684 TSF:RTE:N2N OK
                  08:16:01.800 -> 13703 TSF:MSG:READ,5-5-4,s=1,c=1,t=2,pt=1,l=1,sg=0:1
                  08:16:01.833 -> 13708 TSF:MSG:ECHO
                  08:16:01.833 -> This is an ack from gateway

                  08:16:01.833 -> Incoming change for sensor:1, New status: 1

                  Press button node 5

                  08:21:01.371 -> 313012 TSF:MSG:READ,5-5-4,s=1,c=1,t=2,pt=1,l=1,sg=0:0
                  08:21:01.371 -> Incoming change for sensor:1, New status: 0

                  second press node 5

                  08:21:06.238 -> 317865 TSF:MSG:READ,5-5-4,s=1,c=1,t=2,pt=1,l=1,sg=0:0
                  08:21:06.238 -> Incoming change for sensor:1, New status: 0

                  Debug logs node 5
                  Press button node 4

                  08:23:59.955 -> 51752 TSF:MSG:READ,4-4-5,s=1,c=1,t=2,pt=1,l=1,sg=0:1
                  08:23:59.955 -> 51757 TSF:MSG:ECHO REQ
                  08:23:59.988 -> 51777 TSF:MSG:SEND,5-5-4-4,s=1,c=1,t=2,pt=1,l=1,sg=0,ft=0,st=OK:1
                  08:23:59.988 -> 51783 TSF:RTE:N2N OK
                  08:23:59.988 -> Incoming change for sensor:1, New status: 1

                  Press button node 5

                  08:24:36.929 -> 88704 TSF:MSG:SEND,5-5-0-0,s=1,c=1,t=2,pt=1,l=1,sg=0,ft=0,st=OK:0
                  08:24:36.929 -> wait 1/10sec

                  08:24:37.062 -> 88827 TSF:MSG:SEND,5-5-4-4,s=1,c=1,t=2,pt=1,l=1,sg=0,ft=0,st=OK:0
                  08:24:37.062 -> 88834 TSF:RTE:N2N OK

                  Debug logs gateway
                  Press button node 4 and node 5

                  08:26:19.261 -> 0;255;3;0;9;79078 TSF:MSG:READ,4-4-0,s=1,c=1,t=2,pt=1,l=1,sg=0:0
                  08:26:19.261 -> 0;255;3;0;9;79084 TSF:MSG:ACK REQ
                  08:26:19.294 -> 0;255;3;0;9;79105 TSF:MSG:SEND,0-0-4-4,s=1,c=1,t=2,pt=1,l=1,sg=0,ft=0,st=OK:0
                  08:26:19.294 -> 4;1;1;0;2;0
                  08:26:20.321 -> 0;255;3;0;9;80116 TSF:MSG:READ,5-5-0,s=1,c=1,t=2,pt=1,l=1,sg=0:0
                  08:26:20.321 -> 5;1;1;0;2;0

                  1 Reply Last reply
                  0
                  • tekkaT tekka

                    @FullMetal said in Node to Node Communication via Gatreway: Please upload the debug logs for further troubleshooting.

                    F Offline
                    F Offline
                    FullMetal
                    wrote on last edited by FullMetal
                    #18

                    @tekka @rejoe2
                    I just found!

                    ask the gateway not to send back acq
                    send(msg.setDestination(MY_PARENT_NODE_ID).setSensor(CHILD_ID).set(state?false:true), false); // Send new state and request ack back
                    wait(100);
                    send(msg.setDestination(SYSTER_ID).setSensor(CHILD_ID).set(state?false:true), true);

                    1 Reply Last reply
                    0
                    • rejoe2R Offline
                      rejoe2R Offline
                      rejoe2
                      wrote on last edited by
                      #19

                      Good to her you found that point :smile:.
                      Imo you'd better change also your receive functions to not react on "ack" messages (via "else" prior to message.type-comparison).

                      Controller: FHEM; MySensors: 2.3.1, RS485,nRF24,RFM69, serial Gateways

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


                      17

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