This commit is contained in:
@@ -0,0 +1,191 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Belevo\EnelixEMS\Tests;
|
||||
|
||||
use Belevo\EnelixEMS\BatterieRegler;
|
||||
use InvalidArgumentException;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
final class BatterieReglerTest extends TestCase
|
||||
{
|
||||
public function testLeistungsrasterBehaeltGrobeUndFeineSchritte(): void
|
||||
{
|
||||
self::assertSame(
|
||||
[
|
||||
-1000, -750, -500, -250, -200, -150, -100, -50,
|
||||
0, 50, 100, 150, 200, 250, 500, 750, 1000,
|
||||
],
|
||||
BatterieRegler::leistungsraster(1000.0, 1000.0)
|
||||
);
|
||||
}
|
||||
|
||||
public function testHystereseSchaltetAnDenBisherigenGrenzen(): void
|
||||
{
|
||||
self::assertTrue(BatterieRegler::hystereseAktiv(20.0, 20.0, 2.0, false));
|
||||
self::assertTrue(BatterieRegler::hystereseAktiv(21.0, 20.0, 2.0, true));
|
||||
self::assertFalse(BatterieRegler::hystereseAktiv(22.1, 20.0, 2.0, true));
|
||||
}
|
||||
|
||||
public function testPvAngebotEntsprichtDemBisherigenSocVerhalten(): void
|
||||
{
|
||||
$voll = BatterieRegler::leistungsraster(1000.0, 1000.0);
|
||||
|
||||
self::assertSame(
|
||||
$voll,
|
||||
BatterieRegler::leistungsangebot(
|
||||
true, true, false, 50.0, 20.0, 10.0, false,
|
||||
0.0, 0.0, 1000.0, 1000.0
|
||||
)
|
||||
);
|
||||
self::assertSame(
|
||||
[1000],
|
||||
BatterieRegler::leistungsangebot(
|
||||
true, true, false, 19.0, 20.0, 10.0, true,
|
||||
0.0, 0.0, 1000.0, 1000.0
|
||||
)
|
||||
);
|
||||
self::assertSame(
|
||||
[-1000, -750, -500, -250, -200, -150, -100, -50, 0],
|
||||
BatterieRegler::leistungsangebot(
|
||||
true, true, false, 100.0, 20.0, 10.0, false,
|
||||
0.0, 0.0, 1000.0, 1000.0
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
public function testPeakAngebotBeruecksichtigtNetzUndAktuelleBatterieleistung(): void
|
||||
{
|
||||
self::assertSame(
|
||||
[-500],
|
||||
BatterieRegler::leistungsangebot(
|
||||
true, true, true, 50.0, 20.0, 10.0, false,
|
||||
700.0, 200.0, 1000.0, 1000.0
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
public function testWechselrichtersteuerungBietetNurNull(): void
|
||||
{
|
||||
self::assertSame(
|
||||
[0],
|
||||
BatterieRegler::leistungsangebot(
|
||||
true, false, false, 50.0, 20.0, 10.0, false,
|
||||
0.0, 0.0, 1000.0, 1000.0
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
public function testHerstellerunabhaengigeRegisterwerte(): void
|
||||
{
|
||||
self::assertSame(
|
||||
[
|
||||
'Ladeleistung' => 1500,
|
||||
'Entladeleistung' => 0,
|
||||
'Modus' => 0,
|
||||
'Management' => 1,
|
||||
],
|
||||
BatterieRegler::registerwerte(
|
||||
BatterieRegler::TYP_HERSTELLERUNABHAENGIG,
|
||||
BatterieRegler::STEUERUNG_ENELIX,
|
||||
1500
|
||||
)
|
||||
);
|
||||
self::assertSame(
|
||||
[
|
||||
'Ladeleistung' => 0,
|
||||
'Entladeleistung' => 1500,
|
||||
'Modus' => 1,
|
||||
'Management' => 1,
|
||||
],
|
||||
BatterieRegler::registerwerte(
|
||||
BatterieRegler::TYP_HERSTELLERUNABHAENGIG,
|
||||
BatterieRegler::STEUERUNG_ENELIX,
|
||||
-1500
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
public function testGoodweRegisterwerte(): void
|
||||
{
|
||||
self::assertSame(
|
||||
['Leistung' => 750, 'Modus' => 11, 'Management' => 2],
|
||||
BatterieRegler::registerwerte(
|
||||
BatterieRegler::TYP_GOODWE,
|
||||
BatterieRegler::STEUERUNG_ENELIX,
|
||||
750
|
||||
)
|
||||
);
|
||||
self::assertSame(
|
||||
['Leistung' => 750, 'Modus' => 12, 'Management' => 2],
|
||||
BatterieRegler::registerwerte(
|
||||
BatterieRegler::TYP_GOODWE,
|
||||
BatterieRegler::STEUERUNG_ENELIX,
|
||||
-750
|
||||
)
|
||||
);
|
||||
self::assertSame(
|
||||
['Leistung' => 0, 'Management' => 1],
|
||||
BatterieRegler::registerwerte(
|
||||
BatterieRegler::TYP_GOODWE,
|
||||
BatterieRegler::STEUERUNG_WECHSELRICHTER,
|
||||
-750
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
public function testSolarEdgeRegisterwerte(): void
|
||||
{
|
||||
self::assertSame(
|
||||
[
|
||||
'Ladeleistung' => 0,
|
||||
'Entladeleistung' => 500,
|
||||
'Modus' => 4,
|
||||
'Management' => 4,
|
||||
],
|
||||
BatterieRegler::registerwerte(
|
||||
BatterieRegler::TYP_SOLAREDGE,
|
||||
BatterieRegler::STEUERUNG_ENELIX,
|
||||
-500
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
public function testSigenergySkaliertLeistungAufKilowatt(): void
|
||||
{
|
||||
self::assertSame(
|
||||
[
|
||||
'Ladeleistung' => 1.5,
|
||||
'Entladeleistung' => 0.0,
|
||||
'Modus' => 3,
|
||||
'Management' => 1,
|
||||
],
|
||||
BatterieRegler::registerwerte(
|
||||
BatterieRegler::TYP_SIGENERGY,
|
||||
BatterieRegler::STEUERUNG_ENELIX,
|
||||
1500
|
||||
)
|
||||
);
|
||||
self::assertSame(
|
||||
[
|
||||
'Ladeleistung' => 0.0,
|
||||
'Entladeleistung' => 1.5,
|
||||
'Modus' => 6,
|
||||
'Management' => 1,
|
||||
],
|
||||
BatterieRegler::registerwerte(
|
||||
BatterieRegler::TYP_SIGENERGY,
|
||||
BatterieRegler::STEUERUNG_ENELIX,
|
||||
-1500
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
public function testUngueltigeGrenzenWerdenAbgewiesen(): void
|
||||
{
|
||||
$this->expectException(InvalidArgumentException::class);
|
||||
|
||||
BatterieRegler::leistungsraster(-1.0, 1000.0);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user