feat(manager): Energieaufzeichnung und Visualisierungen integrieren
Tests / test (push) Successful in 47s
Tests / test (push) Successful in 47s
This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Belevo\EnelixEMS;
|
||||
|
||||
final class EnergieMessung
|
||||
{
|
||||
private const WATTSEKUNDEN_PRO_KWH = 3600000.0;
|
||||
|
||||
public static function hausleistung(float $pv, float $netz, float $batterie): float
|
||||
{
|
||||
return max(
|
||||
0.0,
|
||||
self::endlich($pv) + self::endlich($netz) - self::endlich($batterie)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array{PV: float, Haus: float, Netz: float, Batterie: float} $leistungen
|
||||
* @return array{
|
||||
* PVEnergie: float,
|
||||
* Hausenergie: float,
|
||||
* NetzbezugEnergie: float,
|
||||
* EinspeisungEnergie: float,
|
||||
* BatterieLadenEnergie: float,
|
||||
* BatterieEntladenEnergie: float
|
||||
* }
|
||||
*/
|
||||
public static function energieDeltas(array $leistungen, int $sekunden): array
|
||||
{
|
||||
$faktor = max(0, $sekunden) / self::WATTSEKUNDEN_PRO_KWH;
|
||||
$pv = self::endlich($leistungen['PV']);
|
||||
$haus = self::endlich($leistungen['Haus']);
|
||||
$netz = self::endlich($leistungen['Netz']);
|
||||
$batterie = self::endlich($leistungen['Batterie']);
|
||||
|
||||
return [
|
||||
'PVEnergie' => max(0.0, $pv) * $faktor,
|
||||
'Hausenergie' => max(0.0, $haus) * $faktor,
|
||||
'NetzbezugEnergie' => max(0.0, $netz) * $faktor,
|
||||
'EinspeisungEnergie' => max(0.0, -$netz) * $faktor,
|
||||
'BatterieLadenEnergie' => max(0.0, $batterie) * $faktor,
|
||||
'BatterieEntladenEnergie' => max(0.0, -$batterie) * $faktor,
|
||||
];
|
||||
}
|
||||
|
||||
private static function endlich(float $wert): float
|
||||
{
|
||||
return is_finite($wert) ? $wert : 0.0;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user