Hallo,
im Pufferspeicher habe ich einen 3 Phasen Heizstab eingebaut. Die 3 Phasen werden über Relais gesteuert und die Relais über einen Homematik 4-fach Schalter.
Soweit funktioniert die ganze Kiste schon mal.
Nun möchte ich ja nun anhand der Daten, die ich von der Photovoltaikanlage, der Batterie und dem Pufferspeicher bekomme, die 3 Phasen steuern.
Ich habe mir da mal eine If elsif Anweisung gebastelt und stehe nun auf dem schlauch da es nicht ganz so funktioniert wie ich es mir vorgestellt habe und hoffe da auf eure Hilfe.
Was soll passieren:
Ich bekomme neue Daten von der Batterie und triggere das notify.
Ich überprüfe den eingestellten Mode im FHEM "Full oder only_over_60%"
Wenn ich mehr als 1400W Einspeise (bekomme ich von der Batterie) und (die Batterie zu mehr als 98% geladen ist oder der Ladestrom höher als 3000W ist oder die Einspeisung höher als 3000W ist) und die Entladeleistung unter 150W ist und das Wasser kälter als 80°C ist,
soll die erste Phase geschalten werden.
Ausschalten:
Einspeisung kleiner 300W oder Entladeleistung größer 150W oder das Wasser mehr als 83°C hat
oder
die Batterie weniger als 98% geladen ist und die Ladeleistung unter 2900W ist.
Irgendwie verhält sich hier meine Programmierung komisch.
define Phase1FULLNotify notify Einspeisung {\
if( (Value("Heizstab_Mode") eq "Full") &&\
(ReadingsVal("Einspeisung_Dummy","state","") gt "1400.0") && \
((ReadingsVal("Ladezustand_Dummy","state","") gt "98.0") || \
(ReadingsVal("Ladeleistung_Dummy","state","") gt "3000") || \
(ReadingsVal("Einspeisung_Dummy","state","") gt "3000.0")) && \
(ReadingsVal("Entladeleistung_Dummy","state","") le "150") &&\
(ReadingsVal("Warmwasser_Dummy", "state", "") le "80") &&\
(Value("Relais_1") ne "on") &&\
(Value("Relais_2") ne "on") &&\
(Value("Relais_3") ne "on")) \
{fhem("set Relais_1 on")} \
elsif((Value("Heizstab_Mode") eq "Full") &&\
((ReadingsVal("Einspeisung_Dummy","state","") lt "300.0") ||\
(ReadingsVal("Entladeleistung_Dummy","state","") gt "150") ||\
(ReadingsVal("Warmwasser_Dummy", "state", "") gt "83")) ||\
((ReadingsVal("Ladezustand_Dummy","state","") lt "98.0") &&\
(ReadingsVal("Ladeleistung_Dummy","state","") lt "2900")) &&\
(Value("Relais_1") eq "on") &&\
(Value("Relais_2") ne "on") &&\
(Value("Relais_3") ne "on")) \
{fhem("set Relais_1 off")}}
attr Phase1FULLNotify room Keller
könnt Ihr euch mal anschauen ob meine Logik so funktionieren kann?
Vielen Dank schonmal.
Hallo,
so die Auswertung an sich funktioniert mal soweit.
Nun habe ich aber ein weiteres Problem.
Jedesmal wenn das Notify ausgelöst wird und alle Relais aus geschalten sind, werden diese trotzdem erneut ausgeschalten.
Kann mir jemand helfen, wie ich das umgehen kann?
define Phase1FULLNotify notify Einspeisung {\
if( (Value("Heizstab_Mode") eq "Full") &&\
(ReadingsVal("Einspeisung","state","") >= 1400.0) && \
((ReadingsVal("SonnenBat_Ladezustand","state","") >= 98.0) || \
(ReadingsVal("SonnenBat_Ladeleistung","state","") >= 3000) || \
(ReadingsVal("Einspeisung","state","") >= 3000.0)) && \
(ReadingsVal("SonnenBat_Entladeleistung","state","") <= 150) &&\
(ReadingsVal("Viesmann","Temp-WarmWasser-Ist", "") <= 80) &&\
(Value("Relais_1") ne "on") &&\
(Value("Relais_2") ne "on") &&\
(Value("Relais_3") ne "on")) \
{fhem("set Relais_1 on")} \
else {if((Value("Heizstab_Mode") eq "Full") &&\
((ReadingsVal("Einspeisung","state","") <= 300.0) ||\
(ReadingsVal("SonnenBat_Entladeleistung","state","") >= 150) ||\
(ReadingsVal("Viesmann","Temp-WarmWasser-Ist", "") >= 83)) ||\
((ReadingsVal("SonnenBat_Ladezustand","state","") < 98.0) &&\
(ReadingsVal("SonnenBat_Ladeleistung","state","") < 1000)) &&\
(Value("Relais_1") eq "on") &&\
(Value("Relais_2") ne "on") &&\
(Value("Relais_3") ne "on")) \
{fhem("set Relais_1 off")}}}
attr Phase1FULLNotify room Keller