Files
bigbrother/presence/presence_schema.sql
T
Cobra fd014b2a38 Add passive presence daemon — multi-signal WiFi/ARP/DHCP/BLE with exponential decay
Implements DevTrack #530: Person Presence Intelligence daemon for BigBrother drop implant.

Core components:
- presence_daemon.py: 4 sensor threads (probe, ARP, DHCP, BLE) with exponential decay
- presence_schema.sql: SQLite schema for persons, devices, signals, occupancy log
- install.sh: Deployment script (copies to /opt/sensor/, creates systemd service)
- AUDIT_impl.md: Implementation notes, limitations, audit checklist

Features:
- Exponential decay model (lambda=0.08/min) for signal certainty
- Presence anchor (45-min hold time prevents false VACANT)
- Person state machine: UNKNOWN → PRESENT ↔ ABSENT
- Multi-signal fusion: max + 0.08×min for device aggregate
- Thread-safe in-memory state with SQLite persistence
- Matrix webhook alerting (if configured)
- HTTP status endpoint on 127.0.0.1:9191
- Graceful BLE degrade if bleak unavailable
- No tool fingerprints in output or service names
2026-04-10 15:49:03 -04:00

34 lines
933 B
SQL

CREATE TABLE IF NOT EXISTS persons (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
notes TEXT
);
CREATE TABLE IF NOT EXISTS devices (
mac TEXT PRIMARY KEY,
person_id INTEGER REFERENCES persons(id),
label TEXT,
added_at REAL DEFAULT (unixepoch())
);
CREATE TABLE IF NOT EXISTS signals (
id INTEGER PRIMARY KEY,
mac TEXT NOT NULL,
signal_type TEXT NOT NULL,
certainty REAL NOT NULL,
ts REAL DEFAULT (unixepoch())
);
CREATE TABLE IF NOT EXISTS occupancy_log (
id INTEGER PRIMARY KEY,
person_id INTEGER REFERENCES persons(id),
old_status TEXT,
new_status TEXT NOT NULL,
ts REAL DEFAULT (unixepoch())
);
CREATE INDEX IF NOT EXISTS idx_signals_mac ON signals(mac);
CREATE INDEX IF NOT EXISTS idx_signals_ts ON signals(ts);
CREATE INDEX IF NOT EXISTS idx_occupancy_person ON occupancy_log(person_id);
CREATE INDEX IF NOT EXISTS idx_devices_person ON devices(person_id);