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. Combining relay and temperature sketch

Combining relay and temperature sketch

Scheduled Pinned Locked Moved Troubleshooting
76 Posts 9 Posters 14.2k Views 12 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.
  • gohanG gohan

    try to put a wait(500) at end of loop function, or even wait(1000)

    M Offline
    M Offline
    Mad6969
    wrote on last edited by
    #12

    @gohan said in Combining relay and temperature sketch:

    wait(1000)

    Oh.. like I said : something stupid..

    Thanks a lot. :-)

    I also had "#define MY_NODE_ID 7", because I couldn't see the relay on my Vera.

    1 Reply Last reply
    0
    • gohanG Offline
      gohanG Offline
      gohan
      Mod
      wrote on last edited by
      #13

      DHT sensor doesn't like to work very quickly, it needs some resting time between measurements :D

      Tim76T 1 Reply Last reply
      0
      • gohanG gohan

        DHT sensor doesn't like to work very quickly, it needs some resting time between measurements :D

        Tim76T Offline
        Tim76T Offline
        Tim76
        wrote on last edited by Tim76
        #14

        @gohan modfied my code..... still the same.... I get 16 children (relays) and no temp...... I have 4 ds18b20's connected.....
        And I get the error switch command on the relays....😑😑

        gohanG 1 Reply Last reply
        0
        • M Offline
          M Offline
          Mad6969
          wrote on last edited by
          #15

          Ok, now I have another problem.

          When I build the relay/dht node, I first made the thing work with the relay with button actuator sketch alone (the DHT was plugged, but it was an additional feature I wanted to add).

          Now, it seems that my power source doesn't have enough power to make the relay to close. The led on my relay board blinks when the relay is on and off, but nothing.

          That's weird.. I'll try running the relay sketch alone, just to see.

          1 Reply Last reply
          0
          • Tim76T Tim76

            @gohan modfied my code..... still the same.... I get 16 children (relays) and no temp...... I have 4 ds18b20's connected.....
            And I get the error switch command on the relays....😑😑

            gohanG Offline
            gohanG Offline
            gohan
            Mod
            wrote on last edited by
            #16

            @Tim76 ok, let's go back to the beginning. Try with one sensors only, if everything works then add one relay, then add the second and keep adding the sensors until you see something wrong. You need to go step by step, otherwise with all that stuff you have it will be impossible to debug.

            Tim76T 2 Replies Last reply
            0
            • gohanG gohan

              @Tim76 ok, let's go back to the beginning. Try with one sensors only, if everything works then add one relay, then add the second and keep adding the sensors until you see something wrong. You need to go step by step, otherwise with all that stuff you have it will be impossible to debug.

              Tim76T Offline
              Tim76T Offline
              Tim76
              wrote on last edited by
              #17

              @gohan ok

              1 Reply Last reply
              0
              • gohanG gohan

                @Tim76 ok, let's go back to the beginning. Try with one sensors only, if everything works then add one relay, then add the second and keep adding the sensors until you see something wrong. You need to go step by step, otherwise with all that stuff you have it will be impossible to debug.

                Tim76T Offline
                Tim76T Offline
                Tim76
                wrote on last edited by Tim76
                #18

                @gohan both sketches work perfectly stand alone.... but I think the problem lies within the assingment of the child id's...
                James Bruce talks about this "bug" in his video on how to combine sketches.....
                They relay sketch assigns from 1 to 16
                And the temp sketch assigns from 0 to 15
                So they both try to use the same id's for their children when you try to combine them....
                I need a way to get around that and have relays on 1-16 and temp on 17 to 32......
                Or there might just be the same "bug" in the temperature sketch.....😬😬 wich might mean that they can't be combined for now......😒😒

                1 Reply Last reply
                0
                • gohanG Offline
                  gohanG Offline
                  gohan
                  Mod
                  wrote on last edited by
                  #19

                  if use something like this in presentation?

                  for (int i=1; i<numSensors && i<MAX_ATTACHED_DS18B20; i++) {   
                       present(i+3, S_TEMP);
                  

                  you get the idea, just shift the child id of the dallas sensors and leave the first 4-5 IDs for relays

                  Tim76T 2 Replies Last reply
                  0
                  • gohanG gohan

                    if use something like this in presentation?

                    for (int i=1; i<numSensors && i<MAX_ATTACHED_DS18B20; i++) {   
                         present(i+3, S_TEMP);
                    

                    you get the idea, just shift the child id of the dallas sensors and leave the first 4-5 IDs for relays

                    Tim76T Offline
                    Tim76T Offline
                    Tim76
                    wrote on last edited by
                    #20

                    @gohan aha! Will be trying that later tonight..... I'll keep you posted! 😊 Thx man!

                    1 Reply Last reply
                    0
                    • gohanG gohan

                      if use something like this in presentation?

                      for (int i=1; i<numSensors && i<MAX_ATTACHED_DS18B20; i++) {   
                           present(i+3, S_TEMP);
                      

                      you get the idea, just shift the child id of the dallas sensors and leave the first 4-5 IDs for relays

                      Tim76T Offline
                      Tim76T Offline
                      Tim76
                      wrote on last edited by
                      #21

                      @gohan soooooo...... I tried this:

                      void presentation() {
                        // Send the sketch version information to the gateway and Controller
                        sendSketchInfo("Temperature Sensor", "1.1");
                      
                        // Fetch the number of attached temperature sensors  
                        numSensors = sensors.getDeviceCount();
                      
                        // Present all sensors to controller
                        for (int i=1; i<numSensors && i<MAX_ATTACHED_DS18B20; i++) {   
                           present(i+16, S_TEMP);
                        }
                        for (int sensor=1, pin=RELAY_1; sensor<=NUMBER_OF_RELAYS; sensor++, pin++) {
                          // Then set relay pins in output mode
                          pinMode(pin, OUTPUT);
                          // Set relay to last known state (using eeprom storage)
                          digitalWrite(pin, loadState(sensor)?RELAY_ON:RELAY_OFF);
                        }
                      }
                      
                      

                      now I get the temp sensors with child id's 1 to 16 and no relays at all

                      1 Reply Last reply
                      0
                      • gohanG Offline
                        gohanG Offline
                        gohan
                        Mod
                        wrote on last edited by
                        #22

                        I probably used wrong sintax

                        Tim76T 1 Reply Last reply
                        0
                        • gohanG gohan

                          I probably used wrong sintax

                          Tim76T Offline
                          Tim76T Offline
                          Tim76
                          wrote on last edited by
                          #23

                          @gohan tried this again...... same result.....

                          
                            // Fetch the number of attached temperature sensors  
                            numSensors = sensors.getDeviceCount();
                          
                            // Present all sensors to controller
                            for (int i=17; i<numSensors && i<MAX_ATTACHED_DS18B20; i++) {   
                               present(i, S_TEMP);
                            }
                            for (int sensor=1, pin=RELAY_1; sensor<=NUMBER_OF_RELAYS; sensor++, pin++) {
                              // Then set relay pins in output mode
                              pinMode(pin, OUTPUT);
                              // Set relay to last known state (using eeprom storage)
                              digitalWrite(pin, loadState(sensor)?RELAY_ON:RELAY_OFF);
                            }
                          }
                          
                          Tim76T 1 Reply Last reply
                          0
                          • Tim76T Tim76

                            @gohan tried this again...... same result.....

                            
                              // Fetch the number of attached temperature sensors  
                              numSensors = sensors.getDeviceCount();
                            
                              // Present all sensors to controller
                              for (int i=17; i<numSensors && i<MAX_ATTACHED_DS18B20; i++) {   
                                 present(i, S_TEMP);
                              }
                              for (int sensor=1, pin=RELAY_1; sensor<=NUMBER_OF_RELAYS; sensor++, pin++) {
                                // Then set relay pins in output mode
                                pinMode(pin, OUTPUT);
                                // Set relay to last known state (using eeprom storage)
                                digitalWrite(pin, loadState(sensor)?RELAY_ON:RELAY_OFF);
                              }
                            }
                            
                            Tim76T Offline
                            Tim76T Offline
                            Tim76
                            wrote on last edited by
                            #24

                            here's the complete code as she is right now...

                            
                            // Enable debug prints to serial monitor
                            #define MY_DEBUG 
                            #define MY_RF24_CE_PIN 49
                            #define MY_RF24_CS_PIN 53
                            // Enable and select radio type attached
                            #define MY_RADIO_NRF24
                            //#define MY_RADIO_RFM69
                            #define MY_NODE_ID 30
                            
                            #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
                            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 msgTemp(0,V_TEMP);
                            
                            
                            #define RELAY_1  30  // Arduino Digital I/O pin number for first relay (second on pin+1 etc)
                            #define NUMBER_OF_RELAYS 16 // Total number of attached relays
                            #define RELAY_ON 0  // GPIO value to write to turn on attached relay
                            #define RELAY_OFF 1 // GPIO value to write to turn off attached relay
                            
                            void before()
                            {
                              // Startup up the OneWire library
                              sensors.begin();
                            }
                            
                            void setup()  
                            { 
                              // requestTemperatures() will not block current thread
                              sensors.setWaitForConversion(false);
                            }
                            
                            void presentation() {
                              // Send the sketch version information to the gateway and Controller
                              sendSketchInfo("Greenhouse main controller", "1.0");
                            
                              // Fetch the number of attached temperature sensors  
                              numSensors = sensors.getDeviceCount();
                            
                              // Present all sensors to controller
                              for (int i=17; i<numSensors && i<MAX_ATTACHED_DS18B20; i++) {   
                                 present(i, S_TEMP);
                              }
                              for (int sensor=1, pin=RELAY_1; sensor<=NUMBER_OF_RELAYS; sensor++, pin++) {
                                // Then set relay pins in output mode
                                pinMode(pin, OUTPUT);
                                // Set relay to last known state (using eeprom storage)
                                digitalWrite(pin, loadState(sensor)?RELAY_ON:RELAY_OFF);
                              }
                            }
                            
                            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>((getControllerConfig().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(msgTemp.setSensor(i).set(temperature,1));
                                  // Save new temperatures for next compare
                                  lastTemperature[i]=temperature;
                                }
                              }
                              wait(3000);
                              }
                              void receive(const MyMessage &message)
                            {
                              // We only expect one type of message from controller. But we better check anyway.
                              if (message.type==V_STATUS) {
                                // Change relay state
                                digitalWrite(message.sensor-1+RELAY_1, message.getBool()?RELAY_ON:RELAY_OFF);
                                // Store state in eeprom
                                saveState(message.sensor, message.getBool());
                                // Write some debug info
                                Serial.print("Incoming change for sensor:");
                                Serial.print(message.sensor);
                                Serial.print(", New status: ");
                                Serial.println(message.getBool());
                              }
                            }```
                            1 Reply Last reply
                            0
                            • gohanG Offline
                              gohanG Offline
                              gohan
                              Mod
                              wrote on last edited by
                              #25

                              @Tim76 you forgot to present the relays.... :sweat:

                              Tim76T 1 Reply Last reply
                              0
                              • gohanG gohan

                                @Tim76 you forgot to present the relays.... :sweat:

                                Tim76T Offline
                                Tim76T Offline
                                Tim76
                                wrote on last edited by
                                #26

                                @gohan no I didn't...

                                  // Present all sensors to controller
                                  for (int i=17; i<numSensors && i<MAX_ATTACHED_DS18B20; i++) {   
                                     present(i, S_TEMP);
                                  }
                                  for (int sensor=1, pin=RELAY_1; sensor<=NUMBER_OF_RELAYS; sensor++, pin++) {
                                    // Then set relay pins in output mode
                                    pinMode(pin, OUTPUT);
                                    // Set relay to last known state (using eeprom storage)
                                    digitalWrite(pin, loadState(sensor)?RELAY_ON:RELAY_OFF);
                                  }
                                }```
                                Tim76T 1 Reply Last reply
                                0
                                • Tim76T Tim76

                                  @gohan no I didn't...

                                    // Present all sensors to controller
                                    for (int i=17; i<numSensors && i<MAX_ATTACHED_DS18B20; i++) {   
                                       present(i, S_TEMP);
                                    }
                                    for (int sensor=1, pin=RELAY_1; sensor<=NUMBER_OF_RELAYS; sensor++, pin++) {
                                      // Then set relay pins in output mode
                                      pinMode(pin, OUTPUT);
                                      // Set relay to last known state (using eeprom storage)
                                      digitalWrite(pin, loadState(sensor)?RELAY_ON:RELAY_OFF);
                                    }
                                  }```
                                  Tim76T Offline
                                  Tim76T Offline
                                  Tim76
                                  wrote on last edited by
                                  #27

                                  @gohan seems like it's early for both of us.....;-)

                                  1 Reply Last reply
                                  0
                                  • gohanG Offline
                                    gohanG Offline
                                    gohan
                                    Mod
                                    wrote on last edited by
                                    #28

                                    you only have present(i, S_TEMP) but you also need to add present(sensor, S_BINARY) in the relay section otherwise you will not present any relay at all.

                                    Tim76T 2 Replies Last reply
                                    0
                                    • gohanG gohan

                                      you only have present(i, S_TEMP) but you also need to add present(sensor, S_BINARY) in the relay section otherwise you will not present any relay at all.

                                      Tim76T Offline
                                      Tim76T Offline
                                      Tim76
                                      wrote on last edited by
                                      #29

                                      @gohan 😳😳😳 seems like it's only early for one of us...... I,ll change it later today.....

                                      1 Reply Last reply
                                      0
                                      • gohanG gohan

                                        you only have present(i, S_TEMP) but you also need to add present(sensor, S_BINARY) in the relay section otherwise you will not present any relay at all.

                                        Tim76T Offline
                                        Tim76T Offline
                                        Tim76
                                        wrote on last edited by
                                        #30

                                        @gohan so I fixed that....... and now I get this in Domoticz....

                                        0 Unknown! #1. V_TEMP (20.7) true 2017-05-10 11:44:39
                                        1 S_LIGHT/S_BINARY #1. V_TEMP (20.7) true 2017-05-10 11:44:43
                                        2 S_LIGHT/S_BINARY #1. V_TEMP (20.9) true 2017-05-10 11:44:04
                                        3 S_LIGHT/S_BINARY true 2017-05-10 11:34:13
                                        4 S_LIGHT/S_BINARY true 2017-05-10 11:34:14
                                        5 S_LIGHT/S_BINARY true 2017-05-10 11:34:15
                                        6 S_LIGHT/S_BINARY true 2017-05-10 11:34:15
                                        7 S_LIGHT/S_BINARY true 2017-05-10 11:34:16
                                        8 S_LIGHT/S_BINARY true 2017-05-10 11:34:17
                                        9 S_LIGHT/S_BINARY true 2017-05-10 11:34:17
                                        10 S_LIGHT/S_BINARY true 2017-05-10 11:34:18
                                        11 S_LIGHT/S_BINARY true 2017-05-10 11:34:18
                                        12 S_LIGHT/S_BINARY true 2017-05-10 11:34:19
                                        13 S_LIGHT/S_BINARY true 2017-05-10 11:34:19
                                        14 S_LIGHT/S_BINARY true 2017-05-10 11:34:20
                                        15 S_LIGHT/S_BINARY true 2017-05-10 11:34:20
                                        16 S_LIGHT/S_BINARY true 2017-05-10 11:34:21
                                        17 S_TEMP true 2017-05-10 11:34:12
                                        18 S_TEMP true 2017-05-10 11:34:12
                                        255 S_ARDUINO_NODE 2.1.1 false 2017-05-10 11:34:12

                                        so it seems I do get temp Id's from 17 to 32, but the values stay in 0,1,2 where the relays 1 and 2 don't work.....

                                        1 Reply Last reply
                                        0
                                        • gohanG Offline
                                          gohanG Offline
                                          gohan
                                          Mod
                                          wrote on last edited by gohan
                                          #31

                                          There must be a bug in the relay section, I can't check it today, I'm out all day.
                                          Try to add some debug serial print to see what values are being exchanged

                                          Tim76T 1 Reply Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          18

                                          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