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 9.3k 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
    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

    hekH 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

      hekH Online
      hekH Online
      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
      • hekH 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
        • hekH Online
          hekH Online
          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
          • hekH 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.

            hekH 1 Reply Last reply
            0
            • hekH Online
              hekH Online
              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.

                    hekH Online
                    hekH Online
                    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.

                      pgoP Offline
                      pgoP 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
                      • daulagariD Offline
                        daulagariD 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
                        • daulagariD 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
                          Reply
                          • Reply as topic
                          Log in to reply
                          • Oldest to Newest
                          • Newest to Oldest
                          • Most Votes


                          19

                          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