Traffic cameras in Home Assistant

The Live Traffic Cam integration puts a mountain pass, bridge, tunnel, airport, highway, city or metro area on your Home Assistant dashboard: the latest still from each official camera, a verified-live sensor per camera, a count of cameras live, and the agency's own reported disruptions for that place. No API key. The data is the same data this site shows, so a camera appears in Home Assistant only where its agency allows the image to be shown.

Add it to your Home Assistant

Opens your own Home Assistant at the integration. In the HACS catalog since October 2026.

What you get

Each place you add becomes one device with these entities. Names below use Snoqualmie Pass as the example; yours carry your place's name.

  • A camera per camera, for example camera.snoqualmie_pass_i_90_at_mp_55_2. Attributes: live_status, last_live_at, route, official_url, and the agency attribution. The still refreshes at most once a minute.
  • A verified-live binary sensor per camera, binary_sensor.snoqualmie_pass_i_90_at_mp_55_2_verified_live. On when the site's last check saw a current frame. Use it to hide stale cameras or to get told when a pass goes dark.
  • Cameras live, sensor.snoqualmie_pass_cameras_live: how many of the place's cameras are live right now.
  • Disruption reported and Full closure reported, two binary sensors fed by the state DOT's own event feed. They read unavailable, not off, when the feed is stale, so a dead feed never looks like a quiet road.
  • Cameras whose agency only allows linking appear as a sensor carrying the agency's page URL, never as an image. Same rule as the sources and rights page.

Install

  1. In HACS, search for Live Traffic Cam and install it. Or use the button above, which opens the repository in your own Home Assistant.
  2. Restart Home Assistant.
  3. Go to Settings, then Devices & services, then Add integration, and pick Live Traffic Cam.

Without HACS: copy custom_components/livetrafficcam from the repository into your config/custom_components/ folder and restart.

Add a place

The setup asks for a state, then a place. Passes, bridges, tunnels and airports come with all their cameras. Highways, cities and metro areas can have hundreds, so for those you pick up to 25 from the list. Add as many places as you like. Each is its own device, so a commute can be two passes and a bridge, or a city and the highway out of it.

Cities come with cameras only. The disruption sensors need an agency event feed tied to a place, which passes, bridges, tunnels, airports, highways and metro areas have and cities do not. For the largest metro areas the list shows the first 200 cameras.

The states covered today are the ones on the camera uptime report. The state list in the setup shows every state and says when one has nothing yet.

Dashboard recipes

Entity ids come from your place and camera names. Copy them from Settings, then Devices & services, then the place's device page, and swap them into these examples.

A pass at a glance

Three cameras and the live count in one grid card.

type: grid
columns: 2
square: false
cards:
  - type: picture-entity
    entity: camera.snoqualmie_pass_i_90_at_mp_52_1_summit
    show_state: false
  - type: picture-entity
    entity: camera.snoqualmie_pass_i_90_at_mp_55_2
    show_state: false
  - type: picture-entity
    entity: camera.snoqualmie_pass_i_90_at_mp_58_2_avalanche_bridge
    show_state: false
  - type: entity
    entity: sensor.snoqualmie_pass_cameras_live
    name: Cameras live

Show the closure only when there is one

A conditional card that appears when the DOT reports a disruption and disappears when it clears. The sensor's headlines attribute lists the agency's own wording for each open event; count and agency are there too.

type: conditional
conditions:
  - condition: state
    entity: binary_sensor.snoqualmie_pass_disruption_reported
    state: "on"
card:
  type: markdown
  title: Snoqualmie Pass
  content: >-
    {{ state_attr('binary_sensor.snoqualmie_pass_disruption_reported', 'headlines') | join('

') }}

Automations

Tell me when the pass goes dark

Cameras going dark together often means weather or a power cut at the summit. This fires when fewer than three cameras stay live for fifteen minutes. Set the number to fit your place.

alias: Snoqualmie Pass cameras went dark
triggers:
  - trigger: numeric_state
    entity_id: sensor.snoqualmie_pass_cameras_live
    below: 3
    for:
      minutes: 15
actions:
  - action: notify.mobile_app_your_phone
    data:
      title: Snoqualmie Pass
      message: >-
        Only {{ states('sensor.snoqualmie_pass_cameras_live') }} of the
        pass cameras are live. Check conditions before you leave.

Tell me about a full closure

alias: Snoqualmie Pass full closure
triggers:
  - trigger: state
    entity_id: binary_sensor.snoqualmie_pass_full_closure_reported
    to: "on"
actions:
  - action: notify.mobile_app_your_phone
    data:
      title: I-90 closed at Snoqualmie Pass
      message: WSDOT reports a full closure. Cameras are on your dashboard.

Limits

  • Stills only. No video in this version, even where the site streams.
  • Camera data refreshes every five minutes, disruptions every ten, stills at most once a minute per camera. The integration never records anything.
  • Images are served by this site under each agency's terms. Where an agency allows linking only, you get a link, not a picture.
  • For travel times, or for incidents from a 511 system you hold a key for, The 511 integration is the better fit.

Problems and ideas

Report problems and ask for features in the issue tracker. A camera that shows stale on your dashboard shows stale here too; the uptime report says how each state's fleet is doing. The integration is built by the person who runs this site.