Multiple motion/door sketch



  • I like to use store bought PIR motion sensors and have them trigger a Pam-1 relay due to their quality and being much safer. I’ve been using heks Door, Window and Push-button sketch with S_MOTION/S_DOOR. This way I only have to short one of the pins to ground.

    Well today I took the multi button relay sketch and combined it with heks sketch allowing me to have multiple motions on one pro mini.

    Here’s the sketch with two motions

    /**
     * The MySensors Arduino library handles the wireless radio link and protocol
     * between your home built sensors/actuators and HA controller of choice.
     * The sensors forms a self healing radio network with optional repeaters. Each
     * repeater and gateway builds a routing tables in EEPROM which keeps track of the
     * network topology allowing messages to be routed to nodes.
     *
     * Created by Henrik Ekblad <henrik.ekblad@mysensors.org>
     * Copyright (C) 2013-2015 Sensnology AB
     * Full contributor list: https://github.com/mysensors/Arduino/graphs/contributors
     *
     * Documentation: http://www.mysensors.org
     * Support Forum: http://forum.mysensors.org
     *
     * This program is free software; you can redistribute it and/or
     * modify it under the terms of the GNU General Public License
     * version 2 as published by the Free Software Foundation.
     *
     *******************************
     *
     * DESCRIPTION
     *
     * Simple binary switch example 
     * Connect button or door/window reed switch between 
     * digitial I/O pin 3 (BUTTON_PIN below) and GND.
     * http://www.mysensors.org/build/binary
     */
    
    
    // Enable debug prints to serial monitor
    #define MY_DEBUG 
    
    // Enable and select radio type attached
    #define MY_RADIO_NRF24
    //#define MY_RADIO_RFM69
    
    #define MY_NODE_ID 12
    #include <SPI.h>
    #include <MySensors.h>
    #include <Bounce2.h>
    
    #define SSR_A_ID 1   // Id of the sensor child
    #define SSR_B_ID 2   // Id of the sensor child
    
    const int buttonPinA = 2;
    const int buttonPinB = 3;
    
    int oldValueA = 0;
    int oldValueB = 0;
    
    bool stateA = false;
    bool stateB = false;
    
    Bounce debouncerA = Bounce();
    Bounce debouncerB = Bounce(); 
    
    // Change to V_LIGHT if you use S_LIGHT in presentation below
    MyMessage msgA(SSR_A_ID, V_TRIPPED);
    MyMessage msgB(SSR_B_ID, V_TRIPPED);
    
    void setup()  
    {  
      // Setup the button
      pinMode(buttonPinA, INPUT_PULLUP); // Setup the button Activate internal pull-up
      pinMode(buttonPinB, INPUT_PULLUP); // Setup the button Activate internal pull-up
    
    
      // After setting up the buttons, setup debouncer
      debouncerA.attach(buttonPinA);
      debouncerA.interval(5);
      debouncerB.attach(buttonPinB);
      debouncerB.interval(5);
    
    }
    
    void presentation() {
      // Register binary input sensor to gw (they will be created as child devices)
      // You can use S_DOOR, S_MOTION or S_LIGHT here depending on your usage. 
      // If S_LIGHT is used, remember to update variable type you send in. See "msg" above.
      present(SSR_A_ID, S_MOTION);
      present(SSR_B_ID, S_MOTION);   
    }
    
    
    //  Check if digital input has changed and send in new value
    void loop()
    {
      debouncerA.update();
       // Get the update value
      int valueA = debouncerA.read();
    
      if (valueA != oldValueA) {
         // Send in the new value
         send(msgA.set(valueA==HIGH ? 0 : 1));
         oldValueA = valueA;
        
      }
     
      debouncerB.update();
      // Get the update value
       int valueB = debouncerB.read();
    
      if (valueB != oldValueB) {
         // Send in the new value
         send(msgB.set(valueB==HIGH ? 0 : 1));
         oldValueB = valueB;
      }
    }```
    
    

    Here's one with three motions

    /**
     * The MySensors Arduino library handles the wireless radio link and protocol
     * between your home built sensors/actuators and HA controller of choice.
     * The sensors forms a self healing radio network with optional repeaters. Each
     * repeater and gateway builds a routing tables in EEPROM which keeps track of the
     * network topology allowing messages to be routed to nodes.
     *
     * Created by Henrik Ekblad <henrik.ekblad@mysensors.org>
     * Copyright (C) 2013-2015 Sensnology AB
     * Full contributor list: https://github.com/mysensors/Arduino/graphs/contributors
     *
     * Documentation: http://www.mysensors.org
     * Support Forum: http://forum.mysensors.org
     *
     * This program is free software; you can redistribute it and/or
     * modify it under the terms of the GNU General Public License
     * version 2 as published by the Free Software Foundation.
     *
     *******************************
     *
     * DESCRIPTION
     *
     * Simple binary switch example 
     * Connect button or door/window reed switch between 
     * digitial I/O pin 3 (BUTTON_PIN below) and GND.
     * http://www.mysensors.org/build/binary
     */
    
    
    // Enable debug prints to serial monitor
    #define MY_DEBUG 
    
    // Enable and select radio type attached
    #define MY_RADIO_NRF24
    //#define MY_RADIO_RFM69
    
    #define MY_NODE_ID 11
    #include <SPI.h>
    #include <MySensors.h>
    #include <Bounce2.h>
    
    #define SSR_A_ID 1   // Id of the sensor child
    #define SSR_B_ID 2   // Id of the sensor child
    #define SSR_C_ID 3   // Id of the sensor child
    
    const int buttonPinA = 2;
    const int buttonPinB = 3;
    const int buttonPinC = 4;
    
    int oldValueA = 0;
    int oldValueB = 0;
    int oldValueC = 0;
    
    bool stateA = false;
    bool stateB = false;
    bool stateC = false;
    
    Bounce debouncerA = Bounce();
    Bounce debouncerB = Bounce(); 
    Bounce debouncerC = Bounce();
    
    // Change to V_LIGHT if you use S_LIGHT in presentation below
    MyMessage msgA(SSR_A_ID, V_TRIPPED);
    MyMessage msgB(SSR_B_ID, V_TRIPPED);
    MyMessage msgC(SSR_C_ID, V_TRIPPED);
    
    void setup()  
    {  
      // Setup the button
      pinMode(buttonPinA, INPUT_PULLUP); // Setup the button Activate internal pull-up
      pinMode(buttonPinB, INPUT_PULLUP); // Setup the button Activate internal pull-up
      pinMode(buttonPinC, INPUT_PULLUP); // Setup the button Activate internal pull-up
    
      // After setting up the buttons, setup debouncer
      debouncerA.attach(buttonPinA);
      debouncerA.interval(5);
      debouncerB.attach(buttonPinB);
      debouncerB.interval(5);
      debouncerC.attach(buttonPinC);
      debouncerC.interval(5);
    
    }
    
    void presentation() {
      // Register binary input sensor to gw (they will be created as child devices)
      // You can use S_DOOR, S_MOTION or S_LIGHT here depending on your usage. 
      // If S_LIGHT is used, remember to update variable type you send in. See "msg" above.
      present(SSR_A_ID, S_MOTION);
      present(SSR_B_ID, S_MOTION);
      present(SSR_C_ID, S_MOTION);   
    }
    
    
    //  Check if digital input has changed and send in new value
    void loop()
    {
      debouncerA.update();
       // Get the update value
      int valueA = debouncerA.read();
    
      if (valueA != oldValueA) {
         // Send in the new value
         send(msgA.set(valueA==HIGH ? 0 : 1));
         oldValueA = valueA;
        
      }
     
      debouncerB.update();
      // Get the update value
       int valueB = debouncerB.read();
    
      if (valueB != oldValueB) {
         // Send in the new value
         send(msgB.set(valueB==HIGH ? 0 : 1));
         oldValueB = valueB;
    
      }
    
      debouncerC.update();
      // Get the update value
       int valueC = debouncerC.read();
    
      if (valueC != oldValueC) {
         // Send in the new value
         send(msgC.set(valueC==HIGH ? 0 : 1));
         oldValueC = valueC;
      }
    }```


  • @bluezr1 Good progress!
    In case you are interested in how to shorten this kind of code and be more flexible in assigning PINs, you may have a look at this post here: https://forum.mysensors.org/topic/4847/multi-button-relay-sketch/33# by @korttoma
    Just delete the relay part...


 

246
Online

7.8k
Users

8.7k
Topics

93.0k
Posts