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. My Project
  3. motion and relay

motion and relay

Scheduled Pinned Locked Moved My Project
12 Posts 3 Posters 5.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.
  • D Offline
    D Offline
    dias
    wrote on last edited by
    #1

    hello, I am looking for a code used 2 motion sensors and 1 relay
    is that someone saw this forum? I have do a search but I found nothing

    1 Reply Last reply
    0
    • D Offline
      D Offline
      Dalhoj
      wrote on last edited by
      #2

      Hey maybe you can modify this sketch:

      http://forum.mysensors.org/topic/902/relay-motion-multisensor

      1 Reply Last reply
      0
      • D Offline
        D Offline
        dias
        wrote on last edited by
        #3

        I have modified the code, I have no error message but:
        the relay remains on position but n not appear in domoticz
        in the logs they have the same name
        dth11 the works

        #include <MySensor.h>
        #include <Wire.h>
        #include <DHT.h>
        #include <SimpleTimer.h>
        
        #define CHILD_ID_HUM 1
        #define CHILD_ID_TEMP 2
        #define CHILD_ID_MOTION 3
        #define CHILD_ID_RELAY 4
        
        #define RELAY  3  // Arduino Digital I/O pin number for first relay (second on pin+1 etc)
        #define HUMIDITY_SENSOR_DIGITAL_PIN 4
        #define MOTION_SENSOR_DIGITAL_PIN 5
        #define MOTION_SENSOR_DIGITAL_PIN2 6
        #define INTERRUPT MOTION_SENSOR_DIGITAL_PIN-2 // Usually the interrupt = pin -2 (on uno/nano anyway)
        
        #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
        
        unsigned long SLEEP_TIME = 600000; // Sleep time between reads (in milliseconds) - 10mins
        
        MySensor gw;
        DHT dht;
        SimpleTimer timer;
        
        float lastTemp;
        float lastHum;
        boolean lastTripped;
        boolean lastTripped2;
        boolean metric = true;
        
        MyMessage msgHum(CHILD_ID_HUM, V_HUM);
        MyMessage msgTemp(CHILD_ID_TEMP, V_TEMP);
        MyMessage msg(CHILD_ID_MOTION, V_TRIPPED);
        
        void setup()  
        { 
          // Initialize library and add callback for incoming messages
          gw.begin(incomingMessage, AUTO, true);
          
          dht.setup(HUMIDITY_SENSOR_DIGITAL_PIN); 
        
          // Send the Sketch Version Information to the Gateway
          gw.sendSketchInfo("HumTempRelayMotion", "1.0");
        
          // REGISTER all sensors to gw (they will be created as child devices)
          gw.present(CHILD_ID_HUM, S_HUM);
          gw.present(CHILD_ID_TEMP, S_TEMP);
          gw.present(CHILD_ID_MOTION, S_MOTION);
          gw.present(CHILD_ID_RELAY, V_LIGHT);
          pinMode(RELAY, OUTPUT);
          digitalWrite(RELAY, gw.loadState(RELAY)?RELAY_OFF:RELAY_ON);
          
          //Serial.begin(9600);
          timer.setInterval(30000, getMeasure);
          metric = gw.getConfig().isMetric;
          
        }
        
        void loop()      
        {  
          // Alway process incoming messages whenever possible
          gw.process();
          timer.run();
          
          boolean tripped = digitalRead(MOTION_SENSOR_DIGITAL_PIN) == HIGH;    
          if (tripped != lastTripped) {
            lastTripped = tripped;
            Serial.print("M: ");
            Serial.println(tripped);
            gw.send(msg.set(tripped?"1":"0"));  // Send tripped value to gw
          }
          boolean tripped2 = digitalRead(MOTION_SENSOR_DIGITAL_PIN2) == HIGH;   // 
          if (tripped2 != lastTripped2) {
            lastTripped2 = tripped2;
            Serial.print("M2: ");
            Serial.println(tripped2);
            gw.send(msg.set(tripped2?"1":"0"));  // Send tripped value to gw   //
          }
        }
        
        void incomingMessage(const MyMessage &message) {
          // We only expect one type of message from controller. But we better check anyway.
          if (message.type==V_LIGHT) {
             // Change relay state
             digitalWrite(message.sensor-CHILD_ID_RELAY+RELAY, message.getBool()?RELAY_ON:RELAY_OFF);
             // Store state in eeprom
             gw.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());
           } 
        }
        
        void getMeasure() {
          delay(dht.getMinimumSamplingPeriod());
        
          float temperature = dht.getTemperature();
          if (isnan(temperature)) {
              Serial.println("Failed reading temperature from DHT");
          } else if (temperature != lastTemp) {
            lastTemp = temperature;
            if (!metric) {
              temperature = dht.toFahrenheit(temperature);
            }
            gw.send(msgTemp.set(temperature, 1));
            Serial.print("T: ");
            Serial.println(temperature);
          }
          
          float humidity = dht.getHumidity();
          if (isnan(humidity)) {
              Serial.println("Failed reading humidity from DHT");
          } else if (humidity != lastHum) {
              lastHum = humidity;
              gw.send(msgHum.set(humidity, 1));
              Serial.print("H: ");
              Serial.println(humidity);
          }
        }
        Insert Code Here
        
        TheoLT 1 Reply Last reply
        0
        • D dias

          I have modified the code, I have no error message but:
          the relay remains on position but n not appear in domoticz
          in the logs they have the same name
          dth11 the works

          #include <MySensor.h>
          #include <Wire.h>
          #include <DHT.h>
          #include <SimpleTimer.h>
          
          #define CHILD_ID_HUM 1
          #define CHILD_ID_TEMP 2
          #define CHILD_ID_MOTION 3
          #define CHILD_ID_RELAY 4
          
          #define RELAY  3  // Arduino Digital I/O pin number for first relay (second on pin+1 etc)
          #define HUMIDITY_SENSOR_DIGITAL_PIN 4
          #define MOTION_SENSOR_DIGITAL_PIN 5
          #define MOTION_SENSOR_DIGITAL_PIN2 6
          #define INTERRUPT MOTION_SENSOR_DIGITAL_PIN-2 // Usually the interrupt = pin -2 (on uno/nano anyway)
          
          #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
          
          unsigned long SLEEP_TIME = 600000; // Sleep time between reads (in milliseconds) - 10mins
          
          MySensor gw;
          DHT dht;
          SimpleTimer timer;
          
          float lastTemp;
          float lastHum;
          boolean lastTripped;
          boolean lastTripped2;
          boolean metric = true;
          
          MyMessage msgHum(CHILD_ID_HUM, V_HUM);
          MyMessage msgTemp(CHILD_ID_TEMP, V_TEMP);
          MyMessage msg(CHILD_ID_MOTION, V_TRIPPED);
          
          void setup()  
          { 
            // Initialize library and add callback for incoming messages
            gw.begin(incomingMessage, AUTO, true);
            
            dht.setup(HUMIDITY_SENSOR_DIGITAL_PIN); 
          
            // Send the Sketch Version Information to the Gateway
            gw.sendSketchInfo("HumTempRelayMotion", "1.0");
          
            // REGISTER all sensors to gw (they will be created as child devices)
            gw.present(CHILD_ID_HUM, S_HUM);
            gw.present(CHILD_ID_TEMP, S_TEMP);
            gw.present(CHILD_ID_MOTION, S_MOTION);
            gw.present(CHILD_ID_RELAY, V_LIGHT);
            pinMode(RELAY, OUTPUT);
            digitalWrite(RELAY, gw.loadState(RELAY)?RELAY_OFF:RELAY_ON);
            
            //Serial.begin(9600);
            timer.setInterval(30000, getMeasure);
            metric = gw.getConfig().isMetric;
            
          }
          
          void loop()      
          {  
            // Alway process incoming messages whenever possible
            gw.process();
            timer.run();
            
            boolean tripped = digitalRead(MOTION_SENSOR_DIGITAL_PIN) == HIGH;    
            if (tripped != lastTripped) {
              lastTripped = tripped;
              Serial.print("M: ");
              Serial.println(tripped);
              gw.send(msg.set(tripped?"1":"0"));  // Send tripped value to gw
            }
            boolean tripped2 = digitalRead(MOTION_SENSOR_DIGITAL_PIN2) == HIGH;   // 
            if (tripped2 != lastTripped2) {
              lastTripped2 = tripped2;
              Serial.print("M2: ");
              Serial.println(tripped2);
              gw.send(msg.set(tripped2?"1":"0"));  // Send tripped value to gw   //
            }
          }
          
          void incomingMessage(const MyMessage &message) {
            // We only expect one type of message from controller. But we better check anyway.
            if (message.type==V_LIGHT) {
               // Change relay state
               digitalWrite(message.sensor-CHILD_ID_RELAY+RELAY, message.getBool()?RELAY_ON:RELAY_OFF);
               // Store state in eeprom
               gw.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());
             } 
          }
          
          void getMeasure() {
            delay(dht.getMinimumSamplingPeriod());
          
            float temperature = dht.getTemperature();
            if (isnan(temperature)) {
                Serial.println("Failed reading temperature from DHT");
            } else if (temperature != lastTemp) {
              lastTemp = temperature;
              if (!metric) {
                temperature = dht.toFahrenheit(temperature);
              }
              gw.send(msgTemp.set(temperature, 1));
              Serial.print("T: ");
              Serial.println(temperature);
            }
            
            float humidity = dht.getHumidity();
            if (isnan(humidity)) {
                Serial.println("Failed reading humidity from DHT");
            } else if (humidity != lastHum) {
                lastHum = humidity;
                gw.send(msgHum.set(humidity, 1));
                Serial.print("H: ");
                Serial.println(humidity);
            }
          }
          Insert Code Here
          
          TheoLT Offline
          TheoLT Offline
          TheoL
          Contest Winner
          wrote on last edited by TheoL
          #4

          @dias You're presenting the relay incorrect.

          this line in the setup

          gw.present(CHILD_ID_RELAY, V_LIGHT);
          

          needs to be

          gw.present(CHILD_ID_RELAY, S_LIGHT);
          

          And then you should see the sensor in Domoticz

          1 Reply Last reply
          0
          • D Offline
            D Offline
            dias
            wrote on last edited by
            #5

            the relay is present in domoticz but not the more it is driven on position when I connect the Arduino
            the motion sensor works well but they have the same name in domoticz so that I have one that appears

            TheoLT 1 Reply Last reply
            0
            • D dias

              the relay is present in domoticz but not the more it is driven on position when I connect the Arduino
              the motion sensor works well but they have the same name in domoticz so that I have one that appears

              TheoLT Offline
              TheoLT Offline
              TheoL
              Contest Winner
              wrote on last edited by
              #6

              @dias I'm sorry but I really don't understand what you mean. Try to insert some Serial.println("") and check the serial monitor. That way you can debug your sensor.

              1 Reply Last reply
              0
              • D Offline
                D Offline
                dias
                wrote on last edited by
                #7

                I use google translation
                the relay remains stuck on walk
                2 pir sensor works well but in domoticz with the same name

                1 Reply Last reply
                0
                • TheoLT Offline
                  TheoLT Offline
                  TheoL
                  Contest Winner
                  wrote on last edited by
                  #8

                  I think this might cause your problem. It's in the incommingMessage method

                   if (message.type==V_LIGHT) {
                       // Change relay state
                       digitalWrite(message.sensor-CHILD_ID_RELAY+RELAY, message.getBool()?RELAY_ON:RELAY_OFF);
                       // Store state in eeprom
                  
                  

                  I think you copied it from the multiple relays example.

                  try changing that code to

                   if (message.type==V_LIGHT) {
                       // Change relay state
                       digitalWrite( RELAY, message.getBool()?RELAY_ON:RELAY_OFF);
                       // Store state in eeprom
                  

                  In your code, you are not writing the value to the pin you've assigned to the relay.

                  1 Reply Last reply
                  0
                  • D Offline
                    D Offline
                    dias
                    wrote on last edited by
                    #9

                    Thank you for your help
                    it works for relay and dth11
                    always the same pir sensors

                    1 Reply Last reply
                    0
                    • D Offline
                      D Offline
                      dias
                      wrote on last edited by
                      #10

                      on the picture have there a motion sensor that appears

                      Capture d’écran (2).png

                      1 Reply Last reply
                      0
                      • D Offline
                        D Offline
                        dias
                        wrote on last edited by dias
                        #11
                        This post is deleted!
                        1 Reply Last reply
                        0
                        • D Offline
                          D Offline
                          dias
                          wrote on last edited by
                          #12

                          AC works thank you for your help

                          #include <SPI.h>
                          #include <MySensor.h>
                          #include <Wire.h>
                          #include <DHT.h>
                          #include <SimpleTimer.h>
                          
                          #define CHILD_ID_HUM 1
                          #define CHILD_ID_TEMP 2
                          #define CHILD_ID_MOTION 3
                          #define CHILD_ID_RELAY 4
                          
                          #define HUMIDITY_SENSOR_DIGITAL_PIN 4
                          #define MOTION_SENSOR_DIGITAL_PIN 3
                          #define INTERRUPT MOTION_SENSOR_DIGITAL_PIN-2 // Usually the interrupt = pin -2 (on uno/nano anyway)
                          #define RELAY  7  // Arduino Digital I/O pin number for first relay (second on pin+1 etc)
                          #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
                          
                          unsigned long SLEEP_TIME = 600000; // Sleep time between reads (in milliseconds) - 10mins
                          
                          MySensor gw;
                          DHT dht;
                          SimpleTimer timer;
                          
                          float lastTemp;
                          float lastHum;
                          boolean lastTripped;
                          boolean metric = true;
                          
                          MyMessage msgHum(CHILD_ID_HUM, V_HUM);
                          MyMessage msgTemp(CHILD_ID_TEMP, V_TEMP);
                          MyMessage msg(CHILD_ID_MOTION, V_TRIPPED);
                          
                          void setup()  
                          { 
                            // Initialize library and add callback for incoming messages
                            gw.begin(incomingMessage, AUTO, true);
                            
                            dht.setup(HUMIDITY_SENSOR_DIGITAL_PIN); 
                          
                            // Send the Sketch Version Information to the Gateway
                            gw.sendSketchInfo("HumTempRelayMotion", "1.0");
                          
                            // REGISTER all sensors to gw (they will be created as child devices)
                            gw.present(CHILD_ID_HUM, S_HUM);
                            gw.present(CHILD_ID_TEMP, S_TEMP);
                            gw.present(CHILD_ID_MOTION, S_MOTION);
                            gw.present(CHILD_ID_RELAY, S_LIGHT);
                            pinMode(RELAY, OUTPUT);
                            digitalWrite(RELAY, gw.loadState(RELAY)?RELAY_OFF:RELAY_ON);
                            
                            //Serial.begin(9600);
                            timer.setInterval(30000, getMeasure);
                            metric = gw.getConfig().isMetric;
                            
                          }
                          
                          void loop()      
                          {  
                            // Alway process incoming messages whenever possible
                            gw.process();
                            timer.run();
                            
                            boolean tripped = digitalRead(MOTION_SENSOR_DIGITAL_PIN) == HIGH;    
                            if (tripped != lastTripped) {
                              lastTripped = tripped;
                              Serial.print("M: ");
                              Serial.println(tripped);
                              gw.send(msg.set(tripped?"1":"0"));  // Send tripped value to gw
                            }
                          
                          }
                          
                          void incomingMessage(const MyMessage &message) {
                            // We only expect one type of message from controller. But we better check anyway.
                            if (message.type==V_LIGHT) {
                               // Change relay state
                               digitalWrite(message.sensor-CHILD_ID_RELAY+RELAY, message.getBool()?RELAY_ON:RELAY_OFF);
                               // Store state in eeprom
                               gw.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());
                             } 
                          }
                          
                          void getMeasure() {
                            delay(dht.getMinimumSamplingPeriod());
                          
                            float temperature = dht.getTemperature();
                            if (isnan(temperature)) {
                                Serial.println("Failed reading temperature from DHT");
                            } else if (temperature != lastTemp) {
                              lastTemp = temperature;
                              if (!metric) {
                                temperature = dht.toFahrenheit(temperature);
                              }
                              gw.send(msgTemp.set(temperature, 1));
                              Serial.print("T: ");
                              Serial.println(temperature);
                            }
                            
                            float humidity = dht.getHumidity();
                            if (isnan(humidity)) {
                                Serial.println("Failed reading humidity from DHT");
                            } else if (humidity != lastHum) {
                                lastHum = humidity;
                                gw.send(msgHum.set(humidity, 1));
                                Serial.print("H: ");
                                Serial.println(humidity);
                            }
                          }
                          Insert Code Here
                          
                          1 Reply Last reply
                          0
                          Reply
                          • Reply as topic
                          Log in to reply
                          • Oldest to Newest
                          • Newest to Oldest
                          • Most Votes


                          12

                          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