4#include "LocalTimeRK.h"
6#include "PublishQueuePosixRK.h"
30 current.set_lastCountTime(Time.now());
33 Log.info(
"Count detected - Hourly: %d, Daily: %d",
65 current.set_occupancyStartTime(Time.now());
67 Log.info(
"Space now OCCUPIED at %s", Time.timeStr().c_str());
72 current.set_lastOccupancyEvent(millis());
75 uint32_t occupiedDuration = Time.now() -
current.get_occupancyStartTime();
76 Log.info(
"Occupancy event - Duration: %lu seconds", occupiedDuration);
96 uint32_t debounceMs =
sysStatus.get_occupancyDebounceMs();
97 uint32_t timeSinceLastEvent = millis() -
current.get_lastOccupancyEvent();
100 if (timeSinceLastEvent > debounceMs) {
102 uint32_t sessionDuration = Time.now() -
current.get_occupancyStartTime();
105 uint32_t totalOccupied =
current.get_totalOccupiedSeconds() + sessionDuration;
106 current.set_totalOccupiedSeconds(totalOccupied);
110 current.set_occupancyStartTime(0);
112 Log.info(
"Space now UNOCCUPIED - Session duration: %lu seconds, Total today: %lu seconds",
113 sessionDuration, totalOccupied);
Cloud Configuration Management - Particle Ledger integration for device configuration.
Global compile-time configuration options and enums.
Persistent Data Storage Structures - EEPROM/Retained Memory Management.
Singleton wrapper around ISensor implementations.
void handleOccupancyMode()
Handle sensor events in OCCUPANCY mode.
void updateOccupancyState()
Update occupancy state based on debounce timeout.
void handleCountingMode()
Handle sensor events in COUNTING mode.
static SensorManager & instance()
Get the SensorManager singleton instance.
Pinout definitions for the carrier board and sensors.