Overview
MAM identifies devices on a local network and keeps a record of their MAC addresses. It combines a Django interface, Selenium browser automation, and a SQLite device inventory.
Challenge
The supported TP-Link router exposes its controls through an admin interface, without an API for this workflow. Device discovery and management therefore require interaction with that interface.
Solution
Selenium signs in to the router's admin interface to read connected devices and support router interactions. Django presents the device list and lets the user save MAC addresses, device types, and descriptions in SQLite, including records for devices that are no longer connected.
Engineering decisions
Automate the available interface. Selenium provides a way to interact with router controls when there is no API. The tradeoff is dependence on the router's pages and firmware version.
Keep the application local. The intended deployment is a Linux server inside the LAN, where the router admin interface is reachable. It does not require exposing that interface to the public internet.
Preserve device context. Saving MAC addresses with a type and description makes the inventory useful even when a device disconnects.
Architecture
Django provides the application interface, styled with Tailwind CSS and Crispy Tailwind. Selenium connects to the router's web administration pages. SQLite keeps the saved device inventory separate from the current connected-device list.
My role
Backend and product
What it delivers
Users can see currently connected devices, save them to a local inventory, and review both connected and previously recorded MAC addresses with their device information.
Constraints & tradeoffs
The integration supports specific TP-Link router versions, not every router model. Browser automation depends on the structure of the admin interface, so firmware or page changes may require adjustments. A public hosted demo would not have access to the user's local router.
Tech stack
- Django
- Selenium
- SQLite
- TailwindCSS