Add opt-in SDL measurement sources and independent visualization toggles. Exclude balancing power from household telemetry and new household energy. Preserve custom views and cover measurement, migration and Symcon 8.0 behavior.
This commit is contained in:
@@ -24,6 +24,8 @@ final class EnergieMessungTest extends TestCase
|
||||
self::assertEqualsWithDelta(0.15, $werte['EinspeisungEnergie'], 0.000001);
|
||||
self::assertEqualsWithDelta(0.075, $werte['BatterieLadenEnergie'], 0.000001);
|
||||
self::assertSame(0.0, $werte['BatterieEntladenEnergie']);
|
||||
self::assertSame(0.0, $werte['SDLLadenEnergie']);
|
||||
self::assertSame(0.0, $werte['SDLEntladenEnergie']);
|
||||
}
|
||||
|
||||
public function testTrenntBezugUndBatterieentladung(): void
|
||||
@@ -50,23 +52,100 @@ final class EnergieMessungTest extends TestCase
|
||||
self::assertSame(0.0, EnergieMessung::hausleistung(500.0, -1200.0, 0.0));
|
||||
}
|
||||
|
||||
public function testBeruecksichtigtSDLVorDerBegrenzungDerHausleistung(): void
|
||||
{
|
||||
self::assertSame(1700.0, EnergieMessung::hausleistung(4200.0, -800.0, 700.0, 1000.0));
|
||||
self::assertSame(3700.0, EnergieMessung::hausleistung(4200.0, -800.0, 700.0, -1000.0));
|
||||
self::assertSame(1000.0, EnergieMessung::hausleistung(0.0, -1000.0, 0.0, -2000.0));
|
||||
self::assertSame(0.0, EnergieMessung::hausleistung(500.0, 0.0, 0.0, 1000.0));
|
||||
self::assertSame(
|
||||
EnergieMessung::hausleistung(4200.0, -800.0, 700.0),
|
||||
EnergieMessung::hausleistung(4200.0, -800.0, 700.0, 0.0)
|
||||
);
|
||||
}
|
||||
|
||||
public function testBerechnetHausenergieAusDenZaehlerdeltas(): void
|
||||
{
|
||||
self::assertSame(8.5, EnergieMessung::hausenergie(10.0, 2.0, 4.0, 1.5, 2.0));
|
||||
self::assertSame(0.0, EnergieMessung::hausenergie(1.0, 0.0, 5.0, 0.0, 0.0));
|
||||
}
|
||||
|
||||
public function testBereinigtHausenergieUmSDLLadungUndEntladung(): void
|
||||
{
|
||||
self::assertSame(5.5, EnergieMessung::hausenergie(10.0, 2.0, 4.0, 1.5, 2.0, 3.0, 0.0));
|
||||
self::assertSame(11.5, EnergieMessung::hausenergie(10.0, 2.0, 4.0, 1.5, 2.0, 0.0, 3.0));
|
||||
self::assertSame(7.5, EnergieMessung::hausenergie(10.0, 2.0, 4.0, 1.5, 2.0, 3.0, 2.0));
|
||||
self::assertSame(1.0, EnergieMessung::hausenergie(0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 2.0));
|
||||
self::assertSame(0.0, EnergieMessung::hausenergie(1.0, 0.0, 0.0, 0.0, 0.0, 2.0, 0.0));
|
||||
self::assertSame(
|
||||
EnergieMessung::hausenergie(10.0, 2.0, 4.0, 1.5, 2.0),
|
||||
EnergieMessung::hausenergie(10.0, 2.0, 4.0, 1.5, 2.0, 0.0, 0.0)
|
||||
);
|
||||
}
|
||||
|
||||
public function testIntegriertSDLGetrenntVonBatterieUndHaus(): void
|
||||
{
|
||||
$leistungen = [
|
||||
'PV' => 7200.0,
|
||||
'Haus' => 3600.0,
|
||||
'Netz' => -1800.0,
|
||||
'Batterie' => 900.0,
|
||||
'SDL' => 1800.0,
|
||||
];
|
||||
$laden = EnergieMessung::energieDeltas($leistungen, 300);
|
||||
self::assertEqualsWithDelta(0.15, $laden['SDLLadenEnergie'], 0.000001);
|
||||
self::assertSame(0.0, $laden['SDLEntladenEnergie']);
|
||||
self::assertEqualsWithDelta(0.075, $laden['BatterieLadenEnergie'], 0.000001);
|
||||
self::assertEqualsWithDelta(0.3, $laden['Hausenergie'], 0.000001);
|
||||
|
||||
$leistungen['SDL'] = -1800.0;
|
||||
$entladen = EnergieMessung::energieDeltas($leistungen, 300);
|
||||
self::assertSame(0.0, $entladen['SDLLadenEnergie']);
|
||||
self::assertEqualsWithDelta(0.15, $entladen['SDLEntladenEnergie'], 0.000001);
|
||||
self::assertSame($laden['Hausenergie'], $entladen['Hausenergie']);
|
||||
self::assertSame($laden['BatterieLadenEnergie'], $entladen['BatterieLadenEnergie']);
|
||||
|
||||
$leistungen['SDL'] = 0.0;
|
||||
$mitNull = EnergieMessung::energieDeltas($leistungen, 300);
|
||||
unset($leistungen['SDL']);
|
||||
self::assertSame($mitNull, EnergieMessung::energieDeltas($leistungen, 300));
|
||||
}
|
||||
|
||||
public function testIgnoriertNichtEndlicheSDLWerte(): void
|
||||
{
|
||||
foreach ([INF, -INF, NAN] as $ungueltig) {
|
||||
self::assertSame(2700.0, EnergieMessung::hausleistung(4200.0, -800.0, 700.0, $ungueltig));
|
||||
self::assertSame(8.5, EnergieMessung::hausenergie(10.0, 2.0, 4.0, 1.5, 2.0, $ungueltig, $ungueltig));
|
||||
$werte = EnergieMessung::energieDeltas([
|
||||
'PV' => 0.0,
|
||||
'Haus' => 1000.0,
|
||||
'Netz' => 1000.0,
|
||||
'Batterie' => 0.0,
|
||||
'SDL' => $ungueltig,
|
||||
], 3600);
|
||||
|
||||
self::assertSame(0.0, $werte['SDLLadenEnergie']);
|
||||
self::assertSame(0.0, $werte['SDLEntladenEnergie']);
|
||||
self::assertSame(1.0, $werte['Hausenergie']);
|
||||
}
|
||||
}
|
||||
|
||||
public function testIgnoriertUngueltigeDauerUndNichtEndlicheWerte(): void
|
||||
{
|
||||
$werte = EnergieMessung::energieDeltas([
|
||||
'PV' => INF,
|
||||
'Haus' => NAN,
|
||||
'Netz' => 1000.0,
|
||||
'Batterie' => -1000.0,
|
||||
], -1);
|
||||
foreach ([-1, 0] as $dauer) {
|
||||
foreach ([-1000.0, 1000.0] as $sdl) {
|
||||
$werte = EnergieMessung::energieDeltas([
|
||||
'PV' => INF,
|
||||
'Haus' => NAN,
|
||||
'Netz' => 1000.0,
|
||||
'Batterie' => -1000.0,
|
||||
'SDL' => $sdl,
|
||||
], $dauer);
|
||||
|
||||
foreach ($werte as $wert) {
|
||||
self::assertSame(0.0, $wert);
|
||||
foreach ($werte as $wert) {
|
||||
self::assertSame(0.0, $wert);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user