What a Sunny Window Taught Us About Light Readings

In early July we moved a PlantSense sensor from a desk to a south-facing window sill, right in the path of the afternoon sun. A few hours later the app showed a peak light reading of 125,597 lux.
That is a lot of light. Full midday sun outdoors is usually quoted somewhere between 50,000 and 100,000 lux, so a number well past that, measured through a window, was a flag. This post is about what was really going on, what we changed, and what the light dial can and can't tell you.
What the light sensor actually is
PlantSense doesn't use a digital lux chip. The light channel is an analog ambient-light phototransistor — the same class of part that dims a phone screen — read by one of the ESP32's analog inputs. More light means more current, which the firmware measures as a voltage.
Voltage isn't lux, so the firmware converts it with a calibration curve: a set of measured points (this voltage corresponds to that many lux) joined by a smooth spline. The top calibration point we could measure reliably was about 60,000 lux, which is already brighter than anything a houseplant sees indoors.
Why 125,597 was wrong
Two things happen in direct sun. First, the phototransistor saturates: past a certain brightness it simply can't produce more current, so the voltage stops rising with the light. Second, and this was our bug, the calibration spline was allowed to extrapolate. Above the last real calibration point it kept climbing along whatever slope the curve happened to end on. The sensor was pinned at its ceiling; the math kept inventing brightness.
So 125,597 wasn't a measurement. It was the curve running off the end of the data.
What we changed
Two small fixes, one on each end:
- Firmware clamps the conversion to the calibrated range. Whatever the analog input reads, the lux result can't exceed 60,000.
- The app and the server treat 60,000 as the ceiling and show it honestly. At the cap you'll see >60k rather than a precise-looking "60000", because the truth is "at least this bright" — the sensor can't tell you more. Large readings also use compact formatting now (11.6k rather than 11589), which is easier to read on a dial.
Readings that were already stored with the runaway values are capped on the way out too, so old charts don't keep a fictional spike.
Lux, and why it's still the right unit for this
Lux measures brightness as the human eye sees it, weighted toward green. Plants care most about red and blue light, which is why growers use PAR (photosynthetically active radiation, in µmol/m²/s) for grow lights. PlantSense is not a PAR meter, and we don't call it one.
What lux is very good at is comparison. Is the shelf by the north window brighter than the one by the east window? Did the tree outside leaf out and cut your fern's light in half? Does the "bright indirect" spot actually get bright? Those are relative questions, and a consistent lux reading answers them well. Some approximate anchors, all indoors and all "peak during the day":
| Reading | What it usually means |
|---|---|
| under 500 lux | Low light. Only the toughest plants (snake plant, ZZ, pothos) stay happy long-term. |
| 1,000 – 5,000 lux | Bright indirect light. Most tropical houseplants thrive here. |
| 10,000 – 25,000 lux | Very bright, some direct sun. Succulents, herbs, citrus, tomatoes on a sill. |
| >60k | The sensor's ceiling. You're in direct sun — great for a garden bed, harsh for a Calathea. |
When you identify a plant in the app, its care profile sets the light dial's range, so the dial's "Low / Good / High" bands are for that species rather than a generic average. The Money Tree in our office shows a 1.2k–40k range, for example — it's flexible about light, which is part of why it's so popular.
Practical placement advice
- The sensor reads the light that reaches it. Keep the shell's top facing the light source, not tucked behind a leaf or a pot rim.
- Daily peak matters more than any single reading. Watch the light chart over a week: a plant that gets 3 hours above 5,000 lux and the rest in shade has a very different day from one sitting at a steady 2,000.
- If you see >60k on a houseplant, that's the sensor's polite way of saying "this is a lot of direct sun". Most tropicals will scorch there in summer; most edibles will love it.
The short version: we found a bad number, traced it to the math rather than the hardware, and made the dial honest about its limits. Sensors should say "at least this much" when that's all they know.
Want the technical detail on the light channel? It's in the features overview and the quickstart guide.