A house with lit windows at dusk

AI workflow

Visible flame or smoke on a camera becomes a phone ringing.

The one analyzer no arming state can gate. Ten stages, from a frame read at 256 pixels to a rung only a person may press.

The problem

What this is for

A house already has smoke alarms. What it does not have is anything that tells somebody who is out that their kitchen is alight. A smoke alarm is a siren in an empty hallway. The cameras are already there, already watching, and already connected to a phone.

The workflow

10 stages, and what runs where

Each stage names the module behind it. The chip says whether it runs on your network or ours.

  1. On the camera

    The cameras that are already up

    No new sensor and no new wiring. The lenses at the doors and in the halls are asked a third question beside a firearm and a person.

    The same streams the appliance already opens. A camera refused as unsuitable is not analysed for anything, this included.

  2. On the appliance

    Read at 256 pixels, on purpose

    The fire model runs smaller than anything else here. Shrinking a frame keeps the large structure a fire is and destroys the fine detail a handgun is.

    FIRE_INFERENCE_PX is 256 in fire_detector.py. The checkpoint was trained at 640 and is close to its worst there.

  3. On the appliance

    The size is a measurement

    On the committed corpus a real house fire scores 0.733 at 256 and 0.136 at 640. Across the swept range 256 is the only size where every real fire outscores every confuser.

    training/fire_sweep.py writes sweep-fire.csv, and test_fire_pipeline.py reads it back so the constant and its evidence cannot drift apart.

  4. On the appliance

    Two floors, because smoke is the weaker reading

    Flame and smoke are scored against separate bars, and smoke has to clear the higher one. Grey diffuse things are common and mostly not smoke.

    FIRE_EMISSION_FLOOR is 0.5 and SMOKE_EMISSION_FLOOR is 0.6. The sunset in the corpus scores its 0.445 as smoke.

  5. On the appliance

    One fire, however long it burns

    Boxes are associated across frames, so a fire is one subject rather than a fresh alert every second. A repeat says whether it has spread.

    fire_pipeline.py. First sighting at once, then any new high, then every 10 seconds while it lasts.

  6. In the cloud

    A fire is not a class of weapon

    A sighting arrives carrying its own kind and a class of flame or smoke. A weapon class on one is refused on the box and refused again on arrival.

    detectionKind in ingest/wire.ts and contract.py, refused in both directions and pinned by check:detection.

  7. In the cloud

    Arming does not gate it

    Every state and every zone, interior and exterior. Disarmed, with everybody asleep upstairs, is the cell where a house fire kills people.

    fireAllows in arming-view.ts. Twelve cells, all of them true, and the one kind watched where a firearm is not.

  8. In the cloud

    A band, and the same one after dark

    Possible, probable, or critical, against published floors. This is the one kind night does not judge more strictly, because flame is its own light source.

    FIRE_BAND_THRESHOLDS in bands.ts: 0.6, 0.8 and 0.92, day and night alike.

  9. With a person

    An agent looks at the frame

    A house is set up monitored, and the agent is asked the question this incident actually raised. Nobody is asked to confirm a firearm.

    A home defaults to the mode where a person reviews first. An agent can only confirm what they were asked.

  10. With a person

    Only a person asks for an engine

    The fire service is a rung somebody presses, and it asks for fire alone. No automation and no clock in this system may press it.

    request_fire in lifecycle.ts, held out of AUTOMATABLE_ACTIONS. Police are set false on the request, because a fire is not a crime scene.

A dome camera mounted under a ceiling

What it runs on

A home, running the Home configuration. Segments are settings over one codebase, never separate products.

Your cameras

The same lenses the firearm watch reads. Interior and exterior both count here, which is the one place that setting does not decide anything.

One appliance

The fire model sits on the box beside the firearm one and is verified by sha256 against the manifest before it will load.

Your roster

Who is told, and on which channel. A fire message is an emergency kind, so it may ring a phone and it wants an answer.

A monitoring agent

A house starts in the mode where somebody reviews the frame first. Requesting the fire service stays a human action either way.

Why this shape

What the design buys

Nothing new on the ceiling

The cameras are already at the doors and in the halls. This is the same frames, asked one more question, on the box already reading them.

It reaches a phone, not a hallway

A smoke alarm is loud where nobody is standing. This goes to the roster, wherever they are, and it asks for an acknowledgement.

It never waits for the house to be armed

The case it exists for is a disarmed house full of sleeping people. No arming state, and no schedule, can switch it off.

Limits

What it refuses

Stated here rather than found later. Each of these is enforced somewhere in the code, not only written on a page.

Not a smoke, carbon monoxide, or medical alarm

A lens sees one room and cannot sample the air. It can report later than an alarm would, and it detects nothing about carbon monoxide.

Measured on eleven photographs

The corpus behind those floors is a probe rather than a false-alert rate. Between the worst real fire in it and the best thing that is not one there is 0.06.

A gunshot looks like fire

A muzzle flash scores 0.333 on this checkpoint, under the floor that lets the box say anything. Both detectors watch the same camera, so it stays in the corpus.

A barbecue reaches the driveway camera

Exterior lenses are watched too, so a fire pit or a neighbour's bonfire will raise one. Dismissing it as a fire you lit records that the detector was right.