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.
  • hekH Offline
    hekH Offline
    hek
    Admin
    wrote on last edited by
    #6

    I think node 1 has a corrupt routing table (it thinks node 3 is a child).

    Try clearing eeprom and re-upload your sketch. Or disable repeater-mode on it.

    1 Reply Last reply
    0
    • J Offline
      J Offline
      jkandasa
      Plugin Developer
      wrote on last edited by
      #7

      How to print routing table in serial console?

      1 Reply Last reply
      0
      • hekH Offline
        hekH Offline
        hek
        Admin
        wrote on last edited by
        #8

        You have to read it from eeprom.
        It starts at position: EEPROM_ROUTES_ADDRESS (defined in MySensors.h)

        http://www.arduino.cc/en/Tutorial/EEPROMRead

        1 Reply Last reply
        0
        • J Offline
          J Offline
          jkandasa
          Plugin Developer
          wrote on last edited by
          #9

          @hek you are right! There was an entry for Node-2 in Node-1 routing table, As it has direct access to Node-2, was trying to send directly. I removed the entry and now it's going throw gateway. All node works well. Perfect!

          I thing we have to add code to remove routing table entry dynamically if it face some N number of failures. It will make life easier for those who is shifting node from one location to another location often.

          1 Reply Last reply
          1
          • 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


                              15

                              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