DOIF schaltet nach Stromausfall nicht

Begonnen von ms_steini, 21 September 2018, 19:14:46

Vorheriges Thema - Nächstes Thema

ms_steini

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

Ellert

Du könntest im Attribut startup prüfen ob der Zeitpunkt in der Zeitspanne liegt und den Schalter entsprechend setzen.

Damian

#2
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.

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

ms_steini

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.

Damian

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)}}
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

ms_steini

???
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.

Damian

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
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

ms_steini

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     :

CoolTux

#8
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.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Damian

#9
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"
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Morgennebel

Wenn Dein Server ein Pi ohne RTC ist, stimmt evtl. die Uhrzeit nach dem Booten noch nicht?

Ciao, -MN
Einziger Spender an FHEM e.V. mit Dauerauftrag seit >= 24 Monaten

FHEM: MacMini/ESXi, 2-3 FHEM Instanzen produktiv
In-Use: STELLMOTOR, VALVES, PWM-PWMR, Xiaomi, Allergy, Proplanta, UWZ, MQTT,  Homematic, Luftsensor.info, ESP8266, ESERA

ms_steini

#11
@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.






Damian

#12
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 :)



Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Christoph Morrison

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.

Damian

#14
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"}}
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF