This commit is contained in:
@@ -39,8 +39,6 @@ class VerbraucherWarmwassererwaermer extends IPSModule implements VerbraucherSch
|
||||
'NachladenAktiv',
|
||||
'LegionellenbetriebAktiv',
|
||||
'LegioCounter',
|
||||
'Idle',
|
||||
'IdleCounter',
|
||||
];
|
||||
|
||||
public function Create(): void
|
||||
@@ -96,8 +94,6 @@ class VerbraucherWarmwassererwaermer extends IPSModule implements VerbraucherSch
|
||||
$this->RegisterAttributeBoolean('ZustandNachladenAktiv', false);
|
||||
$this->RegisterAttributeBoolean('ZustandLegionellenbetriebAktiv', false);
|
||||
$this->RegisterAttributeInteger('ZustandLegioCounter', 0);
|
||||
$this->RegisterAttributeBoolean('ZustandIdle', true);
|
||||
$this->RegisterAttributeInteger('ZustandIdleCounter', 0);
|
||||
|
||||
$this->RegisterTimer(
|
||||
'LastwechselFreigabe',
|
||||
@@ -497,8 +493,6 @@ class VerbraucherWarmwassererwaermer extends IPSModule implements VerbraucherSch
|
||||
$jetzt,
|
||||
$this->ReadPropertyInteger('LastwechselSperrzeit')
|
||||
);
|
||||
$this->setzeZustand('IdleCounter', $restzeit);
|
||||
$this->setzeZustand('Idle', $restzeit === 0);
|
||||
$this->SetTimerInterval('LastwechselFreigabe', $restzeit > 0 ? $restzeit * 1000 : 0);
|
||||
|
||||
return $restzeit;
|
||||
@@ -791,7 +785,6 @@ class VerbraucherWarmwassererwaermer extends IPSModule implements VerbraucherSch
|
||||
$this->SetValue('Maximaltemperatur', 60.0);
|
||||
$this->WriteAttributeFloat('ZustandLegionellentemperatur', 65.0);
|
||||
$this->setzeZustand('Leistungsquelle', Nachrichtenvertrag::LEISTUNGSQUELLE_BERECHNET);
|
||||
$this->setzeZustand('Idle', true);
|
||||
$this->WriteAttributeBoolean('InitialwerteGesetzt', true);
|
||||
}
|
||||
|
||||
@@ -842,6 +835,13 @@ class VerbraucherWarmwassererwaermer extends IPSModule implements VerbraucherSch
|
||||
|
||||
private function aktualisiereVariablen(): void
|
||||
{
|
||||
foreach (['Idle', 'IdleCounter'] as $ident) {
|
||||
$variablenID = @IPS_GetObjectIDByIdent($ident, $this->InstanceID);
|
||||
if (is_int($variablenID) && $variablenID > 0 && IPS_VariableExists($variablenID)) {
|
||||
$this->UnregisterVariable($ident);
|
||||
}
|
||||
}
|
||||
|
||||
foreach (self::DIAGNOSE_VARIABLEN as $ident) {
|
||||
if ($ident === 'Leistungsquelle') {
|
||||
continue;
|
||||
@@ -865,8 +865,6 @@ class VerbraucherWarmwassererwaermer extends IPSModule implements VerbraucherSch
|
||||
220
|
||||
);
|
||||
$this->RegisterVariableInteger('LegioCounter', 'Zeit seit Legionellenabschluss', '', 230);
|
||||
$this->RegisterVariableBoolean('Idle', 'Lastwechsel freigegeben', '~Switch', 240);
|
||||
$this->RegisterVariableInteger('IdleCounter', 'Restzeit bis Lastwechsel', '', 250);
|
||||
|
||||
foreach (self::DIAGNOSE_VARIABLEN as $ident) {
|
||||
$wert = $ident === 'Leistungsquelle'
|
||||
@@ -923,13 +921,11 @@ class VerbraucherWarmwassererwaermer extends IPSModule implements VerbraucherSch
|
||||
'TemperaturGueltig' => 'ZustandTemperaturGueltig',
|
||||
'NachladenAktiv' => 'ZustandNachladenAktiv',
|
||||
'LegionellenbetriebAktiv' => 'ZustandLegionellenbetriebAktiv',
|
||||
'Idle' => 'ZustandIdle',
|
||||
];
|
||||
$integerAttribute = [
|
||||
'Sollleistung' => 'ZustandSollleistung',
|
||||
'AktiveStufe' => 'ZustandAktiveStufe',
|
||||
'LegioCounter' => 'ZustandLegioCounter',
|
||||
'IdleCounter' => 'ZustandIdleCounter',
|
||||
];
|
||||
$floatAttribute = [
|
||||
'Istleistung' => 'ZustandIstleistung',
|
||||
@@ -972,13 +968,11 @@ class VerbraucherWarmwassererwaermer extends IPSModule implements VerbraucherSch
|
||||
'TemperaturGueltig' => 'ZustandTemperaturGueltig',
|
||||
'NachladenAktiv' => 'ZustandNachladenAktiv',
|
||||
'LegionellenbetriebAktiv' => 'ZustandLegionellenbetriebAktiv',
|
||||
'Idle' => 'ZustandIdle',
|
||||
];
|
||||
$integerAttribute = [
|
||||
'Sollleistung' => 'ZustandSollleistung',
|
||||
'AktiveStufe' => 'ZustandAktiveStufe',
|
||||
'LegioCounter' => 'ZustandLegioCounter',
|
||||
'IdleCounter' => 'ZustandIdleCounter',
|
||||
];
|
||||
$floatAttribute = [
|
||||
'Istleistung' => 'ZustandIstleistung',
|
||||
|
||||
@@ -119,7 +119,10 @@ Symcon-Datenpunkte werden durch `VerbraucherBasisTrait` registriert.
|
||||
`Leistungswerte_W` und `Zustand` werden intern gehalten und direkt in die
|
||||
Nachricht geschrieben. Dafür werden keine zusätzlichen Symcon-Variablen
|
||||
angelegt. Der gemeinsame Zustandseintrag `Sollleistung_W` wird durch die Basis
|
||||
ergänzt.
|
||||
ergänzt. Während einer Lastwechselsperre meldet ein Verbraucher
|
||||
`AenderungMoeglich` als `false` und beschränkt `Leistungswerte_W` auf die aktuell
|
||||
gehaltene Leistung. Separate Felder wie `Idle` oder `IdleCounter` sind nicht
|
||||
Bestandteil des Vertrags.
|
||||
|
||||
## Zeitverhalten
|
||||
|
||||
|
||||
@@ -26,8 +26,8 @@ nicht pruefbare Annahmen des Altmoduls.
|
||||
| `Legionellentemperatur` | `Legionellentemperatur` |
|
||||
| `Boilertemperatur` | `Boilertemperatur` |
|
||||
| `LegioCounter` | `LegioCounter` |
|
||||
| `Idle` | `Idle` |
|
||||
| `IdleCounter` | `IdleCounter` |
|
||||
| `Idle` | entfaellt; Freigabe ueber `AenderungMoeglich` |
|
||||
| `IdleCounter` | entfaellt; Sperre ueber `Leistungswerte_W` und `AenderungMoeglich` |
|
||||
| `Aktuelle_Leistung` | gemeinsames `Istleistung` |
|
||||
| `Bezogene_Energie` | `BezogeneEnergie` in kWh |
|
||||
| `PV_Prio` | Property `PrioritaetPV` |
|
||||
|
||||
@@ -60,7 +60,7 @@ die Variable geloescht; ihr letzter Wert bleibt intern fuer ein spaeteres
|
||||
Wiedereinschalten erhalten. Die Reihenfolge
|
||||
`Mindesttemperatur < Maximaltemperatur <= Legionellentemperatur` ist zwingend.
|
||||
|
||||
Mit `DiagnosevariablenAnzeigen` werden diese 16 Variablen angelegt:
|
||||
Mit `DiagnosevariablenAnzeigen` werden diese 14 Variablen angelegt:
|
||||
|
||||
- `Istleistung`
|
||||
- `Leistungsquelle`
|
||||
@@ -76,11 +76,11 @@ Mit `DiagnosevariablenAnzeigen` werden diese 16 Variablen angelegt:
|
||||
- `NachladenAktiv`
|
||||
- `LegionellenbetriebAktiv`
|
||||
- `LegioCounter`
|
||||
- `Idle` (Lastwechsel freigegeben)
|
||||
- `IdleCounter` (verbleibende Sperrzeit in Sekunden)
|
||||
|
||||
Die Regelung und Managerkommunikation verwenden fuer diese Werte eine interne
|
||||
Zustandsablage und funktionieren auch ohne angelegte Diagnosevariablen weiter.
|
||||
Die Lastwechselsperre wird ausschliesslich ueber die Schnittstellenfelder
|
||||
`AenderungMoeglich` und `Leistungswerte_W` abgebildet.
|
||||
|
||||
## Managerkommunikation
|
||||
|
||||
|
||||
@@ -54,6 +54,11 @@ final class WarmwassererwaermerModulstrukturTest extends TestCase
|
||||
self::assertStringNotContainsString("ReadPropertyInteger('Interval')", $inhalt);
|
||||
self::assertStringContainsString("'LastwechselFreigabe'", $inhalt);
|
||||
self::assertStringContainsString('LetzteTemperaturberechnung', $inhalt);
|
||||
self::assertStringContainsString('$angebot = [$aktuelleLeistung];', $inhalt);
|
||||
self::assertStringNotContainsString("RegisterVariableBoolean('Idle'", $inhalt);
|
||||
self::assertStringNotContainsString("RegisterVariableInteger('IdleCounter'", $inhalt);
|
||||
self::assertStringNotContainsString('ZustandIdle', $inhalt);
|
||||
self::assertStringContainsString("['Idle', 'IdleCounter']", $inhalt);
|
||||
}
|
||||
|
||||
public function testModulVerwendetAusschliesslichDenVertrag30(): void
|
||||
@@ -69,14 +74,14 @@ final class WarmwassererwaermerModulstrukturTest extends TestCase
|
||||
self::assertStringContainsString("'VerbraucherZuordnung'", $inhalt);
|
||||
}
|
||||
|
||||
public function testSechzehnDiagnosevariablenWerdenBedarfsgesteuertAngelegtUndGeloescht(): void
|
||||
public function testVierzehnDiagnosevariablenWerdenBedarfsgesteuertAngelegtUndGeloescht(): void
|
||||
{
|
||||
$inhalt = (string) file_get_contents(self::MODULPFAD . 'module.php');
|
||||
preg_match('/private const DIAGNOSE_VARIABLEN = \[(.*?)\];/s', $inhalt, $treffer);
|
||||
self::assertArrayHasKey(1, $treffer);
|
||||
preg_match_all('/\'([^\']+)\'/', $treffer[1], $variablen);
|
||||
|
||||
self::assertCount(16, $variablen[1]);
|
||||
self::assertCount(14, $variablen[1]);
|
||||
foreach (['Istleistung', 'Sollleistung', 'Stoerung', 'Stoertext', 'AktiveStufe', 'BezogeneEnergie'] as $ident) {
|
||||
self::assertContains($ident, $variablen[1]);
|
||||
self::assertStringContainsString("Zustand" . $ident, $inhalt);
|
||||
|
||||
Reference in New Issue
Block a user