How data moves through the system and the logic behind automated climate decisions.

| Type | Source | Destination | Frequency |
|---|---|---|---|
| Temperature reading | Climate Sensor | Central Unit → Cloud | Every 60 s |
| Humidity reading | Climate Sensor | Central Unit → Cloud | Every 60 s |
| CO₂ level | Climate Sensor | Central Unit → Cloud | Every 60 s |
| Valve position | Thermostat | Central Unit → Cloud | On change |
| Window state | Window Sensor | Central Unit | On change |
| Leak event | Leak Sensor | Central Unit → Cloud | Immediately |
| User command | Mobile/Web App | Cloud → Central Unit | On demand |
The Central Unit evaluates rules independently of cloud connectivity.
IF room_temperature < target_setpoint - hysteresis
AND window_state == CLOSED
AND schedule.active == TRUE
THEN thermostat.open_valve()
ELSE thermostat.close_valve()
Priorities (highest → lowest):
The cloud layer handles cross-room optimization, user-defined automations, and AI-assisted suggestions.
All internal messages follow a topic-based MQTT structure:
ecozy/{home_id}/{device_id}/telemetry # sensor data
ecozy/{home_id}/{device_id}/command # control commands
ecozy/{home_id}/{device_id}/status # device state
ecozy/{home_id}/events # system-wide events