SCENE — READ FROM A FILE Every shape and every number below was typed into a JSON file by a person. No radio measured any of it, no simulator produced any of it, and no hardware has run. There is nothing on this page labelled SIM and nothing labelled LIVE, because there is no simulator and no sensor behind it yet.

room sim

a room, drawn from a file

This is the room as defined: the floor outline, the wall materials and thicknesses, every piece of furniture at its real size and angle, and every ESP32 at the height it is declared to be mounted at. It is the input the rest of the system will be measured against — not an output of anything.

the scene

Three rooms. All three typed in.

The two example rectangles are a bedroom and a small office. The third is an L-shaped hall, and it is in the set because its floor is a six-sided polygon inside an 8 x 6 m box: a viewer that quietly draws the bounding box would report 48 m² of floor where there is 35.75 m², and a localizer that assumes a convex room goes wrong at the inner corner for the same reason.

The room is drawn with WebGL, which needs JavaScript. With JavaScript off nothing is drawn — no picture of a room is substituted for one that could not be built. Every claim on this page, including the dimensions of the three example rooms and the reason WiFi cannot supply them, is in the text below and reads normally. The scene files themselves are linked at the end.

Drag to rotate, scroll or pinch to zoom. With the view focused: ← ↑ ↓ → rotate, + − zoom. Every object is also in the list in the panel, which is the keyboard way to select one.

why the shapes come from a file

WiFi did not measure this room. It cannot.

The deciding quantity is coherent aperture extent — not antenna count and not bandwidth. In the near field, depth comes from wavefront curvature, and the depth of focus is 4λR²/L². At λ = 12.3 cm, resolving a wall at R = 3.5 m to 30 cm needs an aperture of L ≈ 4.5 m, larger than the room.

Saans has L = 0. Two or three ESP32s bolted to walls form no aperture at all, their positions are typed in by a human, and each one's clock runs free with no phase reference to the others. Nothing in that configuration recovers a room outline, a wall position, or the shape of a sofa, and a wider channel does not fix it: the measured span is 56 subcarriers at 312.5 kHz, 17.19 MHz, so one path-length cell is 17.45 m and every first-order reflection in an ordinary room lands inside it.

That is why a scene is a file. The full argument, with the backup limit and the sources, is in docs/CAPABILITY_LIMITS.md.

  • Room size and wall layout

    No. Needs an aperture larger than the room.

  • Recognising a bed or a sofa

    No. There is no imaging here at all, so there is nothing to recognise an object in.

  • Where a node is

    No. One RF chain gives no angle of arrival, and phase sanitization destroys absolute ranging. Node positions are surveyed by hand and typed in; any error in them lands in whatever is computed from them.

  • What the material of a wall is

    No. The materials named in these files are declarations, and their electrical constants come from a published table, not from this hardware.

the files this page reads

Served from this gateway, same origin, nothing fetched from anywhere else: bedroom.json (4.2 x 3.6 x 2.7 m), office.json (6 x 5 x 2.9 m) and hall-l.json (an L-shaped floor of 35.75 m² inside an 8 x 6 m box). The format is scenes/scene.schema.json in the repository, and the same three files are compiled into the simulator, so a room cannot mean one thing here and another there.

Material constants are materials.json: ITU-R P.2040 Table 3, evaluated at 2.437 GHz, which is 802.11 channel 6. They are a sourced default and not a calibration — nothing in that file has been checked against a measurement made with this hardware, and fabric has no row at all rather than an invented one.

The view is drawn with three.js, committed into the repository and served from this gateway. Nothing on this page is fetched from another origin, because the gateway may be running in a building with no route out. The licence is served beside the code, at three-LICENSE.txt.