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. Communication problem (maybe)

Communication problem (maybe)

Scheduled Pinned Locked Moved Troubleshooting
30 Posts 5 Posters 12.7k 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.
  • H Offline
    H Offline
    hek
    Admin
    wrote on last edited by hek
    #18

    Please post your sketch code. And to which pins you have connected sensors.

    1 Reply Last reply
    0
    • H Offline
      H Offline
      Hausner
      wrote on last edited by Hausner
      #19

      Temperatur sensor

       // Example sketch showing how to send in OneWire temperature readings
       #include <MySensor.h>  
       #include <SPI.h>
       #include <DallasTemperature.h>
       #include <OneWire.h>
       
       #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);
       DallasTemperature sensors(&oneWire);
       MySensor gw;
       float lastTemperature[MAX_ATTACHED_DS18B20];
       int numSensors=0;
       boolean receivedConfig = false;
       boolean metric = true; 
       // Initialize temperature message
       MyMessage msg(0,V_TEMP);
       
       //int BATTERY_SENSE_PIN = A0; // select the input pin for the battery sense point
       //int oldBatteryPcnt = 0;
       
       void setup()  
       { 
         // Startup OneWire 
         sensors.begin();
       
         // Startup and initialize MySensors library. Set callback for incoming messages. 
         gw.begin(); 
       
         // Send the sketch version information to the gateway and Controller
         gw.sendSketchInfo("Temperature Sensor", "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++) {   
            gw.present(i, S_TEMP);
         }
         
         // use the 1.1 V internal reference
         //analogReference(INTERNAL);
       }
       
       
       void loop()     
       {     
         // Process incoming messages (like config from server)
         gw.process(); 
       
         // Fetch temperatures from Dallas sensors
         sensors.requestTemperatures(); 
      
         // 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>  ((gw.getConfig().isMetric?sensors.getTempCByIndex(i):sensors.getTempFByIndex(i)) * 10.)) / 10.;
      
      // Only send data if temperature has changed and no error
      if (lastTemperature[i] != temperature && temperature != -127.00) {
      
        // Send in the new temperature
        gw.send(msg.setSensor(i).set(temperature,1));
        lastTemperature[i]=temperature;
      }
         }
      
      // get the battery Voltage
      //int sensorValue = analogRead(BATTERY_SENSE_PIN);
      //Serial.println(sensorValue);
      // 1M, 470K divider across battery and using internal ADC ref of 1.1V
      // Sense point is bypassed with 0.1 uF cap to reduce noise at that point
       // ((1e6+470e3)/470e3)*1.1 = Vmax = 3.44 Volts
       // 3.44/1023 = Volts per bit = 0.003363075
      //float batteryV = sensorValue * 0.004106;
      //int batteryPcnt = sensorValue / 10;
       //Serial.print("Battery Voltage: ");
         //Serial.print(batteryV);
         //Serial.println(" V");
         //Serial.print("Battery percent: ");
         //Serial.print(batteryPcnt);
         //Serial.println(" %");
         //if (oldBatteryPcnt != batteryPcnt) {
         // Power up radio after sleep
         //gw.sendBatteryLevel(batteryPcnt);
         //oldBatteryPcnt = batteryPcnt;
         //}
      
         //gw.sleep(SLEEP_TIME);
       }
      

      The temp sensor has been build according to this: http://mysensors.org/build/temp
      1 small exception though. I have used 5v->3.3v aparters for the radios, but that shouldn't matter.
      10Pcs-lot-Socket-Adapter-Plate-Board-For-8Pin-NRF24L01-Wireless-Transceive-Module-51-Free-Shipping.jpg

      H 1 Reply Last reply
      0
      • H Hausner

        Temperatur sensor

         // Example sketch showing how to send in OneWire temperature readings
         #include <MySensor.h>  
         #include <SPI.h>
         #include <DallasTemperature.h>
         #include <OneWire.h>
         
         #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);
         DallasTemperature sensors(&oneWire);
         MySensor gw;
         float lastTemperature[MAX_ATTACHED_DS18B20];
         int numSensors=0;
         boolean receivedConfig = false;
         boolean metric = true; 
         // Initialize temperature message
         MyMessage msg(0,V_TEMP);
         
         //int BATTERY_SENSE_PIN = A0; // select the input pin for the battery sense point
         //int oldBatteryPcnt = 0;
         
         void setup()  
         { 
           // Startup OneWire 
           sensors.begin();
         
           // Startup and initialize MySensors library. Set callback for incoming messages. 
           gw.begin(); 
         
           // Send the sketch version information to the gateway and Controller
           gw.sendSketchInfo("Temperature Sensor", "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++) {   
              gw.present(i, S_TEMP);
           }
           
           // use the 1.1 V internal reference
           //analogReference(INTERNAL);
         }
         
         
         void loop()     
         {     
           // Process incoming messages (like config from server)
           gw.process(); 
         
           // Fetch temperatures from Dallas sensors
           sensors.requestTemperatures(); 
        
           // 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>  ((gw.getConfig().isMetric?sensors.getTempCByIndex(i):sensors.getTempFByIndex(i)) * 10.)) / 10.;
        
        // Only send data if temperature has changed and no error
        if (lastTemperature[i] != temperature && temperature != -127.00) {
        
          // Send in the new temperature
          gw.send(msg.setSensor(i).set(temperature,1));
          lastTemperature[i]=temperature;
        }
           }
        
        // get the battery Voltage
        //int sensorValue = analogRead(BATTERY_SENSE_PIN);
        //Serial.println(sensorValue);
        // 1M, 470K divider across battery and using internal ADC ref of 1.1V
        // Sense point is bypassed with 0.1 uF cap to reduce noise at that point
         // ((1e6+470e3)/470e3)*1.1 = Vmax = 3.44 Volts
         // 3.44/1023 = Volts per bit = 0.003363075
        //float batteryV = sensorValue * 0.004106;
        //int batteryPcnt = sensorValue / 10;
         //Serial.print("Battery Voltage: ");
           //Serial.print(batteryV);
           //Serial.println(" V");
           //Serial.print("Battery percent: ");
           //Serial.print(batteryPcnt);
           //Serial.println(" %");
           //if (oldBatteryPcnt != batteryPcnt) {
           // Power up radio after sleep
           //gw.sendBatteryLevel(batteryPcnt);
           //oldBatteryPcnt = batteryPcnt;
           //}
        
           //gw.sleep(SLEEP_TIME);
         }
        

        The temp sensor has been build according to this: http://mysensors.org/build/temp
        1 small exception though. I have used 5v->3.3v aparters for the radios, but that shouldn't matter.
        10Pcs-lot-Socket-Adapter-Plate-Board-For-8Pin-NRF24L01-Wireless-Transceive-Module-51-Free-Shipping.jpg

        H Offline
        H Offline
        hek
        Admin
        wrote on last edited by
        #20

        @Hausner said:

        //gw.sleep(SLEEP_TIME);

        Why did you comment away this line?

        H 1 Reply Last reply
        0
        • H hek

          @Hausner said:

          //gw.sleep(SLEEP_TIME);

          Why did you comment away this line?

          H Offline
          H Offline
          Hausner
          wrote on last edited by
          #21

          @hek

          Because it looks like that the sleep function is messing with the repeater function. With sleep enabled, almost all messages to the relay actuator node gets lost.

          1 Reply Last reply
          0
          • H Offline
            H Offline
            hek
            Admin
            wrote on last edited by hek
            #22

            Hmm.. shouldn't affect transmissions. When you removed this line you will get several hundreds of temp readings per second. It is a very big chance a few of them differs which means they will send it to gateway.

            You could try adding:
            gw.powerUp();
            delay(10)
            Just before gw.send() to add a small some additional delay after radio powers up.

            If you want to keep node awake another option is to use millis() keep track of send frequency. See here:
            https://github.com/mysensors/Arduino/blob/master/libraries/MySensors/examples/TimeAwareSensor/TimeAwareSensor.ino#L47

            H 1 Reply Last reply
            0
            • H hek

              Hmm.. shouldn't affect transmissions. When you removed this line you will get several hundreds of temp readings per second. It is a very big chance a few of them differs which means they will send it to gateway.

              You could try adding:
              gw.powerUp();
              delay(10)
              Just before gw.send() to add a small some additional delay after radio powers up.

              If you want to keep node awake another option is to use millis() keep track of send frequency. See here:
              https://github.com/mysensors/Arduino/blob/master/libraries/MySensors/examples/TimeAwareSensor/TimeAwareSensor.ino#L47

              H Offline
              H Offline
              Hausner
              wrote on last edited by
              #23

              @hek said:

              delay(10)

              I assume that is milliseconds, but does that mean that the radio will be powered on during that delay, and will the node repeat incoming messages during that?

              If so, I think a much bigger delay would be better, like 30000 or even more.

              H 1 Reply Last reply
              0
              • H Offline
                H Offline
                hek
                Admin
                wrote on last edited by
                #24

                This node isn't configured to be a repeater. So no, it won't.

                1 Reply Last reply
                0
                • H Offline
                  H Offline
                  Hausner
                  wrote on last edited by Hausner
                  #25

                  It isn't??

                  hmm... now i'm puzzled!

                  Cause this is 2 temp nodes

                  0;0;3;0;9;read: 24-23-0 s=0,c=1,t=0,pt=7,l=5:23.8
                  

                  My relay actuator is 22

                  1 Reply Last reply
                  0
                  • N Offline
                    N Offline
                    niccodemi
                    wrote on last edited by
                    #26

                    @Hausner do you have any issues with relay node if you are NOT using it also as repeater?

                    1 Reply Last reply
                    0
                    • H Hausner

                      @hek said:

                      delay(10)

                      I assume that is milliseconds, but does that mean that the radio will be powered on during that delay, and will the node repeat incoming messages during that?

                      If so, I think a much bigger delay would be better, like 30000 or even more.

                      H Offline
                      H Offline
                      hek
                      Admin
                      wrote on last edited by
                      #27

                      If so, I think a much bigger delay would be better, like 30000 or even more.

                      Yes, thats is actually a third option like you say. Just add a delay(30000) at the end of loop(). (If this node just acts a as a temp sensor and nothing else).

                      1 Reply Last reply
                      0
                      • H Hausner

                        @daulagari

                        By 1-way node I mean a reporting node. It only reports a temperature, nothing else. So therefore 1 way traffic TO the GW/controller.

                        A relay node on the other hand has to receive also, else you can't flip on/off the relays.

                        This is roughly 1 minute worth of controller log:

                         2014-11-13 04:49:27 - Helena_temp_LastUpdate state updated to 2014-11-13T04:49:27
                         2014-11-13 04:49:28 - Temperature_GF_Helena state updated to 26.7
                         2014-11-13 04:49:28 - Helena_temp_LastUpdate state updated to 2014-11-13T04:49:28
                         2014-11-13 04:49:29 - Temperature_GF_Helena state updated to 26.6
                         2014-11-13 04:49:29 - Helena_temp_LastUpdate state updated to 2014-11-13T04:49:29
                         2014-11-13 04:49:30 - Temperature_GF_Helena state updated to 26.7
                         2014-11-13 04:49:30 - Helena_temp_LastUpdate state updated to 2014-11-13T04:49:30
                         2014-11-13 04:49:39 - Temperature_GF_Helena state updated to 26.6
                         2014-11-13 04:49:39 - Helena_temp_LastUpdate state updated to 2014-11-13T04:49:39
                         2014-11-13 04:50:07 - Temperature_GF_Living state updated to 24.3
                         2014-11-13 04:50:07 - Living_temp_LastUpdate state updated to 2014-11-13T04:50:07
                         2014-11-13 04:50:08 - Temperature_GF_Living state updated to 24.2
                         2014-11-13 04:50:08 - Living_temp_LastUpdate state updated to 2014-11-13T04:50:08
                         2014-11-13 04:50:12 - Temperature_GF_Living state updated to 24.3
                         2014-11-13 04:50:12 - Living_temp_LastUpdate state updated to 2014-11-13T04:50:12
                         2014-11-13 04:50:14 - Temperature_GF_Living state updated to 24.2
                         2014-11-13 04:50:14 - Living_temp_LastUpdate state updated to 2014-11-13T04:50:14
                         2014-11-13 04:50:15 - Temperature_GF_Helena state updated to 26.7
                         2014-11-13 04:50:15 - Helena_temp_LastUpdate state updated to 2014-11-13T04:50:15
                         2014-11-13 04:50:16 - Temperature_GF_Helena state updated to 26.6
                         2014-11-13 04:50:16 - Helena_temp_LastUpdate state updated to 2014-11-13T04:50:16
                         2014-11-13 04:50:16 - Temperature_GF_Living state updated to 24.3
                         2014-11-13 04:50:16 - Living_temp_LastUpdate state updated to 2014-11-13T04:50:16
                         2014-11-13 04:50:16 - Temperature_GF_Living state updated to 24.2
                         2014-11-13 04:50:16 - Living_temp_LastUpdate state updated to 2014-11-13T04:50:16
                         2014-11-13 04:50:18 - Temperature_GF_Living state updated to 24.3
                         2014-11-13 04:50:18 - Living_temp_LastUpdate state updated to 2014-11-13T04:50:18
                         2014-11-13 04:50:19 - Temperature_GF_Helena state updated to 26.7
                         2014-11-13 04:50:19 - Helena_temp_LastUpdate state updated to 2014-11-13T04:50:19
                         2014-11-13 04:50:20 - Temperature_GF_Helena state updated to 26.6
                         2014-11-13 04:50:20 - Helena_temp_LastUpdate state updated to 2014-11-13T04:50:20
                         2014-11-13 04:50:20 - Temperature_GF_Living state updated to 24.2
                         2014-11-13 04:50:20 - Living_temp_LastUpdate state updated to 2014-11-13T04:50:20
                         2014-11-13 04:50:20 - Temperature_GF_Helena state updated to 26.7
                         2014-11-13 04:50:20 - Helena_temp_LastUpdate state updated to 2014-11-13T04:50:20
                         2014-11-13 04:50:20 - Temperature_GF_Living state updated to 24.3
                         2014-11-13 04:50:20 - Living_temp_LastUpdate state updated to 2014-11-13T04:50:20
                         2014-11-13 04:50:22 - Temperature_GF_Helena state updated to 26.6
                         2014-11-13 04:50:22 - Helena_temp_LastUpdate state updated to 2014-11-13T04:50:22
                         2014-11-13 04:50:23 - Temperature_GF_Living state updated to 24.2
                         2014-11-13 04:50:23 - Living_temp_LastUpdate state updated to 2014-11-13T04:50:23
                         2014-11-13 04:50:24 - Temperature_GF_Living state updated to 24.3
                         2014-11-13 04:50:24 - Living_temp_LastUpdate state updated to 2014-11-13T04:50:24
                         2014-11-13 04:50:26 - Temperature_GF_Helena state updated to 26.7
                         2014-11-13 04:50:26 - Helena_temp_LastUpdate state updated to 2014-11-13T04:50:26
                         2014-11-13 04:50:26 - Temperature_GF_Living state updated to 24.2
                         2014-11-13 04:50:26 - Living_temp_LastUpdate state updated to 2014-11-13T04:50:26
                         2014-11-13 04:50:27 - Temperature_GF_Living state updated to 24.3
                         2014-11-13 04:50:27 - Living_temp_LastUpdate state updated to 2014-11-13T04:50:27
                         2014-11-13 04:50:29 - Temperature_GF_Helena state updated to 26.6
                         2014-11-13 04:50:29 - Helena_temp_LastUpdate state updated to 2014-11-13T04:50:29
                        

                        As you can see i'm getting way more than 1 reading a second. I think this is happening because of the rounding up/down of the temperature readings.

                        P Offline
                        P Offline
                        pgo
                        wrote on last edited by
                        #28

                        @Hausner I send the temp changes only if change is > 1 deg C and light changes only > +/- 40 lux, have this in main loop:

                        void loop()     
                        {     
                          // Process incoming messages (like config from server)
                          gw.process(); 
                        
                          // Fetch temperatures from Dallas sensors
                          sensors.requestTemperatures(); 
                        
                          // 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>((gw.getConfig().isMetric?sensors.getTempCByIndex(i):sensors.getTempFByIndex(i)) * 10.)) / 10.;
                        
                            // Only send data if temperature has changed more then 1 degC and no error
                            if (int(lastTemperature[i]) != int(temperature) && temperature != -127.00) { //added integer
                        
                              // Send in the new temperature
                              gw.send(msg.setSensor(i).set(temperature,1));
                              lastTemperature[i]=temperature;
                            }
                          }
                          // Read lux from TEMT6000
                          float lightLevel = analogRead(LIGHT_SENSOR_ANALOG_PIN) * 9.765625;  // 1000/1024
                          if (int(lightLevel - lastLightLevel) > 40 || int(lastLightLevel - lightLevel) > 40) {
                              gw.send(msg.setSensor(CHILD_ID_LIGHT).set(int(lightLevel),1));
                              lastLightLevel = lightLevel;
                          }
                          //gw.sleep(SLEEP_TIME); //no sleep for relays!!!!
                        }
                        

                        Hope this helps, Pego

                        1 Reply Last reply
                        0
                        • D Offline
                          D Offline
                          daulagari
                          Hero Member
                          wrote on last edited by
                          #29

                          As you can see i'm getting way more than 1 reading a second. I think this is happening because of the rounding up/down of the temperature readings.

                          Yes, clear, if you do not want this you need to change the if to something like:

                          if (abs(lastTemperature[i] - temperature) >= 0.5 && temperature != -127.00) {
                          
                          H 1 Reply Last reply
                          0
                          • D daulagari

                            As you can see i'm getting way more than 1 reading a second. I think this is happening because of the rounding up/down of the temperature readings.

                            Yes, clear, if you do not want this you need to change the if to something like:

                            if (abs(lastTemperature[i] - temperature) >= 0.5 && temperature != -127.00) {
                            
                            H Offline
                            H Offline
                            Hausner
                            wrote on last edited by
                            #30

                            @daulagari

                            Thank you. I'm gonna try with this

                            if (abs(lastTemperature[i] - temperature) >= 0.2 && temperature != -127.00) {
                            
                            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


                            18

                            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