How to auto reboot node every 24 hours ?
-
hi !
is it possible to program a node restart every 24 hours ?
I have lots of nodes around my house, and sometimes one of them stops sending information ... After a restart it's ok, so I want to automatically restart my sensors to avoid manualy doing it.
is it possible ?
thanks !
-
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
-
@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-timermerci scalz
but if my node (temperature or door) goes to sleep : the watchdog will not be reseted and it will restart ?
-
Then you have to calculate the number of sleepcycles * sleep time to get the passed time.
-
@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 !
-
@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
-
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 ...
-
@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 hihiLook 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!
-
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
-
@scalz do you know if it's possible to have 1.5.4 and 2.0 in my Arduino IDE ?
-
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 ...
-
@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)
-
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 ?
-
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.
-
I finally have found the problem : I had only Vcc.h in my VCC folder ... So the .cpp file was misisng !!
--> noob alert