Data Model

TimescaleDB (PostgreSQL 16 + hypertables) stores every measurement, event, plan, and observation.

Core Tables

TableTypeRowsWrite Pattern
climateHypertable199K+~2 min batch (ESP32 sensors + outdoor merge)
equipment_stateHypertable39K+Event-driven (relay changes)
energyHypertable512K+Every 5 min (Shelly EM50)
setpoint_changesHypertableEvent-driven (ESP32 reports + plan pushes)
setpoint_planHypertable144+3× daily (AI planner waypoints)
weather_forecastHypertable28K+Hourly (Open-Meteo, 16-day, 27 columns)
daily_summaryRegular236Nightly snapshot
diagnosticsHypertable~60s (ESP32 health)

Crop & Operations Tables

TablePurposeStatus
cropsActive plantings with position, zone, stage3 records
crop_eventsStage changes, transplants, harvestsEmpty (awaiting operator input)
observationsPest scouting, visual notes, camera assessmentsEmpty
treatmentsSpray/biological applications with PHI/REIEmpty
harvestsYield recordsEmpty
plan_journalPer-plan hypothesis, outcome, score12 entries
planner_lessonsValidated patterns from planning cycles4 lessons

Key Views (34 total)

ViewPurpose
v_greenhouse_nowSingle-row snapshot: all zones, hydro, costs, health
v_equipment_nowCurrent state of all 33 equipment items
v_cost_todayReal-time electric + gas + water cost
v_active_planResolves plan supersession (latest waypoint per parameter)
v_stress_hours_todayHours above/below target bands per day
v_disease_riskBotrytis + condensation risk from RH/temp/VPD
v_mister_effectivenessVPD drop per pulse by zone, with outdoor context
v_forecast_vs_actualHourly forecast accountability (bias detection)
v_indoor_outdoor_correlationThermal gain coefficient
v_state_durationsTime-in-state per day
v_estimated_plant_dliCorrected DLI estimate (sensor × correction factor)

Key Functions

FunctionReturns
fn_equipment_health()0–100 composite health score
fn_stress_summary(date)Human-readable stress text
fn_system_health()4-component health: sensors, alerts, equipment, controller
fn_compliance_pct()% time within target bands
fn_forecast_dli()Predicted natural DLI from forecast radiation
fn_forecast_correction()Rolling 7-day bias per forecast parameter

Compression & Retention

TableCompressionRetention
climate7 days365 days
energy7 days365 days
diagnostics7 days180 days
esp32_logs30 days