/**
* @file timeRequest.ino
* @author Pascal Gollor
* @date 2017-12-03
*
* use libraries:
* - MySensors (https://github.com/mysensors/MySensors)
* - Time (https://github.com/PaulStoffregen/Time)
*/
// ----- definitions -----
#define NANOIO
#define MY_RADIO_NRF24
#define MY_NODE_ID 23
#ifdef NANOIO
#define MY_RF24_CE_PIN 9
#define MY_RF24_CS_PIN 10
#endif
#define MY_RF24_CHANNEL 83
#define MY_BAUD_RATE 57600
//#define MY_DEBUG
#define SKETCH_NAME "timeRequest"
#define SKETCH_VERSION "20171203_01"
// ----- includes -----
#include <SPI.h>
#include <MySensors.h>
#include <Time.h>
// ----- functions -----
void presentation()
{
sendSketchInfo(SKETCH_NAME, SKETCH_VERSION);
} // presentation
void receiveTime(unsigned long ts)
{
const unsigned long DEFAULT_TIME = 1357041600; // Jan 1 2013
#ifdef MY_DEBUG
Serial.print('[');
Serial.print(millis() / 1000);
Serial.print(F("]: ts: "));
Serial.println(ts);
#endif
if (ts > DEFAULT_TIME)
{
setTime(ts);
}
} // receiveTime
#ifdef MY_DEBUG
void receive(const MyMessage &message)
{
static const char buff[64];
Serial.print('[');
Serial.print(millis() / 1000);
Serial.print(F("]: message.type: "));
Serial.print(message.type);
Serial.print(F(" - sensor: "));
Serial.print(message.sensor);
Serial.print(F(" - sender: "));
Serial.print(message.sender);
Serial.print(F(" - destination: "));
Serial.print(message.destination);
Serial.print(F(" - msg: "));
Serial.println(message.getString(buff));
} // receive
#endif
void printDigits(int digits)
{
// utility function for digital clock display: prints preceding colon and leading 0
if(digits < 10)
{
Serial.print('0');
}
Serial.print(digits);
} // printDigits
void printTime()
{
printDigits(hour());
Serial.write(':');
printDigits(minute());
Serial.write(':');
printDigits(second());
Serial.write(' ');
printDigits(day());
Serial.write('.');
printDigits(month());
Serial.write('.');
Serial.println(year());
} // printTime
time_t requestSync()
{
Serial.print('[');
Serial.print(millis() / 1000);
Serial.println(F("]: Request time."));
requestTime();
delay(500); // wait for time receiving
return 0;
} // requestSync
void before()
{
Serial.begin(MY_BAUD_RATE);
Serial.println("");
Serial.println(F(SKETCH_NAME));
Serial.print(F("Version: "));
Serial.println(F(SKETCH_VERSION));
Serial.flush();
}
void setup()
{
Serial.print('[');
Serial.print(millis() / 1000);
Serial.println(F("]: setup"));
Serial.flush();
setSyncProvider(requestSync);
} // setup
void loop()
{
#ifdef MY_DEBUG
static unsigned long lastRequest = 0;
unsigned long currentTime = millis();
if (currentTime - lastRequest >= 10000UL)
{
lastRequest = currentTime;
requestTime();
printTime();
}
#else
static unsigned char lastHour = 0;
// request time every our
if (hour() != lastHour || year() == 1970)
{
requestSync();
lastHour = hour();
}
printTime();
sleep(10000UL);
#endif
} // loop