My roof under the sun

A schematic model of my roof. The readout beside it describes the sun and the shade at the chosen time.

the sun and its path that day a face the sun is behind a panel in the tree's shade the tree, approximate

Reading the model

  • Drag to turn the model. The arrow keys turn it too.
  • To zoom, pinch on a screen or a trackpad. Or use the + and − buttons on the model, or its + and − keys once it is selected.
  • A two-finger scroll scrolls the page, except on the whole screen, where it zooms.
  • A darker face gets no direct sun at that moment.
  • A panel outlined in red is in the tree's shade.
  • The amber disc is the sun. The dashed amber line is its path across the chosen day.
  • The page opens at the moment of the past year when the tree shades the most panels.
  • At that moment the tree is in leaf, and the sun is more than 10° up.

The same sun path, flattened

  • Imagine the sky over my house as a glass dome, seen from above like a map: north at the top, east on the right, the horizon at the rim.
  • Under the real sky, with your head to the north, east is on your left. This chart is the same dome seen from outside.
  • The amber lines are the sun's path on three days of —. On the June solstice it rises in the northeast and passes high, just south of overhead.
  • On the December solstice it stays low, near the bottom rim. At the equinoxes it runs from due east to due west.
  • The dots are New York clock hours. On daylight saving time, in June and at the equinoxes, noon sits east of due south; in December it sits close to it.
  • Shading is the average power the array made while the sun sat in that patch. A patch fainter than its neighbors at that height marks a tree or chimney.
  • Over the record, —, the sun used only the band between the solstice paths. It climbs to —° at midsummer, computed from latitude.
  • The arrows show which way the — roof faces point, from the installer's design. Each is as long as its share of the — panels.
  • The chart groups — readings into — patches. It leaves out patches with fewer than eight readings: one reading cannot tell shadow from cloud.

nonepeak sun's path, computed ↗ roof face, by panel count distance from center is the sun's height

The tree

  • Some things are measured. An overhead photo, north up and scaled by the length of a car, puts the crown's center about 67 feet from the middle of my house.
  • That center is toward 290°, and the crown is about 40 feet across.
  • I take every angle from the middle of my west-facing panels, which the tree shades. From there the crown's center is about 60 feet away, toward 294°.
  • The sky mask I fitted from my production data puts the shade's top edge at 35 to 40°, around 255°. The model places the tree from the photo.
  • Its height is not measured. I assume my eaves are 16 feet up and the crown is 46 feet tall.
  • Then a top edge anywhere in the mask's band means a tree 57 to 64 feet tall. The model draws the middle of the band, 37.5°.
  • It is a deciduous tree, so the model draws it bare from December through March. Those months are my rough guess.
  • The shade count treats the crown as solid all year. So in those months it overstates the shade.

What the array measured

  • For each 10-minute window with the sun up, the readout gives what my array made, from Home Assistant's record of my Powerwall gateway.
  • Python reads the power gauge as a straight line between readings at most 30 minutes apart, and weights the mean by time: Home Assistant writes only on change.
  • Across a longer silence the last reading holds while the recorder runs. Otherwise the window is not recorded, which is never the same as zero.
  • A window's energy is the gauge's mean times the window. My daily energy counter is read only about every 5 minutes, too seldom to split a window.
  • The day so far follows the Every Day page's rule to the window's end: the counter's level where it gives the total, the gauge's energy before.
  • So it never passes the total; it falls short only by what the array made after the last window, at most 0.03 kWh on days with every window recorded.
  • Before the counter, a window that is not recorded leaves the rest of that day's running total not recorded too.

How the sun table was computed

  • Python computed every sun position on this page before publishing, with NOAA's solar position algorithm, at each 10-minute step of 2026 on New York's clock.
  • Each day of my record reuses the 2026 row for its date, because the sun repeats from year to year.
  • Compared at every step, no day of the record differs from its 2026 date by more than 0.11° in azimuth or 0.14° in elevation.
  • For two days, 8 March 2025 and 1 November 2025, daylight saving started or ended on a different date than in 2026, so Python computed their own rows.
  • The location is mine, rounded to the nearest 0.5°. Every sun figure on this page, the flat chart's included, comes from that point and never from the house.
  • So none of them leads back to the house more closely than that. Across that rounding the sun moves by under a degree.
  • At each step Python also tested a line from every panel's center toward the sun against the tree's crown, and marked each face the sun was behind.