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

    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
                          • gohanG gohan

                            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 Offline
                            Tim76T Offline
                            Tim76
                            wrote on last edited by
                            #32

                            @gohan output of the serial port

                            0 MCO:BGN:INIT NODE,CP=RNNNA--,VER=2.1.1
                            3 MCO:BGN:BFR
                            144 TSM:INIT
                            145 TSF:WUR:MS=0
                            153 TSM:INIT:TSP OK
                            154 TSM:INIT:STATID=51
                            157 TSF:SID:OK,ID=51
                            158 TSM:FPAR
                            195 TSF:MSG:SEND,51-51-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
                            986 TSF:MSG:READ,0-0-51,s=255,c=3,t=8,pt=1,l=1,sg=0:0
                            990 TSF:MSG:FPAR OK,ID=0,D=1
                            2202 TSM:FPAR:OK
                            2203 TSM:ID
                            2204 TSM:ID:OK
                            2206 TSM:UPL
                            2211 TSF:MSG:SEND,51-51-0-0,s=255,c=3,t=24,pt=1,l=1,sg=0,ft=0,st=OK:1
                            2232 TSF:MSG:READ,0-0-51,s=255,c=3,t=25,pt=1,l=1,sg=0:1
                            2237 TSF:MSG:PONG RECV,HP=1
                            2240 TSM:UPL:OK
                            2241 TSM:READY:ID=51,PAR=0,DIS=1
                            2246 TSF:MSG:SEND,51-51-0-0,s=255,c=3,t=15,pt=6,l=2,sg=0,ft=0,st=OK:0100
                            2284 TSF:MSG:READ,0-0-51,s=255,c=3,t=15,pt=6,l=2,sg=0:0100
                            2291 TSF:MSG:SEND,51-51-0-0,s=255,c=0,t=17,pt=0,l=5,sg=0,ft=0,st=OK:2.1.1
                            2301 TSF:MSG:SEND,51-51-0-0,s=255,c=3,t=6,pt=1,l=1,sg=0,ft=0,st=OK:0
                            4329 TSF:MSG:SEND,51-51-0-0,s=255,c=3,t=11,pt=0,l=25,sg=0,ft=0,st=OK:Greenhouse main controlle
                            4340 TSF:MSG:SEND,51-51-0-0,s=255,c=3,t=12,pt=0,l=3,sg=0,ft=0,st=OK:1.0
                            4350 TSF:MSG:SEND,51-51-0-0,s=17,c=0,t=6,pt=0,l=0,sg=0,ft=0,st=OK:
                            4359 TSF:MSG:SEND,51-51-0-0,s=18,c=0,t=6,pt=0,l=0,sg=0,ft=0,st=OK:
                            4369 TSF:MSG:SEND,51-51-0-0,s=1,c=0,t=3,pt=0,l=0,sg=0,ft=0,st=OK:
                            4376 TSF:MSG:SEND,51-51-0-0,s=2,c=0,t=3,pt=0,l=0,sg=0,ft=0,st=OK:
                            4384 TSF:MSG:SEND,51-51-0-0,s=3,c=0,t=3,pt=0,l=0,sg=0,ft=0,st=OK:
                            4397 TSF:MSG:SEND,51-51-0-0,s=4,c=0,t=3,pt=0,l=0,sg=0,ft=0,st=OK:
                            4407 TSF:MSG:SEND,51-51-0-0,s=5,c=0,t=3,pt=0,l=0,sg=0,ft=0,st=OK:
                            4418 TSF:MSG:SEND,51-51-0-0,s=6,c=0,t=3,pt=0,l=0,sg=0,ft=0,st=OK:
                            4434 TSF:MSG:SEND,51-51-0-0,s=7,c=0,t=3,pt=0,l=0,sg=0,ft=0,st=OK:
                            4449 TSF:MSG:SEND,51-51-0-0,s=8,c=0,t=3,pt=0,l=0,sg=0,ft=0,st=OK:
                            4459 TSF:MSG:SEND,51-51-0-0,s=9,c=0,t=3,pt=0,l=0,sg=0,ft=0,st=OK:
                            4489 TSF:MSG:SEND,51-51-0-0,s=10,c=0,t=3,pt=0,l=0,sg=0,ft=0,st=OK:
                            4505 TSF:MSG:SEND,51-51-0-0,s=11,c=0,t=3,pt=0,l=0,sg=0,ft=0,st=OK:
                            4515 TSF:MSG:SEND,51-51-0-0,s=12,c=0,t=3,pt=0,l=0,sg=0,ft=0,st=OK:
                            4528 TSF:MSG:SEND,51-51-0-0,s=13,c=0,t=3,pt=0,l=0,sg=0,ft=0,st=OK:
                            4540 TSF:MSG:SEND,51-51-0-0,s=14,c=0,t=3,pt=0,l=0,sg=0,ft=0,st=OK:
                            4556 TSF:MSG:SEND,51-51-0-0,s=15,c=0,t=3,pt=0,l=0,sg=0,ft=0,st=OK:
                            4564 TSF:MSG:SEND,51-51-0-0,s=16,c=0,t=3,pt=0,l=0,sg=0,ft=0,st=OK:
                            4571 MCO:REG:REQ
                            4576 TSF:MSG:SEND,51-51-0-0,s=255,c=3,t=26,pt=1,l=1,sg=0,ft=0,st=OK:2
                            4583 TSF:MSG:READ,0-0-51,s=255,c=3,t=27,pt=1,l=1,sg=0:1
                            4588 MCO:PIM:NODE REG=1
                            4590 MCO:BGN:STP
                            4591 MCO:BGN:INIT OK,TSP=1
                            4596 MCO:SLP:MS=750,SMS=0,I1=255,M1=255,I2=255,M2=255
                            4601 MCO:SLP:TPD
                            4602 MCO:SLP:WUP=-1
                            4636 TSF:MSG:SEND,51-51-0-0,s=0,c=1,t=0,pt=7,l=5,sg=0,ft=0,st=OK:20.2
                            4690 TSF:MSG:SEND,51-51-0-0,s=1,c=1,t=0,pt=7,l=5,sg=0,ft=0,st=OK:20.5
                            4755 TSF:MSG:SEND,51-51-0-0,s=2,c=1,t=0,pt=7,l=5,sg=0,ft=0,st=OK:20.4
                            7763 MCO:SLP:MS=750,SMS=0,I1=255,M1=255,I2=255,M2=255
                            7768 MCO:SLP:TPD
                            7770 MCO:SLP:WUP=-1
                            10898 MCO:SLP:MS=750,SMS=0,I1=255,M1=255,I2=255,M2=255
                            10902 MCO:SLP:TPD
                            10904 MCO:SLP:WUP=-1

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

                              I'm talking about adding code to your sketch so that it prints in serial monitor the values before they are sent for presentations and you debug from those, I can't debug it for you from here 😀

                              Tim76T 1 Reply Last reply
                              0
                              • gohanG gohan

                                I'm talking about adding code to your sketch so that it prints in serial monitor the values before they are sent for presentations and you debug from those, I can't debug it for you from here 😀

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

                                @gohan oh.... ok..... pretty new at coding, but I guess you allready figured that out.....;-)

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

                                  No problem, it's normal, everybody started from being new at coding.
                                  For debugging add only 1 or 2 temp sensors and same for relays, work it out simple and then add more

                                  Tim76T 1 Reply Last reply
                                  0
                                  • gohanG gohan

                                    No problem, it's normal, everybody started from being new at coding.
                                    For debugging add only 1 or 2 temp sensors and same for relays, work it out simple and then add more

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

                                    @gohan hey Gohan,
                                    I will not be able to continue to work on my code till after the weekend....😑

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

                                      No problem, I'm here anyway 😀

                                      Tim76T 1 Reply Last reply
                                      0
                                      • gohanG gohan

                                        No problem, I'm here anyway 😀

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

                                        @gohan
                                        Due to work related schedule problems I won't be able to work on this code for a few weeks...... :angry:

                                        1 Reply Last reply
                                        0
                                        • N Offline
                                          N Offline
                                          Newzwaver
                                          wrote on last edited by
                                          #39

                                          Did you get this working and if so can you share?

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


                                          14

                                          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