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']); } 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 testIgnoriertUngueltigeDauerUndNichtEndlicheWerte(): void { $werte = EnergieMessung::energieDeltas([ 'PV' => INF, 'Haus' => NAN, 'Netz' => 1000.0, 'Batterie' => -1000.0, ], -1); foreach ($werte as $wert) { self::assertSame(0.0, $wert); } } }