#include #include #include #include "NotificationLEDs.h" #define SENSOR_CHECK_INTERVAL 2000 #define MSG_SEND_CYCLES 15 #define MSG_SEND_INTERVAL 30000 #define PIN_BUZZER 3 #define PIN_RGBW 5 #define PIN_MOTION 6 #define PIN_DOOR0 A0 #define PIN_DOOR1 A1 #define PIN_DOOR2 A2 #define PIN_DOOR3 A3 #define PIN_MOTION2 A5 #define SENSOR_ID_RGBW 0 #define SENSOR_ID_DIMMER 1 #define SENSOR_ID_POWERSWITCH 2 #define SENSOR_ID_COMMAND 3 #define SENSOR_ID_MOTION 10 #define SENSOR_ID_DOOR0 11 #define SENSOR_ID_DOOR1 12 #define SENSOR_ID_DOOR2 13 #define SENSOR_ID_DOOR3 14 #define SENSOR_ID_MOTION2 15 #define SENSOR_ID_VCC 210 #define DIN_DEBOUNCE 6 #define UNIXTIME_FETCH_INTERVAL_SEC 300 #define NEOPIXEL_LEDCOUNT 16 // create a NodeManager instance typedef NodeManager< Tuple< NotificationLEDs, SensorMotion, SensorMotion, SensorDoor, SensorDoor, SensorDoor, SensorDoor, SensorVcc > > MyNodeManagerBase; class MyNodeManager : public MyNodeManagerBase { protected: } nodeManager; void before() { //nodeManager.setSleep(ALWAYS_ON, 1, SECONDS); nodeManager.before(); } void presentation() { nodeManager.presentation(); } void receive(const MyMessage &message) { if (!message.isAck()) { nodeManager.receive(message); } } unsigned long unixTime = 0; unsigned long unixTimeMillis = 0; void receiveTime(unsigned long ts) { unixTime = ts; unixTimeMillis = millis(); nodeManager.receiveTime(ts); } void setup() { nodeManager.setup(); } void loop() { auto currentMillis = millis(); auto diffMillis = currentMillis - unixTimeMillis; auto diffSeconds = diffMillis/1000; long currentUnixTime = unixTime + diffSeconds; if (unixTime == 0 || diffSeconds >= UNIXTIME_FETCH_INTERVAL_SEC) { requestTime(); } nodeManager.loop(currentUnixTime, currentMillis); }