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.4k 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 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 Offline
    hekH 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
    • 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 Offline
        hekH 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
        • 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 Offline
            hekH 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.

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

                    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


                        8

                        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