61 lines
No EOL
1.9 KiB
Markdown
61 lines
No EOL
1.9 KiB
Markdown
# CZI presence detector
|
|
Tool to detect and publish the presence of defined devices by their WiFi MAC addresses.
|
|
|
|
## How scanning works
|
|
Sets the wifi adapter into monitor mode, then listens to surrounding packets listing all detected devices into `wifi_map.yaml`.
|
|
Then, periodically filters the results by the mac addresses that opted in on the website from `identities.json` and sends all matched identities to the website via a signed webhook. This website stores the presence information locally and displays it with `website/index.php` with a timestamp of the last update.
|
|
|
|
## What the website is capable of
|
|
Shows the last update of the `uploader.py` routine. It also allows to add identities by their name and mac and to delete identities by their mac. The mac addresses are hashed server-side and then stored into the world-accessible `identities.json`.
|
|
|
|
## Set-up
|
|
Dependencies:
|
|
- Scanner/Uploader: Python3, trackerjacker (pip3)
|
|
- Website: php
|
|
|
|
Configs to change:
|
|
- `scanner/scanner.sh`:
|
|
- WiFi adapter name
|
|
- Possibly some more system-specific changes
|
|
- `scanner/uploader.py`:
|
|
- base URL for webhook and identities
|
|
- webhook secret
|
|
- `public/update.php`:
|
|
- webhook secret
|
|
|
|
Put `scanner` onto the scanning device (e.g. Raspberry Pi). Let `scanner.sh` and `uploader.pu` running in the background, e.g. by the Systemd services below.
|
|
Put `website` onto a php-capable webserver and point your domain to it.
|
|
|
|
## Systemd services
|
|
Service for scanning packets in the background
|
|
```systemd
|
|
[Unit]
|
|
Description=CZI Presence Detector - Scanner
|
|
After=network.target
|
|
|
|
[Service]
|
|
User=root
|
|
Group=root
|
|
Restart=always
|
|
WorkingDirectory=/path/to/scanner
|
|
ExecStart=scanner.sh
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target
|
|
```
|
|
Service for uploading every $n seconds
|
|
```systemd
|
|
[Unit]
|
|
Description=CZI Presence Detector - Uploader
|
|
After=network.target
|
|
|
|
[Service]
|
|
User=pi
|
|
Group=pi
|
|
Restart=always
|
|
WorkingDirectory=/path/to/scanner
|
|
ExecStart=uploader.py
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target
|
|
``` |