feat: Anlagentopologie im Manager abbilden
This commit is contained in:
@@ -0,0 +1,156 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Belevo\EnelixEMS\Tests;
|
||||
|
||||
use Belevo\EnelixEMS\Anlagentopologie;
|
||||
use InvalidArgumentException;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
final class AnlagentopologieTest extends TestCase
|
||||
{
|
||||
public function testHybridwechselrichterVerknuepftPvUndBatterieMitGemeinsamerAcGrenze(): void
|
||||
{
|
||||
$topologie = Anlagentopologie::ausJson(
|
||||
json_encode([[
|
||||
'ID' => 'hybrid-1',
|
||||
'Name' => 'Hybrid Ost',
|
||||
'Typ' => 'hybrid',
|
||||
'ACNennleistung_kW' => 10.0,
|
||||
'ACEinspeisegrenze_kW' => 8.0,
|
||||
'ACBezugsgrenze_kW' => 0.0,
|
||||
]], JSON_THROW_ON_ERROR),
|
||||
json_encode([
|
||||
[
|
||||
'ID' => 'pv-ost',
|
||||
'Name' => 'Ostdach',
|
||||
'DCLeistung_kWp' => 6.4,
|
||||
'Neigung_Grad' => 25.0,
|
||||
'Azimut_Grad' => -90.0,
|
||||
'WechselrichterID' => 'hybrid-1',
|
||||
'MPPT' => 'A',
|
||||
'Modulanzahl' => 16,
|
||||
'Modulleistung_Wp' => 400.0,
|
||||
],
|
||||
[
|
||||
'ID' => 'pv-west',
|
||||
'Name' => 'Westdach',
|
||||
'DCLeistung_kWp' => 6.4,
|
||||
'Neigung_Grad' => 25.0,
|
||||
'Azimut_Grad' => 90.0,
|
||||
'WechselrichterID' => 'hybrid-1',
|
||||
'MPPT' => 'B',
|
||||
'Modulanzahl' => 16,
|
||||
'Modulleistung_Wp' => 400.0,
|
||||
],
|
||||
], JSON_THROW_ON_ERROR),
|
||||
json_encode([[
|
||||
'ID' => 'bat-1',
|
||||
'Name' => 'Hausspeicher',
|
||||
'Nennkapazitaet_kWh' => 13.5,
|
||||
'Nutzkapazitaet_kWh' => 12.8,
|
||||
'MaxLadeleistung_kW' => 5.0,
|
||||
'MaxEntladeleistung_kW' => 5.0,
|
||||
'WechselrichterID' => 'hybrid-1',
|
||||
'Kopplung' => 'hybrid',
|
||||
]], JSON_THROW_ON_ERROR),
|
||||
'2a518707-8d62-4d97-82ce-606c95726500'
|
||||
);
|
||||
|
||||
self::assertSame(Anlagentopologie::VERSION, $topologie['version']);
|
||||
self::assertSame(12.8, $topologie['summary']['pvDcKwp']);
|
||||
self::assertSame(10.0, $topologie['summary']['pvAcKw']);
|
||||
self::assertSame(12.8, $topologie['summary']['usableBatteryKwh']);
|
||||
self::assertSame([[
|
||||
'inverterId' => 'hybrid-1',
|
||||
'acRatedKw' => 10.0,
|
||||
'pvArrayIds' => ['pv-ost', 'pv-west'],
|
||||
'batteryIds' => ['bat-1'],
|
||||
]], $topologie['sharedAcLimits']);
|
||||
}
|
||||
|
||||
public function testLeereTopologieBleibtFuerBestandsinstallationenGueltig(): void
|
||||
{
|
||||
$topologie = Anlagentopologie::ausJson(
|
||||
'[]',
|
||||
'[]',
|
||||
'[]',
|
||||
'2a518707-8d62-4d97-82ce-606c95726500'
|
||||
);
|
||||
|
||||
self::assertSame([], $topologie['inverters']);
|
||||
self::assertSame([], $topologie['pvArrays']);
|
||||
self::assertSame([], $topologie['batteries']);
|
||||
self::assertSame(0.0, $topologie['summary']['pvDcKwp']);
|
||||
}
|
||||
|
||||
public function testPvFlaecheBenoetigtEinenVorhandenenPassendenWechselrichter(): void
|
||||
{
|
||||
$this->expectException(InvalidArgumentException::class);
|
||||
$this->expectExceptionMessage('referenzierter Wechselrichter ist nicht vorhanden');
|
||||
|
||||
Anlagentopologie::ausJson(
|
||||
'[]',
|
||||
json_encode([[
|
||||
'ID' => 'pv-1',
|
||||
'DCLeistung_kWp' => 5.0,
|
||||
'Neigung_Grad' => 30.0,
|
||||
'Azimut_Grad' => 0.0,
|
||||
'WechselrichterID' => 'wr-fehlt',
|
||||
]], JSON_THROW_ON_ERROR),
|
||||
'[]',
|
||||
'2a518707-8d62-4d97-82ce-606c95726500'
|
||||
);
|
||||
}
|
||||
|
||||
public function testDcBatterieBenoetigtEinenHybridwechselrichter(): void
|
||||
{
|
||||
$this->expectException(InvalidArgumentException::class);
|
||||
$this->expectExceptionMessage('DC- und Hybridkopplung');
|
||||
|
||||
Anlagentopologie::ausJson(
|
||||
json_encode([[
|
||||
'ID' => 'bat-wr',
|
||||
'Typ' => 'battery',
|
||||
'ACNennleistung_kW' => 5.0,
|
||||
]], JSON_THROW_ON_ERROR),
|
||||
'[]',
|
||||
json_encode([[
|
||||
'ID' => 'bat-1',
|
||||
'Nennkapazitaet_kWh' => 10.0,
|
||||
'Nutzkapazitaet_kWh' => 9.0,
|
||||
'MaxLadeleistung_kW' => 4.0,
|
||||
'MaxEntladeleistung_kW' => 4.0,
|
||||
'WechselrichterID' => 'bat-wr',
|
||||
'Kopplung' => 'dc',
|
||||
]], JSON_THROW_ON_ERROR),
|
||||
'2a518707-8d62-4d97-82ce-606c95726500'
|
||||
);
|
||||
}
|
||||
|
||||
public function testModuldatenMuessenGemeinsamGesetztWerden(): void
|
||||
{
|
||||
$this->expectException(InvalidArgumentException::class);
|
||||
$this->expectExceptionMessage('Modulanzahl und Modulleistung');
|
||||
|
||||
Anlagentopologie::ausJson(
|
||||
json_encode([[
|
||||
'ID' => 'pv-wr',
|
||||
'Typ' => 'pv',
|
||||
'ACNennleistung_kW' => 5.0,
|
||||
]], JSON_THROW_ON_ERROR),
|
||||
json_encode([[
|
||||
'ID' => 'pv-1',
|
||||
'DCLeistung_kWp' => 6.0,
|
||||
'Neigung_Grad' => 30.0,
|
||||
'Azimut_Grad' => 0.0,
|
||||
'WechselrichterID' => 'pv-wr',
|
||||
'Modulanzahl' => 15,
|
||||
'Modulleistung_Wp' => 0.0,
|
||||
]], JSON_THROW_ON_ERROR),
|
||||
'[]',
|
||||
'2a518707-8d62-4d97-82ce-606c95726500'
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user