Presense is a smart attendance tracker that leverages the ESP32’s capability to sniff network probes from nearby devices. This system enables automatic tracking of attendance based on device presence without requiring manual input.
To ensure a seamless experience, it's recommended to use PlatformIO for managing the ESP32 development environment. Install PlatformIO Core via pip:
pip install platformio-
Clone the repository:
git clone https://github.com/amfoss/presense
-
Configure secrets:
cp src/include/secrets.h.sample src/include/secrets.h
Then edit
src/include/secrets.hwith your configuration values. -
Build and flash the ESP32 using PlatformIO:
pio run -t upload
Before running the project, copy src/include/secrets.h.sample to src/include/secrets.h and configure the following variables:
-
SSID: WiFi network name to connect to
#define SSID "wifi_network"
-
USERNAME: PEAP/Enterprise WiFi username (leave empty for WPA2-PSK networks)
#define USERNAME "username"
-
PASSWORD: WiFi password (or PEAP password for enterprise networks)
#define PASSWORD "password"
-
SECRET_KEY: Shared secret key for HMAC signature generation (used to authenticate attendance records)
#define SECRET_KEY "secret_key"
-
GRAPHQL_ENDPOINT: Backend GraphQL API endpoint URL for fetching member data and submitting attendance
#define GRAPHQL_ENDPOINT "api_url"
-
TIME_API_KEY: API key for TimezoneDB service (used to fetch accurate timestamp)
#define TIME_API_KEY "timezonedb_api_key"
-
MAC_ADDRESS: Custom MAC address to spoof on the ESP32 (hex format)
#define MAC_ADDRESS {0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF}
-
IS_ENTERPRISE: Set to
truefor WPA2-Enterprise (PEAP) networks,falsefor WPA2-PSK#define IS_ENTERPRISE true
- Fork the repository and clone it to your local machine.
- Set up the project by following the installation instructions above.
- Identify an issue or feature you'd like to work on, and create an issue to track it.
- Develop the patch or feature, ensuring it is thoroughly tested.
- Submit a pull request, referencing the relevant issue number.
This project is licensed under GNU General Public License V3. You are welcome to adapt it, make it yours. Just make sure that you credit us too.