Překročení rezervovaného exportu na fakturačním elektroměru (home-01 13.5 kW) = pokuta v řádu desítek tisíc Kč/kW. Invariant: reg 143 (svorky) <= max_export_power_w (ulice) VŽDY; feed-forward navyšování o měřenou spotřebu mezi střídačem a CT ZAKÁZÁNO (výpadek spotřeby = přestřelení ulice). Návrh feed-forwardu z 2026-06-12 večer zavržen před implementací na pokyn uživatele. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
36 lines
1.2 KiB
Python
36 lines
1.2 KiB
Python
"""HARD LIMIT exportu (CLAUDE.md §4.19): reg 143 nikdy nad limit ulice.
|
|
|
|
Pokuta v řádu desítek tisíc Kč za každou kW překročení rezervovaného
|
|
exportního výkonu na fakturačním elektroměru. Terminálový limit (reg 143)
|
|
nesmí přesáhnout max_export_power_w za žádných okolností — žádný
|
|
feed-forward o měřenou spotřebu mezi střídačem a CT.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import unittest
|
|
|
|
from services.control.setpoints import _deye_reg143_export_w
|
|
|
|
|
|
class ExportHardLimitTests(unittest.TestCase):
|
|
def test_reg143_never_exceeds_street_limit(self) -> None:
|
|
street_limit = 13_500
|
|
self.assertLessEqual(
|
|
_deye_reg143_export_w(False, street_limit), street_limit
|
|
)
|
|
|
|
def test_no_export_is_zero(self) -> None:
|
|
self.assertEqual(_deye_reg143_export_w(True, 13_500), 0)
|
|
|
|
def test_plan_export_limit_caps_not_raises(self) -> None:
|
|
# vzor z write_inverter_setpoints: export_lim = min(hw, plan) — plán
|
|
# smí limit jen SNÍŽIT, nikdy zvýšit
|
|
hw = _deye_reg143_export_w(False, 13_500)
|
|
plan_limit = 20_000
|
|
self.assertLessEqual(min(hw, plan_limit), 13_500)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|