Add opt-in SDL measurement sources and independent visualization toggles. Exclude balancing power from household telemetry and new household energy. Preserve custom views and cover measurement, migration and Symcon 8.0 behavior.
This commit is contained in:
@@ -4,6 +4,9 @@ declare(strict_types=1);
|
||||
|
||||
namespace Belevo\EnelixEMS;
|
||||
|
||||
use RuntimeException;
|
||||
use Throwable;
|
||||
|
||||
trait ManagerEnergieTrait
|
||||
{
|
||||
private function konfiguriereEnergiearchiv(): void
|
||||
@@ -23,9 +26,13 @@ trait ManagerEnergieTrait
|
||||
);
|
||||
foreach (self::LEISTUNGS_VARIABLEN as $ident) {
|
||||
$variableID = $this->GetIDForIdent($ident);
|
||||
AC_SetLoggingStatus($archivID, $variableID, $aktiv);
|
||||
$loggen = $aktiv && (!str_starts_with($ident, 'SDL') || $this->ReadPropertyBoolean('SDLAktiv'))
|
||||
&& ($ident !== 'SDLSOCArchiv' || $this->ReadPropertyInteger('SDLSOCVariableID') > 0);
|
||||
if (!$this->setzeArchivLogging($archivID, $variableID, $loggen)) {
|
||||
continue;
|
||||
}
|
||||
AC_SetAggregationType($archivID, $variableID, 0);
|
||||
AC_SetGraphStatus($archivID, $variableID, $aktiv);
|
||||
AC_SetGraphStatus($archivID, $variableID, $loggen);
|
||||
$regeln = [-1 => $leistungstyp];
|
||||
$loeschen = $this->ReadPropertyInteger('LeistungLoeschenMonate');
|
||||
if ($loeschen > 0) {
|
||||
@@ -38,7 +45,9 @@ trait ManagerEnergieTrait
|
||||
|
||||
foreach (self::ENERGIE_VARIABLEN as $ident) {
|
||||
$variableID = $this->GetIDForIdent($ident);
|
||||
AC_SetLoggingStatus($archivID, $variableID, $aktiv);
|
||||
if (!$this->setzeArchivLogging($archivID, $variableID, $aktiv)) {
|
||||
continue;
|
||||
}
|
||||
AC_SetAggregationType($archivID, $variableID, 1);
|
||||
AC_SetGraphStatus($archivID, $variableID, $aktiv);
|
||||
$regeln = [-1 => $energietyp];
|
||||
@@ -66,7 +75,9 @@ trait ManagerEnergieTrait
|
||||
$istEnergie = str_contains($ident, 'Energie')
|
||||
|| str_contains($ident, 'BatterieLaden_')
|
||||
|| str_contains($ident, 'BatterieEntladen_');
|
||||
AC_SetLoggingStatus($archivID, $variableID, $aktiv);
|
||||
if (!$this->setzeArchivLogging($archivID, $variableID, $aktiv)) {
|
||||
continue;
|
||||
}
|
||||
AC_SetAggregationType($archivID, $variableID, $istEnergie ? 1 : 0);
|
||||
AC_SetGraphStatus($archivID, $variableID, $aktiv);
|
||||
$regeln = [-1 => $istEnergie ? $energietyp : $leistungstyp];
|
||||
@@ -93,6 +104,17 @@ trait ManagerEnergieTrait
|
||||
}
|
||||
}
|
||||
|
||||
private function setzeArchivLogging(int $archivID, int $variableID, bool $aktiv): bool
|
||||
{
|
||||
// Archiv-Metadaten sind nur bei aktivierter Aufzeichnung aenderbar.
|
||||
if (!$aktiv && AC_GetLoggingStatus($archivID, $variableID)) {
|
||||
AC_SetGraphStatus($archivID, $variableID, false);
|
||||
}
|
||||
AC_SetLoggingStatus($archivID, $variableID, $aktiv);
|
||||
|
||||
return $aktiv;
|
||||
}
|
||||
|
||||
/** @param array<int, int> $regeln */
|
||||
private function setzeVerdichtung(int $archivID, int $variableID, array $regeln): bool
|
||||
{
|
||||
@@ -292,6 +314,7 @@ trait ManagerEnergieTrait
|
||||
}
|
||||
if (!$neuErzeugen) {
|
||||
$this->visualisierungsKonfiguration('EnergieflussKonfiguration');
|
||||
$this->synchronisiereSDLEnergiefluss($instanzID);
|
||||
IPS_SetHidden($instanzID, false);
|
||||
$this->aktualisiereEnergieflusswerte();
|
||||
|
||||
@@ -374,6 +397,7 @@ trait ManagerEnergieTrait
|
||||
IPS_SetProperty($instanzID, 'Restrictions', '[]');
|
||||
IPS_ApplyChanges($instanzID);
|
||||
$this->WriteAttributeBoolean('EnergieflussNeuErzeugen', false);
|
||||
$this->synchronisiereSDLEnergiefluss($instanzID, true);
|
||||
$this->aktualisiereEnergieflusswerte($verbraucher);
|
||||
|
||||
return 'Der Energiefluss wurde erstellt oder aktualisiert.';
|
||||
@@ -564,8 +588,17 @@ trait ManagerEnergieTrait
|
||||
);
|
||||
$this->setzeEnergieflussLeistungswert(
|
||||
'EnergieflussBatterie',
|
||||
$leistungen['Batterie']
|
||||
$leistungen['Batterie'] + ($this->sdlAnzeigen('SDLEnergieflussAnzeigen') ? 0.0 : $leistungen['SDL'])
|
||||
);
|
||||
$this->setzeEnergieflussLeistungswert('EnergieflussSDL', $leistungen['SDL']);
|
||||
$soc = $this->aktuelleSDLSOC();
|
||||
if ($soc !== null) {
|
||||
$this->SetValue('SDLSOCArchiv', $soc);
|
||||
}
|
||||
$flussID = $this->findeUnterobjekt('Energiefluss');
|
||||
if ($flussID > 0) {
|
||||
$this->synchronisiereSDLEnergiefluss($flussID);
|
||||
}
|
||||
}
|
||||
|
||||
private function setzeEnergieflussLeistungswert(string $ident, float $watt): void
|
||||
@@ -742,8 +775,10 @@ trait ManagerEnergieTrait
|
||||
);
|
||||
}
|
||||
|
||||
$this->erstelleDiagramm('Leistungsdiagramm', 'Leistungen', $leistung, 510);
|
||||
$this->erstelleDiagramm('Energiediagramm', 'Energien', $energie, 520);
|
||||
$leistungID = $this->erstelleDiagramm('Leistungsdiagramm', 'Leistungen', $leistung, 510);
|
||||
$energieID = $this->erstelleDiagramm('Energiediagramm', 'Energien', $energie, 520);
|
||||
$this->synchronisiereSDLDiagramm($leistungID, false);
|
||||
$this->synchronisiereSDLDiagramm($energieID, true);
|
||||
|
||||
return 'Die Diagramme Leistungen und Energien wurden erstellt oder aktualisiert.';
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user