35 lines
1.2 KiB
Python
35 lines
1.2 KiB
Python
"""Signed PV kanály Deye → agregovaná pv_power_w (kladné příspěvky jen)."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import unittest
|
|
|
|
from services.telemetry_collector import aggregate_pv_production_w
|
|
|
|
|
|
class TestAggregatePvProductionW(unittest.TestCase):
|
|
def test_daytime_typical(self) -> None:
|
|
self.assertEqual(aggregate_pv_production_w(6000, 4000, 0), 10_000)
|
|
|
|
def test_negative_gen_ignored_in_total(self) -> None:
|
|
self.assertEqual(aggregate_pv_production_w(0, 0, -61), 0)
|
|
|
|
def test_false_uint16_gen_becomes_small_negative(self) -> None:
|
|
raw = 65472
|
|
signed = raw - 65536 if raw > 32767 else raw
|
|
self.assertEqual(signed, -64)
|
|
self.assertEqual(aggregate_pv_production_w(0, 0, signed), 0)
|
|
|
|
def test_false_uint16_pv1_like_grid_export_clamped(self) -> None:
|
|
raw = 52038
|
|
signed = raw - 65536 if raw > 32767 else raw
|
|
self.assertEqual(signed, -13_498)
|
|
self.assertEqual(aggregate_pv_production_w(signed, 0, 0), 0)
|
|
|
|
def test_mixed_one_negative(self) -> None:
|
|
self.assertEqual(aggregate_pv_production_w(8000, -100, 2000), 10_000)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|