157 lines
5.4 KiB
PHP
157 lines
5.4 KiB
PHP
<?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,
|
|
]], 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::assertArrayNotHasKey('acExportLimitKw', $topologie['inverters'][0]);
|
|
self::assertArrayNotHasKey('acImportLimitKw', $topologie['inverters'][0]);
|
|
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'
|
|
);
|
|
}
|
|
}
|