Hallo zusammen,
da mir vor einiger Zeit an der Zeitschaltuhr der Zirkulationspumpe mehrere kleine Beinchen abgebrochen sind habe ich die Zirkulationspumpe an einen HM-LC-SW1-FM Unterputzschalter angeschlossen.
Der Unterputzschalter bekommt seinen Strom von der Gastherme.
Den Unterputzschalter schalte ich mit einem DOIF:
([05:00:00-23:00:00]) (set ZirkulationsPumpe on)
DOELSE (set ZirkulationsPumpe off)
Also gaaaanz einfach.
Da wir im Moment einige Heizungsrohre und Wasserleitungen erneuern muß des öfteren die Gastherme ausgeschaltet werden. Somit bekommt der Unterputzschalter auch keinen Strom.
Wird die Gastherme wieder eingeschaltet bleibt der Unterputzschalter AUS.
Ich weiß leider nicht was bzw. wie ich das DOIF einstellen soll damit das DOIF den Unterpzuschalter in so einem Fall wieder einschaltet, natürlich nur in der angegebenen Zeit.
initialize bringt glaub ich nur etwas wenn Fhem auch von Stromausfall betroffen war soweit ich das verstanden habe.
Kann mir bitte da jemand helfen?
DANKE
Du könntest im Attribut startup prüfen ob der Zeitpunkt in der Zeitspanne liegt und den Schalter entsprechend setzen.
Es gibt neuerdings einige Möglichkeiten so etwas zu realisieren:
Entweder über das Attribut startup im FHEM-Modus:
attr ... startup set $SELF checkall
Nicht nur performanter, sondern auch eleganter, weil ohne zusätzliche Attribute ist die Lösung im neuen Perl-Modus:
DOIF init {if ([05:00-23:00]) {fhem"set ZirkulationsPumpe on"} else {fhem"set ZirkulationsPumpe off"}}
Der init-Block wird nicht nur durch die Zeittrigger getriggert, sondern auch beim Hochfahren des Systems ;)
Edit: Im FHEM-Modus musst du noch das Attribut initialize setzen, damit der alte Zustand zurückgesetzt wird, da du kein do always definiert hast. Im Perl-Modus ist das alles nicht nötig, weil es ohne Zustände arbeitet.
das hört sich gut an, aber ich mache bestimmt wieder etwas falsch.
defmod DOIF_ZirkulationsPumpe DOIF init {if ([05:00:00-23:00:00]) {fhem"set ZirkulationsPumpe on"} else {fhem"set ZirkulationsPumpe off"}}
setstate DOIF_ZirkulationsPumpe initialize
setstate DOIF_ZirkulationsPumpe 2018-09-21 19:47:43 block_init executed
setstate DOIF_ZirkulationsPumpe 2018-09-21 19:48:17 mode enabled
setstate DOIF_ZirkulationsPumpe 2018-09-21 19:48:17 state initialize
setstate DOIF_ZirkulationsPumpe 2018-09-21 19:47:43 timer_01_c01 22.09.2018 05:00:00
setstate DOIF_ZirkulationsPumpe 2018-09-21 19:47:43 timer_02_c01 21.09.2018 23:00:00
Das DOIF bleibt auf "initialize" und der Unterputzschalter wird NICHT eingeschaltet.
Hast du auch geguckt, ob die Pumpe läuft ;)
Im Perl-Modus wird der Status nicht gesetzt, wenn du den Status ändern willst, dann musst du den selbst setzen:
DOIF init {if ([05:00-23:00]) {fhem"set ZirkulationsPumpe on";set_Reading("state","Pumpe Läuft",1)} else {fhem"set ZirkulationsPumpe off";set_Reading("state","Pumpe aus",1)}}
???
mit "set ZirkulationsPumpe on" oder "set ZirkulationsPumpe off" solte sich doch der "state" der "ZirkulationsPumpe" (Device) ändern.
Das tut es aber nicht, die Zirkulationspumpe bleibt aus.
Zitat von: ms_steini am 21 September 2018, 20:56:58
???
mit "set ZirkulationsPumpe on" oder "set ZirkulationsPumpe off" solte sich doch der "state" der "ZirkulationsPumpe" (Device) ändern.
Das tut es aber nicht, die Zirkulationspumpe bleibt aus.
Klar der Status der Pumpe sollte sich schon ändern. Bei mir funktioniert diese Definition mit Dummys wie angegeben.
1) aktuelle DOIF-Version?
2) funktioniert "set ZirkulationsPumpe on" in der Kommandozeile?
3) list des DOIFs posten
File Rev Last Change
98_DOIF.pm 17373 2018-09-19 19:15:59Z Damian
doif.js 15546 2017-12-03 09:57:42Z Ellert
fhemweb.js 17371 2018-09-19 09:28:18Z rudolfkoenig
Internals:
DEF init {if ([05:00:00-23:00:00]) {fhem"set ZirkulationsPumpe on"} else {fhem"set ZirkulationsPumpe off"}}
MODEL Perl
NAME DOIF_ZirkulationsPumpe
NR 73
NTFY_ORDER 50-DOIF_ZirkulationsPumpe
STATE initialized
TYPE DOIF
READINGS:
2018-09-22 04:41:10 block_init executed
2018-09-22 04:41:10 mode enabled
2018-09-22 04:41:10 state initialized
2018-09-22 04:41:10 timer_01_c01 22.09.2018 05:00:00
2018-09-22 04:41:10 timer_02_c01 22.09.2018 23:00:00
Regex:
condition:
0 if (DOIF_time($hash,0,1,$wday,$hms)) {fhem"set ZirkulationsPumpe on"} else {fhem"set ZirkulationsPumpe off"}
days:
devices:
helper:
globalinit 1
last_timer 2
sleeptimer -1
internals:
interval:
0 -1
1 0
intervalfunc:
itimer:
localtime:
0 1537585200
1 1537650000
perlblock:
0 init
init 0
readings:
realtime:
0 05:00:00
1 23:00:00
time:
0 05:00:00
1 23:00:00
timeCond:
0 0
1 0
timer:
0 0
1 0
timers:
0 0 1
triggertime:
1537585200:
localtime 1537585200
hash:
1537650000:
localtime 1537650000
hash:
uiState:
uiTable:
Attributes:
DbLogExclude .*
alias Zirkulationspumpe von 05 bis 23 Uhr einschalten
devStateIcon on:general_an@#e56524 off:general_aus
eventMap cmd_1:on cmd_2:off
group Heizung
icon helper_doif
room Logik
webCmd :
Sollte da nicht einfach
https://wiki.fhem.de/wiki/HM-ES-PMSw1-Pl_Funk-Schaltaktor_1-fach_mit_Leistungsmessung#Aktor_nach_Stromausfall_automatisch_einschalten
helfen?
Ist doch ein normales Sicherheitsverhalten das der Aktor aus bleibt. Kann man aber über ein Register ändern. Zu mindest bei den Zwischensteckern mit Leistungsanzeige. Eventuell geht das beim Unterputz ja auch.
2018-09-22 04:41:10 block_init executed
Bedeutet, dass der Block ausgeführt wurde. Das Zeitintervall wurde sauber von DOIF erkannt, weil Zeittimer gesetzt wurden -> es ist kein DOIF-Problem.
Edit: 04:41:10 liegt außerhalb des Zeitintervalls -> fhem"set ZirkulationsPumpe off"
Wenn Dein Server ein Pi ohne RTC ist, stimmt evtl. die Uhrzeit nach dem Booten noch nicht?
Ciao, -MN
@CoolTux
Ja das geht, heißt "powerUpAction". Könnte ich zur Not nehmen....
@Morgennebel
hatte das heute morgen zum testen auf 04:30 statt 05:00 gesetzt, daher "04:41:10 block_init executed" die Uhrzeit im PI stimmt schon.
@Damian
ja wenn alles normal läuft funktioniert es ja auch. Morgens um 05:00 wird der Schaltaktor eingeschaltet und abend um 23:00 wieder aus. Alles gut
Ich möchte nochmal festhalten. Der Schaltaktor hat einen Stromausfall um 15:00 Uhr. "FHEM NICHT"
Und um 15:30 Uhr wird der Strom wieder eingeschaltet. Der Schaltaktor bleibt ausgeschaltet und wird NICHT vom DOIF wieder eingeschaltet.
Wenn FHEM vom Stromausfall betroffen ist, schaltet das DOIF den Schaltaktor auch wieder ein.
Zitat von: ms_steini am 22 September 2018, 10:43:59
Ich möchte nochmal festhalten. Der Schaltaktor hat einen Stromausfall um 15:00 Uhr. "FHEM NICHT"
Und um 15:30 Uhr wird der Strom wieder eingeschaltet. Der Schaltaktor bleibt ausgeschaltet und wird NICHT vom DOIF wieder eingeschaltet.
Wenn FHEM vom Stromausfall betroffen ist, schaltet das DOIF den Schaltaktor auch wieder ein.
OK. Dann funktioniert ja alles wie programmiert. Wenn der Schaltaktor Strom verliert und FHEM
nicht, dann musst du dir natürlich einen Trigger überlegen und im DOIF-Device einbauen, der in diesem Fall dein DOIF-Device triggert - das kann das Modul nun mal nicht von alleine wissen :)
Mal so als Tipp:
Die HM-LC-SW1-FM haben ein Reading namens powerOn. Das wird - wenig überraschend - mit einem Timestamp des letzten powerOn befüllt.
Zitat von: Christoph Morrison am 22 September 2018, 10:55:10
Mal so als Tipp:
Die HM-LC-SW1-FM haben ein Reading namens powerOn. Das wird - wenig überraschend - mit einem Timestamp des letzten powerOn befüllt.
Wenn er ein Event beim Einschalten produziert und immer was drin steht, dann reicht schon:
init {if ([05:00:00-23:00:00] and [ZirkulationsPumpe:powerOn]) {fhem"set ZirkulationsPumpe on"} else {fhem"set ZirkulationsPumpe off"}}
Männer ihr seit klasse....
nachdem ich das Reading "powerOn" mit in "event-on-change-reading" aufgenommen habe hats auch funktioniert.
BESTEN DANK