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. Development
  3. How to auto reboot node every 24 hours ?

How to auto reboot node every 24 hours ?

Scheduled Pinned Locked Moved Development
15 Posts 3 Posters 8.0k 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.
  • scalzS scalz

    Hello.

    you have to use a watchdog timer for this. You can use the internal wdt of you mini pro etc.. or use an external hardware wdt.
    https://forum.mysensors.org/topic/4760/watchdog-on-2-0/17
    https://tushev.org/articles/arduino/5/arduino-and-watchdog-timer

    carlekiC Offline
    carlekiC Offline
    carleki
    wrote on last edited by
    #3

    @scalz said:

    Hello.

    you have to use a watchdog timer for this. You can use the internal wdt of you mini pro etc.. or use an external hardware wdt.
    https://forum.mysensors.org/topic/4760/watchdog-on-2-0/17
    https://tushev.org/articles/arduino/5/arduino-and-watchdog-timer

    merci scalz ;)

    but if my node (temperature or door) goes to sleep : the watchdog will not be reseted and it will restart ?

    1 Reply Last reply
    0
    • hekH Offline
      hekH Offline
      hek
      Admin
      wrote on last edited by
      #4

      Then you have to calculate the number of sleepcycles * sleep time to get the passed time.

      carlekiC 1 Reply Last reply
      0
      • hekH hek

        Then you have to calculate the number of sleepcycles * sleep time to get the passed time.

        carlekiC Offline
        carlekiC Offline
        carleki
        wrote on last edited by
        #5

        @hek said:

        Then you have to calculate the number of sleepcycles * sleep time to get the passed time.

        In the links provided by @scalz, the max time for the watchdog is 8 seconds, and my node is asleep for 15 minutes !

        1 Reply Last reply
        0
        • scalzS Offline
          scalzS Offline
          scalz
          Hardware Contributor
          wrote on last edited by scalz
          #6

          @carmelo42

          • interesting question is which Mysensors version are you using? because v2 should be (or at least in short term) is more robust, there are procedure to reconnect etc in the lib (I know that some jeedom user prefers older version ;) )

          During Sleep mode:
          Watchdog is used by sleep(x ms). But not used with sleep forever (deep sleep). As you're using sleep(x ms), it should handle that during the sleeping period.

          During the wake up:
          if it's not enabled, look at the links above. But as described, you will need to put your wdt_reset in your main loop or other places, so if there would be some eternal loop or whatever, it would reset as expected (because of non call of wdt_reset).
          But if your sketch is still working, but lost comm because you would use older version lib, then wdt reset will still be called, and no reset, and you won't get back your comm..

          Shortly:

          • if it's comm related, sure wdt is a good point, but better to update lib
          • if it's sketch related, there may be something blocking somewhere which is not great practice (blocking loop in sketch or in a lib used), in this case wdt will be helpful.
          • if it's hardware related, wdt will also be helpful; you could use an external watchog board in this case
          1 Reply Last reply
          0
          • carlekiC Offline
            carlekiC Offline
            carleki
            wrote on last edited by
            #7

            I will try the v2.0 !
            Juste flash my gateway with the new sketch ?
            Can v1.5.4 nodes and v2.0 nodes work with 2.0 gateway ?

            May be it's quite simply to upgrade to v2.0 and my freeze problems will be solved ...

            1 Reply Last reply
            0
            • scalzS Offline
              scalzS Offline
              scalz
              Hardware Contributor
              wrote on last edited by
              #8

              @carmelo42
              hehe :)
              in fact it's better to run everything with 2.0, beta version (gw and nodes).

              I understand that from a user point of view (with a network quite stable), there can be some apprehension.. plus for the moment the ctrler plugin does not have all the types yet.
              But maybe if you're a warrior you could give a try and see if it improves. Perhaps try simple with a gw+a node and change freq/channel and test on your computer..

              What i can say, compared to <2), is v2 (beta has more commits) is optimized (memory&process), mechanism for better comm reliability, and more debug msg (but they don't look the same as v1.x).
              And the lib is always improving, for the better! no ads hihi :blush:

              Look at the docs for changes in sketch between 1.5 and 2.x. nothing fancy, and you will see that with v2 your sketch readibility has been improved. yeah!
              I hope that will help!

              1 Reply Last reply
              1
              • carlekiC Offline
                carlekiC Offline
                carleki
                wrote on last edited by carleki
                #9

                Ok !

                I will update all my sensors + gw to 2.0 and test it with my sensors (as long as the outside temperatures won't go below 15°C all day I don't need to have my boiler functionnal so I can do some tests :)

                If it's ok I stay with 2.0, if not I can go back to 1.5.4 ;)

                I'm using just temperature nodes, relay actuator nodes and distance nodes : so all the code is available on mysensors website with 2.0 ;)

                1 Reply Last reply
                0
                • carlekiC Offline
                  carlekiC Offline
                  carleki
                  wrote on last edited by
                  #10

                  @scalz do you know if it's possible to have 1.5.4 and 2.0 in my Arduino IDE ?

                  1 Reply Last reply
                  0
                  • carlekiC Offline
                    carlekiC Offline
                    carleki
                    wrote on last edited by
                    #11

                    I have installed lib 2.0 on my linux virtual machine. When I try to compile temperature node with battery monitoring here is what I got :

                    
                    
                    /tmp/ccQR5mwk.ltrans1.ltrans.o: In function `loop':
                    ccQR5mwk.ltrans1.o:(.text+0x6d4): undefined reference to `Vcc::Read_Volts()'
                    /tmp/ccQR5mwk.ltrans2.ltrans.o: In function `global constructors keyed to 65535_0_tempbatv2.ino.cpp.o.2373':
                    ccQR5mwk.ltrans2.o:(.text.startup+0x98): undefined reference to `Vcc::Vcc(float)'
                    collect2: error: ld returned 1 exit status
                    exit status 1
                    Error compiling for board Arduino Pro or Pro Mini.
                    

                    My sketch :

                    /**
                     * 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
                     *
                     * Example sketch showing how to send in DS1820B OneWire temperature readings back to the controller
                     * http://www.mysensors.org/build/temp
                     */
                    
                    
                    // 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 <DallasTemperature.h>
                    #include <OneWire.h>
                    #include <Vcc.h>
                    
                    #define COMPARE_TEMP 0 // Send temperature only if changed? 1 = Yes 0 = No
                    #define ID_BatPcnt 1
                    #define ID_Bat 2
                    
                    //const float VccMin   = 1.6;             // Vcc mini attendu, en Volts.
                    //const float VccMax   = 3.06;           // Vcc Maximum attendu, en Volts (2 piles AA neuves)
                    //const float VccCorrection = 2.52/2.6; // calibration : Vcc mesuré au multimètre / Vcc mesuré par l'Arduino par vcc.Read_Volts() dans sketch 1/2
                    //Vcc vcc(VccCorrection);
                    
                    static const float VccMin = 1.6;        // Minimum expected Vcc level, in Volts. (0.6V for 1 AA Alkaline)
                    static const float VccMax = 3.3;        // Maximum expected Vcc level, in Volts. (1.5V for 1 AA Alkaline)
                    static const float VccCorrection = 2.52 / 2.6;  // Measured Vcc by multimeter divided by reported Vcc
                    Vcc vcc(VccCorrection);
                    
                    #define ONE_WIRE_BUS 3 // Pin where dallase sensor is connected 
                    #define MAX_ATTACHED_DS18B20 16
                    unsigned long SLEEP_TIME = 900000; // Sleep time between reads (in milliseconds)
                    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;
                    MyMessage msgBAT_PCNT(ID_BatPcnt,V_VAR1); // on utilise le type V_VAR1 pour le % de charge des piles
                    MyMessage msgBAT(ID_Bat,V_VAR2);          // on utilise le type V_VAR2 pour la tension des piles
                    // Initialize temperature message
                    MyMessage msg(0,V_TEMP);
                    
                    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("Temperature Sensor", "1.1");
                    
                      // Fetch the number of attached temperature sensors  
                      numSensors = sensors.getDeviceCount();
                    
                      // Present all sensors to controller
                      present(ID_BatPcnt, S_CUSTOM);  // type S_CUSTOM pour le capteur "% de charge"
                      present(ID_Bat, S_CUSTOM);      // type S_CUSTOM pour le capteur "tension"
                      for (int i=0; i<numSensors && i<MAX_ATTACHED_DS18B20; i++) {   
                         present(i, S_TEMP);
                      }
                    }
                    
                    void loop()     
                    {     
                      // mesure de Vcc
                          float v = vcc.Read_Volts();
                          // calcul du % de charge batterie
                          float p = 100 * ((v - VccMin) / (VccMax - VccMin));
                          // On envoie les données des capteurs et de l'état de la batterie au Gateway
                          //gw.sendBatteryLevel(p);  // Inutile...
                          send(msgBAT_PCNT.set(p, 1)); // 1 décimale
                          send(msgBAT.set(v, 3));      // 2 décimales
                      // 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>((getConfig().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(msg.setSensor(i).set(temperature,1));
                          // Save new temperatures for next compare
                          lastTemperature[i]=temperature;
                        }
                      }
                      sleep(SLEEP_TIME);
                    }
                    

                    I understand there is a problem with Vcc and vcc float ... but ...

                    1 Reply Last reply
                    0
                    • scalzS Offline
                      scalzS Offline
                      scalz
                      Hardware Contributor
                      wrote on last edited by scalz
                      #12

                      @carmelo42
                      your sketch is compiling well for me. Check your arduino and mysensors lib install (save your Mydoc\Arduino folder if you're not sure)

                      1 Reply Last reply
                      0
                      • carlekiC Offline
                        carlekiC Offline
                        carleki
                        wrote on last edited by
                        #13

                        ok ....

                        it is not the 1st time I have problems with lib MYS lib install ... I have done this :

                        on a fresh linux install, DL the Arduino IDE 1.6.5, in the IDE menu, DL the MYS libraries and DallasSensors Temp lib ...

                        Is this the wrong way ?

                        1 Reply Last reply
                        0
                        • scalzS Offline
                          scalzS Offline
                          scalz
                          Hardware Contributor
                          wrote on last edited by scalz
                          #14

                          weird! that's normally easy. I can't tell you about linux though, i'm using windows.
                          Arduino 1.6.8 min for me. do you also use Mysensors beta? (it's better for the moment)
                          For dallastemp, i don't remember, what i can tell you is that your sketch compiled on my machine. and i have not the latest dev version for the moment.
                          Could you try to compile a simple sketch with no external lib for the moment (like the relay sketch with no button for beginning)? so you will be able to know if it's your arduino/mysensors install.

                          1 Reply Last reply
                          0
                          • carlekiC Offline
                            carlekiC Offline
                            carleki
                            wrote on last edited by
                            #15

                            I finally have found the problem : I had only Vcc.h in my VCC folder ... So the .cpp file was misisng !!

                            --> noob alert :)

                            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