Juten Abend an alle,
ich habe eine Taupunktsteuerung für meine Garage. Funktioniert auch soweit alles. Ich möchte allerdings das zu jeder vollen Stunde das Fenster und der Lüfter eingeschaltet wird und zu jeder halben Stunde wieder ausgeschaltet wird.
Nun zu meinen Problem. Ab und zu kommt es vor das beide Aktoren geschaltet und danach gleich wieder abgeschaltet werden. Vor FHEM haben ich mit linknx gearbeitet. Dort ging das so ähnlich wie hier bei FHEM. Kann es sein das FHEM bei jeder vollen Stunde auch die halbe Stunde rechnet und nicht nur die Minuten 00:30 oder mach ich bei dem Programm was falsch?
define garage_lueften_ein at +*01:00 {\
my $tpa1 = Value("taupunkt_auto");;\
my $tpa2 = ReadingsVal("fhem_tp_garage",'state',0) - 5;;\
my $tpa3 = ReadingsVal("wh_tp_aussen",'state',0);;\
if ($tpa1 eq "on" && $tpa3 <= $tpa2) {\
fhem "set EIB_1000 auf ;; set EIB_1100 on"\
}\
}
attr garage_lueften_ein alignTime 00:00
define garage_lueften_aus at +*00:30 {\
my $tpaa1 = Value("taupunkt_auto");;\
my $tpaa2 = Value("EIB_1000");;\
my $tpaa3 = Value("EIB_1100");;\
if ($tpaa1 eq "on" && $tpaa2 eq "auf" && $tpaa3 eq "on") {\
fhem "set EIB_1000 zu ;; set EIB_1100 off"\
}\
}
attr garage_lueften_aus alignTime 00:00
DANKE
Gruß
Jörg
Du könntest das auch einfacher mit einem DOIF lösen. In der Commandref findest du entsprechende Beispiele.
Grüße
igami
Hallo igami,
ok danke für den Tipp. Komm gerade nicht dahinter was Du genau meist. Meinst Du nach einschalten zur vollen Stunde für 30 Minuten einen wait auszuführen?
Gruß
Jörg
Zitat
Zeitangaben nach Zeitraster ausgerichtet back
Das Format lautet: [:MM] MM sind Minutenangaben zwischen 00 und 59.
Anwendungsbeispiel: Viertelstunden-Gong
define di_gong DOIF ([:00])
({system ("mplayer /opt/fhem/Sound/BigBen_00.mp3 -volume 90 −really−quiet &")})
DOELSEIF ([:15])
({system ("mplayer /opt/fhem/Sound/BigBen_15.mp3 -volume 90 −really−quiet &")})
DOELSEIF ([:30])
({system ("mplayer /opt/fhem/Sound/BigBen_30.mp3 -volume 90 −really−quiet &")})
DOELSEIF ([:45])
({system ("mplayer /opt/fhem/Sound/BigBen_45.mp3 -volume 90 −really−quiet &")})
Daraus ergibt sich dann
define garage_lueften DOIF
([:00] and <Taupunktabfrage>)(
set <lüften>
)
DOELSEIF
([:30] and <Taupunktabfrage>)(
set <nicht mehr lüften>
)
Grüße
igami
Hallo Groej!
Das erste at wird jede Stunde aufgerufen, das zweite jede halbe Stunde, also auch zur vollen Stunde.
Das bedeutet, es hängt von der Aufrufreihenfolge seitens FHEM ab, was passiert.
Nehmen wir einmal an, "garage_lueften_ein" passiert zuerst und die Bedingungen sind erfüllt, dann würden deine beiden Aktoren eingeschaltet.
Würde dann danach gleich "garage_lueften_aus" ausgeführt, würden deine beiden Aktoren auf sofort wieder ausgeschaltet.
Wenn du deinen Code in dieser Weise beibehalten willst, musst du noch einen Mechanismus implementieren, der dieses Verhalten beim Ausschalten berücksichtigt. Allerdings bleibt die Unsicherheit, welches at von FHEM zuerst abgearbeitet wird.
Daher ist der von igami vorgeschlagene Ansatz wohl der bessere. Informiere dich über die DOIF Funktionalität. Das ist sicherlich nicht ganz so einfach, wird sich aber auszahlen, da DOIF sehr mächtig ist. Dazu kann ich aber nicht viel sagen, da ich meine fhem.cfg eintarge minimal halte und lieber in Perl Module auslagere
Ich kann dir noch erzählen, welchen Weg ich einschlagen würde:
Ich würde das zweite at dynamisch programmieren und zwar erst in dem Codeteil von "garage_lueften_ein", bei dem beide Aktoren geschaltet werden. Dann natürlich nicht periodisch, sondern einmalig.
Grüße
James
Moin,
danke für eure Tipps. Ich werd das die Tage mal ausprobieren ob ich das hin bekomme. Heute wird erstmal das Rad bewegt bei dem Wetter :).
Schönen Sonntag
Jörg
ZitatKann es sein das FHEM bei jeder vollen Stunde auch die halbe Stunde rechnet und nicht nur die Minuten 00:30 oder mach ich bei dem Programm was falsch?
Ich tippe auf einen Denkfehler beim zweiten at: der sollte mAn mit +*01:00 definiert sein, mit aligntime 00:30.
Moin Rudolf,
das probier ich mal schnell. Werd ja dann sehen heute Abend was passiert ist. Danke.
Gruß
Jörg
ZitatIch tippe auf einen Denkfehler beim zweiten at: der sollte mAn mit +*01:00 definiert sein, mit aligntime 00:30.
Interessant, wieder etwas gelernt, kannte dieses Attribut bislang nicht.
Allerdings denke ich, dass es auch für das erste at gesetzt werden muss und zwar auf die volle Stunde: aligntime 00:00.
Was es wohl ist, wenn ich korrekt geschaut habe.
Stimmt, hab ich übersehen.
Nabend,
ich hab Rudolfs Tipp als erstes ausprobiert weil es auch am einfachsten war. Bis jetzt hatte ich heute kein an- und sofortiges ausschalten der Aktoren.
Ich schließe das Thema erstmal und beobachte die nächsten Tage weiter.
Danke noch mal an alle.
Gruß
Jörg