evo-thermal-sysid

SkillMonitoring & ops

System identification utilities for first-order thermal systems. Runs open-loop step tests on HVAC simulator, collects calibration data, fits first-order exponential model, outputs estimated parameters (K, tau) with fit quality metrics.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the evo-thermal-sysid skill

What this skill tells your AI

The instructions your AI receives, as published by openlair/openskill in tasks-evolved/hvac-control/environment/skills/evo-thermal-sysid/SKILL.md and read by ahel’s review.

System identification for first-order thermal HVAC systems.

Functions

  • run_calibration_test(sim, heater_power=50.0, duration=60.0) - Run open-loop step test, returns calibration_log dict
  • first_order_step_response(t, K, tau, T_amb, U_step) - First-order model: T_amb + KU_step(1-exp(-t/tau))
  • identify_system_params(calibration_log) - Fit K and tau from calibration data using curve_fit
  • filter_temperature_data(temp_data, window_length=11, polyorder=2) - Savitzky-Golay filter
  • calculate_fit_metrics(T_actual, T_predicted) - Returns (r_squared, rmse)
  • save_calibration_results(calibration_log, estimated_params) - Save JSON files to /root/

Usage

import sys
sys.path.insert(0, '/app/environment/skills/evo-thermal-sysid/scripts')
from sysid_utils import run_calibration_test, identify_system_params, save_calibration_results

sys.path.insert(0, '/root')
from hvac_simulator import HVACSimulator

sim = HVACSimulator()
calib_log = run_calibration_test(sim, heater_power=50.0, duration=60.0)
params = identify_system_params(calib_log)
save_calibration_results(calib_log, params)

Key Domain Knowledge

  • First-order thermal model: dT/dt = (1/tau) * (K*u + T_amb - T)
  • Step response: T(t) = T_amb + KU_step(1 - exp(-t/tau))
  • K ~ 0.12 C/% power, tau ~ 40s for typical HVAC
  • Use Savitzky-Golay filter (preserves exponential shape) not moving average
  • Use curve_fit with bounds ([0.001, 1.0], [1.0, 200.0]) and maxfev=10000
  • Calibration needs >= 30s duration, >= 20 data points
  • R-squared > 0.95 indicates good first-order fit

Signals

GitHub stars
89
Forks
4
Last commit
Sep 2026
Advanced
Catalog kind
skill
Gateway key
evo-thermal-sysid
Source
github.com/openlair/openskill