def demand_control(self, demand_kw, limit_kw): if demand_kw >= limit_kw: self.shed_level(2) # shed all non‑critical loads elif demand_kw >= limit_kw * 0.95: self.shed_level(1) # shed first stage loads elif demand_kw < limit_kw * 0.85: self.restore_level(1) if demand_kw < limit_kw * 0.70: self.restore_level(2)
For kVA demand (common for utilities), measure voltage and current, then:
Two‑stage shedding + restoration.
"limit_kw": 160.0, "warning_threshold_pct": 85, "window_minutes": 15, "auto_reset_peak_on": "monthly"
# Calculate total kWh in complete window total_kwh = sum(self.buffer) demand_kw = total_kwh / (self.window_size / 60.0)
return demand_kw When demand approaches limit, shed non‑critical loads.
# Update peak if demand_kw > self.peak_demand_kw: self.peak_demand_kw = demand_kw self.peak_timestamp = now_timestamp