💬 Door, Window and Push-button Sensor

  • Mod

    @rodaman 0_1474354717994_upload-0e56e228-365f-4d94-90b3-5cf1305c6fae

    I fixed it for you.

  • @mfalkvidd
    thank you, i hope will be good soul who fix my sketch itself to work... 🙂

  • Admin

    @rodaman said in 💬 Door, Window and Push-button Sensor:

    What is the purpose of the buttonPin-array?


    pinMode(buttonPin[i + FIRST_PIN], INPUT_PULLUP);

    This will fetch a random (probably 0-initialised) value from the array and set pinmode on that value...

  • @hek
    That part was in original sketch for establish internal pullup as I understand. I used array to do it for each pins.

  • @hek
    I have changed

    pinMode(buttonPin[i + FIRST_PIN], INPUT_PULLUP);


    pinMode(buttonPin[i + FIRST_PIN], INPUT);

    thanks, but sadlly still does not work...

  • Admin

    @rodaman said in 💬 Door, Window and Push-button Sensor:


    I don't get the buttonPin array thing at all?

    Why not just:
    pinMode(i + FIRST_PIN, INPUT_PULLUP);

  • Mod

    @hek if the array was initialized, it could be used to set arbitrary pins. So pin 4,5,6,7,8,A0,A1,A2,A3 could be used for example (to avoid conflicts with the standard nrf24 wiring but still allow a lot of buttons). But as you mentioned before, without initializing the array the behavior will be strange.

  • @hek said in 💬 Door, Window and Push-button Sensor:

    pinMode(i + FIRST_PIN, INPUT_PULLUP);

    Big Thanks!
    I have changed all array parts in setup in the same manner like above and it works 🙂

  • @rodaman
    Here is a sketch for multi buttons (no relays, no repeated parts of code for each buttons) just enter number of buttons and first digital pin where buttons are attached.
    Thanks to @hek for help...

       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.
       Simple binary switch example updated  for multi switches
       Connect buttons or door/window reed switches between
       digitial I/O choosen pin  (FIRST_PIN below) and GND.
    // Enable debug prints to serial monitor
    //#define MY_DEBUG
    // Enable and select radio type attached
    //#define MY_RADIO_NRF24
    //#define MY_RADIO_RFM69
    //#include <SPI.h>
    #include <MySensors.h>
    #include <Bounce2.h>
    #define FIRST_PIN  2  // Arduino Digital I/O pin for button/reed switch
    #define noButtons 6
    Bounce debouncer[noButtons] = Bounce();
    int oldValue[noButtons];
    int value;
    MyMessage msg[noButtons];
    void setup() {
      for (int i = 0; i < noButtons; i++) {
        oldValue[i] = -1;
        msg[i].sensor = i;                                   // initialize messages
        msg[i].type = V_TRIPPED; //
        pinMode(i + FIRST_PIN, INPUT_PULLUP);
        digitalWrite(i + FIRST_PIN, HIGH);
        debouncer[i] = Bounce();                        // initialize debouncer
        debouncer[i].attach(i + FIRST_PIN);
    void presentation() {
      sendSketchInfo("Doors", "1.0");
      for (int i = 0; i < noButtons; i++)
        present(i, S_DOOR);                               // present sensor to gateway
    //  Check if digital input has changed and send in new value
    void loop()
      for (int i = 0; i < noButtons; i++) {
        value = debouncer[i].read();
        if (value != oldValue[i]) {
        // Send in the new value
          send(msg[i].set(value == HIGH ? 1 : 0));
          oldValue[i] = value;

  • Mod

    Could these reed switches be used in the NC configuration for door/window sensor to save more battery?

  • Hardware Contributor

    yes exactly.
    i made a nrf5 board using this principle.

  • Mod

    did you use those with 3 pins?

  • Hardware Contributor

    yes no-nc reed, connect them to IOs of your mcu and switch between input and output

  • Hardware Contributor

    @gohan said in 💬 Door, Window and Push-button Sensor:

    did you use those with 3 pins?

    I use them, with one wire connected to each interrupt pin (I only activate the one that's not connected) and they work fine.
    Else you can cheat with a basic reed switch, you just need an additional magnet on the other side of your switch that's weaker than the door magnet, and turn your reed 180°.
    You make the weak magnet close the reed when door is opened and far from the strong door magnet. When you close the door the strong magnet will open the reed switch.

  • Mod

    given the low price, I think it is not worth the extra work to "mod" the normal reed switches 😄

  • Plugin Developer

    I'd like to go even simpler:

    • Window is closed - magnet pulls reed switch so that no power flows to the NRF5.
    • Window is opened - The NRF5 now gets power, boots, connects to the MySensors network, and sends a "window is open" message every 10 minutes.
    • Window is closed again - NRF5 loses power.

    Seems to me that this would be quite energy efficient?

    Perhaps build it into this case:
    (runs on 2 AAA batteries)

  • Hardware Contributor

    I would say this technique is efficient depending on the usecase.
    For example, for basic ambiant sensors not needing any security why not. On other side, for main doors which could benefit security, I prefer to use hearbeat with less interval time, so it's possible to know if the sensor is offline. else controller wouldn't know this if the sensor only update when door state change.

  • Plugin Developer

    Totally true.

    I was wondering what the state of Attiny85 support is. For absolute beginners (in workshops) it might be easier to connect the radio to a digispark.

    // cancel that. It could never support encryption.

  • I have some troubles with this device.
    Sometimes it does not respond to the first click, sometimes it remains switched on after first click until second click

    When I press the button once - I see the LED on my gateway blinks always 3 times
    1 RX TX
    2 RX ERR
    3 RX ERR

    Device powered with CR2032 and running on 1Mhz@1.8V (internal clock)
    Button input pulled to GND with resistor 47K and waking up if VCC connected through the button
    Also have a 10uF tantal capacitor on power supply pins +several 0,1uF ceramic capacitors

    Actually I dont know how to debug/log my gateway messages on Linux

    Node code:

    // Enable debug prints to serial monitor
    //#define MY_DEBUG
    // Enable and select radio type attached
    #define MY_RADIO_NRF24
    //#define MY_RADIO_NRF5_ESB
    //#define MY_RADIO_RFM69
    //#define MY_RADIO_RFM95
    #define MY_RF24_PA_LEVEL RF24_PA_HIGH
    #include <MySensors.h>
    #define SKETCH_NAME "Door button"
    #define SKETCH_MAJOR_VER "1"
    #define SKETCH_MINOR_VER "0"
    #define PRIMARY_CHILD_ID 3
    #define PRIMARY_BUTTON_PIN 2   // Arduino Digital I/O pin for button/reed switch
    //#define BATTERY_SENSE_PIN A6  // select the input pin for the battery sense point
    int oldBatteryPcnt = 0;
    // Change to V_LIGHT if you use S_LIGHT in presentation below
    void setup()
      // Setup the buttons
    void presentation()
      // Send the sketch version information to the gateway and Controller
      present(PRIMARY_CHILD_ID, S_DOOR);
    // Loop will iterate on changes on the BUTTON_PINs
    void loop()
      uint8_t value;
      static uint8_t sentValue = 2;
      // Short delay to allow buttons to properly settle
      value = digitalRead(PRIMARY_BUTTON_PIN);
      if (value != sentValue) {
        // Value has changed from last transmission, send the updated value
        send(msg.set(value == HIGH));
        sentValue = value;
      // Sleep until something happens with the sensor
      sleep(PRIMARY_BUTTON_PIN - 2, CHANGE, 0);

    Serial data, one line = one button click


  • Mod

    Uncomment the my_debug and you should see all the debug info.

  • @gohan I cant to set correct speed for the serial port because used 1mhz@int osc
    I tried all options...

  • Mod

    You can do it on the gateway at least

  • @gohan already done but not possible to see anything
    Every line was shifted to the right side and finally no space left.
    I use minicom app for monitoring serial port

                                                                       ,1-1-0,s=3,c=1,t=16,pt=1,l=1,sg=0;255;3;0;9;3726496 TSF:MSG:READ0:0
                                                                                                                                                      ,1-1-0,s=3,c=1,t=16,pt=1,l=1,sg=0;255;3;0;9;3727488 TSF:MSG:READ0:0
                                                                                                                                                                                                                                     ,1-1-0,s=3,c=1,t=16,pt=1,l=1,sg=0;255;3;0;9;3728475 TSF:MSG:READ0:0

    Actually i need to make 100-1000 clicks to catch a fail moment
    Here is working fine

  • Mod

    Can't you just use the arduino ide serial monitor?

  • This post is deleted!

  • This post is deleted!

  • I was build a new button node with new arduino (8mhz) and new nrf24, then update to 2.3.0 gateway and all other devices
    But now have a worse result than before

    26 TSM:INIT
    28 TSF:WUR:MS=0
    36 TSF:SID:OK,ID=11
    38 TSM:FPAR
    75 TSF:MSG:SEND,11-11-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
    403 TSF:MSG:READ,0-0-11,s=255,c=3,t=8,pt=1,l=1,sg=0:0
    409 TSF:MSG:FPAR OK,ID=0,D=1
    2084 TSM:FPAR:OK
    2084 TSM:ID
    2086 TSM:ID:OK
    2088 TSM:UPL
    2093 TSF:MSG:SEND,11-11-0-0,s=255,c=3,t=24,pt=1,l=1,sg=0,ft=0,st=OK:1
    2099 TSF:MSG:READ,0-0-11,s=255,c=3,t=25,pt=1,l=1,sg=0:1
    2109 TSM:UPL:OK
    2111 TSM:READY:ID=11,PAR=0,DIS=1
    2129 TSF:MSG:SEND,11-11-0-0,s=255,c=3,t=15,pt=6,l=2,sg=0,ft=0,st=OK:0100
    2138 TSF:MSG:READ,0-0-11,s=255,c=3,t=15,pt=6,l=2,sg=0:0100
    2168 TSF:MSG:SEND,11-11-0-0,s=255,c=0,t=17,pt=0,l=5,sg=0,ft=0,st=OK:2.3.0
    2179 TSF:MSG:SEND,11-11-0-0,s=255,c=3,t=6,pt=1,l=1,sg=0,ft=0,st=OK:0
    2187 TSF:MSG:READ,0-0-11,s=255,c=3,t=6,pt=0,l=1,sg=0:M
    2220 TSF:MSG:SEND,11-11-0-0,s=255,c=3,t=11,pt=0,l=11,sg=0,ft=0,st=OK:Door button
    2230 TSF:MSG:SEND,11-11-0-0,s=255,c=3,t=12,pt=0,l=3,sg=0,ft=0,st=OK:1.5
    2240 TSF:MSG:SEND,11-11-0-0,s=3,c=0,t=0,pt=0,l=0,sg=0,ft=0,st=OK:
    2246 MCO:REG:REQ
    2252 TSF:MSG:SEND,11-11-0-0,s=255,c=3,t=26,pt=1,l=1,sg=0,ft=0,st=OK:2
    2260 TSF:MSG:READ,0-0-11,s=255,c=3,t=27,pt=1,l=1,sg=0:1
    2267 MCO:PIM:NODE REG=1
    2269 MCO:BGN:STP
    2271 MCO:BGN:INIT OK,TSP=1
    2275 MCO:SLP:MS=25,SMS=0,I1=255,M1=255,I2=255,M2=255
    2279 TSF:TDI:TSL
    2281 MCO:SLP:WUP=-1
    2283 TSF:TRI:TSB
    2287 TSF:MSG:SEND,11-11-0-0,s=3,c=1,t=16,pt=1,l=1,sg=0,ft=0,st=OK:0
    2295 MCO:SLP:MS=0,SMS=0,I1=0,M1=1,I2=255,M2=255
    2299 TSF:TDI:TSL

    the pressing button twice

    30343 MCO:SLP:WUP=0
    30345 TSF:TRI:TSB
    30347 MCO:SLP:MS=25,SMS=0,I1=255,M1=255,I2=255,M2=255
    30353 TSF:TDI:TSL
    30355 MCO:SLP:WUP=-1
    30357 TSF:TRI:TSB
    32043 !TSF:MSG:SEND,11-11-0-0,s=3,c=1,t=16,pt=1,l=1,sg=0,ft=3,st=NACK:1
    32049 MCO:SLP:MS=0,SMS=0,I1=0,M1=1,I2=255,M2=255
    32055 TSF:TDI:TSL
    32057 MCO:SLP:WUP=0
    32059 TSF:TRI:TSB
    32061 MCO:SLP:MS=25,SMS=0,I1=255,M1=255,I2=255,M2=255
    32067 TSF:TDI:TSL
    32069 MCO:SLP:WUP=-1
    32071 TSF:TRI:TSB
    32073 MCO:SLP:MS=0,SMS=0,I1=0,M1=1,I2=255,M2=255
    32079 TSF:TDI:TSL
    32081 MCO:SLP:WUP=0
    32083 TSF:TRI:TSB
    32086 MCO:SLP:MS=25,SMS=0,I1=255,M1=255,I2=255,M2=255
    32092 TSF:TDI:TSL
    32094 MCO:SLP:WUP=-1
    32096 TSF:TRI:TSB
    33779 !TSF:MSG:SEND,11-11-0-0,s=3,c=1,t=16,pt=1,l=1,sg=0,ft=4,st=NACK:0
    33787 MCO:SLP:MS=0,SMS=0,I1=0,M1=1,I2=255,M2=255
    33794 TSF:TDI:TSL

    But no incoming messages at the gateway. Only several random messages coming to controller from one hundred button clicks
    Sometimes after fast series of clicks I get this:

    23179 MCO:SLP:MS=0,SMS=0,I1=0,M1=1,I2=255,M2=255
    23183 !MCO:SLP:TNR
    23185 MCO:SLP:MS=25,SMS=0,I1=255,M1=255,I2=255,M2=255
    23191 !MCO:SLP:TNR
    23218 MCO:SLP:MS=0,SMS=0,I1=0,M1=1,I2=255,M2=255
    23222 !MCO:SLP:TNR
    23224 MCO:SLP:MS=25,SMS=0,I1=255,M1=255,I2=255,M2=255
    23230 !MCO:SLP:TNR
    23257 MCO:SLP:MS=0,SMS=0,I1=0,M1=1,I2=255,M2=255
    23261 !MCO:SLP:TNR
    23263 MCO:SLP:MS=25,SMS=0,I1=255,M1=255,I2=255,M2=255
    23269 !MCO:SLP:TNR
    23296 MCO:SLP:MS=0,SMS=0,I1=0,M1=1,I2=255,M2=255
    23300 !MCO:SLP:TNR
    23302 MCO:SLP:MS=25,SMS=0,I1=255,M1=255,I2=255,M2=255
    23308 !MCO:SLP:TNR
    23336 MCO:SLP:MS=0,SMS=0,I1=0,M1=1,I2=255,M2=255
    23341 !MCO:SLP:TNR
    23343 MCO:SLP:MS=25,SMS=0,I1=255,M1=255,I2=255,M2=255
    23349 !MCO:SLP:TNR
    23377 MCO:SLP:MS=0,SMS=0,I1=0,M1=1,I2=255,M2=255
    23382 !MCO:SLP:TNR
    23384 MCO:SLP:MS=25,SMS=0,I1=255,M1=255,I2=255,M2=255
    23390 !MCO:SLP:TNR
    23418 MCO:SLP:MS=0,SMS=0,I1=0,M1=1,I2=255,M2=255
    23422 !MCO:SLP:TNR
    23425 MCO:SLP:MS=25,SMS=0,I1=255,M1=255,I2=255,M2=255
    23431 !MCO:SLP:TNR
    23459 MCO:SLP:MS=0,SMS=0,I1=0,M1=1,I2=255,M2=255
    23463 !MCO:SLP:TNR
    23465 MCO:SLP:MS=25,SMS=0,I1=255,M1=255,I2=255,M2=255
    23472 !MCO:SLP:TNR
    23500 !TSF:SND:TNR
    23502 MCO:SLP:MS=0,SMS=0,I1=0,M1=1,I2=255,M2=255
    23506 !MCO:SLP:TNR
    23508 MCO:SLP:MS=25,SMS=0,I1=255,M1=255,I2=255,M2=255
    23515 !MCO:SLP:TNR
    23543 MCO:SLP:MS=0,SMS=0,I1=0,M1=1,I2=255,M2=255
    23547 !MCO:SLP:TNR
    23549 MCO:SLP:MS=25,SMS=0,I1=255,M1=255,I2=255,M2=255
    23556 !MCO:SLP:TNR
    23584 MCO:SLP:MS=0,SMS=0,I1=0,M1=1,I2=255,M2=255
    23588 !MCO:SLP:TNR
    23590 MCO:SLP:MS=25,SMS=0,I1=255,M1=255,I2=255,M2=255
    23597 !MCO:SLP:TNR
    23625 MCO:SLP:MS=0,SMS=0,I1=0,M1=1,I2=255,M2=255
    23629 !MCO:SLP:TNR
    23631 MCO:SLP:MS=25,SMS=0,I1=255,M1=255,I2=255,M2=255
    23638 !MCO:SLP:TNR
    23666 MCO:SLP:MS=0,SMS=0,I1=0,M1=1,I2=255,M2=255
    23670 !MCO:SLP:TNR
    23672 MCO:SLP:MS=25,SMS=0,I1=255,M1=255,I2=255,M2=255
    23678 !MCO:SLP:TNR
    23707 MCO:SLP:MS=0,SMS=0,I1=0,M1=1,I2=255,M2=255
    23711 !MCO:SLP:TNR
    23713 MCO:SLP:MS=25,SMS=0,I1=255,M1=255,I2=255,M2=255
    23719 !MCO:SLP:TNR
    23746 MCO:SLP:MS=0,SMS=0,I1=0,M1=1,I2=255,M2=255
    23750 !MCO:SLP:TNR
    23752 MCO:SLP:MS=25,SMS=0,I1=255,M1=255,I2=255,M2=255
    23758 !MCO:SLP:TNR
    23785 MCO:SLP:MS=0,SMS=0,I1=0,M1=1,I2=255,M2=255
    23789 !MCO:SLP:TNR
    23791 MCO:SLP:MS=25,SMS=0,I1=255,M1=255,I2=255,M2=255
    23797 !MCO:SLP:TNR
    23824 MCO:SLP:MS=0,SMS=0,I1=0,M1=1,I2=255,M2=255
    23828 !MCO:SLP:TNR
    23830 MCO:SLP:MS=25,SMS=0,I1=255,M1=255,I2=255,M2=255
    23836 !MCO:SLP:TNR
    23863 MCO:SLP:MS=0,SMS=0,I1=0,M1=1,I2=255,M2=255
    23867 !MCO:SLP:TNR
    23869 MCO:SLP:MS=25,SMS=0,I1=255,M1=255,I2=255,M2=255
    23875 !MCO:SLP:TNR
    23902 MCO:SLP:MS=0,SMS=0,I1=0,M1=1,I2=255,M2=255
    23906 !MCO:SLP:TNR
    23908 MCO:SLP:MS=25,SMS=0,I1=255,M1=255,I2=255,M2=255
    23914 !MCO:SLP:TNR
    23941 MCO:SLP:MS=0,SMS=0,I1=0,M1=1,I2=255,M2=255
    23945 !MCO:SLP:TNR
    23947 MCO:SLP:MS=25,SMS=0,I1=255,M1=255,I2=255,M2=255
    23953 !MCO:SLP:TNR
    23980 MCO:SLP:MS=0,SMS=0,I1=0,M1=1,I2=255,M2=255
    23984 !MCO:SLP:TNR
    23986 MCO:SLP:MS=25,SMS=0,I1=255,M1=255,I2=255,M2=255
    23992 !MCO:SLP:TNR
    24014 TSF:MSG:READ,0-0-11,s=255,c=3,t=8,pt=1,l=1,sg=0:0
    24020 TSF:MSG:FPAR OK,ID=0,D=1
    24025 MCO:SLP:MS=0,SMS=0,I1=0,M1=1,I2=255,M2=255
    24029 !MCO:SLP:TNR
    24031 MCO:SLP:MS=25,SMS=0,I1=255,M1=255,I2=255,M2=255
    24037 !MCO:SLP:TNR
    24064 MCO:SLP:MS=0,SMS=0,I1=0,M1=1,I2=255,M2=255
    24068 !MCO:SLP:TNR
    24070 MCO:SLP:MS=25,SMS=0,I1=255,M1=255,I2=255,M2=255
    24076 !MCO:SLP:TNR
    24104 MCO:SLP:MS=0,SMS=0,I1=0,M1=1,I2=255,M2=255
    24109 !MCO:SLP:TNR
    24111 MCO:SLP:MS=25,SMS=0,I1=255,M1=255,I2=255,M2=255
    24117 !MCO:SLP:TNR
    24145 MCO:SLP:MS=0,SMS=0,I1=0,M1=1,I2=255,M2=255
    24150 !MCO:SLP:TNR
    24152 MCO:SLP:MS=25,SMS=0,I1=255,M1=255,I2=255,M2=255
    24158 !MCO:SLP:TNR
    24186 MCO:SLP:MS=0,SMS=0,I1=0,M1=1,I2=255,M2=255
    24190 !MCO:SLP:TNR
    24193 MCO:SLP:MS=25,SMS=0,I1=255,M1=255,I2=255,M2=255
    24199 !MCO:SLP:TNR
    24227 MCO:SLP:MS=0,SMS=0,I1=0,M1=1,I2=255,M2=255
    24231 !MCO:SLP:TNR
    24233 MCO:SLP:MS=25,SMS=0,I1=255,M1=255,I2=255,M2=255
    24240 !MCO:SLP:TNR
    24268 MCO:SLP:MS=0,SMS=0,I1=0,M1=1,I2=255,M2=255
    24272 !MCO:SLP:TNR
    24274 MCO:SLP:MS=25,SMS=0,I1=255,M1=255,I2=255,M2=255
    24281 !MCO:SLP:TNR
    24309 MCO:SLP:MS=0,SMS=0,I1=0,M1=1,I2=255,M2=255
    24313 !MCO:SLP:TNR
    24315 MCO:SLP:MS=25,SMS=0,I1=255,M1=255,I2=255,M2=255
    24322 !MCO:SLP:TNR
    24350 MCO:SLP:MS=0,SMS=0,I1=0,M1=1,I2=255,M2=255
    24354 !MCO:SLP:TNR
    24356 MCO:SLP:MS=25,SMS=0,I1=255,M1=255,I2=255,M2=255
    24363 !MCO:SLP:TNR
    24391 MCO:SLP:MS=0,SMS=0,I1=0,M1=1,I2=255,M2=255
    24395 !MCO:SLP:TNR
    24397 MCO:SLP:MS=25,SMS=0,I1=255,M1=255,I2=255,M2=255
    24403 !MCO:SLP:TNR
    24432 MCO:SLP:MS=0,SMS=0,I1=0,M1=1,I2=255,M2=255
    24436 !MCO:SLP:TNR
    24438 MCO:SLP:MS=25,SMS=0,I1=255,M1=255,I2=255,M2=255
    24444 !MCO:SLP:TNR
    24471 MCO:SLP:MS=0,SMS=0,I1=0,M1=1,I2=255,M2=255
    24475 !MCO:SLP:TNR
    24477 MCO:SLP:MS=25,SMS=0,I1=255,M1=255,I2=255,M2=255
    24483 !MCO:SLP:TNR
    24510 MCO:SLP:MS=0,SMS=0,I1=0,M1=1,I2=255,M2=255
    24514 !MCO:SLP:TNR
    24516 MCO:SLP:MS=25,SMS=0,I1=255,M1=255,I2=255,M2=255
    24522 !MCO:SLP:TNR
    24549 MCO:SLP:MS=0,SMS=0,I1=0,M1=1,I2=255,M2=255
    24553 !MCO:SLP:TNR
    24555 MCO:SLP:MS=25,SMS=0,I1=255,M1=255,I2=255,M2=255
    24561 !MCO:SLP:TNR
    24588 MCO:SLP:MS=0,SMS=0,I1=0,M1=1,I2=255,M2=255
    24592 !MCO:SLP:TNR
    24594 MCO:SLP:MS=25,SMS=0,I1=255,M1=255,I2=255,M2=255
    24600 !MCO:SLP:TNR
    24627 MCO:SLP:MS=0,SMS=0,I1=0,M1=1,I2=255,M2=255
    24631 !MCO:SLP:TNR
    24633 MCO:SLP:MS=25,SMS=0,I1=255,M1=255,I2=255,M2=255
    24639 !MCO:SLP:TNR
    24666 MCO:SLP:MS=0,SMS=0,I1=0,M1=1,I2=255,M2=255
    24670 !MCO:SLP:TNR
    24672 MCO:SLP:MS=25,SMS=0,I1=255,M1=255,I2=255,M2=255
    24678 !MCO:SLP:TNR
    24705 MCO:SLP:MS=0,SMS=0,I1=0,M1=1,I2=255,M2=255
    24709 !MCO:SLP:TNR
    24711 MCO:SLP:MS=25,SMS=0,I1=255,M1=255,I2=255,M2=255
    24717 !MCO:SLP:TNR
    24745 MCO:SLP:MS=0,SMS=0,I1=0,M1=1,I2=255,M2=255
    24750 !MCO:SLP:TNR
    24752 MCO:SLP:MS=25,SMS=0,I1=255,M1=255,I2=255,M2=255
    24758 !MCO:SLP:TNR
    24786 MCO:SLP:MS=0,SMS=0,I1=0,M1=1,I2=255,M2=255
    24791 !MCO:SLP:TNR
    24793 MCO:SLP:MS=25,SMS=0,I1=255,M1=255,I2=255,M2=255
    24799 !MCO:SLP:TNR
    24827 MCO:SLP:MS=0,SMS=0,I1=0,M1=1,I2=255,M2=255
    24832 !MCO:SLP:TNR
    24834 MCO:SLP:MS=25,SMS=0,I1=255,M1=255,I2=255,M2=255
    24840 !MCO:SLP:TNR
    24868 MCO:SLP:MS=0,SMS=0,I1=0,M1=1,I2=255,M2=255
    24872 !MCO:SLP:TNR
    24875 MCO:SLP:MS=25,SMS=0,I1=255,M1=255,I2=255,M2=255
    24881 !MCO:SLP:TNR
    24909 MCO:SLP:MS=0,SMS=0,I1=0,M1=1,I2=255,M2=255
    24913 !MCO:SLP:TNR
    24915 MCO:SLP:MS=25,SMS=0,I1=255,M1=255,I2=255,M2=255
    24922 !MCO:SLP:TNR
    24950 MCO:SLP:MS=0,SMS=0,I1=0,M1=1,I2=255,M2=255
    24954 !MCO:SLP:TNR
    24956 MCO:SLP:MS=25,SMS=0,I1=255,M1=255,I2=255,M2=255
    24963 !MCO:SLP:TNR
    24991 MCO:SLP:MS=0,SMS=0,I1=0,M1=1,I2=255,M2=255
    24995 !MCO:SLP:TNR
    24997 MCO:SLP:MS=25,

    Then it continue works as before

    Actually I have problems only with fu@ing button, most simplest device. Several month I can't to start use it.
    All other devices are working properly even on 2.3.0 ver. 😜

  • Mod

    Have you tried with a debouce? Just in case...

  • This post is deleted!

  • @gohan the default sketch with debounce library works better, but now i see my primary problem.
    Occasionally I have an ACK errors

    4231 TSF:MSG:SEND,21-21-0-0,s=3,c=1,t=16,pt=2,l=2,sg=0,ft=0,st=OK:0
    4239 MCO:SLP:MS=0,SMS=0,I1=0,M1=1,I2=255,M2=255
    4245 TSF:TDI:TSL
    4247 MCO:SLP:WUP=0
    4249 TSF:TRI:TSB
    4290 !TSF:MSG:SEND,21-21-0-0,s=3,c=1,t=16,pt=2,l=2,sg=0,ft=0,st=NACK:1
    4298 MCO:SLP:MS=0,SMS=0,I1=0,M1=1,I2=255,M2=255
    4302 TSF:TDI:TSL
    4304 MCO:SLP:WUP=0
    4306 TSF:TRI:TSB
    4313 TSF:MSG:SEND,21-21-0-0,s=3,c=1,t=16,pt=2,l=2,sg=0,ft=1,st=OK:0
    4321 MCO:SLP:MS=0,SMS=0,I1=0,M1=1,I2=255,M2=255

    I tried to icrease the time ack on my controller - it does not help
    Ithink that I need to ckeck ack state on the node and send the message again, but have no idea how to do

  • Mod

    you are at the limit of the radio range I'd say so randomly it looses a message, so you need to either increase power or get a better antenna (I hope you aren't using any buck/boost converter as power supply)

  • @gohan how you know?
    Id 21 from range 0..255. Are you sure that is limit?

    Same with any different IDs, I tried sending message 3 times, this guarantees delivery of payload, but it using too much power

    Now I use power supply with 1117

    But my other nodes powered by CR2032 with boost 0.8-3.3V dc/dc with inductor coil on the NRF24 supply pin without any troubles

  • Hardware Contributor

    @pavel-polititsky said in 💬 Door, Window and Push-button Sensor:

    @gohan how you know?
    Id 21 from range 0..255. Are you sure that is limit?

    He means radio range (distance) not ID of node 😉

  • @nca78 oke, undestood
    Problem stiil not resolved. I want to send message again to the gateway if NACK but dont know how to do it.

    send(msg.set(value == HIGH), true); 

    in this case i have additional ack log in the serial debug, nothing more

  • Mod

    The send function returns a value, so you can check if it was successfully sent or not and in case retry

  • Plugin Developer

    A quick ACK example:

            static boolean tryAgainLater = false; // should we resend?
              Serial.println(F("Received ACK"));
              tryAgainLater = false;
            }else {
              Serial.println(F("Connection problem, try again"));
              tryAgainLater = true;

  • Mod

    There is no need to set the second parameter to send() to true. That parameter is unrelated to the return value (except very unfortunate similar naming). More info: https://github.com/mysensors/MySensors/issues/1103

  • Plugin Developer

    @mfalkvidd said in 💬 Door, Window and Push-button Sensor:


    Ah, thanks. So ACK basically always happens?

    in that case, do you have any better example code on how to check if the ACK is received?

  • Mod

    @alowhum on nrf24, "hardware" ack is always on. "Software" ack is controlled by the second parameter in the send() function. Read https://forum.mysensors.org/post/34267 for an attempt to sort out the details. It is still quite confusing for me.

  • What will happen if i cut the power OFF of the radio after each transmission? is it needed to be initialize again before next transmission?

  • Mod

    @tiana yes.

    But don't cut the power. Use transportDisable and transportReInitialize instead.

  • Do you know how much will be power usage in transportDisable mode?

  • Mod

    @tiana depends on which transport you are using, and if using genuine or clone chips. The nrf24 is rated for 900nA.

  • Thanks for fast reply, actually 900nA is to big number and i prefer to use xxx_POWER_PIN to cut the power of the NRF module.
    I am building switch powered with CR2032 battery and i want to extend battery live as much as possible, for a switch is not needed to keep radio alive, i need it ON only when transmit signal

  • Mod

    @tiana 900nA on a cr2032 is 27.9 years battery life. The self discharge of a cr2032 is around 250nA.
    But yes, use the power pin setting if you want to.

    Would be interesting to see how long sleep times are needed to make up for the extra time needed to wake up the radio from power off compared to sleep. The mcu and the radio will need to be awake for 100ms longer time when starting from power off than when starting from sleep.

  • Hi I notice that there is not sleep in this sketch. Is it not required for this build

  • Mod

    @terence-faul the sketch will work as-is, as long as the node has a constant power supply. If you want a battery-powered node, you'll need sleep. See earlier discussions in this thread for ways to add sleep.

  • Hi
    Can i connect two sensor contact to this arduino ? First to pin 3 second to pin 4 ? But how modified this sketch to support two sensor contact ?

  • @pepson If you need the node to sleep or want to use interrupts then only digital pins 2 and 3 will do this for uno/promini.

    So otherwise 2 options really.

    If you just need to know that one of the sensors triggered (but not which one) then you can add sensors in series (for normally 'closed' sensors) or parallel (for normally 'open' sensors).

    To use interrupt and know which sensor triggered you'd have to connect both sensor to interrupt pin with blocking diodes to digital pins as well and then on interrupt you can check which digital pin activated the isr.

  • I need connect two contact sensor. And i want to know from two sensor his status...
    I need use one to door but second to door garage.

  • @pepson Then just add another sensor from ground to digital pin 2 and change the code you see in the example to accommodate the extra input.

    You'll need to add another child id, another button, another bounce function, another presentation, another send and another bounce call.

  • @skywatch
    Yes but i dont know how do it.... 😞
    I dont know programing.

  • Hardware Contributor

    @pepson said in 💬 Door, Window and Push-button Sensor:

    Yes but i dont know how do it.... 😞
    I dont know programing.

    Not an excuse, it's time for you to learn 🙂

  • Mod

    @pepson then it is going to be quite difficult for you to work on DIY electronics projects if you don't how to program.

  • Perhaps it would be good to update the example code. I mean the pull-up sequence:
    "It is recommended to set the pinMode() to INPUT_PULLUP to enable the internal pull-up resistor." - https://www.arduino.cc/reference/en/language/functions/digital-io/digitalwrite/
    The following seems to be obsolete:
    // Setup the button
    // Activate internal pull-up

Log in to reply

Suggested Topics

  • 3
  • 584
  • 163
  • 2
  • 109
  • 2