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. Troubleshooting
  3. [Solved] Communication from Gateway to Sensor node not working

[Solved] Communication from Gateway to Sensor node not working

Scheduled Pinned Locked Moved Troubleshooting
7 Posts 3 Posters 3.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.
  • palande.vaibhavP Offline
    palande.vaibhavP Offline
    palande.vaibhav
    wrote on last edited by tekka
    #1

    Hello guys,

    I have built temperature sensor DS18B20 using the example sketch, I also have a simple on off switch and LED on my sensor node. I am using Arduino Uno for both Gateway and sensor node.

    My sensors work and show values on the MYSController. Now when I try to control LED using the MYSController, it doesn't work.

    Here is the screenshot of what happens in MYSController:
    0_1475031891876_MYSController_2016-09-27_20-04-42.png

    I have tried with with and without payload. My code doesn't really need a payload to turn on or off the LED. It just toggles the state of an LED when it receives V_LIGHT message.

    Here is my code for sensor node:

    // Enable debug prints to serial monitor
    #define MY_DEBUG 
    
    // Enable and select radio type attached
    #define MY_RADIO_NRF24
    //#define MY_RADIO_RFM69
    
    #include <SPI.h>
    #include <MySensors.h>  
    #include <DallasTemperature.h>
    #include <OneWire.h>
    
    #define COMPARE_TEMP 1 // Send temperature only if changed? 1 = Yes 0 = No
    
    #define ONE_WIRE_BUS 3 // Pin where dallase sensor is connected 
    #define MAX_ATTACHED_DS18B20 16
    unsigned long SLEEP_TIME = 30000; // Sleep time between reads (in milliseconds)
    OneWire oneWire(ONE_WIRE_BUS); // Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
    DallasTemperature sensors(&oneWire); // Pass the oneWire reference to Dallas Temperature. 
    float lastTemperature[MAX_ATTACHED_DS18B20];
    int numSensors=0;
    bool receivedConfig = false;
    bool metric = true;
    
    
    
    // Initialize temperature message
    MyMessage msg(0,V_TEMP);
    
    //Initialize switch message
    MyMessage msg1(6, V_TRIPPED);
    
    
    void before()
    {
      // Startup up the OneWire library
      sensors.begin();
    }
    
    void setup()  
    { 
      // requestTemperatures() will not block current thread
      sensors.setWaitForConversion(false);
    
      // Setup the buttons for switch
      pinMode(2, INPUT);
    
      // Activate internal pull-ups
      digitalWrite(2, HIGH);
    
      //Set LED pin to OUTPUT
      pinMode (4, OUTPUT);
    
    }
    
    void presentation() {
      // Send the sketch version information to the gateway and Controller
      sendSketchInfo("Temperature and switch", "1.0");
    
      // Fetch the number of attached temperature sensors  
      numSensors = sensors.getDeviceCount();
    
      // Present all sensors to controller
      //for (int i=0; i<numSensors && i<MAX_ATTACHED_DS18B20; i++) {   
         present(0, S_TEMP);
    
         //preset the switch
         present(6, S_DOOR); 
    
         //present LED
         present(7, S_LIGHT);
    
      }
    
    void loop()
    {     
      // Fetch temperatures from Dallas sensors
      sensors.requestTemperatures();
    
      // query conversion time and sleep until conversion completed
      int16_t conversionTime = sensors.millisToWaitForConversion(sensors.getResolution());
      // sleep() call can be replaced by wait() call if node need to process incoming messages (or if node is repeater)
      sleep(conversionTime);
    
      // Read temperatures and send them to controller 
      for (int i=0; i<numSensors && i<MAX_ATTACHED_DS18B20; i++) {
     
        // Fetch and round temperature to one decimal
        float temperature = static_cast<float>(static_cast<int>((getConfig().isMetric?sensors.getTempCByIndex(i):sensors.getTempFByIndex(i)) * 10.)) / 10.;
     
        // Only send data if temperature has changed and no error
        #if COMPARE_TEMP == 1
        if (lastTemperature[i] != temperature && temperature != -127.00 && temperature != 85.00) {
        #else
        if (temperature != -127.00 && temperature != 85.00) {
        #endif
     
          // Send in the new temperature
          send(msg.setSensor(i).set(temperature,1));
          // Save new temperatures for next compare
          lastTemperature[i]=temperature;
        }
      }
      //sleep(SLEEP_TIME);
    
      //Code for switch
    
      uint8_t value;
      static uint8_t sentValue=2;
      
      value = digitalRead(2);
      
      if (value != sentValue) {
         // Value has changed from last transmission, send the updated value
         send(msg1.set(value==HIGH ? 1 : 0));
         digitalWrite(8,!(digitalRead(8)));
    
         String string = "Value changed to: ";
    
         Serial.println(string += value);
         sentValue = value;
      }
     // Sleep until something happens with the sensor
      //sleep(0,CHANGE,0);
    }
    
    void receive(const MyMessage &message)
    {
    
      Serial.println("Received command");
      //Check for the message from controller
      if (message.type==V_LIGHT)
      {
        digitalWrite(4, !digitalRead(4));
        Serial.println("LED status changed");
      }
    }
    

    For gateway I am using the example code without making any change. When I send command using MYSController, I can see RX LED blink on the Gateway Arduino but nothing on the sensor node serial monitor.

    Serial Monitor for sensor node:
    0_1475032160357_javaw_2016-09-27_20-08-59.png

    What am I doing wrong?
    I will really appreciate the help.

    Thank You,
    Vaibhav

    1 Reply Last reply
    0
    • S Offline
      S Offline
      sundberg84
      Hardware Contributor
      wrote on last edited by
      #2

      Looks like the radio communication is fine!?
      What kind of hardware do you use to control LED?

      Controller: Proxmox VM - Home Assistant
      MySensors GW: Arduino Uno - W5100 Ethernet, Gw Shield Nrf24l01+ 2,4Ghz
      MySensors GW: Arduino Uno - Gw Shield RFM69, 433mhz
      RFLink GW - Arduino Mega + RFLink Shield, 433mhz

      palande.vaibhavP 1 Reply Last reply
      0
      • S sundberg84

        Looks like the radio communication is fine!?
        What kind of hardware do you use to control LED?

        palande.vaibhavP Offline
        palande.vaibhavP Offline
        palande.vaibhav
        wrote on last edited by palande.vaibhav
        #3

        @sundberg84
        I just have LED connected to the pin 4 of Arduino.
        I have written code such that when receive() is executed the LED is toggled.

        S 1 Reply Last reply
        0
        • palande.vaibhavP palande.vaibhav

          @sundberg84
          I just have LED connected to the pin 4 of Arduino.
          I have written code such that when receive() is executed the LED is toggled.

          S Offline
          S Offline
          sundberg84
          Hardware Contributor
          wrote on last edited by
          #4

          @palande.vaibhav - and when you recieve the command it doesnt turn on?
          What does this mean?

          digitalWrite(4, !digitalRead(4));
          

          In the relaysketch its this;

          digitalWrite(message.sensor-1+RELAY_1, message.getBool()?RELAY_ON:RELAY_OFF);
          

          Try HIGH/LOW on a normal led/blink sketch and see if that works.

          Controller: Proxmox VM - Home Assistant
          MySensors GW: Arduino Uno - W5100 Ethernet, Gw Shield Nrf24l01+ 2,4Ghz
          MySensors GW: Arduino Uno - Gw Shield RFM69, 433mhz
          RFLink GW - Arduino Mega + RFLink Shield, 433mhz

          palande.vaibhavP 1 Reply Last reply
          0
          • S sundberg84

            @palande.vaibhav - and when you recieve the command it doesnt turn on?
            What does this mean?

            digitalWrite(4, !digitalRead(4));
            

            In the relaysketch its this;

            digitalWrite(message.sensor-1+RELAY_1, message.getBool()?RELAY_ON:RELAY_OFF);
            

            Try HIGH/LOW on a normal led/blink sketch and see if that works.

            palande.vaibhavP Offline
            palande.vaibhavP Offline
            palande.vaibhav
            wrote on last edited by palande.vaibhav
            #5

            @sundberg84
            No it doesn't turn on. And I even don't see anything on the serial monitor for the sensor node. I think I should be able to see the READ on the serial monitor for the sensor node. But I don't get that on there.

            digitalWrite(4, !digitalRead(4));
            

            This means,
            digitalRead(4) ------> Read the value at pin 4.
            ! -----> Toggle it, that is after reading the value, if it is 0 then make it one and if it is 1 make it 0.
            digitalWrite(4, ----> Write it back to pin 4.

            digitalWrite(message.sensor-1+RELAY_1, message.getBool()?RELAY_ON:RELAY_OFF);
            

            This line actually checks for the payload that comes with the received signal and makes RELAY_ON or RELAY_OFF decision accordingly.
            So, I am doing much simpler task than relay example. I am trying to not even check what the received message says, I am just checking if I get the message or not and make LED toggle if I do get the message.

            B 1 Reply Last reply
            0
            • palande.vaibhavP palande.vaibhav

              @sundberg84
              No it doesn't turn on. And I even don't see anything on the serial monitor for the sensor node. I think I should be able to see the READ on the serial monitor for the sensor node. But I don't get that on there.

              digitalWrite(4, !digitalRead(4));
              

              This means,
              digitalRead(4) ------> Read the value at pin 4.
              ! -----> Toggle it, that is after reading the value, if it is 0 then make it one and if it is 1 make it 0.
              digitalWrite(4, ----> Write it back to pin 4.

              digitalWrite(message.sensor-1+RELAY_1, message.getBool()?RELAY_ON:RELAY_OFF);
              

              This line actually checks for the payload that comes with the received signal and makes RELAY_ON or RELAY_OFF decision accordingly.
              So, I am doing much simpler task than relay example. I am trying to not even check what the received message says, I am just checking if I get the message or not and make LED toggle if I do get the message.

              B Offline
              B Offline
              BartE
              Contest Winner
              wrote on last edited by
              #6

              @palande.vaibhav
              i think the answer is in the code

                // sleep() call can be replaced by wait() call if node need to process incoming messages (or if node is repeater)
                 sleep(conversionTime);
              

              Replace sleep(); by wait();

              During a sleep the GW does not receives the message acknowledge and thus claims the broadcast did fail.

              palande.vaibhavP 1 Reply Last reply
              1
              • B BartE

                @palande.vaibhav
                i think the answer is in the code

                  // sleep() call can be replaced by wait() call if node need to process incoming messages (or if node is repeater)
                   sleep(conversionTime);
                

                Replace sleep(); by wait();

                During a sleep the GW does not receives the message acknowledge and thus claims the broadcast did fail.

                palande.vaibhavP Offline
                palande.vaibhavP Offline
                palande.vaibhav
                wrote on last edited by palande.vaibhav
                #7

                @BartE

                @BartE said:

                @palande.vaibhav
                i think the answer is in the code

                  // sleep() call can be replaced by wait() call if node need to process incoming messages (or if node is repeater)
                   sleep(conversionTime);
                

                Replace sleep(); by wait();

                During a sleep the GW does not receives the message acknowledge and thus claims the broadcast did fail.

                This worked.
                Thanks a lot for the help. I guess I need to read stuff properly.

                Thanks for the help.

                1 Reply Last reply
                0

                Hello! It looks like you're interested in this conversation, but you don't have an account yet.

                Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

                With your input, this post could be even better 💗

                Register Login
                Reply
                • Reply as topic
                Log in to reply
                • Oldest to Newest
                • Newest to Oldest
                • Most Votes


                20

                Online

                12.0k

                Users

                11.2k

                Topics

                113.4k

                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