Solaris Shade and Harvest Module
The Solaris module on Aida Controller automates daylight harvesting (sensor-driven dim) and glare control (sun-aware shade positioning) using facility zones. It complements time-based Circadian lighting and fixed schedules — Solaris runs continuously and reacts to ambient light sensors and solar geometry.
Overview
This module provides:
- Daylight harvesting — closed-loop dim from interior ALS toward a lux setpoint, with a smooth rate-limited ramp; open-loop fallback from sun position when sensors are unavailable
- Glare control — shade position from solar elevation/azimuth vs façade orientation, adjusted by cloud cover
- Cloud cover for glare — from a rooftop daylight sensor when available, otherwise optional Open-Meteo weather, otherwise an assumed overcast day
- Facility zone scoping —
harvest,glare,shading,rooftop, and optionallightingzone types with per-zone tunables - Setpoint training — guided multi-point ALS capture so closed-loop harvest knows how much lux changes when dim changes
- Manual override — same timed/latched model as Circadian; harvest and glare skip suspended targets
- Status and Setup tabs — live metrics, test time, rooftop lux test input, and module configuration
- Preview charts — simulated harvest and glare curves for the day
- Automation integration — builtin tasks
solaris-harvestandsolaris-glare
:::note PoE nodes and BACnet PoE lighting nodes do not speak BACnet directly. Solaris drives cluster-level dim and shade on the controller; northbound BACnet exports (if enabled) reflect aggregated zone state. See BACnet/IP Server for BMS integration. :::
How it works
| Loop | What drives it | What it controls |
|---|---|---|
| Harvest | Interior ALS readings (debounced) + 1 min backup tick; dims move toward target at a configurable % per second | Electric dim in harvest / lighting zones |
| Glare | Sun position every ~5 min, plus cloud cover from rooftop lux, weather, or an assumed value | Shade position in glare / shading zones |
Harvest in plain terms
- Sensors report how bright the room is (lux).
- Solaris compares that to the zone setpoint.
- If training provided a sensitivity (how many lux change per 1% dim), Solaris nudges the target dim up or down from the current harvest dim — it does not jump from full output every time.
- Physical dim ramps toward that target (default about 2% per second) so the room can settle between adjustments.
- If ALS stops arriving, closed-loop harvest can fall back to open-loop (sun on the façade) after the ALS timeout, then resume closed loop when lux returns.
Glare and cloud cover in plain terms
- Solaris knows where the sun is relative to each façade (from site location and zone orientation).
- Cloud cover softens how aggressively shades close on a sunny-looking geometry:
- Rooftop illuminance (preferred) — measured exterior lux compared with estimated clear sky illuminance for this place and time
- Open-Meteo Weather — when weather-enhanced glare is enabled and no fresh rooftop reading is available
- Assumed 100% — when neither rooftop nor weather is available
- The Status tab shows Clear sky illuminance, Rooftop illuminance, and Cloud Cover: N% (method).
Prerequisites
Before enabling Solaris, ensure you have:
- Aida Controller 2.0 installed and commissioned
- Facility zones created with the correct types and cluster/device membership
- Harvest zones: fixtures with dim control; closed loop needs at least one ALS-capable device in the zone
- Glare / shading zones: shade actuators (INX/Core shades, Somfy PoE motors, etc.)
- Rooftop zone (recommended for local cloud cover): an exterior / rooftop daylight sensor linked to a zone of type Rooftop
- Site location in Settings → System (latitude, longitude, timezone) — required for glare and for clear-sky illuminance
- Operator access to edit modules, facility zones, and automation tasks
Setup process
Step 1: Set site location
- Go to Settings → System.
- Set Latitude, Longitude, and Timezone.
- Save preferences.
Glare, clear-sky illuminance, and open-loop harvest all use this location. Closed-loop harvest uses interior ALS; it still benefits from correct timezone for active hours.
Step 2: Create facility zones
Solaris scope is defined primarily through Facility → Zones.
| Zone type | Purpose |
|---|---|
| Harvest | Daylight harvesting — interior ALS-driven dim |
| Glare | Façade/window groups for anti-glare shade |
| Shading | General automated shade (may overlap glare) |
| Rooftop | Exterior daylight sensor — feeds global illuminance for glare cloud cover on all glare zones |
| Lighting | Optional harvest targets that share fixtures with Circadian |
For each zone:
- Create or open the zone under Facility → Zones.
- Set the zone type.
- Link clusters and/or devices that belong in the zone.
- For harvest, glare, and shading zones, open the Solaris panel on the zone detail page and configure tunables (see Zone tunables).
- For a Rooftop zone, link only the exterior daylight sensor (or its cluster). You do not set harvest/glare façade tunables on rooftop zones — light events from members become site-wide rooftop illuminance.
:::tip Rooftop vs room ALS Use interior room sensors for harvest. Use a true exterior / rooftop sensor for the Rooftop zone. Room ALS includes electric light and furniture effects and will not produce a reliable outdoor cloud-cover estimate. :::
Step 3: Configure zone tunables
Per-zone settings override module defaults when present.
Harvest (harvest / lighting zones)
| Field | Description |
|---|---|
| Mode | Closed loop (ALS setpoint), Open loop (sun-based), or Disabled |
| Setpoint lux | Target ambient level for closed loop (typical 300–750 lux); often filled by training |
| Dim min / max | Allowed dim range (%) |
| Dim change rate | How fast dim may move toward the target (% per second; default 2) |
| Gain | Automation authority 0–100 (how strongly corrections apply) |
| Response step % | Used only for the simpler ratio fallback when sensitivity was not trained |
Glare (glare / shading zones)
| Field | Description |
|---|---|
| Mode | Open loop or Disabled (shade from sun geometry + site cloud cover) |
| Orientation (°) | Façade azimuth — 0 = north, 90 = east, 180 = south |
| Shade min / max | Allowed shade range for automation |
| Min elevation (°) | Ignore sun below this elevation |
| Gain | Automation authority for shade moves |
Step 4: Train harvest setpoint (closed loop)
For closed-loop harvest zones, train so Solaris learns both the setpoint and how lux responds to dim:
- Go to Modules → Solaris → Setup.
- Confirm harvest zones in scope use closed loop mode.
- Click Train set point (or force-restart if a session is stuck).
- The controller closes shades in glare zones in scope, then steps harvest lights through 100% → 50% → 0% (when multi-point sensitivity is enabled), waiting for settle and a fresh ALS reading at each step.
- When training completes, each zone stores setpoint lux and sensitivity (lux change per 1% dim). Those values appear on status and on the zone’s Solaris panel.
If multi-point harvest sensitivity is turned off in module settings, training captures a single 100% reading for setpoint only and uses the simpler ratio control law.
:::tip When to retrain Retrain after major layout changes, new glazing, furniture moves that block sensors, or when closed-loop dim consistently misses the visual target. :::
Step 5: Enable and configure the Solaris module
- Open Modules → Solaris.
- Toggle the module Enabled.
- On the Setup tab, enable Harvest and/or Glare.
- Set module-level defaults (used when a zone omits a field):
| Section | What to set |
|---|---|
| Harvest | Default setpoint, dim min/max, dim change rate, gain, ALS fallback timeout, multi-point sensitivity |
| Glare | Shade min/max; optional Weather-enhanced glare (Open-Meteo cloud cover) |
| Runtime | Sensor debounce, reconcile intervals, active hours / days |
| Manual override | Enabled + auto-resume timeout (same family as Circadian) |
| Targets | Zones recommended — leave empty to include all harvest/glare/shading zones of those types |
- Click Save.
Step 6: Verify automation tasks
Under Automation → Tasks, confirm these builtin tasks are enabled:
| Task | Typical interval | Role |
|---|---|---|
solaris-harvest | 1 min | Backup harvest reconcile if ALS events were missed |
solaris-glare | 5 min | Shade position update from sun and cloud cover |
You do not need to configure sensor-triggered harvest or rooftop-triggered glare separately — the controller queues those when light events arrive.
Step 7: Verify on the Status tab
- Open Modules → Solaris → Status.
- Confirm Harvest shows commanded / target dim and ALS lux when closed loop is active.
- Confirm Glare shows shade open % and sun elevation/azimuth when coordinates are set.
- Review Clear sky illuminance, Rooftop illuminance, and Cloud Cover: N% (…) — the method should read Rooftop Illuminance when a rooftop reading is active, or Open-Meteo Weather when weather-enhanced glare is supplying cover.
- Optionally enter a Rooftop illuminance value and click Set to simulate cloud cover during commissioning (use Clear to remove the test value).
- Use a simulated clock time if you need to force sun position for testing; Apply runs harvest/glare for that time without waiting for the next automation tick. Realtime returns to live clock.
- Check Active manual overrides and Automation → Logs for applied vs skipped targets.
Zone tunables vs module defaults
| Layer | Where | What |
|---|---|---|
| Global | Settings → System | Lat/lng, timezone |
| Zone | Facility → Zone detail → Solaris | Orientation, harvest mode/setpoint/rate, glare limits |
| Rooftop zone | Facility → Zones | Membership only — sensor that reports exterior lux |
| Module | Modules → Solaris → Setup | Defaults, scope, weather option, active hours, training options |
| Automation | Automation → Tasks | Builtin tasks (normally leave enabled) |
Prefer zone-level setpoints and orientations for room-specific tuning; use module defaults for site-wide baselines.
Manual override
Solaris uses the same override contract as Circadian.
Lights and shades (INX events)
| Status shown | Events | Effect |
|---|---|---|
| Paused (off) | off, vac, and fl (or dim/shade) at 0% — using end level when present and under 101, otherwise start | Automation skips those targets until on / mot / up / down / s1–s3 / level > 0% |
| Paused (timed) | on, mot, up, down, s1–s3, and fl / dim / shade at > 0% (same start/end rule) | Automation skips for the override timeout; also clears paused-off |
ALS / light sensor readings do not create an override — they drive harvest (unless the zone is already under a light override; then ALS is ignored until override ends).
While a harvest override is active, Solaris holds the last harvest dim and waits for a fresh ALS sample after resume before applying the control law again.
Shade jogs from Control (up/down/stop without a level) also create a timed pause for glare and clear paused-off.
The Active manual overrides table lists suspended targets with mode, resume time, and reason. You can clear all overrides from the Status tab when you have permission.
Coordinating with Circadian
| Module | Controls | Best practice |
|---|---|---|
| Circadian | CCT + dim vs time | Interior zones, tunable-white fixtures |
| Solaris harvest | Dim vs ALS | Perimeter / daylit zones with sensors |
| Solaris glare | Shade vs sun + cloud cover | Façade zones with blinds |
Avoid assigning Circadian and Solaris harvest to the same fixtures unless you intend them to share authority. Separate facility zones so operators can reason about which algorithm owns each space.
Monitoring and troubleshooting
Status tab readings
| Reading | Meaning |
|---|---|
| Harvest dim / target | Commanded dim and control-law target (target may lead while dim ramps) |
| ALS lux | Interior sensor level used for closed-loop harvest |
| ALS fallback | Open-loop harvest is active because fresh ALS stopped arriving |
| Glare shade % | Average shade open position across glare scope |
| Clear sky illuminance | Estimated outdoor lux if the sky were clear right now |
| Rooftop illuminance | Latest exterior lux (sensor or test input) |
| Cloud Cover | Percent and method — Rooftop Illuminance, Open-Meteo Weather, or Assumed |
Common issues
Harvest does not dim
- Zone type must be Harvest or Lighting and included in module scope.
- Closed loop needs ALS events — confirm sensors report light levels in device or event history.
- Check Active manual overrides for timed pause or latched off.
- Confirm gain is greater than 0 and harvest mode is not Disabled.
- If dim moves too slowly or too fast, adjust dim change rate on the zone or module defaults.
- Retrain if sensitivity was never captured and behavior feels wrong.
Glare shades do not move
- Site latitude/longitude must be set.
- Zone needs type Glare or Shading with shade actuators linked.
- Confirm sun elevation exceeds min elevation for the zone and the sun is on that façade.
- Check shade manual override in the active suspends table.
- On heavily cloudy assumptions (100% assumed or high weather cloud cover), shades may stay more open than on a clear day — that is expected.
Cloud cover stuck on Assumed or Weather
- Create a Rooftop zone and link the exterior sensor; confirm
lightevents from that sensor appear on the controller. - Or enter a test rooftop lux on the Status tab to verify shade response during commissioning.
- Enable Weather-enhanced glare only if you want Open-Meteo as the fallback when rooftop lux is missing.
Train setpoint fails or times out
- Ensure at least one closed-loop harvest zone is in scope.
- Glare zones in scope should have shade actuators so training can close them.
- Wait for the settle countdown; training needs a fresh ALS reading after each dim step.
- Use Train again to force-restart a stuck session.
Harvest and Circadian both change the same lights
- Narrow scope so only one module targets those clusters, or disable harvest on overlapping zones.
Somfy PoE shades in glare zones
- Standalone Somfy PoE motors participate in glare apply when they are members of linked glare/shading zones. INX/Core-proxy shades use the normal shade path. Both are supported.
Automation logs
Inspect Automation → Logs for solaris-harvest and solaris-glare runs:
- Skipped because of manual override — expected when someone is using Control or a wall station
- No applied targets — check scope, sensors, sun on façade, or suspends
- Lux and cloud cover in run details — useful when tuning setpoint, gain, and weather vs rooftop
Related documentation
- Circadian module — time-based CCT and dim
- BACnet/IP Server — BMS read/write on cluster points
- Municipal BMS Integration Brief — submittals and commissioning
- Aida Controller overview — install and architecture
- Touch Display app — tablet status and clear-override for Solaris when in scope