No description
Find a file
2023-08-17 21:47:36 +02:00
scanner Remove unnecessary newlines 2023-08-17 21:47:36 +02:00
website Remove example data, catch errors 2023-08-17 21:23:49 +02:00
README.md Move to scanner+uploader logic 2023-08-17 21:46:32 +02:00

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

[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

[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