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. General Discussion
  3. send updates regularly in noides HOW ?

send updates regularly in noides HOW ?

Scheduled Pinned Locked Moved General Discussion
5 Posts 2 Posters 1.4k Views 2 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.
  • pepsonP Offline
    pepsonP Offline
    pepson
    wrote on last edited by
    #1

    Hi
    I want add to sketch on my node to send updates status regularly to my gateway. But how i can do it ?
    I want add this to resolved problem when example on gateway power is down. Then node change status and then power come back on gateway and status node is not show correct in controller. It was repaire it when now i change status on node it was update on controller.

    1 Reply Last reply
    0
    • rozpruwaczR Offline
      rozpruwaczR Offline
      rozpruwacz
      wrote on last edited by
      #2

      Your question is very general, if You want specific answer ask a specific question. maybe attach your shetch ? if you want send updates regularly just send them regularly ...

      1 Reply Last reply
      0
      • pepsonP Offline
        pepsonP Offline
        pepson
        wrote on last edited by
        #3
        /**
           DESCRIPTION
           Sketch for 2x relay with buttons bistable. After back power all relays set OFF and send correct status OFF to controller.  
        */
        
        // Enable debug prints to serial monitor
        #define MY_DEBUG
        
        // Enable and select radio type attached
        #define MY_RADIO_NRF24
        //#define MY_RADIO_RFM69
        
        // Enabled repeater feature for this node
        #define MY_REPEATER_FEATURE
        
        #include <SPI.h>
        #include <MySensors.h>
        #include <Bounce2.h>
        
        // Define Relays
        #define RELAY_ON 1  // GPIO value to write to turn on attached relay
        #define RELAY_OFF 0  // GPIO value to write to turn off attached relay
        
        // Define Sensor ID's
        #define SSR_A_ID 1   // Id of the sensor child
        #define SSR_B_ID 2   // Id of the sensor child
        
        // Define buttons and relays
        const int buttonPinA = 3;
        const int buttonPinB = 4;
        const int relayPinA = 5;
        const int relayPinB = 6;
        
        // Define Variables
        int oldValueA = 0;
        int oldValueB = 0;
        bool stateA = false;
        bool stateB = false;
        int trigger = 0;
        
        
        Bounce debouncerA = Bounce();
        Bounce debouncerB = Bounce();
        
        MyMessage msgA(SSR_A_ID, V_STATUS);
        MyMessage msgB(SSR_B_ID, V_STATUS);
        
        void setup()
        {
        
          pinMode(buttonPinA, INPUT_PULLUP); // Setup the button Activate internal pull-up
          pinMode(buttonPinB, INPUT_PULLUP); // Setup the button Activate internal pull-up
        
        
          // After setting up the buttons, setup debouncer
          debouncerA.attach(buttonPinA);
          debouncerA.interval(5);
          debouncerB.attach(buttonPinB);
          debouncerB.interval(5);
        
          // Make sure relays are off when starting up
          digitalWrite(relayPinA, RELAY_OFF);
          digitalWrite(relayPinB, RELAY_OFF);
          // Then set relay pins in output mode
          pinMode(relayPinA, OUTPUT);
          pinMode(relayPinB, OUTPUT);
        
            /*--------------------- Added these lines for toggle switch-------------------------*/
          oldValueA = digitalRead(buttonPinA);  // set oldValueA to the current status of the toggle switch
          oldValueB = digitalRead(buttonPinB);  // set oldValueB to the current status of the toggle switch
         // send(msgA.set(false)); // Send off state for relayA to ensure controller knows the switch is off
         // send(msgB.set(false)); // Send off state for relayB to ensure controller knows the switch is off
          
        }
        
        void presentation()  {
          // Send the sketch version information to the gateway and Controller
          sendSketchInfo("2xRelay with bistable", "1.0");
        
          // Register all sensors to gw (they will be created as child devices)
          present(SSR_A_ID, S_LIGHT);
          present(SSR_B_ID, S_LIGHT);
        
        }
        
        /*
           Example on how to asynchronously check for new messages from gw
        */
        void loop()
        {
        if (trigger == 0){
          send(msgA.set(false)); // Send off state for relayA to ensure controller knows the switch is off
          send(msgB.set(false)); // Send off state for relayB to ensure controller knows the switch is off
          trigger = 1;
        }
        
        
          debouncerA.update();
          // Get the update value
          int valueA = debouncerA.read();
          if (valueA != oldValueA) {
           // send(msgA.set(stateA ? false : true), true); // Send new state and request ack back
            send(msgA.set(stateA ? false : true), false); // Send new state with no request for ack
            stateA = stateA ? false : true;               // invert the state
             digitalWrite(relayPinA, stateA ? RELAY_ON : RELAY_OFF);  // toggle the relay
          oldValueA = valueA;
          }
         
        
          debouncerB.update();
          // Get the update value
          int valueB = debouncerB.read();
          if (valueB != oldValueB) {
            //send(msgB.set(stateB ? false : true), true); // Send new state and request ack back
            send(msgB.set(stateB ? false : true), false); // Send new state with no request for ack
            stateB = stateB ? false : true;                // invert the state
             digitalWrite(relayPinB, stateB ? RELAY_ON : RELAY_OFF);  // toggle the relay
            
          oldValueB = valueB;
          }
        }
        
        void receive(const MyMessage &message) {
          // We only expect one type of message from controller. But we better check anyway.
          if (message.type == V_STATUS) {
              
            switch (message.sensor) {
              case 1:
                stateA = message.getBool();
                digitalWrite(message.sensor + 4, stateA ? RELAY_ON : RELAY_OFF);
                
                break;
              case 2:
                stateB = message.getBool();
                digitalWrite(message.sensor + 4, stateB ? RELAY_ON : RELAY_OFF);
                
                break;
              
            }
           
              // Write some debug info
            Serial.print("Incoming change for sensor:");
            Serial.println(message.sensor);
            Serial.print("from node:");
            Serial.println(message.sender);
            Serial.print(", New status: ");
            Serial.println(message.getBool());
          }
        }```
        1 Reply Last reply
        0
        • rozpruwaczR Offline
          rozpruwaczR Offline
          rozpruwacz
          wrote on last edited by rozpruwacz
          #4

          so in line 101 and 113 you have if's that decides if the report will be sent to the gateway. basically you need an 'else if' branch that will decide if it is time to send additional report. something like that:
          if () {
          ...
          }
          else if (sendAdditionalReport == true) {
          send(msgA.set(stateA ? false : true), false);
          }

          so You need to somehow calculate the sendAdditionalReport value in every pass of the loop accordingly. i don't really know so good arduino library but i believe there must be some kind of timer available that will help you with this calculation.

          1 Reply Last reply
          0
          • pepsonP Offline
            pepsonP Offline
            pepson
            wrote on last edited by pepson
            #5

            I dont understand and i am begginer. Can you explaine me more and give me ready solution please ?

            This is my actual sketch which i use:

            /**
               DESCRIPTION
               Sketch for 2x relay with buttons monostable. After back power all relays set OFF and send correct status OFF to controller.  
            */
            
            // Enable debug prints to serial monitor
            #define MY_DEBUG
            
            // Enable and select radio type attached
            #define MY_RADIO_NRF24
            //#define MY_RADIO_RFM69
            
            // Enabled repeater feature for this node
            #define MY_REPEATER_FEATURE
            
            #include <SPI.h>
            #include <MySensors.h>
            #include <Bounce2.h>
            
            // Define Relays
            #define RELAY_ON 1  // GPIO value to write to turn on attached relay
            #define RELAY_OFF 0  // GPIO value to write to turn off attached relay
            
            // Define Sensor ID's
            #define SSR_A_ID 1   // Id of the sensor child
            #define SSR_B_ID 2   // Id of the sensor child
            
            // Define buttons and relays
            const int buttonPinA = 3;
            const int buttonPinB = 4;
            const int relayPinA = 5;
            const int relayPinB = 6;
            
            // Define Variables
            int oldValueA = 0;
            int oldValueB = 0;
            bool stateA = false;
            bool stateB = false;
            int trigger = 0;
            
            Bounce debouncerA = Bounce();
            Bounce debouncerB = Bounce();
            
            MyMessage msgA(SSR_A_ID, V_STATUS);
            MyMessage msgB(SSR_B_ID, V_STATUS);
            
            void setup()
            {
            
              pinMode(buttonPinA, INPUT_PULLUP); // Setup the button Activate internal pull-up
              pinMode(buttonPinB, INPUT_PULLUP); // Setup the button Activate internal pull-up
            
            
              // After setting up the buttons, setup debouncer
              debouncerA.attach(buttonPinA);
              debouncerA.interval(5);
              debouncerB.attach(buttonPinB);
              debouncerB.interval(5);
            
              // Make sure relays are off when starting up
              digitalWrite(relayPinA, RELAY_OFF);
              digitalWrite(relayPinB, RELAY_OFF);
              // Then set relay pins in output mode
              pinMode(relayPinA, OUTPUT);
              pinMode(relayPinB, OUTPUT);
            
            }
            
            void presentation()  {
              // Send the sketch version information to the gateway and Controller
              sendSketchInfo("2xRelay with monostable", "1.0");
            
              // Register all sensors to gw (they will be created as child devices)
              present(SSR_A_ID, S_LIGHT);
              present(SSR_B_ID, S_LIGHT);
            
            }
            
            /*
               Example on how to asynchronously check for new messages from gw
            */
            void loop()
            {
            if (trigger == 0){
              send(msgA.set(false)); // Send off state for relayA to ensure controller knows the switch is off
              send(msgB.set(false)); // Send off state for relayB to ensure controller knows the switch is off
              trigger = 1;
            }
              
              debouncerA.update();
              // Get the update value
              int valueA = debouncerA.read();
              if (valueA != oldValueA && valueA == 0) {
                send(msgA.set(stateA ? false : true), true); // Send new state and request ack back
            
              }
              oldValueA = valueA;
             
            
              debouncerB.update();
              // Get the update value
              int valueB = debouncerB.read();
              if (valueB != oldValueB && valueB == 0) {
                send(msgB.set(stateB ? false : true), true); // Send new state and request ack back
            
              }
              oldValueB = valueB;
            }
            
            void receive(const MyMessage &message) {
              // We only expect one type of message from controller. But we better check anyway.
              if (message.type == V_STATUS) {
                  
                switch (message.sensor) {
                  case 1:
                    stateA = message.getBool();
                    digitalWrite(message.sensor + 4, stateA ? RELAY_ON : RELAY_OFF);
                    
                    break;
                  case 2:
                    stateB = message.getBool();
                    digitalWrite(message.sensor + 4, stateB ? RELAY_ON : RELAY_OFF);
                    
                    break;
                  
                }
               
                  // Write some debug info
                Serial.print("Incoming change for sensor:");
                Serial.println(message.sensor);
                Serial.print("from node:");
                Serial.println(message.sender);
                Serial.print(", New status: ");
                Serial.println(message.getBool());
              }
            }```
            1 Reply Last reply
            0
            Reply
            • Reply as topic
            Log in to reply
            • Oldest to Newest
            • Newest to Oldest
            • Most Votes


            18

            Online

            11.7k

            Users

            11.2k

            Topics

            113.1k

            Posts


            Copyright 2025 TBD   |   Forum Guidelines   |   Privacy Policy   |   Terms of Service
            • Login

            • Don't have an account? Register

            • Login or register to search.
            • First post
              Last post
            0
            • MySensors
            • OpenHardware.io
            • Categories
            • Recent
            • Tags
            • Popular