HERMIT

Sensing People Without a Camera

A Raspberry Pi platform that fuses WiFi channel data, radar and a mesh of radio links into one picture of a room, and tells you honestly which sensor saw what.

Simulated. 16 nodes, 120 links

HERMIT stands for Heterogeneous Edge RF and Motion Intelligence Toolkit. It is built to notice movement, a person sitting perfectly still, and the rhythm of their breathing, while they carry nothing.

4s
Motion window

Short-window detection of movement from shifts in the WiFi channel.

10s
Stillness window

Presence of someone not moving, measured against a 20 s calibration of the empty room.

30s
Breathing window

Respiration accepted between 8 and 30 breaths per minute, with split-half validation.

A PIR Sensor Forgets You Exist When You Stop Moving

That is the problem HERMIT starts from. Radio can still see a person who is sitting, sleeping or reading, because a breathing body keeps changing the channel it sits in.

It will never
  • Produce an image
  • Draw a silhouette
  • Estimate pose
  • Identify anyone
  • Decode or decrypt traffic
  • Claim medical-grade vitals

A blob, not a silhouette.

Five Stages From Radio to Evidence

Every source publishes onto one frame bus. Detectors turn frames into events, and fusion combines them into a single state that can always explain itself, sensor by sensor.

  1. Frame bus

    Collect

    WiFi channel state, SDR sweeps, radar, environment and GNSS publish typed frames.

  2. Conditioning

    Clean

    Guard carriers removed, gain normalised, outliers filtered, live subcarriers selected.

  3. Detectors

    Detect

    Motion, stillness and breathing run on separate windows, each with its own threshold.

  4. Fusion

    Combine

    Bounded log-odds: no single sensor can dominate, and every vote is recorded.

  5. Outputs

    Report

    Desktop app, local dashboard and a JSONL event log. Events, not raw channel data.

Buy uncorrelated failure modes, not redundancy.

The design principle behind the sensor mix. WiFi, radar, infrared and radio mesh each fail in different conditions, so fusing them is worth more than doubling any one of them.

Technical: the pipeline in detail

Channel state. Captured through nexmon_csi on the Pi’s bcm43455c0 radio. With a single antenna the chain uses amplitude only: guard-subcarrier removal, per-frame gain normalisation, a Hampel filter, live-subcarrier selection, fractional deviation and PCA. Presence compares a 10 s window against the calibrated empty room at an 8-sigma threshold. Heart rate (48-120 bpm) is always reported as low confidence.

Fusion. Evidence combines in bounded log-odds with each source capped at ±2.5, an 8 s evidence half-life, a prior of 0.15 and an alert threshold of 0.75. An explain call lists each sensor’s signed vote, including disagreements.

Radio tomographic imaging. ESP32 nodes beacon over ESP-NOW and report received signal strength. The image solves y = Wx + n with Tikhonov regularisation, and an alpha-beta tracker follows people, also accepting LD2450 radar targets. A mesh of N nodes gives N(N-1)/2 links: 20 nodes make 190.

RF monitoring. SDR sweeps learn a 300 s site baseline, then flag new emitters with an adaptive noise floor, a 16 dB threshold with hysteresis and persistence checks. A dedicated detector watches GNSS L1 for jamming.

Parts You Can Buy Today

A reliable room-occupancy node is planned at about $110. Planning figures in early-2026 US dollars, not quotes.

HERMIT hardware, role of each part and approximate cost
PartRoleApprox.
Raspberry Pi 4B, 4 GBCompute and the WiFi radio that measures the channel$55
HLK-LD2410C24 GHz radar presence that still sees a person who is not moving$5
HLK-LD245024 GHz radar tracking up to three targets to about 6 m$8
RTL-SDR Blog V3 or V4Receive-only spectrum monitoring up to 1.766 GHz$30-40
HC-SR501 PIRIndependent motion confirmation$2
BME680Temperature, humidity and VOC corroboration$10
u-blox NEO-8M with PPSPosition and microsecond timing$15
ESP32 WROOM-32One radio tomography mesh node, all-in$9

An Enclosure Designed Around the Radios

Five printed trays on a 150 × 110 mm footprint, 167 mm tall. Most of the rules exist to protect a measurement:

  • No conductive filament. Carbon or metal fill would detune every radio in the box.
  • PETG, not PLA. The Pi throttles at 80-85 °C, and PLA softens first.
  • A 1.2 mm radar window. Printed solid at 40 × 30 mm. A quarter-wave thickness of about 1.8 mm would be the worst possible reflector at 24 GHz.
  • An isolated air sensor. The BME680 sits in its own vented pocket at least 25 mm from heat.

A hand-separable 1:2 presentation model, 75 × 55 × 84 mm on magnets and pins, carries the sensors as loose tiles.

Enclosure, explodedRevision A spec
150 mm Sensor cap 30 mm, radome and sensor windows Expansion 32 mm, add-on sensors SDR bay 32 mm, fits HackRF One, 2 SMA Compute 45 mm, Pi 4B and 40 mm fan Base 28 mm 167 mm assembled PETG, NON-CONDUCTIVE

What Works, What Is Simulated, What Is Blocked

The same standard as the rest of this site. Nothing below is rounded up.

Running on Real Hardware

  • Installed on a Raspberry Pi 4B, with the platform check reporting channel state support.
  • The full fusion pipeline runs on the Pi against the synthetic demo scenario, matching the desktop result exactly.
  • Patched nexmon firmware built and loaded after five undocumented fixes.
  • 91 automated tests passing.

Simulated Only

  • Every detection metric, including 0 false presence alarms across 1,769 synthetic windows.
  • Radio tomography accuracy of 0.23 m with 16 nodes in a 5 × 5 m room, and 0.41 m through a wall with 20.
  • Radar, air quality and infrared contributions in the demo scenario.

Blocked or Not Yet Tested

  • Live channel capture: the radio received over 10,000 frames but no channel data on kernel 6.12. The next step is kernel 6.6.
  • SDR, radar, infrared and the ESP32 mesh have drivers but have not been tested on hardware.
  • The enclosure and presentation model are specifications, not yet printed.

Physics limits apply too. Brick and concrete cost 10-20 dB or more, steel bulkheads stop everything, and one WiFi link at 20 MHz cannot resolve position finer than about 7.5 m. Position needs the mesh.

Responsible use

Sensing Through Walls Comes With Rules

A sensor that notices people who cannot see it needs a position before it needs a feature list. This is ours.

  1. The sensing node only listens. There is no transmit path on the Pi; the optional mesh nodes broadcast their own low-power beacons. Jamming is a crime, and the jamming detector exists to find it, never to create it.
  2. No private communications. Channel state is an estimate of the radio channel with no payload, and the SDR measures only power per frequency. Nothing is decoded or decrypted.
  3. Your own space only. Never point it at neighbours, and never deploy it covertly against an individual.
  4. Consent from everyone it can reach. Including people on the other side of a wall. Disclose it to anyone in the sensed space.
  5. Events, not raw data. Log what happened, not the channel itself, and set a retention period.
  6. Vital signs are health data. For eldercare, consent comes from the person being monitored. HERMIT is not a medical device, and designs that give false reassurance are out.
  7. Secure the node. The dashboard binds to the local machine only. Change default credentials and isolate the node on networks you do not control.
  8. Research needs review. Studies involving people need ethics board approval, and vulnerabilities go through coordinated disclosure.

Would you be comfortable telling the people this sensor can detect exactly what it does?

The test every deployment has to pass. If the answer is no, the answer is no.

Why It Lives at Elpis

HERMIT and the terahertz programme share one discipline: sense what matters about a person, publish exactly what the sensor can and cannot do, and never build an imaging device when a measurement will do.