8 Commits

Author SHA1 Message Date
tarcourt 93da936ab0 docs: embed dashboard screenshots and demo GIF in README 2026-07-07 11:30:54 +02:00
tarcourt b380334375 docs: complete README rewrite - synthetic, updated structure, all features covered
Structure now reflects real repo (build/, dashboard/, deploy/).
Sections reorganized for readability, compact tables instead of prose.
Kept all critical details: v2/v3 payload decoding, mode switching,
callback config gotchas, security, K8s deployment.

Reduced from 485 to ~230 lines while covering every feature.
2026-07-03 18:36:36 +02:00
tarcourt 16a2429f88 docs: add Sens'it v2 uplink frames doc link in Resources 2026-07-03 18:29:35 +02:00
tarcourt 58ca57a627 feat: dashboard token auth + README v2/v3 payload sections split
Dashboard:
- Optional DASHBOARD_TOKEN env var (K8s secret 'snek-dashboard-secret')
- Flask before_request check via Authorization header or ?token= param
- /webhook and /healthz remain public (SNEK POST needs to reach webhook)
- Frontend prompts for token on first load, stores in localStorage
- Token forwarded on fetch() calls and EventSource URL

README decoding section:
- Split into two full sub-sections for Sens'it Discovery (v3) and Sens'it v2
- Explicit bit ordering note (MSB-LSB v3 vs LSB-MSB v2)
- Byte-by-byte tables, formulas per mode, worked examples
- Note that auto-detection uses byte 0 bits 2-0 == 0b110 marker for v3

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-07-03 18:27:33 +02:00
tarcourt 2e24415224 docs: precise SNEK callback config for JSON POST body
- Step-by-step field-by-field callback config table
- Common pitfall documented: don't paste JSON body in "Line pattern"
- Exact JSON body template format (spaces around colons required)
- Companion dashboard deployment steps

Backend also cleaned up: unified query-string / JSON body parsing
via a single _num() helper instead of nested try/except blocks.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-07-03 17:58:05 +02:00
tarcourt c7ab02cc59 feat: auto-disable message authentication at startup
SNEK resets to authentication=enabled on every restart and does not persist
the state anywhere. The entrypoint now waits for the SNEK API to be ready
and POSTs to /ned/saturation to disable auth automatically.

- Registered devices without HMAC public keys (e.g. demo Sens'it) are
  decoded immediately on first boot and after any pod restart
- To re-enable auth in production, comment the polling block in entrypoint.sh

README updated with details in the "Configuration des devices" section.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-07-03 17:38:45 +02:00
tarcourt 66db42b362 docs: security section + fix MAX_DEVICES doc
- Add "Sécurité, vie privée & aspects légaux" section covering:
  - What the SDR dongle actually captures (RF broadcast)
  - What SNEK exposes by default (nothing for unregistered devices)
  - Theoretical interception attack scenario
  - Legal aspects (Article 226-15, RGPD)
  - Best practices to mitigate

- Fix MAX_DEVICES doc: 5 is the hard limit (JS frontend hardcoded)
  Removed misleading claim that config change to 10 works

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-07-03 17:30:59 +02:00
tarcourt ff648fa9b2 init: SNEK on Kubernetes
- Dockerfile: Ubuntu 20.04 + all SNEK dependencies (libgtk2-perl, libffi6, etc.)
- entrypoint.sh: flash firmware via foxctl, start main_sigfox
- deploy/snek.yaml: K8s manifest (namespace, PVC, deployment, LoadBalancer)
- README: full documentation covering hardware, software, decoding, callbacks
2026-07-03 17:16:32 +02:00