Bird feeder dashboard

Snapshot from Oct 24, 2026, 00:00 MT

Time range
Units

These numbers come from a Raspberry Pi camera pointed at a bird feeder in a home garden in Salt Lake City, Utah. An image classifier names the species at each visit, and a small sensor beside the bird feeder records temperature, humidity and air pressure. Outdoor weather for the city comes from Open-Meteo's weather model. How the bird feeder dashboard works.

Visits today

Distinct bird feeder visits since midnight, Mountain Time. A visit groups detections that each start at most 15 seconds after the previous one started.

No visits yet today.

Detections today

Tracker detections since midnight, Mountain Time: one per object the camera followed.

No detections yet today.

Species today

Distinct bird species identified since midnight. Squirrels, chickens and cats are counted as visitors but not as species, and detections the classifier could not name are not counted.

No bird species identified today.

Last seen

Time since the newest event. Active within 15 minutes, slow within 2 hours, otherwise flagged; quiet between dusk and dawn (civil twilight in Salt Lake City) when the bird feeder is dark.

17:00MT

Last event, Oct 23, to the hour

snapshot

Temperature now

Latest hourly mean temperature from the BME280 sensor, rounded to the nearest 0.5 °C before it is published. The sensor hangs in the open beside the camera, unshaded, so in direct sun it reads warmer than the outdoor air.

23.5°C

Hourly mean, Oct 23, 23:00 MT

Humidity now

Latest hourly mean relative humidity from the sensor at the bird feeder.

34%

Hourly mean, Oct 23, 23:00 MT

Activity, last 24 h

Detections by species from the last 24 hours of events, in 15-, 30- or 60-minute bins depending on the width available. Rare species fold into Other; the hatched bucket is detections the classifier could not name. Hatched background marks hours the camera was off or observed for under half an hour.

This copy of the page keeps no detection times; they show with live metrics.

Show as table

Recent events

The newest 40 events of the last 24 hours. Times are Mountain Time; the full UTC instant is in the tooltip of each time.

TimeSpeciesConfidenceDuration

Visits by hour of day, 30 d

Visits summed by local hour of day over the selected range. Days of degraded or no capture, and hours the camera observed for under half an hour, are left out.

1,531 visits over the last 30 d by local hour of day; busiest hour 09:00 MT with 236. Leaves out 18 days and 1 hour when the camera was off or its video damaged.

Show as table

Species share, 30 d

Share of identified visits per species over the selected range. Rare species fold into Other; detections the classifier could not name are left out, and so are days of degraded or no capture and hours the camera observed for under half an hour.

SpeciesVisitsShare

1,512 identified visits over the last 30 d; House Sparrow leads with 73.6 %. Leaves out 18 days and 1 hour when the camera was off or its video damaged.

Daily visits, 30 d

Visits per local day. A gap is a day with nothing captured, not a day without birds. Hatched bands mark degraded or no capture: since 21 October 2026 judged from the minutes the camera was observing, before that from a scan of the recordings. The tooltip gives the hours observed and visits per observed hour.

1,781 visits over the last 30 d, 69 per counted day on average. 5 windows of degraded or no capture shaded. 4 days without a count.

Show as table

Temperature, 30 d

Hourly mean temperature measured at the camera over the selected range (daily means beyond 30 days, readings kept for 90), with the outdoor air temperature from Open-Meteo's weather model for Salt Lake City dashed beside it. The sensor hangs unshaded beside the camera, so in direct sun it reads warmer than the air; the gap between the two lines is mostly that. Weather: Open-Meteo.com, CC BY 4.0.

Temperature over the last 30 d: now 23.5 °C, between 20.5 and 38.5 °C.

Show as table

Humidity, 30 d

Hourly mean relative humidity at the bird feeder over the selected range (daily means beyond 30 days, readings kept for 90).

Humidity over the last 30 d: now 34 %, between 20 and 86 %.

Show as table

Pressure, 30 d

Hourly mean sea-level-adjusted air pressure at the bird feeder over the selected range (daily means beyond 30 days, readings kept for 90).

Pressure over the last 30 d: now 1,006 hPa, between 994 and 1,006 hPa.

Show as table

Activity by weather, 30 d

Visits per species in daylight hours, by the outdoor weather that hour (Open-Meteo's model for Salt Lake City, not the sensor at the camera), as a multiple of what is usual for that species at that hour of day: 1× is usual, 2× twice as many. Blue is more than usual, red fewer; bold where the 95 % interval leaves out 1×. Hours the camera barely watched and days of degraded capture are left out, and bins with under 24 daylight hours show no value. Season overlaps the weather, so a species that left in autumn looks warm-loving; this shows when birds come, not why. Ranges shorter than 30 days are shown as 30 days.

Weather variable
Activity by weather

Visits as a multiple of usual for the hour of day, in daylight hours the camera watched; bold where the 95 % interval leaves out 1×. Season overlaps the weather: this shows when, not why. Weather: Open-Meteo.com, CC BY 4.0.

Temperature over the last 30 d: too few daylight hours with weather and visits to compare.

Weather contrasts, 30 d

How many times as often each species came in wet as in dry daylight hours, in windy as in calm ones, or while pressure fell at least 2 hPa in 3 hours as when it held or rose, each against what is usual for the hour of day, with a 95 % interval. A hollow dot means the interval includes 1×: no clear difference. Weather is Open-Meteo's model for Salt Lake City.

Contrast

Weather contrasts
SpeciesRatio (95 %)Interval on a scale from a quarter to four times

How many times as often, for the hour of day; a hollow dot's interval includes 1× (no clear difference). Weather: Open-Meteo.com, CC BY 4.0.

Wet vs dry over the last 30 d, 0 wet hours and 0 dry hours: too few hours to compare.

Model quality

Macro F1 of each classifier training run: held out, on detections I labelled from half-hours the run never trained on (points; the latest with its 95 % interval), and on the validation set that chose the run's weights (dashed). Validation scores before the dashed rule used an older split that overstated accuracy. On the right, the latest run's held-out F1 per class with the detections behind it: below 0.8 is serious, below 0.9 a warning, under 10 detections too few to judge.

run-19 scores a macro F1 of 0.940 (95 % CI 0.889–0.973, 163 detections) on held-out detections I labelled, from half-hours it never trained on, and 0.878 on its validation split; 19 training runs in all. Validation scores before run-19 used an older split that overstated accuracy and are not comparable. Weakest held-out class: House Sparrow at 0.922.

Show runs as table

ClassF1nStatus