Skip to main content

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 optional lighting zone 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-harvest and solaris-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​

LoopWhat drives itWhat it controls
Harvest open-loop (sensorless)Sun on façade (site location + zone orientation); no ALSElectric 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 %/sElectric 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 staleShade 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):

  1. Solaris estimates daylight on the façade from site location, zone orientation, and sun position.
  2. Dim follows that estimate within dim min/max and gain — useful for sensorless zones or when ALS is offline.
  3. Open-loop harvest does not use the ALS setpoint / sensitivity control law.

Closed loop (sensor) — typical for daylit rooms with interior ALS:

  1. Interior sensors report how bright the room is (lux).
  2. Solaris compares that to the zone setpoint.
  3. 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.
  4. Physical dim ramps toward that target (default about 2% per second) so the room can settle between adjustments.
  5. 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 inputSun position + façade orientationInterior ALS + setpoint (+ optional trained sensitivity)
Room ALSNot usedRequired (while active)
Site lat/lngRequiredOnly if falling back to open-loop
Typical useSensorless zones; ALS timeout fallbackPerimeter 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):

  1. Solaris knows where the sun is relative to each façade (site location + zone orientation).
  2. 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
  3. The Status Cloud cover card shows percent and method, plus clear-sky / rooftop lux.

Closed loop (sensor) — window lux vs target:

  1. Link one window illuminance sensor to the glare / shading zone and set Target lux (e.g. 500).
  2. When measured window lux is at or below target → shades go fully open (100%).
  3. When brighter → openness ≈ 100 × target / measured (e.g. target 500, measured 2000 → 25% open).
  4. No cloud cover and no solar angle in this mode — the window reading is the control input.
  5. Position ramps at shade change rate (default 2%/s), same idea as harvest dim ramp.
  6. 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 inputSun position + façade orientationWindow lux + target_lux
Control sensorNone (solar math)Window illuminance
Cloud cover (weather or rooftop÷clear-sky)Optional scalerUnused
Shade when brightClose more via solar factor × cloudClose 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​

  1. Go to Settings → System.
  2. Set Latitude, Longitude, and Timezone.
  3. 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 typePurpose
HarvestDaylight harvesting — open loop (sensorless) or closed loop (sensor)
GlareFaçade/window groups for anti-glare shade — open loop (sensorless) or closed loop (sensor)
ShadingGeneral automated shade (may overlap glare)
RooftopExterior daylight sensor — feeds global illuminance for open-loop cloud cover
LightingOptional harvest targets that share fixtures with Circadian

For each zone:

  1. Create or open the zone under Facility → Zones.
  2. Set the zone type.
  3. Link clusters and/or devices that belong in the zone.
  4. For harvest, glare, and shading zones, open the Solaris panel on the zone detail page and configure tunables (see Zone tunables).
  5. 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.
  6. 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)​

FieldDescription
ModeOpen loop (sensorless), Closed loop (sensor), or Disabled
Setpoint luxTarget ambient level for closed loop (typical 300–750 lux); often filled by training
Dim min / maxAllowed dim range (%)
Dim change rateHow fast dim may move toward the target (% per second; default 2)
GainAutomation 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)​

FieldDescription
ModeOpen 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 / maxAllowed shade range for automation
Min elevation (°)Open-loop only — ignore sun below this elevation
Target luxClosed-loop only — comfort lux at the window sensor
Shade change rateClosed-loop only — slew rate toward openness target (%/s; default 2)
GainAutomation authority for shade moves
Daily end shadeOptional 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:

  1. Go to Modules → Solaris → Harvest.
  2. Confirm harvest zones in scope use closed loop mode.
  3. Click Train set point (or force-restart if a session is stuck).
  4. 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.
  5. 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​

  1. Open Modules → Solaris.
  2. Toggle the module Enabled.
  3. Configure by tab:
TabWhat to set
StatusLive metrics, test time, rooftop lux test input (no durable config)
Data24h preview chart/table (zone selectors)
OverridesActive manual overrides; clear when permitted
ScheduleActive hours / days window for harvest and glare automation
TargetsZones in scope (empty = all harvest/glare/shading zones of those types)
GlareEnable glare; reconcile interval; sensor debounce; weather-enhanced open-loop; daylight fallback timeout; default shade bounds / target lux / shade change rate
HarvestEnable harvest; reconcile interval; sensor debounce; ALS fallback timeout; defaults for setpoint, dim range, change rate, gain; multi-point sensitivity; train set point
  1. Click Save where the tab offers it.

Step 6: Verify automation tasks​

Under Automation → Tasks, confirm these builtin tasks are enabled:

TaskTypical intervalRole
solaris-harvest1 minBackup harvest reconcile if ALS events were missed
solaris-glare5 minBackup shade update (open-loop sun/cloud, or closed-loop if window lux is fresh)

Sensor-triggered runs (shown in Automation → Logs as trigger sensor):

SourceAfter trailing debounceTask
Interior ALS in a harvest zoneImmediate if idle ≥ debounce; else quiet windowsolaris-harvest
Window lux in a closed-loop glare zoneSame trailing patternsolaris-glare
Rooftop lux (open-loop cloud refresh)Same trailing patternsolaris-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​

  1. Open Modules → Solaris → Status.
  2. Harvest dim and Glare position cards show present% (target%) while ramping.
  3. Harvest by zone lists ALS lux and dim present (target) per zone.
  4. Glare by zone lists window lux (and set target when closed-loop) and position present (target) per zone.
  5. Cloud cover card shows percent, method, clear-sky lux, and the rooftop test input.
  6. 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.
  7. Check Overrides and Automation → Logs for applied vs skipped targets (interval vs sensor).

Zone tunables vs module defaults​

LayerWhereWhat
GlobalSettings → SystemLat/lng, timezone
ZoneFacility → Zone detail → SolarisOrientation; harvest mode/setpoint/rate; glare mode / target lux / shade rate / limits
Rooftop zoneFacility → ZonesMembership only — exterior sensor for open-loop cloud cover
ModuleModules → Solaris → Glare / Harvest / Schedule / TargetsDefaults, weather option, debounce, fallbacks, active hours, training
AutomationAutomation → TasksBuiltin 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 shownEventsEffect
Paused (off)off, vac, and fl (or dim/shade) at 0% — using end level when present and under 101, otherwise startAutomation 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​

ModuleControlsBest practice
CircadianCCT + dim vs timeInterior zones, tunable-white fixtures
Solaris harvest (open-loop, sensorless)Dim vs sun on façadeSensorless daylit zones; ALS timeout fallback
Solaris harvest (closed-loop, sensor)Dim vs ALS setpointPerimeter / daylit zones with room sensors
Solaris glare (open-loop, sensorless)Shade vs sun + optional cloud scalerFaçade zones with blinds
Solaris glare (closed-loop, sensor)Shade vs window lux ÷ targetFaç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​

ReadingMeaning
Harvest dim present (target)Commanded dim and control-law target (target may lead while dim ramps)
Harvest by zonePer-zone ALS lux and dim present (target)
ALS fallbackOpen-loop harvest is active because fresh ALS stopped arriving
Glare position present (target)Commanded shade openness and control-law target
Glare by zonePer-zone window lux / set target and position present (target)
Clear sky illuminanceEstimated outdoor lux if the sky were clear right now (open-loop)
Rooftop illuminanceLatest exterior lux (sensor or test input) for open-loop cloud cover
Cloud coverPercent 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-glare with 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 light events 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