A lot of grow automation switches on humidity alone. Plants suffer when the system reacts to a number that doesn’t actually drive transpiration. We took a different approach. This guide explains the principles behind GrowVPD’s automation engine — what we optimize for, and why.

1. Why VPD, not just humidity

Plants don’t care about relative humidity. They care about vapour pressure deficit — the gap between the moisture the air is currently holding and the maximum it could hold at that temperature. VPD is what drives transpiration. RH alone is half the story.

Two scenarios illustrate the difference:

  • 20°C, 70% RH → VPD ~0.7 kPa → seedling territory.
  • 30°C, 70% RH → VPD ~1.27 kPa → flowering territory; veg plants would stress.

The RH is identical in both scenarios. But the temperature difference makes VPD about 80% higher — one suits young plants, the other is too high for veg. An RH-only thermostat misses this entirely. A VPD-aware automation reads both, computes VPD, and acts on the actual physiological signal.

Principle 1

Automate on VPD, surface RH for context

VPD is the headline number: Full Auto sets a VPD band for the stage alongside its temperature and humidity limits, and the tent cards show VPD next to temperature and humidity. You can still write a rule on humidity or temperature alone when that is what you need.

2. Stage-aware setpoints

VPD targets are not static. A seedling wants 0.4–0.8 kPa; late flower wants 1.2–1.6 kPa. If your automation uses one threshold across the entire grow, you’re hammering seedlings or under-driving flowers. Either way, yield suffers.

GrowVPD ships built-in presets for eleven stages: germination, seedling, early veg, late veg, pre-flower, early, mid and late flower, flush, drying and curing. Each comes with stage-specific defaults for VPD, day temp, a night offset, RH range, CO2 setpoint, and PPFD target. When you change the grow’s stage in the diary, rules limited to the old stage switch off, and Full Auto sets up the new stage’s targets in one tap.

StageVPD target (kPa)Day tempNight offsetRH bandPPFD target
Germination0.4–0.822–26°Cnone70–90%0 (dark)
Seedling0.5–0.822–26°C−3°C65–75%250
Early veg0.8–1.122–27°C−3°C55–65%500
Late veg1.0–1.223–28°C−3°C50–60%700
Pre-flower1.0–1.322–26°C−3°C50–60%850
Early flower1.1–1.324–28°C−3°C50–60%1000
Mid flower1.2–1.522–26°C−4°C45–55%1100
Late flower1.4–1.620–24°C−6°C40–50%950
Flush1.4–1.619–23°C−5°C35–45%750
Drying0.6–1.015–18°Cnone55–62%0 (dark)
Curing0.6–0.918–21°Cnone58–62%0 (dark)

Full Auto builds a tent’s rules from these values, and you can edit any rule afterwards. For most growers the defaults give you a working setup in under a minute.

Principle 2

Stage-driven, not user-driven

You shouldn’t have to work out new setpoints when you flip 12/12. The diary knows the grow stage and the automation engine reads it: stage-limited rules follow it, and Full Auto sets up the next stage in one tap. One source of truth.

3. Hysteresis & cooldowns

If you set “humidifier on when RH < 55, off when RH > 60” with no other safeguards, here’s what happens: humidifier kicks on at 54.9%, kicks off at 60.1%, kicks back on at 59.9% three minutes later, and so on. You’ve built a relay-cycling machine that wears out the humidifier and your patience.

GrowVPD enforces hysteresis on every rule:

  • Trigger band: the threshold to turn on (e.g. VPD > 1.5 kPa).
  • Restore band: a separate threshold to turn off (e.g. VPD < 1.3 kPa). Always more conservative than the trigger to prevent flapping.
  • Min ON time: e.g. once on, stay on at least 3 minutes. Prevents tiny on-off blips.
  • Min OFF time: e.g. once off, stay off at least 5 minutes before re-triggering.
  • Max run time: if a device has run this long and the reading has barely moved toward the target, it is switched off — a sign of a broken device or a stuck sensor. A device that is making progress keeps running until the target is reached, and no rule keeps a device on for more than 24 hours.

These knobs ship with sensible defaults. On iPhone you can tune each of them per rule; on Android you set the ON and OFF values and the maximum run time, and the app uses a 3-minute minimum on time and a 5-minute minimum off time. The result: stable behavior and a low duty cycle.

4. Emergency override

Sometimes a single number is so out-of-bounds that all other rules become irrelevant. If a sensor in your room reads above 35°C, the automation engine doesn’t care about your stage’s VPD band — on its next check it switches the heaters off and runs the exhaust fans at full speed.

Our Emergency Override layer fires when:

  • Temperature > 35°C on any sensor in the room
  • Humidity > 85% (mold risk)
  • Temperature < 12°C (cold shock)
  • In a tent linked to a grow: temperature more than 2°C above the stage’s maximum, or air within 0.5°C of its dew point (condensation)

When triggered, emergency actions execute straight away: heaters off, exhaust fans at full speed and cooling on for heat; dehumidifiers and exhaust fans on for humidity; heater rules switched on for cold; and an alert push. In the tent emergency mode, rules skip their minimum on/off times and cooldowns so corrective rules act at once; it ends once readings have been back in range for 2 minutes, and you get a notification when it starts and when it ends. If you switch on Thermal safety for a light, the light also dims when cooling can’t keep up.

5. Auto-stage detection

This is one of our newer features. Every 6 hours, a background check looks at:

  • The photoperiod in the tent’s light schedule (about 18 hours reads as veg, 12 as flower)
  • How far the substrate dries back between waterings, if you have a soil moisture sensor
  • Days since the grow started, or since you switched to 12/12

If these signals together point clearly to a different stage than the one you set, you get a non-blocking notification proposing the change. One tap confirms it and records the new stage for the grow; dismiss it and the app won’t ask again for that grow for 7 days.

Non-blocking is the key word. We never silently change your stage. You stay in control; we surface the data.

6. Light dimming ramp

Sudden 0→100% light is a stress event. Plants ramp transpiration; if VPD isn’t in band, they wilt or burn the meristems.

GrowVPD’s dimming ramp lets you specify, per light, in the light’s schedule:

  • Sunrise duration: minutes to ramp 0% → peak brightness (default 30 min).
  • Sunset duration: minutes to ramp back down to 0% (default 30 min).
  • Peak brightness: the level the light holds between sunrise and sunset (the stage presets use 40% for seedlings, 80% for veg and 100% for flower).

Mars Hydro lamps keep the schedule in the lamp and run their own sunrise/sunset simulation. For other dimmable lights, the app steps the brightness up and down itself.

Principle 3

Smooth state changes, never abrupt

Whatever the system can ramp, it should ramp. Today that means lights: a gentle sunrise and sunset reduce plant stress.

7. Night CO2 hold

If you supplement CO2, you almost certainly know you should cut it during dark cycles (plants don’t photosynthesise without light, so extra CO2 is wasted — and elevated CO2 at night actually reduces respiration efficiency).

GrowVPD’s Night CO2 Hold automatically:

  • Detects light-off events from your light schedule (without one, it treats 21:00–06:00 as night)
  • Sets the target of CO2-dosing rules to ambient (~400 ppm) while the lights are off, so the injector stays shut
  • Restores the supplementation target when the lights come on
  • Leaves CO2 venting rules alone, so the exhaust can still clear excess CO2

8. Three-point band visualisation

The dashboard shows your tent’s VPD as a single number, but the underlying control logic uses a band:

  • Lower edge: turn ON dehumidifier / increase exhaust to push VPD up
  • Mid-point: target. Ideally hover here.
  • Upper edge: turn ON humidifier / reduce exhaust to push VPD down

The target band cards visualise this at a glance, for VPD, temperature and humidity, on every tent that is linked to a grow. Green if you’re inside the band; yellow if drifting; red if outside. The needle shows the live reading; the band follows the grow’s stage.

9. On-device architecture

The automation engine runs entirely on your phone. Sensor reads, rule evaluation, command dispatch — all on-device. A maker’s cloud is used only to reach devices that can’t be reached any other way.

Why this matters:

  • Internet outage: rules keep firing for devices on your local network. Your dehumidifier still kicks on if RH spikes.
  • Cloud quotas: devices read over your local network don’t use the maker’s cloud quota at all.
  • Privacy: your grow data stays on your phone unless you pair other devices, and then it travels end-to-end encrypted. Readings from cloud-only devices still pass through their maker’s cloud, and through GrowVPD’s cloud helper if you switch on one of its cloud features.
  • Latency: commands to devices on your local network go straight to the device, with no round-trip through Tuya/SmartLife/etc.

The one catch: the engine runs only where the app runs. Android checks the rules every 15 minutes even with the app closed; an iPhone runs them while the app is open. For round-the-clock control, use Hub Mode — an old Android phone as a 24/7 grow guardian — or GrowVPD Hub (beta) on a computer: with direct device control switched on, it takes over Tuya rules when your phones have been silent for more than 35 minutes.

Principle 4

Phone is the controller, cloud is optional

The phone does the thinking. A maker’s cloud is used to reach devices that have no local connection and, only if you switch it on, to run simple Tuya rules as a backup (see below). Sync between your devices is end-to-end encrypted.

10. Cloud mirror (opt-in)

Some growers want the automation logic to keep running even if the phone is dead, lost, or factory-reset. For them we offer Cloud Mirror (Tuya Cloud Automation in the app): an opt-in feature that copies eligible rules into Tuya’s cloud as Tuya scenes. They run there alongside the phone, so they keep working while the phone is off or offline.

Cloud Mirror is:

  • Opt-in: off by default. Toggle in Settings → Smart devices → Tuya / Smart Life → Tuya Cloud Automation (needs your own Tuya IoT account).
  • Automatic: the app picks the rules itself. Only rules whose sensor and target are both Tuya devices, working on temperature, humidity, CO2, soil moisture or soil EC, are copied; other rules stay on the phone.
  • One-way: phone is the source of truth. Cloud copy refreshes when you edit on phone.
  • No VPD: Tuya scenes can’t calculate VPD, so VPD rules and rules that mix brands are not copied.

For most growers, Hub Mode + LAN is enough. Cloud Mirror is for the “commercial nursery” tier.

11. FAQ

Q: Can I disable the stage-aware presets and use my own setpoints?

Yes. The presets are what Full Auto uses; a custom rule uses the thresholds you enter, and you can edit the thresholds of Full Auto rules afterwards. One thing stays automatic: during lights-off, temperature, humidity and VPD thresholds shift by the night offsets. Most growers use Full Auto and adjust individual rules; very few want a fully manual setup.

Q: How fast does the engine react to a sensor change?

On Android, rules are evaluated every 15 minutes in the background (the shortest interval Android allows for regular background work), again straight away when you change the grow’s stage, and on the minute for cycle timers. On iPhone they are evaluated about every 45 seconds while the app is open. Commands to devices on your local network go straight to the device.

Q: What happens if two rules conflict (one says turn on, another says turn off)?

The rule with the higher priority wins, and the lower number is the higher priority. On iPhone you set it from 1 to 10 (default 5) under Advanced; on Android the app sets it (notification rules 1, other custom rules 5, and Full Auto rules by rule type). A safety switch-off (maximum run time, the 24-hour limit or the sensor fail-safe) always wins over a switch-on.

Q: Can rules run on a schedule, not just sensor-triggered?

Yes. Any rule can be limited to a time window (for example 22:00–06:00), and the Cycle condition runs a device on a timer with no sensor at all — on for X minutes every Y minutes. Mix them: “Between 22:00 and 06:00, if VPD>1.4 turn on humidifier”.

Q: Do I need to write any code?

No. The rule editor is a form: pick a condition and a threshold, a sensor, a target device and the action, then save. Full Auto sets up the common rules for a tent in one tap.