Add export plan guard to block Deye export against plan.
Some checks failed
CI and deploy / migration-check (push) Failing after 39s
CI and deploy / deploy (push) Has been skipped

Force PASSIVE/no-export when sell is negative or export_mode is NONE,
and alert NEG_SELL_EXPORT in plan_actual_slot_guard when export still occurs.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Dusan Vojacek
2026-05-29 00:14:52 +02:00
parent 620a557a89
commit a7dff75e58
8 changed files with 230 additions and 4 deletions

View File

@@ -19,7 +19,11 @@ from services.control.repository import (
_fetch_plan_row_for_slot_offset,
_load_inverter_config,
)
from services.control.setpoints import _apply_price_failsafe_guard, _build_setpoints
from services.control.setpoints import (
_apply_export_plan_guard,
_apply_price_failsafe_guard,
_build_setpoints,
)
from services.signal_service import enqueue_site_signals
logger = logging.getLogger(__name__)
@@ -94,8 +98,10 @@ async def export_setpoints(site_id: int, db: asyncpg.Connection) -> None:
)
sp_next = sp_now
else:
sp_now = _apply_export_plan_guard(site_id, mode, pi_now, sp_now)
sp_now = _apply_price_failsafe_guard(site_id, mode, pi_now, sp_now)
if sp_next is not None:
sp_next = _apply_export_plan_guard(site_id, mode, pi_next, sp_next)
sp_next = _apply_price_failsafe_guard(site_id, mode, pi_next, sp_next)
planning_run_id = await db.fetchval(