Solaris Shade and Harvest Module
The Solaris module on Aida Controller automates daylight harvesting and glare control using facility zones. Both loops offer the same mode pair: open loop (sensorless) and closed loop (sensor). Solaris complements time-based Circadian lighting and fixed schedules — it runs continuously and reacts to solar geometry and (in closed loop) light sensors.
Overview
This module provides:
- Daylight harvesting (two modes)
- Open loop (sensorless) — dim from sun position on the façade; also the automatic fallback when closed-loop ALS goes stale
- Closed loop (sensor) — dim from interior ALS toward a lux setpoint, with a smooth rate-limited ramp (train setpoint / sensitivity for best results)
- Glare control (two modes)
- Open loop (sensorless) — shade from solar elevation/azimuth vs façade orientation; optional cloud cover (rooftop / weather / assumed) only scales how aggressively shades close
- Closed loop (sensor) — shade openness from window lux ÷ target lux (no cloud cover, no solar math)
- Cloud cover for open-loop glare — optional scaler from a rooftop daylight sensor when available, otherwise 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
- Module tabs — Status, Data, Overrides, Schedule, Targets, Glare, Harvest
- Status live cards — harvest dim and glare position as present% (target%), per-zone ALS / window lux and levels, and a cloud-cover card
- Preview charts — 24h curves; dashed = open-loop predicted, solid = sent (closed-loop when active)
- Automation integration — builtin tasks
solaris-harvestandsolaris-glare, plus closed-loop sensor-triggered runs (trigger: sensor) after trailing lux debounce
:::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 open-loop (sensorless) | Sun on façade (site location + zone orientation); no ALS | Electric dim from daylight estimate |
| Harvest closed-loop (sensor) | Interior ALS (trailing debounce → immediate if idle); 1 min backup tick; dims ramp toward target at a configurable %/s | Electric dim from ALS error vs setpoint |
| Glare open-loop (sensorless) | Sun position every ~5 min; optional cloud cover scaler (rooftop / weather / assumed) | Shade position from solar geometry |
| Glare closed-loop (sensor) | Window light events (trailing debounce → sensor runs); 5 min backup tick; falls back to open-loop if window lux goes stale | Shade openness = 100 × min(1, target_lux / window_lux) |
Harvest
Harvest modes in plain terms
Open loop (sensorless) — no ALS required (also used as closed-loop fallback):
- Solaris estimates daylight on the façade from site location, zone orientation, and sun position.
- Dim follows that estimate within dim min/max and gain — useful for sensorless zones or when ALS is offline.
- Open-loop harvest does not use the ALS setpoint / sensitivity control law.
Closed loop (sensor) — typical for daylit rooms with interior ALS:
- Interior sensors report how bright the room is (lux).
- Solaris compares that to the zone setpoint.
- If training provided a sensitivity (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 past the ALS fallback timeout, that zone temporarily uses open loop (sensorless) until lux returns.
| Harvest open loop (sensorless) | Harvest closed loop (sensor) | |
|---|---|---|
| Primary input | Sun position + façade orientation | Interior ALS + setpoint (+ optional trained sensitivity) |
| Room ALS | Not used | Required (while active) |
| Site lat/lng | Required | Only if falling back to open-loop |
| Typical use | Sensorless zones; ALS timeout fallback | Perimeter rooms with room ALS |
Glare
Glare modes in plain terms
Open loop (sensorless) — solar geometry (cloud cover is an optional scaler, not the control sensor):
- Solaris knows where the sun is relative to each façade (site location + zone orientation).
- Cloud cover softens how aggressively shades close:
- Rooftop illuminance (preferred) — measured exterior lux vs estimated clear sky illuminance
- 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 Cloud cover card shows percent and method, plus clear-sky / rooftop lux.
Closed loop (sensor) — window lux vs target:
- Link one window illuminance sensor to the glare / shading zone and set Target lux (e.g. 500).
- When measured window lux is at or below target → shades go fully open (100%).
- When brighter → openness ≈
100 × target / measured(e.g. target 500, measured 2000 → 25% open). - No cloud cover and no solar angle in this mode — the window reading is the control input.
- Position ramps at shade change rate (default 2%/s), same idea as harvest dim ramp.
- If window lux goes stale past the daylight fallback timeout, that zone temporarily uses open loop (sensorless) until the next fresh window reading.
| Glare open loop (sensorless) | Glare closed loop (sensor) | |
|---|---|---|
| Primary input | Sun position + façade orientation | Window lux + target_lux |
| Control sensor | None (solar math) | Window illuminance |
| Cloud cover (weather or rooftop÷clear-sky) | Optional scaler | Unused |
| Shade when bright | Close more via solar factor × cloud | Close proportionally: 100 × target / E_meas |
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; open loop (sensorless) needs site location + façade orientation; closed loop (sensor) needs at least one ALS-capable device in the zone
- Glare / shading zones: shade actuators (INX/Core shades, Somfy PoE / Mecho motors, etc.)
- Closed-loop glare (sensor): one window-mount (or façade) illuminance sensor linked to that glare zone
- Rooftop zone (optional scaler for open-loop glare): an exterior / rooftop daylight sensor linked to a zone of type Rooftop
- Site location in Settings → System (latitude, longitude, timezone) — required for open-loop (sensorless) harvest and glare (and for closed-loop fallbacks to open-loop)
- 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.
Open-loop glare, clear-sky illuminance, open-loop harvest, and closed-loop glare fallback all use this location. Closed-loop harvest and closed-loop glare (while window lux is fresh) do not need solar geometry.
Step 2: Create facility zones
Solaris scope is defined primarily through Facility → Zones.
| Zone type | Purpose |
|---|---|
| Harvest | Daylight harvesting — open loop (sensorless) or closed loop (sensor) |
| Glare | Façade/window groups for anti-glare shade — open loop (sensorless) or closed loop (sensor) |
| Shading | General automated shade (may overlap glare) |
| Rooftop | Exterior daylight sensor — feeds global illuminance for open-loop cloud cover |
| 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 for open-loop cloud cover.
- For closed-loop glare, link the window illuminance sensor as a LIGHT member of that glare / shading zone (not the rooftop zone).
:::tip Rooftop vs room vs window Use interior room ALS for harvest. Use a true exterior / rooftop sensor for the Rooftop zone (open-loop cloud cover). Use a window-facing illuminance sensor in the glare zone for closed-loop glare. Mixing these roles produces the wrong control input. :::
Step 3: Configure zone tunables
Per-zone settings override module defaults when present.
Harvest (harvest / lighting zones)
| Field | Description |
|---|---|
| Mode | Open loop (sensorless), Closed loop (sensor), 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 (sensorless) (solar + optional cloud scaler), Closed loop (sensor) (window lux), or Disabled |
| Orientation (°) | Façade azimuth — 0 = north, 90 = east, 180 = south (open-loop and open-loop harvest) |
| Shade min / max | Allowed shade range for automation |
| Min elevation (°) | Open-loop only — ignore sun below this elevation |
| Target lux | Closed-loop only — comfort lux at the window sensor |
| Shade change rate | Closed-loop only — slew rate toward openness target (%/s; default 2) |
| Gain | Automation authority for shade moves |
| Daily end shade | Optional one-shot closed % at the module daily end time |
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 → Harvest.
- 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 under Harvest 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.
- Configure by tab:
| Tab | What to set |
|---|---|
| Status | Live metrics, test time, rooftop lux test input (no durable config) |
| Data | 24h preview chart/table (zone selectors) |
| Overrides | Active manual overrides; clear when permitted |
| Schedule | Active hours / days window for harvest and glare automation |
| Targets | Zones in scope (empty = all harvest/glare/shading zones of those types) |
| Glare | Enable glare; reconcile interval; sensor debounce; weather-enhanced open-loop; daylight fallback timeout; default shade bounds / target lux / shade change rate |
| Harvest | Enable harvest; reconcile interval; sensor debounce; ALS fallback timeout; defaults for setpoint, dim range, change rate, gain; multi-point sensitivity; train set point |
- Click Save where the tab offers it.
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 | Backup shade update (open-loop sun/cloud, or closed-loop if window lux is fresh) |
Sensor-triggered runs (shown in Automation → Logs as trigger sensor):
| Source | After trailing debounce | Task |
|---|---|---|
| Interior ALS in a harvest zone | Immediate if idle ≥ debounce; else quiet window | solaris-harvest |
| Window lux in a closed-loop glare zone | Same trailing pattern | solaris-glare |
| Rooftop lux (open-loop cloud refresh) | Same trailing pattern | solaris-glare |
You do not configure these separately — the controller queues them when light,<lux> events arrive. Logs auto-refresh about every 10 seconds.
Step 7: Verify on the Status tab
- Open Modules → Solaris → Status.
- Harvest dim and Glare position cards show present% (target%) while ramping.
- Harvest by zone lists ALS lux and dim present (target) per zone.
- Glare by zone lists window lux (and set target when closed-loop) and position present (target) per zone.
- Cloud cover card shows percent, method, clear-sky lux, and the rooftop test input.
- Use a simulated clock time if you need to force sun position; Apply runs harvest/glare for that time. Realtime returns to the live clock.
- Check Overrides and Automation → Logs for applied vs skipped targets (
intervalvssensor).
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 mode / target lux / shade rate / limits |
| Rooftop zone | Facility → Zones | Membership only — exterior sensor for open-loop cloud cover |
| Module | Modules → Solaris → Glare / Harvest / Schedule / Targets | Defaults, weather option, debounce, fallbacks, active hours, training |
| Automation | Automation → Tasks | Builtin tasks (normally leave enabled) |
Prefer zone-level setpoints, target lux, 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 or glare (unless the zone is already under a light/shade override; then ALS may be 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 Overrides tab lists suspended targets with mode, resume time, and reason. You can clear all overrides when you have permission.
Coordinating with Circadian
| Module | Controls | Best practice |
|---|---|---|
| Circadian | CCT + dim vs time | Interior zones, tunable-white fixtures |
| Solaris harvest (open-loop, sensorless) | Dim vs sun on façade | Sensorless daylit zones; ALS timeout fallback |
| Solaris harvest (closed-loop, sensor) | Dim vs ALS setpoint | Perimeter / daylit zones with room sensors |
| Solaris glare (open-loop, sensorless) | Shade vs sun + optional cloud scaler | Façade zones with blinds |
| Solaris glare (closed-loop, sensor) | Shade vs window lux ÷ target | Façade zones with a window illuminance sensor |
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 present (target) | Commanded dim and control-law target (target may lead while dim ramps) |
| Harvest by zone | Per-zone ALS lux and dim present (target) |
| ALS fallback | Open-loop harvest is active because fresh ALS stopped arriving |
| Glare position present (target) | Commanded shade openness and control-law target |
| Glare by zone | Per-zone window lux / set target and position present (target) |
| Clear sky illuminance | Estimated outdoor lux if the sky were clear right now (open-loop) |
| Rooftop illuminance | Latest exterior lux (sensor or test input) for open-loop cloud cover |
| Cloud cover | Percent and method — Rooftop Illuminance, Open-Meteo Weather, or Assumed |
Data tab preview
- Dashed lines = open-loop predicted harvest / glare for the day
- Solid lines = sent levels when closed-loop (or applied open-loop) is active
- Markers show live “now” harvest, glare, and cloud cover
Common issues
Harvest does not dim (open-loop, sensorless)
- Zone mode must be Open loop (or closed-loop currently in ALS fallback).
- Site latitude/longitude and zone façade orientation must be set.
- Confirm sun is on that façade and elevation is usable for the daylight estimate.
Harvest does not dim (closed-loop, sensor)
- Zone type must be Harvest or Lighting, mode Closed loop, and included in module scope.
- Needs ALS events — confirm sensors report light levels in device or event history.
- Check Overrides for timed pause or latched off.
- Confirm gain is greater than 0.
- If dim moves too slowly or too fast, adjust dim change rate on the zone or Harvest defaults.
- Retrain if sensitivity was never captured and behavior feels wrong.
- If ALS is stale, Status may show ALS fallback (open-loop sensorless) — that is expected until lux returns.
Glare shades do not move (open-loop, sensorless)
- Site latitude/longitude must be set.
- Zone needs type Glare or Shading with shade actuators linked and mode Open loop.
- Confirm sun elevation exceeds min elevation for the zone and the sun is on that façade.
- Check shade manual override on the Overrides tab.
- On heavily cloudy assumptions (100% assumed or high weather cloud cover), shades may stay more open than on a clear day — that is expected.
Glare shades do not move (closed-loop, sensor)
- Zone glare mode must be Closed loop with a target lux set.
- Confirm the window sensor is a LIGHT member of that glare zone (not only rooftop).
- Look for Automation → Logs runs of
solaris-glarewith trigger sensor after window lux events (trailing debounce; immediate when idle). - If window lux is stale, the zone falls back to open-loop (sensorless) — check site coordinates and sun on façade for that path.
- Adjust shade change rate if position updates feel too slow or too aggressive.
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 Cloud cover card to verify open-loop shade response during commissioning.
- Enable Weather-enhanced glare on the Glare tab 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 on the Harvest tab 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 / Mecho shades in glare zones
- Standalone Somfy PoE and Mecho motors participate in glare apply when they are members of linked glare/shading zones. INX/Core-proxy shades use the normal shade path. All are supported.
Automation logs
Inspect Automation → Logs for solaris-harvest and solaris-glare runs (auto-refresh ~10s):
- Trigger sensor — ALS, window lux, or rooftop lux after trailing debounce
- Trigger interval — periodic backup reconcile
- 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, closed-loop window binding, or suspends
- Lux and cloud cover in run details — useful when tuning setpoint, target lux, 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