Hallo zusammen,
für meine Gartenbewässerung habe ich ein DOIF erstellt, dieses hat auch bis vor Kurzem perfekt funktioniert.
Seit einigen Tagen habe ich aber Aussetzer und ich finde das Problem nicht.
Es wird nicht automatisch ausgelöst, wenn ich es bemerke, passe ich die Urzeit an und es wird ausgelöst.
Die einzige Änderung die ich in den letzten Tagen gemacht habe, war das hinzufügen von den Statusmeldungen über Telegramm bei allen Zuständen, vorher hatte ich es nur bei "keine Bewaesserung".
Das Doif sieht folgendermaßen aus:
([06:10] and
[?SommerWinterzeit:state] =~ "Sommer" and
[?WH1080:statTemperatureDayMaxLast] > 20 and
[?WH1080:statRainDay] < 1 and
[?WH1080:statRainDayLast] < 5 and
[?Proplanta:fc0_rain] < 2 and
[?Proplanta:fc0_tempMax] > 20 and
[?Proplanta:fc0_tempMax] < 25 and
[?Proplanta:fc0_sun] > 49)
(set teleBot message Bewaesserung kurz aktiv\n
Jahreszeit: [SommerWinterzeit:state]\n
Hoechsttemperatur gestern: [WH1080:statTemperatureDayMaxLast]°C\n
Regenmenge heute: [WH1080:statRainDay] l/m²\n
Regenmenge gestern: [WH1080:statRainDayLast] l/m²\n
Prognose Regen heute: [Proplanta:fc0_rain] l/m²\n
Prognose MaxTemp heute: [Proplanta:fc0_tempMax]°C\n
Prognose Sonnenschein heute: [Proplanta:fc0_sun]%\n
Zeit seit letzter Bewaesserung: \n
{(sprintf("%d Tage %02d:%02d:%02d",SYSMON_decode_time_diff(ReadingsAge("Bewaesserung", "state", 0))))}, set Bewaesserung 10)
DOELSEIF
([06:10] and
[?SommerWinterzeit:state] =~ "Sommer" and
[?WH1080:statTemperatureDayMaxLast] > 20 and
[?WH1080:statRainDay] < 1 and
[?WH1080:statRainDayLast] < 3 and
[?Proplanta:fc0_rain] < 2 and
[?Proplanta:fc0_tempMax] >= 25 and
[?Proplanta:fc0_tempMax] <= 29 and
[?Proplanta:fc0_sun] > 49)
(set teleBot message Bewaesserung mittel aktiv\n
Jahreszeit: [SommerWinterzeit:state]\n
Hoechsttemperatur gestern: [WH1080:statTemperatureDayMaxLast]°C\n
Regenmenge heute: [WH1080:statRainDay] l/m²\n
Regenmenge gestern: [WH1080:statRainDayLast] l/m²\n
Prognose Regen heute: [Proplanta:fc0_rain] l/m²\n
Prognose MaxTemp heute: [Proplanta:fc0_tempMax]°C\n
Prognose Sonnenschein heute: [Proplanta:fc0_sun]%\n
Zeit seit letzter Bewaesserung: \n
{(sprintf("%d Tage %02d:%02d:%02d",SYSMON_decode_time_diff(ReadingsAge("Bewaesserung", "state", 0))))}, set Bewaesserung 15)
DOELSEIF
([06:10] and
[?SommerWinterzeit:state] =~ "Sommer" and
[?WH1080:statTemperatureDayMaxLast] > 20 and
[?WH1080:statRainDay] < 1 and
[?WH1080:statRainDayLast] < 3 and
[?Proplanta:fc0_rain] < 2 and
[?Proplanta:fc0_tempMax] > 29)
(set teleBot message Bewaesserung lang aktiv\n
Jahreszeit: [SommerWinterzeit:state]\n
Hoechsttemperatur gestern: [WH1080:statTemperatureDayMaxLast]°C\n
Regenmenge heute: [WH1080:statRainDay] l/m²\n
Regenmenge gestern: [WH1080:statRainDayLast] l/m²\n
Prognose Regen heute: [Proplanta:fc0_rain] l/m²\n
Prognose MaxTemp heute: [Proplanta:fc0_tempMax]°C\n
Prognose Sonnenschein heute: [Proplanta:fc0_sun]%\n
Zeit seit letzter Bewaesserung: \n
{(sprintf("%d Tage %02d:%02d:%02d",SYSMON_decode_time_diff(ReadingsAge("Bewaesserung", "state", 0))))}, set Bewaesserung 20)
DOELSEIF
([06:10] and
[?SommerWinterzeit:state] =~ "Sommer" and
[?WH1080:statTemperatureDayMaxLast] > 17 and
[?WH1080:statRainDay] < 1 and
[?WH1080:statRainDayLast] < 3 and
[?Proplanta:fc0_rain] < 2 and
[?Proplanta:fc0_tempMax] > 17 and
[?Proplanta:fc0_tempMax] < 25 and
[?Proplanta:fc0_sun] < 49 and
[?Proplanta:fc0_sun] > 25 and
[?Bewaesserung:state:sec] > 169000)
(set teleBot message Bewaesserung *2 Tage aktiv\n
Jahreszeit: [SommerWinterzeit:state]\n
Hoechsttemperatur gestern: [WH1080:statTemperatureDayMaxLast]°C\n
Regenmenge heute: [WH1080:statRainDay] l/m²\n
Regenmenge gestern: [WH1080:statRainDayLast] l/m²\n
Prognose Regen heute: [Proplanta:fc0_rain] l/m²\n
Prognose MaxTemp heute: [Proplanta:fc0_tempMax]°C\n
Prognose Sonnenschein heute: [Proplanta:fc0_sun]%\n
Zeit seit letzter Bewaesserung: \n
{(sprintf("%d Tage %02d:%02d:%02d",SYSMON_decode_time_diff(ReadingsAge("Bewaesserung", "state", 0))))}, set Bewaesserung 15)
DOELSE
([06:10])
(set teleBot message keine Bewaesserung!!\n
Jahreszeit: [SommerWinterzeit:state]\n
Hoechsttemperatur gestern: [WH1080:statTemperatureDayMaxLast]°C\n
Regenmenge heute: [WH1080:statRainDay] l/m²\n
Regenmenge gestern: [WH1080:statRainDayLast] l/m²\n
Prognose Regen heute: [Proplanta:fc0_rain] l/m²\n
Prognose MaxTemp heute: [Proplanta:fc0_tempMax]°C\n
Prognose Sonnenschein heute: [Proplanta:fc0_sun]%\n
Zeit seit letzter Bewaesserung: \n
{(sprintf("%d Tage %02d:%02d:%02d",SYSMON_decode_time_diff(ReadingsAge("Bewaesserung", "state", 0))))})
Sieht gut aus der Code vom DOIF, so geht das.
Na Merkstein was? Wer soll Dir bitte schön damit helfen.
Mach bitte ein list vom DOIF Device.
Hier der list:
Internals:
DEF ([06:10] and
[?SommerWinterzeit:state] =~ "Sommer" and
[?WH1080:statTemperatureDayMaxLast] > 20 and
[?WH1080:statRainDay] < 1 and
[?WH1080:statRainDayLast] < 5 and
[?Proplanta:fc0_rain] < 2 and
[?Proplanta:fc0_tempMax] > 20 and
[?Proplanta:fc0_tempMax] < 25 and
[?Proplanta:fc0_sun] > 49)
(set teleBot message Bewaesserung kurz aktiv\n
Jahreszeit: [SommerWinterzeit:state]\n
Hoechsttemperatur gestern: [WH1080:statTemperatureDayMaxLast]°C\n
Regenmenge heute: [WH1080:statRainDay] l/m²\n
Regenmenge gestern: [WH1080:statRainDayLast] l/m²\n
Prognose Regen heute: [Proplanta:fc0_rain] l/m²\n
Prognose MaxTemp heute: [Proplanta:fc0_tempMax]°C\n
Prognose Sonnenschein heute: [Proplanta:fc0_sun]%\n
Zeit seit letzter Bewaesserung: \n{(sprintf("%d Tage %02d:%02d:%02d",SYSMON_decode_time_diff(ReadingsAge("Bewaesserung", "state", 0))))}, set Bewaesserung 10)
DOELSEIF
([06:10] and
[?SommerWinterzeit:state] =~ "Sommer" and
[?WH1080:statTemperatureDayMaxLast] > 20 and
[?WH1080:statRainDay] < 1 and
[?WH1080:statRainDayLast] < 3 and
[?Proplanta:fc0_rain] < 2 and
[?Proplanta:fc0_tempMax] >= 25 and
[?Proplanta:fc0_tempMax] <= 29 and
[?Proplanta:fc0_sun] > 49)
(set teleBot message Bewaesserung mittel aktiv\n
Jahreszeit: [SommerWinterzeit:state]\n
Hoechsttemperatur gestern: [WH1080:statTemperatureDayMaxLast]°C\n
Regenmenge heute: [WH1080:statRainDay] l/m²\n
Regenmenge gestern: [WH1080:statRainDayLast] l/m²\n
Prognose Regen heute: [Proplanta:fc0_rain] l/m²\n
Prognose MaxTemp heute: [Proplanta:fc0_tempMax]°C\n
Prognose Sonnenschein heute: [Proplanta:fc0_sun]%\n
Zeit seit letzter Bewaesserung: \n{(sprintf("%d Tage %02d:%02d:%02d",SYSMON_decode_time_diff(ReadingsAge("Bewaesserung", "state", 0))))}, set Bewaesserung 15)
DOELSEIF
([06:10] and
[?SommerWinterzeit:state] =~ "Sommer" and
[?WH1080:statTemperatureDayMaxLast] > 20 and
[?WH1080:statRainDay] < 1 and
[?WH1080:statRainDayLast] < 3 and
[?Proplanta:fc0_rain] < 2 and
[?Proplanta:fc0_tempMax] > 29)
(set teleBot message Bewaesserung lang aktiv\n
Jahreszeit: [SommerWinterzeit:state]\n
Hoechsttemperatur gestern: [WH1080:statTemperatureDayMaxLast]°C\n
Regenmenge heute: [WH1080:statRainDay] l/m²\n
Regenmenge gestern: [WH1080:statRainDayLast] l/m²\n
Prognose Regen heute: [Proplanta:fc0_rain] l/m²\n
Prognose MaxTemp heute: [Proplanta:fc0_tempMax]°C\n
Prognose Sonnenschein heute: [Proplanta:fc0_sun]%\n
Zeit seit letzter Bewaesserung: \n{(sprintf("%d Tage %02d:%02d:%02d",SYSMON_decode_time_diff(ReadingsAge("Bewaesserung", "state", 0))))}, set Bewaesserung 20)
DOELSEIF
([06:10] and
[?SommerWinterzeit:state] =~ "Sommer" and
[?WH1080:statTemperatureDayMaxLast] > 17 and
[?WH1080:statRainDay] < 1 and
[?WH1080:statRainDayLast] < 3 and
[?Proplanta:fc0_rain] < 2 and
[?Proplanta:fc0_tempMax] > 17 and
[?Proplanta:fc0_tempMax] < 25 and
[?Proplanta:fc0_sun] < 49 and
[?Proplanta:fc0_sun] > 25 and
[?Bewaesserung:state:sec] > 169000)
(set teleBot message Bewaesserung *2 Tage aktiv\n
Jahreszeit: [SommerWinterzeit:state]\n
Hoechsttemperatur gestern: [WH1080:statTemperatureDayMaxLast]°C\n
Regenmenge heute: [WH1080:statRainDay] l/m²\n
Regenmenge gestern: [WH1080:statRainDayLast] l/m²\n
Prognose Regen heute: [Proplanta:fc0_rain] l/m²\n
Prognose MaxTemp heute: [Proplanta:fc0_tempMax]°C\n
Prognose Sonnenschein heute: [Proplanta:fc0_sun]%\n
Zeit seit letzter Bewaesserung: \n{(sprintf("%d Tage %02d:%02d:%02d",SYSMON_decode_time_diff(ReadingsAge("Bewaesserung", "state", 0))))}, set Bewaesserung 15)
DOELSE
([06:10])
(set teleBot message keine Bewaesserung!!\n
Jahreszeit: [SommerWinterzeit:state]\n
Hoechsttemperatur gestern: [WH1080:statTemperatureDayMaxLast]°C\n
Regenmenge heute: [WH1080:statRainDay] l/m²\n
Regenmenge gestern: [WH1080:statRainDayLast] l/m²\n
Prognose Regen heute: [Proplanta:fc0_rain] l/m²\n
Prognose MaxTemp heute: [Proplanta:fc0_tempMax]°C\n
Prognose Sonnenschein heute: [Proplanta:fc0_sun]%\n
Zeit seit letzter Bewaesserung: \n{(sprintf("%d Tage %02d:%02d:%02d",SYSMON_decode_time_diff(ReadingsAge("Bewaesserung", "state", 0))))})
MODEL FHEM
NAME di.Bewaesserungsautomat
NR 1262
NTFY_ORDER 50-di.Bewaesserungsautomat
STATE initialize
TYPE DOIF
Helper:
DBLOG:
cmd:
logdb:
TIME 1535866123.85783
VALUE 0
cmd_event:
logdb:
TIME 1535865060.18276
VALUE timer_1
cmd_nr:
logdb:
TIME 1535865060.18276
VALUE 1
cmd_seqnr:
logdb:
TIME 1535692200.05826
VALUE 2
error:
logdb:
TIME 1535692200.02083
VALUE [07:10]
mode:
logdb:
TIME 1535866129.48159
VALUE enabled
state:
logdb:
TIME 1535866129.49242
VALUE initialize
READINGS:
2018-09-02 07:28:49 mode enabled
2018-09-02 07:28:49 state initialize
2018-09-02 07:28:43 timer_01_c01 03.09.2018 06:10:00
2018-09-02 07:28:43 timer_02_c02 03.09.2018 06:10:00
2018-09-02 07:28:43 timer_03_c03 03.09.2018 06:10:00
2018-09-02 07:28:43 timer_04_c04 03.09.2018 06:10:00
Regex:
attr:
cmdState:
wait:
waitdel:
condition:
0 DOIF_time_once($hash,0,$wday) and ReadingValDoIf($hash,'SommerWinterzeit','state') =~ "Sommer" and ReadingValDoIf($hash,'WH1080','statTemperatureDayMaxLast') > 20 and ReadingValDoIf($hash,'WH1080','statRainDay') < 1 and ReadingValDoIf($hash,'WH1080','statRainDayLast') < 5 and ReadingValDoIf($hash,'Proplanta','fc0_rain') < 2 and ReadingValDoIf($hash,'Proplanta','fc0_tempMax') > 20 and ReadingValDoIf($hash,'Proplanta','fc0_tempMax') < 25 and ReadingValDoIf($hash,'Proplanta','fc0_sun') > 49
1 DOIF_time_once($hash,1,$wday) and ReadingValDoIf($hash,'SommerWinterzeit','state') =~ "Sommer" and ReadingValDoIf($hash,'WH1080','statTemperatureDayMaxLast') > 20 and ReadingValDoIf($hash,'WH1080','statRainDay') < 1 and ReadingValDoIf($hash,'WH1080','statRainDayLast') < 3 and ReadingValDoIf($hash,'Proplanta','fc0_rain') < 2 and ReadingValDoIf($hash,'Proplanta','fc0_tempMax') >= 25 and ReadingValDoIf($hash,'Proplanta','fc0_tempMax') <= 29 and ReadingValDoIf($hash,'Proplanta','fc0_sun') > 49
2 DOIF_time_once($hash,2,$wday) and ReadingValDoIf($hash,'SommerWinterzeit','state') =~ "Sommer" and ReadingValDoIf($hash,'WH1080','statTemperatureDayMaxLast') > 20 and ReadingValDoIf($hash,'WH1080','statRainDay') < 1 and ReadingValDoIf($hash,'WH1080','statRainDayLast') < 3 and ReadingValDoIf($hash,'Proplanta','fc0_rain') < 2 and ReadingValDoIf($hash,'Proplanta','fc0_tempMax') > 29
3 DOIF_time_once($hash,3,$wday) and ReadingValDoIf($hash,'SommerWinterzeit','state') =~ "Sommer" and ReadingValDoIf($hash,'WH1080','statTemperatureDayMaxLast') > 17 and ReadingValDoIf($hash,'WH1080','statRainDay') < 1 and ReadingValDoIf($hash,'WH1080','statRainDayLast') < 3 and ReadingValDoIf($hash,'Proplanta','fc0_rain') < 2 and ReadingValDoIf($hash,'Proplanta','fc0_tempMax') > 17 and ReadingValDoIf($hash,'Proplanta','fc0_tempMax') < 25 and ReadingValDoIf($hash,'Proplanta','fc0_sun') < 49 and ReadingValDoIf($hash,'Proplanta','fc0_sun') > 25 and ReadingSecDoIf('Bewaesserung','state') > 169000
days:
devices:
do:
0:
0 set teleBot message Bewaesserung kurz aktiv\n Jahreszeit: [SommerWinterzeit:state]\n Hoechsttemperatur gestern: [WH1080:statTemperatureDayMaxLast]°C\n Regenmenge heute: [WH1080:statRainDay] l/m²\n Regenmenge gestern: [WH1080:statRainDayLast] l/m²\n Prognose Regen heute: [Proplanta:fc0_rain] l/m²\n Prognose MaxTemp heute: [Proplanta:fc0_tempMax]°C\n Prognose Sonnenschein heute: [Proplanta:fc0_sun]%\n Zeit seit letzter Bewaesserung: \n{(sprintf("%d Tage %02d:%02d:%02d",SYSMON_decode_time_diff(ReadingsAge("Bewaesserung", "state", 0))))}, set Bewaesserung 10
1:
0 set teleBot message Bewaesserung mittel aktiv\n Jahreszeit: [SommerWinterzeit:state]\n Hoechsttemperatur gestern: [WH1080:statTemperatureDayMaxLast]°C\n Regenmenge heute: [WH1080:statRainDay] l/m²\n Regenmenge gestern: [WH1080:statRainDayLast] l/m²\n Prognose Regen heute: [Proplanta:fc0_rain] l/m²\n Prognose MaxTemp heute: [Proplanta:fc0_tempMax]°C\n Prognose Sonnenschein heute: [Proplanta:fc0_sun]%\n Zeit seit letzter Bewaesserung: \n{(sprintf("%d Tage %02d:%02d:%02d",SYSMON_decode_time_diff(ReadingsAge("Bewaesserung", "state", 0))))}, set Bewaesserung 15
2:
0 set teleBot message Bewaesserung lang aktiv\n Jahreszeit: [SommerWinterzeit:state]\n Hoechsttemperatur gestern: [WH1080:statTemperatureDayMaxLast]°C\n Regenmenge heute: [WH1080:statRainDay] l/m²\n Regenmenge gestern: [WH1080:statRainDayLast] l/m²\n Prognose Regen heute: [Proplanta:fc0_rain] l/m²\n Prognose MaxTemp heute: [Proplanta:fc0_tempMax]°C\n Prognose Sonnenschein heute: [Proplanta:fc0_sun]%\n Zeit seit letzter Bewaesserung: \n{(sprintf("%d Tage %02d:%02d:%02d",SYSMON_decode_time_diff(ReadingsAge("Bewaesserung", "state", 0))))}, set Bewaesserung 20
3:
0 set teleBot message Bewaesserung *2 Tage aktiv\n Jahreszeit: [SommerWinterzeit:state]\n Hoechsttemperatur gestern: [WH1080:statTemperatureDayMaxLast]°C\n Regenmenge heute: [WH1080:statRainDay] l/m²\n Regenmenge gestern: [WH1080:statRainDayLast] l/m²\n Prognose Regen heute: [Proplanta:fc0_rain] l/m²\n Prognose MaxTemp heute: [Proplanta:fc0_tempMax]°C\n Prognose Sonnenschein heute: [Proplanta:fc0_sun]%\n Zeit seit letzter Bewaesserung: \n{(sprintf("%d Tage %02d:%02d:%02d",SYSMON_decode_time_diff(ReadingsAge("Bewaesserung", "state", 0))))}, set Bewaesserung 15
4:
0 [06:10]
1 set teleBot message keine Bewaesserung!!\n Jahreszeit: [SommerWinterzeit:state]\n Hoechsttemperatur gestern: [WH1080:statTemperatureDayMaxLast]°C\n Regenmenge heute: [WH1080:statRainDay] l/m²\n Regenmenge gestern: [WH1080:statRainDayLast] l/m²\n Prognose Regen heute: [Proplanta:fc0_rain] l/m²\n Prognose MaxTemp heute: [Proplanta:fc0_tempMax]°C\n Prognose Sonnenschein heute: [Proplanta:fc0_sun]%\n Zeit seit letzter Bewaesserung: \n{(sprintf("%d Tage %02d:%02d:%02d",SYSMON_decode_time_diff(ReadingsAge("Bewaesserung", "state", 0))))}
helper:
globalinit 1
last_timer 4
sleeptimer -1
intervalfunc:
itimer:
localtime:
0 1535947800
1 1535947800
2 1535947800
3 1535947800
realtime:
0 06:10:00
1 06:10:00
2 06:10:00
3 06:10:00
time:
0 06:10:00
1 06:10:00
2 06:10:00
3 06:10:00
timeCond:
0 0
1 1
2 2
3 3
timer:
0 0
1 0
2 0
3 0
timers:
0 0
1 1
2 2
3 3
triggertime:
1535947800:
localtime 1535947800
hash:
uiState:
uiTable:
Attributes:
group Bewaesserung
room Garten
sortby 5
verbose 5
ZitatDOELSE
([06:10])
Geht schon mal nicht.
Es handelt sich hier um punktuelle Zeittrigger (einmal pro Tag), da könnte do always nicht schaden, sonst gibt es keine Wiederholung des selben Zweiges am nächsten Tag.
DOELSE mit einer Bedingung ist, denke ich, noch nicht implementiert. ;)
Ich merke schon, ich verwende zu wenig DOIF und komme da langsam raus. Sorry :-[
Ahh, logisch, danke!
Die ganzen "Gleichteile" solltest du auslagern. Vllt. als DOIF_Reading (https://forum.fhem.de/index.php/topic,90561.0.html)?