Confirming node connected to gateway.



  • I was thinking of adding something to nodes so that when I reboot them I can see at the node if it has connected to the GW or not. Maybe a message on a small oled to confirm successful registration.

    What would be the most reliable way to do this?
    Can I get some value back from presentation stage?
    Is there anything better to do (like get confirmation from the controller)?

    Maybe I missed the obvious here, but it's late and I have a cold.


  • Hardware Contributor

    @skywatch
    I look for messages (e.g. presentation) at the gateway to diagnose connections at bootup. And I have a flow in node-red, which shows me, when a node didn't send for some time.

    You could use a led and blink codes on the node, if you really need a local indicator. A OLED would be a no go with battery powered sensors.



  • Thanks for the reply.

    I really just need 'something' at the node so that when I power it on I know that it has successfully established communication with the gateway.

    On mains powered units it could be a message on a display, on battery units it could be number of flashes of an led.

    I do not know 'how' I can do this. Is there some response at the node that I can monitor/interrogate to find out if successful connection has been made with a remote gateway?


  • Plugin Developer

    Here's an example from some of my code, specifically the SETUP function.

    void setup() {
      Serial.begin(115200); // for serial debugging over USB.
    
      if(isTransportReady()){
        Serial.println(F("Connected to gateway!"));
      }else{
        Serial.println(F("! NOT CONNECTED TO GATEWAY"));  
      }
    
    #ifdef HAS_DISPLAY
      mySerial.begin(115200);
      wait(1500);
      mySerial.print(F("CLR(0);"));
      mySerial.print(F("SBC(0);"));
      
      if(isTransportReady()){
        mySerial.print(F("DCV16(115,1,w,0);"));
      }
    
      // Labels
      mySerial.print(F("DCV16(10,155,Barometer,5);"));  // Barometer label
    
      // Wait icon
      mySerial.print(F("CIRF(120,239,35,3);"));       // Circle as a background
      //mySerial.print(F("SBC(3);"));
      //mySerial.print(F("DCV16(105,230,wait,15);"));     // Show while the forecast is not available yet.
      //mySerial.println(F("SBC(0);"));
    
      wait(400);
    #endif
    
      if(!bme280.init()){
        Serial.println(F("! Sensor error"));
    #ifdef HAS_DISPLAY
        mySerial.println(F("DCV16(10,250,Sensor error,1);"));
    #endif
      }
    
      wdt_enable(WDTO_2S);                              // Starts the watchdog timer. If it is not reset once every 2 seconds, then the entire device will automatically restart.                                
    }
    

    Personally I then display a "w" icon in the top-right of the screen if a connection has been made.

    In the loop code it requests an ACK whenever it updates the sensor values to the gateway (once a minute). There is also a simple incrementing counter byte that increases by 1 every time there is no reply. As soon as this reaches 5 (meaning no response from the server for 5 minutes in a row) it prints an " " to the corner of the screen, to indicate the loss of connection.

    If data once again arrives in the receive function, then a "w" is once again printed to the top right corner, and the incrementing byte is set back to 0.



  • @alowhum Thank you for sharing this! - This looks like exactly the kind of thing I was trying to achieve.

    Hopefully I get some time at the weekend to test it out.

    Cheers! 🙂


Log in to reply
 

Suggested Topics

  • 4
  • 4
  • 9
  • 8
  • 2
  • 3

62
Online

11.4k
Users

11.1k
Topics

112.7k
Posts