Ich bekomme den Fehler "IF: unknown Device: 09" bei Prüfung des folgenden DOIF-Teils. Bedeutet dies, dass ich keine Zeitangabe (Zeitraum) im IF eines Ausführungsteils hinterlegen kann und doch auf den Perl-Modus zurückgreifen muss?
( [dim_Warmwassertemperatur] or [dim_Ruecklauftemperatur] ) (
setreading HeizungSteuerung diff_SOLL_IST {([dim_Ruecklaufsolltemperatur] + [dim_HeizungHysterese] - [dim_Ruecklauftemperatur])},
IF ( [09:30-13:45] and [dim_status_heatpump:state] == 2 and [HeizungSteuerung:diff_SOLL_IST] < 0.2 and [PROPLANTA:fc0_rad] > 2.9 and [dim_Warmwassertemperatur:state] < 49 ) (
set dim_WarmwasserHysterese 0,
set dim_WarmwasserSollTemperatur 60,
msg Heizung: Rücklauftemperatur fast erreicht. Es fehlen noch ([HeizungSteuerung:diff_SOLL_IST]). Warmwasser: [dim_Warmwassertemperatur:state]
)
)
Zur Vollständigkeit noch mal das komplette DOIF
Internals:
DEF ##wenn Heizung aktiviert wird
([dim_status_heatpump:state] == 2)
(msg Heizung wurde aktiviert)
##wenn Warmwasser aktiviert wird
DOELSEIF ([dim_status_heatpump:state] == 4)
(msg Warmwassererwärmung wurde aktiviert)
##wenn Nacherwärmung Warmwasser
DOELSEIF ([dim_block_heatpump:state] == 13)
(msg Nacherwärmung Warmwasser aktiviert)
(set dim_Parallelverschiebung 21)
(set dim_HeizungHysterese 3)
##wenn Hochdruck z.B. nach Nacherwärmung Warmwasser
DOELSEIF ([dim_block_heatpump:state] == 19)
(set dim_Parallelverschiebung 21)
(set dim_HeizungHysterese 3)
DOELSEIF ([dim_status_heatpump:state] == 1)
(msg Dimplex wurde deaktiviert)
(set dim_Parallelverschiebung 21)
(set dim_HeizungHysterese 3)
(set dim_WarmwasserSollTemperatur 48)
(set dim_WarmwasserHysterese 4)
##20 Uhr prüfen, wie stark die globale Strahlung am Folgetag ist
DOELSEIF ([20:00]) (
IF ( [PROPLANTA:fc1_rad] > 2.9 ) (
IF ( [HeizungSteuerung:AbsenkungAktiv] eq "ja" ) (
set dimplexSIW8TES dimhp_trigger_value 1-hc-lower,
set dimplexSIW8TES dimhp_trigger_monday time1,
set dimplexSIW8TES dimhp_trigger_tuesday time1,
set dimplexSIW8TES dimhp_trigger_wednesday time1,
set dimplexSIW8TES dimhp_trigger_thursday time1,
set dimplexSIW8TES dimhp_trigger_friday time1,
set dimplexSIW8TES dimhp_trigger_saturday time1,
set dimplexSIW8TES dimhp_trigger_sunday time1
)
IF ( [HeizungSteuerung:AnhebungAktiv] eq "ja" ) (
set dimplexSIW8TES dimhp_trigger_value 1-hc-raise,
set dimplexSIW8TES dimhp_trigger_monday time1,
set dimplexSIW8TES dimhp_trigger_tuesday time1,
set dimplexSIW8TES dimhp_trigger_wednesday time1,
set dimplexSIW8TES dimhp_trigger_thursday time1,
set dimplexSIW8TES dimhp_trigger_friday time1,
set dimplexSIW8TES dimhp_trigger_saturday time1,
set dimplexSIW8TES dimhp_trigger_sunday time1
)
) ELSE (
set dimplexSIW8TES dimhp_trigger_value 1-hc-lower,
set dimplexSIW8TES dimhp_trigger_monday no,
set dimplexSIW8TES dimhp_trigger_tuesday no,
set dimplexSIW8TES dimhp_trigger_wednesday no,
set dimplexSIW8TES dimhp_trigger_thursday no,
set dimplexSIW8TES dimhp_trigger_friday no,
set dimplexSIW8TES dimhp_trigger_saturday no,
set dimplexSIW8TES dimhp_trigger_sunday no,
set dimplexSIW8TES dimhp_trigger_value 1-hc-raise,
set dimplexSIW8TES dimhp_trigger_monday no,
set dimplexSIW8TES dimhp_trigger_tuesday no,
set dimplexSIW8TES dimhp_trigger_wednesday no,
set dimplexSIW8TES dimhp_trigger_thursday no,
set dimplexSIW8TES dimhp_trigger_friday no,
set dimplexSIW8TES dimhp_trigger_saturday no,
set dimplexSIW8TES dimhp_trigger_sunday no,
##Aktuell Uhrzeit setzen Uhrzeit
set dimplexSIW8TES dimhp_time_hour $hour,
set dimplexSIW8TES dimhp_timeset_hour 1,
set dimplexSIW8TES dimhp_time_minute $min,
set dimplexSIW8TES dimhp_timeset_minute 1
)
)
DOELSEIF ( [dim_Warmwassertemperatur] or [dim_Ruecklauftemperatur] ) (
setreading HeizungSteuerung diff_SOLL_IST {([dim_Ruecklaufsolltemperatur] + [dim_HeizungHysterese] - [dim_Ruecklauftemperatur])},
IF ( [09:30-13:45] and [dim_status_heatpump:state] == 2 and [HeizungSteuerung:diff_SOLL_IST] < 0.2 and [PROPLANTA:fc0_rad] > 2.9 and [dim_Warmwassertemperatur:state] < 49 ) (
set dim_WarmwasserHysterese 0,
set dim_WarmwasserSollTemperatur 60,
msg Heizung: Rücklauftemperatur fast erreicht. Es fehlen noch ([HeizungSteuerung:diff_SOLL_IST]). Warmwasser: [dim_Warmwassertemperatur:state]
)
)
DOELSE
FUUID 620fc9a2-f33f-8b20-0eb2-d2136a448da8f3c4
MODEL FHEM
NAME HeizungSteuerung
NOTIFYDEV dim_Ruecklauftemperatur,dim_Warmwassertemperatur,global,dim_status_heatpump,dim_block_heatpump
NR 182
NTFY_ORDER 50-HeizungSteuerung
STATE cmd_7
TYPE DOIF
VERSION 25756 2022-02-28 08:27:14
OLDREADINGS:
READINGS:
2022-03-08 18:08:15 AbsenkungAktiv ja
2022-03-08 12:25:55 AnhebungAktiv nein
2022-03-10 13:23:29 Device dim_Ruecklauftemperatur
2022-03-10 13:23:29 cmd 7
2022-03-10 13:23:29 cmd_event dim_Ruecklauftemperatur
2022-03-10 13:23:29 cmd_nr 7
2022-03-10 13:23:29 diff_SOLL_IST 3.9
2022-03-10 13:23:29 e_dim_Ruecklauftemperatur_STATE 24.3
2022-03-10 13:19:13 e_dim_Warmwassertemperatur_STATE 60.6
2022-03-10 13:23:29 error IF ( [09:30-13:45] and [dim_status_heatpump:state] == 2 and [HeizungSteuerung:diff_SOLL_IST] < 0.2 and [PROPLANTA:fc0_rad] > 2.9 and [dim_Warmwassertemperatur:state] < 49 ) ( set dim_WarmwasserHysterese 0, set dim_WarmwasserSollTemperatur 60, msg Heizung: Rücklauftemperatur fast erreicht. Es fehlen noch ([HeizungSteuerung:diff_SOLL_IST]). Warmwasser: [dim_Warmwassertemperatur:state] ): IF: unknown Device: 09
2022-03-10 13:13:24 mode enabled
2022-03-10 13:23:29 state cmd_7
2022-03-10 13:13:24 timer_01_c06 10.03.2022 20:00:00
Regex:
accu:
collect:
cond:
dim_Ruecklauftemperatur:
0:
1:
2:
3:
4:
5:
6:
&STATE ^dim_Ruecklauftemperatur$
dim_Warmwassertemperatur:
0:
1:
2:
3:
4:
5:
6:
&STATE ^dim_Warmwassertemperatur$
dim_block_heatpump:
2:
state ^dim_block_heatpump$:^state:
3:
state ^dim_block_heatpump$:^state:
dim_status_heatpump:
0:
state ^dim_status_heatpump$:^state:
1:
state ^dim_status_heatpump$:^state:
4:
state ^dim_status_heatpump$:^state:
attr:
cmdState:
wait:
waitdel:
condition:
0 ::ReadingValDoIf($hash,'dim_status_heatpump','state') == 2
1 ::ReadingValDoIf($hash,'dim_status_heatpump','state') == 4
2 ::ReadingValDoIf($hash,'dim_block_heatpump','state') == 13
3 ::ReadingValDoIf($hash,'dim_block_heatpump','state') == 19
4 ::ReadingValDoIf($hash,'dim_status_heatpump','state') == 1
5 ::DOIF_time_once($hash,0,$wday)
6 ::InternalDoIf($hash,'dim_Warmwassertemperatur','STATE') or ::InternalDoIf($hash,'dim_Ruecklauftemperatur','STATE')
days:
do:
0:
0 msg Heizung wurde aktiviert
1:
0 msg Warmwassererwärmung wurde aktiviert
2:
0 msg Nacherwärmung Warmwasser aktiviert
1 set dim_Parallelverschiebung 21
2 set dim_HeizungHysterese 3
3:
0 set dim_Parallelverschiebung 21
1 set dim_HeizungHysterese 3
4:
0 msg Dimplex wurde deaktiviert
1 set dim_Parallelverschiebung 21
2 set dim_HeizungHysterese 3
3 set dim_WarmwasserSollTemperatur 48
4 set dim_WarmwasserHysterese 4
5:
0 IF ( [PROPLANTA:fc1_rad] > 2.9 ) ( IF ( [HeizungSteuerung:AbsenkungAktiv] eq "ja" ) ( set dimplexSIW8TES dimhp_trigger_value 1-hc-lower, set dimplexSIW8TES dimhp_trigger_monday time1, set dimplexSIW8TES dimhp_trigger_tuesday time1, set dimplexSIW8TES dimhp_trigger_wednesday time1, set dimplexSIW8TES dimhp_trigger_thursday time1, set dimplexSIW8TES dimhp_trigger_friday time1, set dimplexSIW8TES dimhp_trigger_saturday time1, set dimplexSIW8TES dimhp_trigger_sunday time1 ) IF ( [HeizungSteuerung:AnhebungAktiv] eq "ja" ) ( set dimplexSIW8TES dimhp_trigger_value 1-hc-raise, set dimplexSIW8TES dimhp_trigger_monday time1, set dimplexSIW8TES dimhp_trigger_tuesday time1, set dimplexSIW8TES dimhp_trigger_wednesday time1, set dimplexSIW8TES dimhp_trigger_thursday time1, set dimplexSIW8TES dimhp_trigger_friday time1, set dimplexSIW8TES dimhp_trigger_saturday time1, set dimplexSIW8TES dimhp_trigger_sunday time1 ) ) ELSE ( set dimplexSIW8TES dimhp_trigger_value 1-hc-lower, set dimplexSIW8TES dimhp_trigger_monday no, set dimplexSIW8TES dimhp_trigger_tuesday no, set dimplexSIW8TES dimhp_trigger_wednesday no, set dimplexSIW8TES dimhp_trigger_thursday no, set dimplexSIW8TES dimhp_trigger_friday no, set dimplexSIW8TES dimhp_trigger_saturday no, set dimplexSIW8TES dimhp_trigger_sunday no, set dimplexSIW8TES dimhp_trigger_value 1-hc-raise, set dimplexSIW8TES dimhp_trigger_monday no, set dimplexSIW8TES dimhp_trigger_tuesday no, set dimplexSIW8TES dimhp_trigger_wednesday no, set dimplexSIW8TES dimhp_trigger_thursday no, set dimplexSIW8TES dimhp_trigger_friday no, set dimplexSIW8TES dimhp_trigger_saturday no, set dimplexSIW8TES dimhp_trigger_sunday no, set dimplexSIW8TES dimhp_time_hour $hour, set dimplexSIW8TES dimhp_timeset_hour 1, set dimplexSIW8TES dimhp_time_minute $min, set dimplexSIW8TES dimhp_timeset_minute 1 )
6:
0 setreading HeizungSteuerung diff_SOLL_IST {([dim_Ruecklaufsolltemperatur] + [dim_HeizungHysterese] - [dim_Ruecklauftemperatur])}, IF ( [09:30-13:45] and [dim_status_heatpump:state] == 2 and [HeizungSteuerung:diff_SOLL_IST] < 0.2 and [PROPLANTA:fc0_rad] > 2.9 and [dim_Warmwassertemperatur:state] < 49 ) ( set dim_WarmwasserHysterese 0, set dim_WarmwasserSollTemperatur 60, msg Heizung: Rücklauftemperatur fast erreicht. Es fehlen noch ([HeizungSteuerung:diff_SOLL_IST]). Warmwasser: [dim_Warmwassertemperatur:state] )
7:
0
helper:
NOTIFYDEV dim_Ruecklauftemperatur,dim_Warmwassertemperatur,global,dim_status_heatpump,dim_block_heatpump
event 24.3
globalinit 1
last_timer 1
sleeptimer -1
timerdev dim_Ruecklauftemperatur
timerevent 24.3
triggerDev dim_Ruecklauftemperatur
DOIF_eventa:
cmd_nr: 7
cmd: 7
cmd_event: dim_Ruecklauftemperatur
error: IF ( [09:30-13:45] and [dim_status_heatpump:state] == 2 and [HeizungSteuerung:diff_SOLL_IST] < 0.2 and [PROPLANTA:fc0_rad] > 2.9 and [dim_Warmwassertemperatur:state] < 49 ) ( set dim_WarmwasserHysterese 0, set dim_WarmwasserSollTemperatur 60, msg Heizung: Rücklauftemperatur fast erreicht. Es fehlen noch ([HeizungSteuerung:diff_SOLL_IST]). Warmwasser: [dim_Warmwassertemperatur:state] ): IF: unknown Device: 09
cmd_7
DOIF_eventas:
cmd_nr: 7
cmd: 7
cmd_event: dim_Ruecklauftemperatur
error: IF ( [09:30-13:45] and [dim_status_heatpump:state] == 2 and [HeizungSteuerung:diff_SOLL_IST] < 0.2 and [PROPLANTA:fc0_rad] > 2.9 and [dim_Warmwassertemperatur:state] < 49 ) ( set dim_WarmwasserHysterese 0, set dim_WarmwasserSollTemperatur 60, msg Heizung: Rücklauftemperatur fast erreicht. Es fehlen noch ([HeizungSteuerung:diff_SOLL_IST]). Warmwasser: [dim_Warmwassertemperatur:state] ): IF: unknown Device: 09
state: cmd_7
timerevents:
24.3
timereventsState:
state: 24.3
triggerEvents:
24.3
triggerEventsState:
state: 24.3
internals:
all dim_Warmwassertemperatur:STATE dim_Ruecklauftemperatur:STATE
intervalfunc:
localtime:
0 1646938800
readings:
all dim_status_heatpump:state dim_block_heatpump:state
realtime:
0 20:00:00
time:
0 20:00:00
timeCond:
0 5
timer:
0 0
timers:
5 0
trigger:
triggertime:
1646938800:
localtime 1646938800
hash:
uiState:
uiTable:
Attributes:
do always
readingList AnhebungAktiv AbsenkungAktiv
room Dimplex,E3DC
setList AnhebungAktiv:ja,nein AbsenkungAktiv:ja,nein
Schieb das mal ins Unterforum DOIF.
Mir graut schon, wenn ich diese vielen IFs sehe. Schön ist das nicht.
Vermutlich geht es nicht eine Zeitbedingung im Ausführungsteil zu benutzten.
Meine Empfehlung: Umbau des DOIF.
Zitat von: rabehd am 10 März 2022, 13:38:43
Mir graut schon, wenn ich diese vielen IFs sehe. Schön ist das nicht.
Vermutlich geht es nicht eine Zeitbedingung im Ausführungsteil zu benutzten.
Meine Empfehlung: Umbau des DOIF.
Was meinst du mit Umbau? Wie könnte ich besser strukturieren?
Für meine Problemstellung spielen die anderen Bedingungen keine Rolle, da sie funktionieren. Mir geht es hauptsächlich um die Zeitangabe im Ausführungsteil. Dazu habe ich in der commandref nichts gefunden. Da die FHEM-Methode mittels [device:reading] funktioniert, dachte ich auch die Zeitangabe funktioniert analog.
Aber generell würde mich jetzt schon noch zusätzlich die bessere Strukturierung interessieren. ;-)
Zitat von: h002 am 10 März 2022, 13:47:20
Was meinst du mit Umbau? Wie könnte ich besser strukturieren?
Für meine Problemstellung spielen die anderen Bedingungen keine Rolle, da sie funktionieren. Mir geht es hauptsächlich um die Zeitangabe im Ausführungsteil. Dazu habe ich in der commandref nichts gefunden. Da die FHEM-Methode mittels [device:reading] funktioniert, dachte ich auch die Zeitangabe funktioniert analog.
Aber generell würde mich jetzt schon noch zusätzlich die bessere Strukturierung interessieren. ;-)
IF kann grundsätzlich nicht mit Zeiten umgehen, das ist eine DOIF-Eigenschaft. Im DOIF-Perlmodus geht das.
Zitat von: Damian am 10 März 2022, 14:29:29
IF kann grundsätzlich nicht mit Zeiten umgehen, das ist eine DOIF-Eigenschaft. Im DOIF-Perlmodus geht das.
Folgendes habe ich mit dem Perlmodus auch erfolglos versucht. Hier kommt es zu dem Fehler
"Illegal octal digit '9' at (eval 4052927) line 1, at end of line
syntax error at (eval 4052927) line 1, near "09:"Vermutlich meinst du den Perl-Modus wie im Wiki beschrieben (https://wiki.fhem.de/wiki/DOIF/Perl-Modus). Es geht also auch nicht, wenn ich Perl im Ausführungsteil verwende, oder?
Internals:
DEF ( [dim_Warmwassertemperatur] or [dim_Ruecklauftemperatur] ) {
if ( [09:30-13:45] and [dim_status_heatpump:state] == 2 and [HeizungSteuerung:diff_SOLL_IST] < 0.2 and [PROPLANTA:fc0_rad] > 2.9 and [dim_Warmwassertemperatur:state] < 49 ) {
fhem("msg test");
}
}
DOELSE
FUUID 622a02ea-f33f-8b20-763d-90c081e4865b83d5
MODEL FHEM
NAME testDOIF
NOTIFYDEV global,dim_Warmwassertemperatur,dim_Ruecklauftemperatur
NR 230178
NTFY_ORDER 50-testDOIF
STATE cmd_1
TYPE DOIF
VERSION 25756 2022-02-28 08:27:14
READINGS:
2022-03-10 14:56:42 cmd 1
2022-03-10 14:56:42 cmd_event testDOIF
2022-03-10 14:56:42 cmd_nr 1
2022-03-10 14:56:42 error { if ( [09:30-13:45] and 1 == 2 and 4 < 0.2 and 3.4 > 2.9 and 60.3 < 49 ) { fhem("msg test"); } }: Illegal octal digit '9' at (eval 4052927) line 1, at end of line
syntax error at (eval 4052927) line 1, near "09:"
syntax error at (eval 4052927) line 1, near "} }"
2022-03-10 14:56:33 mode enabled
2022-03-10 14:56:42 state cmd_1
Regex:
accu:
collect:
cond:
dim_Ruecklauftemperatur:
0:
&STATE ^dim_Ruecklauftemperatur$
dim_Warmwassertemperatur:
0:
&STATE ^dim_Warmwassertemperatur$
attr:
cmdState:
wait:
waitdel:
condition:
0 ::InternalDoIf($hash,'dim_Warmwassertemperatur','STATE') or ::InternalDoIf($hash,'dim_Ruecklauftemperatur','STATE')
do:
0:
0 { if ( [09:30-13:45] and [dim_status_heatpump:state] == 2 and [HeizungSteuerung:diff_SOLL_IST] < 0.2 and [PROPLANTA:fc0_rad] > 2.9 and [dim_Warmwassertemperatur:state] < 49 ) { fhem("msg test"); } }
1:
0
helper:
NOTIFYDEV global,dim_Warmwassertemperatur,dim_Ruecklauftemperatur
globalinit 1
last_timer 0
sleeptimer -1
timerdev
timerevent
timerevents
timereventsState
triggerDev
DOIF_eventa:
cmd_nr: 1
cmd: 1
cmd_event: testDOIF
error: { if ( [09:30-13:45] and 1 == 2 and 4 < 0.2 and 3.4 > 2.9 and 60.3 < 49 ) { fhem("msg test"); } }: Illegal octal digit '9' at (eval 4052927) line 1, at end of line
syntax error at (eval 4052927) line 1, near "09:"
syntax error at (eval 4052927) line 1, near "} }"
cmd_1
DOIF_eventas:
cmd_nr: 1
cmd: 1
cmd_event: testDOIF
error: { if ( [09:30-13:45] and 1 == 2 and 4 < 0.2 and 3.4 > 2.9 and 60.3 < 49 ) { fhem("msg test"); } }: Illegal octal digit '9' at (eval 4052927) line 1, at end of line
syntax error at (eval 4052927) line 1, near "09:"
syntax error at (eval 4052927) line 1, near "} }"
state: cmd_1
internals:
all dim_Warmwassertemperatur:STATE dim_Ruecklauftemperatur:STATE
uiState:
uiTable:
Attributes:
Eigentlich ist meine Frage beantwortet. Der Perl-Modus ist für mich persönlich geeigneter und ich werde meine DOIFs umstellen. Den Schupser hab ich gebraucht. :-)
Danke euch beiden ...
Ich würde das Thema Sturkturierung gerne noch mal aufgreifen, um das Setzen einiger Readings im DOIF übersichtlicher zu gestalten. Mein DOIF habe ich jetzt im Perl-Modus gestaltet.
Aktuell sieht es so aus:
Internals:
DEF start_heizen {
if ( [dim_status_heatpump:state] == 2 ) {
fhem_set"signal send Heizung wurde aktiviert";
}
}
start_warmwasser {
if ( [dim_status_heatpump:state] == 4 ) {
fhem_set"signal send Warmwasser wurde aktiviert";
}
}
start_nacherwaermung_block {
if ( [dim_block_heatpump:state] == 13 or [dim_block_heatpump:state] == 19) {
fhem_set"signal send Nacherwärmung Warmwasser wurde aktiviert oder Hochdruck. ".[dim_block_heatpump];
fhem_set"dim_Parallelverschiebung 21";
fhem_set"dim_HeizungHysterese 3";
}
}
stop_heizung {
if ( [dim_status_heatpump:state] == 1) {
fhem_set"signal send Heizung deaktiviert";
fhem_set"dim_Parallelverschiebung 21";
fhem_set"dim_HeizungHysterese 3";
fhem_set"dim_WarmwasserSollTemperatur 48";
fhem_set"dim_WarmwasserHysterese 4";
}
}
dimplex_zeitplan_setzen {
if ( [20:00] ) {
if ( [PROPLANTA:fc1_rad] > 2.9 ) {
if ( [$SELF:AbsenkungAktiv] eq "ja" ) {
fhem_set"dimplexSIW8TES dimhp_trigger_value 1-hc-lower";
##fhem_set"dimplexSIW8TES dimhp_trigger_(monday|tuesday|wednesday|thursday|friday|saturday|sunday) time1";
fhem_set"dimplexSIW8TES dimhp_trigger_monday time1";
fhem_set"dimplexSIW8TES dimhp_trigger_tuesday time1";
fhem_set"dimplexSIW8TES dimhp_trigger_wednesday time1";
fhem_set"dimplexSIW8TES dimhp_trigger_thursday time1";
fhem_set"dimplexSIW8TES dimhp_trigger_friday time1";
fhem_set"dimplexSIW8TES dimhp_trigger_saturday time1";
fhem_set"dimplexSIW8TES dimhp_trigger_sunday time1";
} elsif ( [$SELF:AbsenkungAktiv] eq "nein" ) {
fhem_set"dimplexSIW8TES dimhp_trigger_value 1-hc-lower";
##fhem_set"dimplexSIW8TES dimhp_trigger_monday,dimhp_trigger_tuesday,dimhp_trigger_wednesday,dimhp_trigger_thursday,dimhp_trigger_friday,dimhp_trigger_saturday,dimhp_trigger_sunday no";
fhem_set"dimplexSIW8TES dimhp_trigger_monday no";
fhem_set"dimplexSIW8TES dimhp_trigger_tuesday no";
fhem_set"dimplexSIW8TES dimhp_trigger_wednesday no";
fhem_set"dimplexSIW8TES dimhp_trigger_thursday no";
fhem_set"dimplexSIW8TES dimhp_trigger_friday no";
fhem_set"dimplexSIW8TES dimhp_trigger_saturday no";
fhem_set"dimplexSIW8TES dimhp_trigger_sunday no";
}
if ( [$SELF:AnhebungAktiv] eq "ja" ) {
fhem_set"dimplexSIW8TES dimhp_trigger_value 1-hc-raise";
##fhem_set"dimplexSIW8TES dimhp_trigger_(monday|tuesday|wednesday|thursday|friday|saturday|sunday) time1";
fhem_set"dimplexSIW8TES dimhp_trigger_monday time1";
fhem_set"dimplexSIW8TES dimhp_trigger_tuesday time1";
fhem_set"dimplexSIW8TES dimhp_trigger_wednesday time1";
fhem_set"dimplexSIW8TES dimhp_trigger_thursday time1";
fhem_set"dimplexSIW8TES dimhp_trigger_friday time1";
fhem_set"dimplexSIW8TES dimhp_trigger_saturday time1";
fhem_set"dimplexSIW8TES dimhp_trigger_sunday time1";
} elsif ( [$SELF:AnhebungAktiv] eq "nein" ) {
fhem_set"dimplexSIW8TES dimhp_trigger_value 1-hc-raise";
##fhem_set"dimplexSIW8TES dimhp_trigger_monday,dimhp_trigger_tuesday,dimhp_trigger_wednesday,dimhp_trigger_thursday,dimhp_trigger_friday,dimhp_trigger_saturday,dimhp_trigger_sunday no";
fhem_set"dimplexSIW8TES dimhp_trigger_monday no";
fhem_set"dimplexSIW8TES dimhp_trigger_tuesday no";
fhem_set"dimplexSIW8TES dimhp_trigger_wednesday no";
fhem_set"dimplexSIW8TES dimhp_trigger_thursday no";
fhem_set"dimplexSIW8TES dimhp_trigger_friday no";
fhem_set"dimplexSIW8TES dimhp_trigger_saturday no";
fhem_set"dimplexSIW8TES dimhp_trigger_sunday no";
}
} else {
fhem_set"dimplexSIW8TES dimhp_trigger_value 1-hc-lower";
##fhem_set"dimplexSIW8TES dimhp_trigger_monday,dimhp_trigger_tuesday,dimhp_trigger_wednesday,dimhp_trigger_thursday,dimhp_trigger_friday,dimhp_trigger_saturday,dimhp_trigger_sunday no";
fhem_set"dimplexSIW8TES dimhp_trigger_monday no";
fhem_set"dimplexSIW8TES dimhp_trigger_tuesday no";
fhem_set"dimplexSIW8TES dimhp_trigger_wednesday no";
fhem_set"dimplexSIW8TES dimhp_trigger_thursday no";
fhem_set"dimplexSIW8TES dimhp_trigger_friday no";
fhem_set"dimplexSIW8TES dimhp_trigger_saturday no";
fhem_set"dimplexSIW8TES dimhp_trigger_sunday no";
fhem_set"dimplexSIW8TES dimhp_trigger_value 1-hc-raise";
##fhem_set"sdimplexSIW8TES dimhp_trigger_(monday|tuesday|wednesday|thursday|friday|saturday|sunday) no";
fhem_set"dimplexSIW8TES dimhp_trigger_monday no";
fhem_set"dimplexSIW8TES dimhp_trigger_tuesday no";
fhem_set"dimplexSIW8TES dimhp_trigger_wednesday no";
fhem_set"dimplexSIW8TES dimhp_trigger_thursday no";
fhem_set"dimplexSIW8TES dimhp_trigger_friday no";
fhem_set"dimplexSIW8TES dimhp_trigger_saturday no";
fhem_set"dimplexSIW8TES dimhp_trigger_sunday no";
}
}
}
dimplex_nacherwaermung_aktivieren {
if ( [dim_Warmwassertemperatur] or [dim_Ruecklauftemperatur] ) {
set_Reading("diff_SOLL_IST",([dim_Ruecklaufsolltemperatur] + [dim_HeizungHysterese] - [dim_Ruecklauftemperatur]),1);
if ( [08:45-14:30] and [dim_status_heatpump:state] == 2 and [$SELF:diff_SOLL_IST] < 0.2 and [PROPLANTA:fc0_rad] > 2.9 and [dim_Warmwassertemperatur:state] < 49 ) {
fhem_set"dim_WarmwasserSollTemperatur 60";
fhem_set"dim_WarmwasserHysterese 0";
fhem_set"signal send Heizung: Rücklauftemperatur fast erreicht. Es fehlen noch ". get_Reading("diff_SOLL_IST"). " Grad. Warmwasser: ".[dim_Warmwassertemperatur:state]." Grad.";
}
}
}
FUUID 620fc9a2-f33f-8b20-0eb2-d2136a448da8f3c4
MODEL Perl
NAME HeizungSteuerung
NOTIFYDEV dim_Ruecklauftemperatur,dim_Warmwassertemperatur,global,dim_HeizungHysterese,dim_status_heatpump,HeizungSteuerung,dim_block_heatpump,PROPLANTA,dim_Ruecklaufsolltemperatur
NR 182
NTFY_ORDER 50-HeizungSteuerung
STATE initialized
TYPE DOIF
VERSION 25756 2022-02-28 08:27:14
OLDREADINGS:
READINGS:
2022-03-10 23:41:42 AbsenkungAktiv ja
2022-03-08 12:25:55 AnhebungAktiv nein
2022-03-11 11:10:52 diff_SOLL_IST -30.4
2022-03-11 11:10:59 mode enabled
2022-03-11 11:11:00 state initialized
2022-03-11 11:11:00 timer_01_c05 11.03.2022 20:00:00
2022-03-11 11:11:00 timer_02_c06 12.03.2022 08:45:00
2022-03-11 11:11:00 timer_03_c06 11.03.2022 14:30:00
Regex:
accu:
collect:
cond:
HeizungSteuerung:
4:
AbsenkungAktiv ^HeizungSteuerung$:^AbsenkungAktiv:
AnhebungAktiv ^HeizungSteuerung$:^AnhebungAktiv:
5:
diff_SOLL_IST ^HeizungSteuerung$:^diff_SOLL_IST:
PROPLANTA:
4:
fc1_rad ^PROPLANTA$:^fc1_rad:
5:
fc0_rad ^PROPLANTA$:^fc0_rad:
dim_HeizungHysterese:
5:
&STATE ^dim_HeizungHysterese$
dim_Ruecklaufsolltemperatur:
5:
&STATE ^dim_Ruecklaufsolltemperatur$
dim_Ruecklauftemperatur:
5:
&STATE ^dim_Ruecklauftemperatur$
dim_Warmwassertemperatur:
5:
&STATE ^dim_Warmwassertemperatur$
state ^dim_Warmwassertemperatur$:^state:
dim_block_heatpump:
2:
&STATE ^dim_block_heatpump$
state ^dim_block_heatpump$:^state:
dim_status_heatpump:
0:
state ^dim_status_heatpump$:^state:
1:
state ^dim_status_heatpump$:^state:
3:
state ^dim_status_heatpump$:^state:
5:
state ^dim_status_heatpump$:^state:
attr:
cmdState:
wait:
waitdel:
condition:
0
if ( ::ReadingValDoIf($hash,'dim_status_heatpump','state') == 2 ) {
fhem_set"signal send Heizung wurde aktiviert";
}
1
if ( ::ReadingValDoIf($hash,'dim_status_heatpump','state') == 4 ) {
fhem_set"signal send Warmwasser wurde aktiviert";
}
2
if ( ::ReadingValDoIf($hash,'dim_block_heatpump','state') == 13 or ::ReadingValDoIf($hash,'dim_block_heatpump','state') == 19) {
fhem_set"signal send Nacherwärmung Warmwasser wurde aktiviert oder Hochdruck. ".::InternalDoIf($hash,'dim_block_heatpump','STATE');
fhem_set"dim_Parallelverschiebung 21";
fhem_set"dim_HeizungHysterese 3";
}
3
if ( ::ReadingValDoIf($hash,'dim_status_heatpump','state') == 1) {
fhem_set"signal send Heizung deaktiviert";
fhem_set"dim_Parallelverschiebung 21";
fhem_set"dim_HeizungHysterese 3";
fhem_set"dim_WarmwasserSollTemperatur 48";
fhem_set"dim_WarmwasserHysterese 4";
}
4
if ( ::DOIF_time_once($hash,0,$wday) ) {
if ( ::ReadingValDoIf($hash,'PROPLANTA','fc1_rad') > 2.9 ) {
if ( ::ReadingValDoIf($hash,'HeizungSteuerung','AbsenkungAktiv') eq "ja" ) {
fhem_set"dimplexSIW8TES dimhp_trigger_value 1-hc-lower";
fhem_set"dimplexSIW8TES dimhp_trigger_monday time1";
fhem_set"dimplexSIW8TES dimhp_trigger_tuesday time1";
fhem_set"dimplexSIW8TES dimhp_trigger_wednesday time1";
fhem_set"dimplexSIW8TES dimhp_trigger_thursday time1";
fhem_set"dimplexSIW8TES dimhp_trigger_friday time1";
fhem_set"dimplexSIW8TES dimhp_trigger_saturday time1";
fhem_set"dimplexSIW8TES dimhp_trigger_sunday time1";
} elsif ( ::ReadingValDoIf($hash,'HeizungSteuerung','AbsenkungAktiv') eq "nein" ) {
fhem_set"dimplexSIW8TES dimhp_trigger_value 1-hc-lower";
fhem_set"dimplexSIW8TES dimhp_trigger_monday no";
fhem_set"dimplexSIW8TES dimhp_trigger_tuesday no";
fhem_set"dimplexSIW8TES dimhp_trigger_wednesday no";
fhem_set"dimplexSIW8TES dimhp_trigger_thursday no";
fhem_set"dimplexSIW8TES dimhp_trigger_friday no";
fhem_set"dimplexSIW8TES dimhp_trigger_saturday no";
fhem_set"dimplexSIW8TES dimhp_trigger_sunday no";
}
if ( ::ReadingValDoIf($hash,'HeizungSteuerung','AnhebungAktiv') eq "ja" ) {
fhem_set"dimplexSIW8TES dimhp_trigger_value 1-hc-raise";
fhem_set"dimplexSIW8TES dimhp_trigger_monday time1";
fhem_set"dimplexSIW8TES dimhp_trigger_tuesday time1";
fhem_set"dimplexSIW8TES dimhp_trigger_wednesday time1";
fhem_set"dimplexSIW8TES dimhp_trigger_thursday time1";
fhem_set"dimplexSIW8TES dimhp_trigger_friday time1";
fhem_set"dimplexSIW8TES dimhp_trigger_saturday time1";
fhem_set"dimplexSIW8TES dimhp_trigger_sunday time1";
} elsif ( ::ReadingValDoIf($hash,'HeizungSteuerung','AnhebungAktiv') eq "nein" ) {
fhem_set"dimplexSIW8TES dimhp_trigger_value 1-hc-raise";
fhem_set"dimplexSIW8TES dimhp_trigger_monday no";
fhem_set"dimplexSIW8TES dimhp_trigger_tuesday no";
fhem_set"dimplexSIW8TES dimhp_trigger_wednesday no";
fhem_set"dimplexSIW8TES dimhp_trigger_thursday no";
fhem_set"dimplexSIW8TES dimhp_trigger_friday no";
fhem_set"dimplexSIW8TES dimhp_trigger_saturday no";
fhem_set"dimplexSIW8TES dimhp_trigger_sunday no";
}
} else {
fhem_set"dimplexSIW8TES dimhp_trigger_value 1-hc-lower";
fhem_set"dimplexSIW8TES dimhp_trigger_monday no";
fhem_set"dimplexSIW8TES dimhp_trigger_tuesday no";
fhem_set"dimplexSIW8TES dimhp_trigger_wednesday no";
fhem_set"dimplexSIW8TES dimhp_trigger_thursday no";
fhem_set"dimplexSIW8TES dimhp_trigger_friday no";
fhem_set"dimplexSIW8TES dimhp_trigger_saturday no";
fhem_set"dimplexSIW8TES dimhp_trigger_sunday no";
fhem_set"dimplexSIW8TES dimhp_trigger_value 1-hc-raise";
fhem_set"dimplexSIW8TES dimhp_trigger_monday no";
fhem_set"dimplexSIW8TES dimhp_trigger_tuesday no";
fhem_set"dimplexSIW8TES dimhp_trigger_wednesday no";
fhem_set"dimplexSIW8TES dimhp_trigger_thursday no";
fhem_set"dimplexSIW8TES dimhp_trigger_friday no";
fhem_set"dimplexSIW8TES dimhp_trigger_saturday no";
fhem_set"dimplexSIW8TES dimhp_trigger_sunday no";
}
}
5
if ( ::InternalDoIf($hash,'dim_Warmwassertemperatur','STATE') or ::InternalDoIf($hash,'dim_Ruecklauftemperatur','STATE') ) {
set_Reading("diff_SOLL_IST",(::InternalDoIf($hash,'dim_Ruecklaufsolltemperatur','STATE') + ::InternalDoIf($hash,'dim_HeizungHysterese','STATE') - ::InternalDoIf($hash,'dim_Ruecklauftemperatur','STATE')),1);
if ( ::DOIF_time($hash,1,2,$wday,$hms) and ::ReadingValDoIf($hash,'dim_status_heatpump','state') == 2 and ::ReadingValDoIf($hash,'HeizungSteuerung','diff_SOLL_IST') < 0.2 and ::ReadingValDoIf($hash,'PROPLANTA','fc0_rad') > 2.9 and ::ReadingValDoIf($hash,'dim_Warmwassertemperatur','state') < 49 ) {
fhem_set"dim_WarmwasserSollTemperatur 60";
fhem_set"dim_WarmwasserHysterese 0";
fhem_set"signal send Heizung: Rücklauftemperatur fast erreicht. Es fehlen noch ". get_Reading("diff_SOLL_IST"). " Grad. Warmwasser: ".::ReadingValDoIf($hash,'dim_Warmwassertemperatur','state')." Grad.";
}
}
days:
helper:
NOTIFYDEV dim_Ruecklauftemperatur,dim_Warmwassertemperatur,global,dim_HeizungHysterese,dim_status_heatpump,HeizungSteuerung,dim_block_heatpump,PROPLANTA,dim_Ruecklaufsolltemperatur
globalinit 1
last_timer 3
sleeptimer -1
internals:
all dim_block_heatpump:STATE dim_Warmwassertemperatur:STATE dim_Ruecklauftemperatur:STATE dim_Ruecklaufsolltemperatur:STATE dim_HeizungHysterese:STATE
interval:
1 -1
2 1
intervalfunc:
localtime:
0 1647025200
1 1647071100
2 1647005400
perlblock:
0 start_heizen
1 start_warmwasser
2 start_nacherwaermung_block
3 stop_heizung
4 dimplex_zeitplan_setzen
5 dimplex_nacherwaermung_aktivieren
readings:
all dim_status_heatpump:state dim_block_heatpump:state PROPLANTA:fc1_rad HeizungSteuerung:AbsenkungAktiv HeizungSteuerung:AnhebungAktiv HeizungSteuerung:diff_SOLL_IST PROPLANTA:fc0_rad dim_Warmwassertemperatur:state
realtime:
0 20:00:00
1 08:45:00
2 14:30:00
time:
0 20:00:00
1 08:45:00
2 14:30:00
timeCond:
0 4
1 5
2 5
timer:
0 0
1 0
2 0
timers:
4 0
5 1 2
triggertime:
1647005400:
localtime 1647005400
hash:
1647025200:
localtime 1647025200
hash:
1647071100:
localtime 1647071100
hash:
uiState:
uiTable:
Attributes:
do always
readingList AnhebungAktiv AbsenkungAktiv AnhebungAktiveren AbsenkungAktivieren
room Dimplex,E3DC
setList AnhebungAktiv:ja,nein AbsenkungAktiv:ja,nein AnhebungAktivieren:ja,nein AbsenkungAktivieren:ja,nein
Die Teile
fhem_set"dimplexSIW8TES dimhp_trigger_tuesday no";
fhem_set"dimplexSIW8TES dimhp_trigger_wednesday no";
...
oder
fhem_set"dimplexSIW8TES dimhp_trigger_tuesday time1";
fhem_set"dimplexSIW8TES dimhp_trigger_wednesday time1";
...
kommen immer mal vor. Wie kann ich diese ähnlich gelagerten Readings übersichtlicher in das DOIF packen? Ich woltle erst so was wie
fhem_set"dimplexSIW8TES dimhp_trigger_(monday|tuesday|wednesday|thursday|friday|saturday|sunday).* time1";
ähnlich der DEVSPEC versuchen, aber das ist wohl syntaktisch nicht vorgesehen. ;-) Hat jemand einen Ansatz zum Probieren für mich?
Ich würde Blöcke, die die gleichen Trigger haben zusammenlegen: Wie start_heizen und start_warmwasser
Regex-Angaben funtionieren auch in fhem_set, also z. B. fhem_set "bla.* on"
Solche Angaben schlucken unnötig Performance:
if ( [20:00] ) {
if ( [PROPLANTA:fc1_rad] > 2.9 ) {
if ( [$SELF:AbsenkungAktiv] eq "ja" ) {...
Hier triggert unnötig sowohl [PROPLANTA:fc1_rad] als auch [$SELF:AbsenkungAktiv], denn nur um 20:00 kann die if-Abfrage erfolgen. Daher in solchen Fällen mit ? die Trigger rausnehmen.
Gemeinsamen Programmcode sollte man in subs auslagern.
Danke für deine Tipps.
Zitat von: Damian am 11 März 2022, 17:54:35
Regex-Angaben funtionieren auch in fhem_set, also z. B. fhem_set "bla.* on"
Damit meinst du aber auch nur den Teil des Devices? Ich würde ja gerne bei den Readings wie oben erwähnt (
fhem_set"dimplexSIW8TES dimhp_trigger_(monday|tuesday|wednesday|thursday|friday|saturday|sunday).* time1";) Regex zum Setzen von Werten nutzen.
Also so ähnlich wie
deletereading dimplexSIW8TES dimhp_trigger_(monday|tuesday|wednesday|thursday|friday|saturday|sunday).* funktionieren würde.
Zitat von: h002 am 11 März 2022, 19:54:32
Danke für deine Tipps.
Damit meinst du aber auch nur den Teil des Devices? Ich würde ja gerne bei den Readings wie oben erwähnt (fhem_set"dimplexSIW8TES dimhp_trigger_(monday|tuesday|wednesday|thursday|friday|saturday|sunday).* time1";) Regex zum Setzen von Werten nutzen.
Also so ähnlich wie deletereading dimplexSIW8TES dimhp_trigger_(monday|tuesday|wednesday|thursday|friday|saturday|sunday).* funktionieren würde.
Das ist FHEM-Syntax, die Regexangaben zu Devices werden als devspec bezeichnet. fhem_set ist entspricht dem set-Befehl, für alle anderen FHEM-Befehle sollte man die fhem-Funktion nutzen. Damit hat man die volle Funktionalität wie in der Kommandozeile.