7200.0, 'Haus' => 3600.0, 'Netz' => -1800.0, 'Batterie' => 900.0, ], 300); self::assertEqualsWithDelta(0.6, $werte['PVEnergie'], 0.000001); self::assertEqualsWithDelta(0.3, $werte['Hausenergie'], 0.000001); self::assertSame(0.0, $werte['NetzbezugEnergie']); 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 { $werte = EnergieMessung::energieDeltas([ 'PV' => -10.0, 'Haus' => -10.0, 'Netz' => 1000.0, 'Batterie' => -2000.0, ], 3600); self::assertSame(0.0, $werte['PVEnergie']); self::assertSame(0.0, $werte['Hausenergie']); self::assertSame(1.0, $werte['NetzbezugEnergie']); self::assertSame(0.0, $werte['EinspeisungEnergie']); self::assertSame(0.0, $werte['BatterieLadenEnergie']); self::assertSame(2.0, $werte['BatterieEntladenEnergie']); } public function testBerechnetHausverbrauchAusDerAnlagenbilanz(): void { self::assertSame(2700.0, EnergieMessung::hausleistung(4200.0, -800.0, 700.0)); self::assertSame(3500.0, EnergieMessung::hausleistung(2000.0, 500.0, -1000.0)); 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 { 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); } } } } }