This commit is contained in:
@@ -0,0 +1,111 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Belevo\EnelixUtils\Tests;
|
||||
|
||||
use Belevo\EnelixUtils\VirtuelleBatterieRegler;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
require_once __DIR__
|
||||
. '/../VirtuelleBatterie/libs/VirtuelleBatterieRegler.php';
|
||||
|
||||
final class VirtuelleBatterieReglerTest extends TestCase
|
||||
{
|
||||
public function testAggregatIstKapazitaetsgewichtet(): void
|
||||
{
|
||||
$aggregat = VirtuelleBatterieRegler::aggregiere([
|
||||
$this->batterie(0, 10.0, 20.0, 5000.0, 5000.0),
|
||||
$this->batterie(1, 30.0, 80.0, 10000.0, 8000.0),
|
||||
], 3000.0, 2000.0, 0.5);
|
||||
|
||||
self::assertSame(40.0, $aggregat['Kapazitaet_kWh']);
|
||||
self::assertSame(65.0, $aggregat['Ladezustand_Prozent']);
|
||||
self::assertSame(15000.0, $aggregat['MaxLaden_W']);
|
||||
self::assertSame(13000.0, $aggregat['MaxEntladen_W']);
|
||||
self::assertSame(2.5, $aggregat['SDLKapazitaet_kWh']);
|
||||
self::assertSame(37.5, $aggregat['EigenverbrauchKapazitaet_kWh']);
|
||||
}
|
||||
|
||||
public function testSDLHatBeiGleicherRichtungVorrang(): void
|
||||
{
|
||||
$aggregat = VirtuelleBatterieRegler::aggregiere([
|
||||
$this->batterie(0, 20.0, 50.0, 10000.0, 10000.0),
|
||||
], 6000.0, 6000.0, 0.5);
|
||||
|
||||
$auftrag = VirtuelleBatterieRegler::kombiniere(
|
||||
8000.0,
|
||||
6000.0,
|
||||
$aggregat
|
||||
);
|
||||
|
||||
self::assertSame(6000.0, $auftrag['SDL_W']);
|
||||
self::assertSame(4000.0, $auftrag['Eigenverbrauch_W']);
|
||||
self::assertSame(10000.0, $auftrag['Gesamt_W']);
|
||||
}
|
||||
|
||||
public function testGegenlaeufigeAuftraegeWerdenNettoVerteilt(): void
|
||||
{
|
||||
$aggregat = VirtuelleBatterieRegler::aggregiere([
|
||||
$this->batterie(0, 20.0, 50.0, 10000.0, 10000.0),
|
||||
], 6000.0, 6000.0, 0.5);
|
||||
|
||||
$auftrag = VirtuelleBatterieRegler::kombiniere(
|
||||
4000.0,
|
||||
-3000.0,
|
||||
$aggregat
|
||||
);
|
||||
|
||||
self::assertSame(1000.0, $auftrag['Gesamt_W']);
|
||||
self::assertSame(-3000.0, $auftrag['SDL_W']);
|
||||
self::assertSame(4000.0, $auftrag['Eigenverbrauch_W']);
|
||||
}
|
||||
|
||||
public function testLadenBeginntBeiNiedrigstemLadezustand(): void
|
||||
{
|
||||
$verteilung = VirtuelleBatterieRegler::verteile(7000.0, [
|
||||
$this->batterie(0, 10.0, 80.0, 5000.0, 5000.0),
|
||||
$this->batterie(1, 10.0, 20.0, 5000.0, 5000.0),
|
||||
]);
|
||||
|
||||
self::assertSame(2000.0, $verteilung[0]);
|
||||
self::assertSame(5000.0, $verteilung[1]);
|
||||
}
|
||||
|
||||
public function testIstleistungOrdnetSDLZuerstZu(): void
|
||||
{
|
||||
self::assertSame(
|
||||
['Eigenverbrauch_W' => 4000.0, 'SDL_W' => -3000.0],
|
||||
VirtuelleBatterieRegler::ordneIstleistungZu(1000.0, -3000.0)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array{
|
||||
* Index:int,
|
||||
* Name:string,
|
||||
* Kapazitaet_kWh:float,
|
||||
* MaxLaden_W:float,
|
||||
* MaxEntladen_W:float,
|
||||
* Ladezustand_Prozent:float,
|
||||
* Istleistung_W:float
|
||||
* }
|
||||
*/
|
||||
private function batterie(
|
||||
int $index,
|
||||
float $kapazitaet,
|
||||
float $ladezustand,
|
||||
float $maxLaden,
|
||||
float $maxEntladen
|
||||
): array {
|
||||
return [
|
||||
'Index' => $index,
|
||||
'Name' => 'Batterie ' . $index,
|
||||
'Kapazitaet_kWh' => $kapazitaet,
|
||||
'MaxLaden_W' => $maxLaden,
|
||||
'MaxEntladen_W' => $maxEntladen,
|
||||
'Ladezustand_Prozent' => $ladezustand,
|
||||
'Istleistung_W' => 0.0,
|
||||
];
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user