Hallo,
folgende DoIf Abfrage geht nicht mehr (schon seit >1 Jahr) und ich weiß nicht warum... Bisher hatte ich noch nicht die Zeit und die Muse danach zu schauen...
([09:00-21:00,+:15] and checkBeschatten("w")) (set .*West_RL pct 20) DOELSEIF
([09:00-21:00,+:15] and !checkBeschatten("w") and [duAutomatic:state] eq "on" and [HM_Hellligkeit:state]>20) (set .*West_RL pct 100) DOELSEIF
([16:00-23:00] and [HM_Hellligkeit:state]<20] or [21:00]) (set .*West_RL pct 0)
Die Perl Routine checkBeschatten() lieft immer 0 oder 1 zurück und erstellt einen Logbook Eintrag. Im Logbook sehe ich Einträge mit 0 und mit 1. Von daher muss ich davon ausgehen, dass die Routine mehrfach am Tag aufgerufen wird und eigentlich auch die cmd1 ausführen müsste. Aber genau das passiert nicht mehr. Es wird nur noch morgens cmd2 ausgeführt und abends cmd3.
Das Attribut "do always" habe ich auch schon probiert.
Ich verstehe es nicht. Vielleicht fällt jemanden hierzu was ein.
Gruß
luftdieb
Hi,
kannst Du nochmal tief Luft holen und die Widersprüche lösen?
ZitatCmd1 Bedingung wird ausgeführt, obwohl die Bedingungen alle erfüllt sind
Zitatmehrfach am Tag aufgerufen wird und eigentlich auch die cmd1 ausführen müsste. Aber genau das passiert nicht mehr.
Wird jetzt oder wird nicht?
Zumindest in der 3 Bedingung ist ein Fehler:
Zitat([16:00-23:00] and [HM_Hellligkeit:state]<20] or [21:00])
Ein list zum fraglichen Zeitpunkt ist eventuell aussagekräftiger.
Gruß Otto
Hi Otto,
sorry, irgendwie scheint die Beschreibung widersprüche zuzulassen :-)
Mein Problem ist, dass Cmd1 nie ausgeführt wird. Ich versuchte zu schreiben, dass die Perl Funktion checkBeschatten() mehrfach am Tag aufgerufen wird und dies auch 1 zurückliefert, was beschatten bedeuten würde und daher cmd1 ausgeführt werden sollte... Das passiert aber nicht :-(
Oder kann doif nicht 1 als true interpretieren?
Gruß
luftdieb
Deine Beschreibung - Deine Widersprüche...
Deine DEF bringt folgenden Fehler wenn ich die speichern will:
test DOIF: right bracket without left bracket: ] or [21:00]
Also: wie immer Du es fertig gebracht hast, aber dieses DOIF macht gar nix, das ist einfach falsch. Oder Du hast hier einen Fake gepostet ;)
Gruß Otto
Poste doch einfach list von deinem DOIF, dann kann man dazu was sagen, sonst wird es wie immer ein Rätselraten.
ZitatOder kann doif nicht 1 als true interpretieren?
Doch, das kann es. Ich hab das testhalber mal nachgestellt.
Zum List des DOIF könntest Du noch die Funktion checkBeschatten() hier mal zeigen. Ich finde den Ansatz über die Funktion eigentlich zu kompliziert, das kannst Du doch bestimmt direkt im DOIF machen und bleibst "sprachlich" in einer Welt (Stichwort: DOIF_Readings).
Ich hatte das DoIf statement etwas vereinachft darstellen wollen. Hier ist das Original
([09:00-21:00,+:15] and checkBeschatten("w")) (set .*West_RL pct [duBeschattenPctRollo:state]) DOELSEIF
([09:00-21:00,+:15] and !checkBeschatten("w") and [duAutomatic:state] eq "on" and [HM_Hellligkeit:state]>[duHelligkeit:state]) (set .*West_RL pct 100) DOELSEIF
([16:00-23:00] and [HM_Hellligkeit:state]<[duHelligkeit:state] or [21:00]) (set .*West_RL pct 0)
Da das DoIf mir zu groß wurde, habe die zumindest die Beschattung ausgelagert in die 99_myUtils. Hier ist das Modul:
sub checkBeschatten($) {
# Benötigt: nur die Himmelsrichtung (n o s w)
# Rückgabe: 1 = Beschatten sinnvoll
# 0 =Beschatten nicht erforderlich
my ($Himmelsrichtung) = @_;
my $CurrentSunPosition = ReadingsVal("TC_TWILIGHT","azimuth", "");
my $CurrentTemp = ReadingsVal("Heizung","Temp-Aussen","");
my $CurrentMaxTemp = ReadingsVal("duBeschattenTemp","state","");
my $Automatic = ReadingsVal("duAutomatic","state","");
my $HelligkeitBeschattung = ReadingsVal("duHelligkeitBeschattung","state","");
my $HelligkeitBeschattungZeit = ReadingsVal("duHelligkeitBeschattungZeit","state","");
my $CurrentBrightness = movingAverage("HM_Hellligkeit","1.LUX",$HelligkeitBeschattungZeit,"average");
my $BeschattenAktiv = ReadingsVal("duBeschattenAktiv","state","");
# my $CurrentBrightness = ReadingsVal("HM_Hellligkeit","1.LUX","");
# select round(avg (value),2) from history where history.DEVICE = 'HM_Hellligkeit' and history.TIMESTAMP > DATE_ADD(Now(),INTERVAL -1500 Minute)
Log3(undef,4,"checkBeschatten: $Himmelsrichtung / SonnenPos:$CurrentSunPosition / CurrTemp:$CurrentTemp / MaxTemp:$CurrentMaxTemp / Auto:$Automatic / Helligkeit:$CurrentBrightness");
my $timestamp = getTime('%H:%M:%S');
if ($CurrentBrightness < $HelligkeitBeschattung){
addRollbufferBeschatten($timestamp." Zu Dunkel! (".$CurrentBrightness.")");
Log3(undef,4,"checkBeschatten: Zu Dunkel! ($CurrentBrightness)");
return (0);
}
if ($Himmelsrichtung eq ""){
Log3(undef,3,"checkBeschatten: Keine Himmerlsrichtung angegeben!");
return ( 0 );
}
if ($Automatic eq "off"){
Log3(undef,3,"checkBeschatten: duAutomatic = 0");
return ( 0 );
}
if ($BeschattenAktiv eq "0"){
Log3(undef,3,"checkBeschatten: duBeschattenAktiv = 0");
return ( 0 );
}
if ($CurrentTemp < $CurrentMaxTemp ){
addRollbufferBeschatten($timestamp." Kalt genug!(".$CurrentTemp.")");
Log3(undef,4,"checkBeschatten: Kalt genug!");
return ( 0 );
}
if ($CurrentSunPosition > 60 and $CurrentSunPosition < 157 and $Himmelsrichtung eq "o") {
addRollbufferBeschatten($timestamp."_".$Himmelsrichtung."_ Beschattung sinnvoll!");
Log3(undef,3,"checkBeschatten: Im Osten beschatten sinnvoll");
return ( 1 );
}
elsif ($CurrentSunPosition > 152 and $CurrentSunPosition < 268 and $Himmelsrichtung eq "s") {
addRollbufferBeschatten($timestamp."_".$Himmelsrichtung."_ Beschattung sinnvoll!");
Log3(undef,3,"checkBeschatten: Im Sueden beschatten sinnvoll");
return ( 1 );
}
elsif ($CurrentSunPosition > 230 and $Himmelsrichtung eq "w") {
addRollbufferBeschatten($timestamp."_".$Himmelsrichtung."_ Beschattung sinnvoll!");
Log3(undef,3,"checkBeschatten: Im Westen beschatten sinnvoll");
return ( 1 );
}
else {
addRollbufferBeschatten($timestamp."_".$Himmelsrichtung."_ Keine Beschattung erforderlich!");
Log3(undef,3,$Himmelsrichtung."_checkBeschatten: Keine Beschattung erforderlich");
Log3(undef,4,"checkBeschatten: $Himmelsrichtung / SonnenPos:$CurrentSunPosition / CurrTemp:$CurrentTemp / MaxTemp:$CurrentMaxTemp / Auto:$Automatic / Helligkeit:$CurrentBrightness");
return ( 0 );
}
return ( 0 );
}
Sorry wenn ich nicht gleich Antworte... Aber irgendwie fehlt mir Zeit :-)
Gruß
luftdieb
Bitte ein list vom DOIF (nicht nur die DEF) und die Definition von addRollbufferBeschatten() noch.
Schau dir mal deinen if-Bandwurm noch mal an. So wie du das gemacht hast, brauchst du nirgendwo ein elsif und das letzte return (bitte ohne Klammern wenn du nur einen Wert zurück geben willst) wird niemals erreicht.
sub checkBeschatten($) {
Erklär mir mal was ein Prototyp tut.
if ($CurrentBrightness < $HelligkeitBeschattung){
HelligkeitBeschattung ist ein String und das Ergebnis von movingAverage() (falls du die aus dem Wiki (https://wiki.fhem.de/wiki/Gleitende_Mittelwerte_berechnen_und_loggen) genommen hast), eine Zahl. Nimm lieber ReadingsNum() und lösche bitte den Prototypen.
addRollbufferBeschatten($timestamp." Zu Dunkel! (".$CurrentBrightness.")");
Nimm für sowas doch bitte qq (https://perldoc.perl.org/5.32.0/perlop.html#Quote-Like-Operators) und konkateniere den String nicht durch.
if ($BeschattenAktiv eq "0"){
Tests auf "0" sind in Perl false, d.h. du brauchst kein eq.
if ($CurrentTemp < $CurrentMaxTemp ){
Beides Strings die du numerisch vergleichst. Nimm lieber ReadingsNum().
Hallo Christoph,
vielen Dank dass du dir mein Problem angeschaut hast. Mein Perl ist sicherlich grotig... Aber ich habe den Eindruck, dass die Funktion checkBeschatten($) ihren Dienst erfüllt. Zumindest gibt sie mir zuverlässig, wenn ich es von Hand aufrufe im FHEM sauber 0 und 1 zurück, je nach Übergabe Parameter.
Ich nehme mal an, dass du mit Prototype den Übergabeparameter ($) meinst. Damit möchte ich die Himmelsrichtung als String (s, o, w) übergeben, um passend hierzu abzufragen, ob Beschattung sinnvoll ist oder nicht.
Die Funktion "addRollbufferBeschatten()" schreibt einfach nur ein Zustand in einen Rollpuffer, der im FHEM angezeigt wird.
Ich werde deine Empfehlung zur Verbesserung des Perl Scriptes mir mal genauer anschauen.
Ich frage mich allerdings immer noch, warum das doif nicht funktioniert. Wenn ich mehrfach die Funktion "{checkBeschatten("w")}" aus FHEM aufrufe, kommt reproduzierbar eine 1 zurück, wenn Beschatten sinnvoll ist. Für eine andere Himmelsrichtung, z.B. {checkBeschatten("o")} kommt dann zuverlässig eine 0 zurück. Von daher bin ich bisher überzeugt, dass es was mit dem doif zu tun haben muss.
Gruß
luftdieb
Zitat von: luftdieb am 12 September 2020, 16:20:05Ich frage mich allerdings immer noch, warum das doif nicht funktioniert.
So wie es geht, wirst Du dich noch lange fragen.
Zitat von: Otto123 am 30 August 2020, 22:12:27
Ein list zum fraglichen Zeitpunkt ist eventuell aussagekräftiger.
Zitat von: Damian am 01 September 2020, 22:42:34
Poste doch einfach list von deinem DOIF, dann kann man dazu was sagen, sonst wird es wie immer ein Rätselraten.
Zitat von: Sany am 02 September 2020, 09:07:15
Zum List des DOIF könntest Du ...
Zitat von: Christoph Morrison am 07 September 2020, 18:05:32
Bitte ein list vom DOIF (nicht nur die DEF)
Also... zum 5. Mal: poste doch bitte endlich ein "list" vom DOIF. Nur damit kann man weiter analysieren. Du hast schon fast 2 Wochen verloren.
Oops. Sorry, das war nicht mit Absicht ignoriert worden.
Die list <doif> Funktion kannte ich bisher noch gar nicht und habe sie im DoIf "Gerät" gesucht. Aber eine kurze google Suche verschafft Klarheit. Hier die gewünschte Ausgabe
Internals:
DEF ([09:00-21:00,+:15] and checkBeschatten("w")) (set .*West_RL pct [duBeschattenPctRollo:state]) DOELSEIF
([09:00-21:00,+:15] and !checkBeschatten("w") and [duAutomatic:state] eq "on" and [HM_Hellligkeit:state]>[duHelligkeit:state]) (set .*West_RL pct 100) DOELSEIF
([16:00-23:00] and [HM_Hellligkeit:state]<[duHelligkeit:state] or [21:00]) (set .*West_RL pct 0)
FUUID 5c4e1f48-f33f-68c5-65c8-7f81acec9890d03a
MODEL FHEM
NAME di_Rollos_Westen
NOTIFYDEV HM_Hellligkeit,global,duAutomatic,duHelligkeit
NR 104
NTFY_ORDER 50-di_Rollos_Westen
STATE cmd_2
TYPE DOIF
VERSION 22588 2020-08-12 19:25:15
READINGS:
2020-09-13 09:16:28 Device HM_Hellligkeit
2020-09-13 09:15:00 cmd 2
2020-09-13 09:15:00 cmd_event timer_6
2020-09-13 09:15:00 cmd_nr 2
2020-09-13 09:16:28 e_HM_Hellligkeit_state 2135.6
2020-09-12 10:00:00 e_duAutomatic_state on
2020-09-01 20:57:15 e_duHelligkeit_state 17
2020-08-27 22:56:01 mode enabled
2020-09-13 09:15:00 state cmd_2
2020-09-12 21:00:00 timer_01_c01 13.09.2020 09:00:00
2020-09-12 21:00:00 timer_02_c01 13.09.2020 21:00:00
2020-09-13 09:15:00 timer_03_c01 13.09.2020 09:30:00
2020-09-12 21:00:00 timer_04_c02 13.09.2020 09:00:00
2020-09-12 21:00:00 timer_05_c02 13.09.2020 21:00:00
2020-09-13 09:15:00 timer_06_c02 13.09.2020 09:30:00
2020-09-12 23:00:00 timer_07_c03 13.09.2020 16:00:00
2020-09-12 23:00:00 timer_08_c03 13.09.2020 23:00:00
2020-09-12 21:00:00 timer_09_c03 13.09.2020 21:00:00
2020-09-13 09:10:41 wait_timer 13.09.2020 09:20:41 cmd_2 HM_Hellligkeit
Regex:
accu:
cond:
HM_Hellligkeit:
0:
1:
state ^HM_Hellligkeit$:^state:
2:
state ^HM_Hellligkeit$:^state:
duAutomatic:
0:
1:
state ^duAutomatic$:^state:
duHelligkeit:
0:
1:
state ^duHelligkeit$:^state:
2:
state ^duHelligkeit$:^state:
attr:
cmdState:
wait:
0:
600
1:
600
2:
240
waitdel:
condition:
0 ::DOIF_time($hash,0,1,$wday,$hms) and checkBeschatten("w")
1 ::DOIF_time($hash,3,4,$wday,$hms) and !checkBeschatten("w") and ::ReadingValDoIf($hash,'duAutomatic','state') eq "on" and ::ReadingValDoIf($hash,'HM_Hellligkeit','state')>::ReadingValDoIf($hash,'duHelligkeit','state')
2 ::DOIF_time($hash,6,7,$wday,$hms) and ::ReadingValDoIf($hash,'HM_Hellligkeit','state')<::ReadingValDoIf($hash,'duHelligkeit','state') or ::DOIF_time_once($hash,8,$wday)
days:
do:
0:
0 set .*West_RL pct [duBeschattenPctRollo:state]
1:
0 set .*West_RL pct 100
2:
0 set .*West_RL pct 0
3:
helper:
DEVFILTER ^global$|^duHelligkeit$|^duAutomatic$|^HM_Hellligkeit$
NOTIFYDEV global|duHelligkeit|duAutomatic|HM_Hellligkeit
event 1.LUX: 2135.6,control: 2135.6,2135.6,hmstate: 2135.6
globalinit 1
last_timer 9
sleepdevice HM_Hellligkeit
sleepsubtimer 0
sleeptimer 1
timerdev HM_Hellligkeit
timerevent 1.LUX: 2135.6,control: 2135.6,2135.6,hmstate: 2135.6
triggerDev HM_Hellligkeit
timerevents:
1.LUX: 2135.6
control: 2135.6
2135.6
hmstate: 2135.6
timereventsState:
1.LUX: 2135.6
control: 2135.6
state: 2135.6
hmstate: 2135.6
triggerEvents:
1.LUX: 2135.6
control: 2135.6
2135.6
hmstate: 2135.6
triggerEventsState:
1.LUX: 2135.6
control: 2135.6
state: 2135.6
hmstate: 2135.6
internals:
interval:
0 -1
1 0
3 -1
4 3
6 -1
7 6
intervalfunc:
2 ::DOIF_time($hash,0,1,$wday,$hms)
5 ::DOIF_time($hash,3,4,$wday,$hms)
intervaltimer:
0 2
1 2
3 5
4 5
localtime:
0 1599980400
1 1600023600
2 1599982200
3 1599980400
4 1600023600
5 1599982200
6 1600005600
7 1600030800
8 1600023600
perlblock:
readings:
all duAutomatic:state HM_Hellligkeit:state duHelligkeit:state
realtime:
0 09:00:00
1 21:00:00
2 09:30:00
3 09:00:00
4 21:00:00
5 09:30:00
6 16:00:00
7 23:00:00
8 21:00:00
time:
0 09:00:00
1 21:00:00
2 +:15
3 09:00:00
4 21:00:00
5 +:15
6 16:00:00
7 23:00:00
8 21:00:00
timeCond:
0 0
1 0
2 0
3 1
4 1
5 1
6 2
7 2
8 2
timer:
0 0
1 0
2 0
3 0
4 0
5 0
6 0
7 0
8 0
timers:
0 0 1 2
1 3 4 5
2 6 7 8
trigger:
triggertime:
1599982200:
localtime 1599982200
hash:
1600005600:
localtime 1600005600
hash:
1600023600:
localtime 1600023600
hash:
1600030800:
localtime 1600030800
hash:
uiState:
uiTable:
Attributes:
alias di_Rollos_Westen
do always
room Automatismen
verbose 5
wait 600:600:240
Wenn es nachher etwas wärmer ist und die Beschattung zuschlage sollte, schicke ich noch mal die list<> Ausgabe.
Zitat von: luftdieb am 12 September 2020, 16:20:05
Hallo Christoph,
vielen Dank dass du dir mein Problem angeschaut hast. Mein Perl ist sicherlich grotig...
Deshalbe habe ich dir Tipps gegeben, wie du dein Perl verbessern kannst. Dein
list ist jetzt schon mal gut, aber da
checkBeschatten im Moment eine 0 zurück geliefert hat (sonst wäre die 2. Cond. nicht wahr), kann man schlecht beurteilen warum die 1. Cond. nicht wahr ist. Insofern hast du Recht, dass du noch mal ein list machen musst, wenn das DOIF den "falschen" (aka nicht intendierten) Zustand hat.
Ich würde übrigens zum Debugging den Rückgabewert von
checkBeschatten in ein Reading im DOIF schreiben lassen, folgend als formatierte DEF, denn der Rückgabewert ist im
list des DOIF nicht enthalten:
DOIF
(
[09:00-21:00,+:15]
and checkBeschatten("w")
)
(
setreading $SELF checkBeschatten_retVal_cond1 checkBeschatten(q(w)),
set .*West_RL pct [duBeschattenPctRollo:state]
)
DOELSEIF
(
[09:00-21:00,+:15]
and !checkBeschatten("w")
and [duAutomatic:state] eq "on"
and [HM_Hellligkeit:state] > [duHelligkeit:state]
)
(
setreading $SELF checkBeschatten_retVal_cond2 !checkBeschatten(q(w)),
set .*West_RL pct 100
)
DOELSEIF
(
[16:00-23:00]
and [HM_Hellligkeit:state] < [duHelligkeit:state]
or [21:00]
)
(
set .*West_RL pct 0
)
Hallo,
hier die Ausgabe, nachdem ich die SollTemperatur von 26 auf 23 reduziert habe, um eine 1 bei checkbeschatten("s") zu erhalten.
Internals:
DEF (
[09:00-21:00,+:15]
and checkBeschatten("s")
)
(
setreading $SELF checkBeschatten_retVal_cond1 checkBeschatten(q(s)),
set .*Sued_RL pct [duBeschattenPctRollo:state]
)
DOELSEIF
(
[09:00-21:00,+:15]
and !checkBeschatten("s")
and [duAutomatic:state] eq "on"
and [HM_Hellligkeit:state] > [duHelligkeit:state]
)
(
setreading $SELF checkBeschatten_retVal_cond2 !checkBeschatten(q(s)),
set .*Sued_RL pct 100
)
DOELSEIF
(
[16:00-23:00]
and [HM_Hellligkeit:state] < [duHelligkeit:state]
or [21:00]
)
(
set .*Sued_RL pct 0
)
FUUID 5c4e1f45-f33f-68c5-e288-334c34dd90a527d7
MODEL FHEM
NAME di_Rollos_Sueden
NOTIFYDEV global,HM_Hellligkeit,duAutomatic,duHelligkeit
NR 90
NTFY_ORDER 50-di_Rollos_Sueden
STATE initialized
TYPE DOIF
VERSION 22588 2020-08-12 19:25:15
READINGS:
2020-09-13 13:08:30 Device HM_Hellligkeit
2020-09-13 13:07:14 cmd 0
2020-09-13 13:08:30 e_HM_Hellligkeit_state 6063.4
2020-09-13 13:07:14 mode enabled
2020-09-13 13:07:14 state initialized
2020-09-13 13:07:14 timer_01_c01 14.09.2020 09:00:00
2020-09-13 13:07:14 timer_02_c01 13.09.2020 21:00:00
2020-09-13 13:07:14 timer_03_c01 13.09.2020 13:15:00
2020-09-13 13:07:14 timer_04_c02 14.09.2020 09:00:00
2020-09-13 13:07:14 timer_05_c02 13.09.2020 21:00:00
2020-09-13 13:07:14 timer_06_c02 13.09.2020 13:15:00
2020-09-13 13:07:14 timer_07_c03 13.09.2020 16:00:00
2020-09-13 13:07:14 timer_08_c03 13.09.2020 23:00:00
2020-09-13 13:07:14 timer_09_c03 13.09.2020 21:00:00
2020-09-13 13:08:37 wait_timer 13.09.2020 13:18:37 cmd_1 di_Rollos_Sueden
Regex:
accu:
cond:
HM_Hellligkeit:
0:
1:
state ^HM_Hellligkeit$:^state:
2:
state ^HM_Hellligkeit$:^state:
duAutomatic:
1:
state ^duAutomatic$:^state:
duHelligkeit:
1:
state ^duHelligkeit$:^state:
2:
state ^duHelligkeit$:^state:
attr:
cmdState:
wait:
0:
600
1:
600
2:
240
waitdel:
condition:
0 ::DOIF_time($hash,0,1,$wday,$hms) and checkBeschatten("s")
1 ::DOIF_time($hash,3,4,$wday,$hms) and !checkBeschatten("s") and ::ReadingValDoIf($hash,'duAutomatic','state') eq "on" and ::ReadingValDoIf($hash,'HM_Hellligkeit','state') > ::ReadingValDoIf($hash,'duHelligkeit','state')
2 ::DOIF_time($hash,6,7,$wday,$hms) and ::ReadingValDoIf($hash,'HM_Hellligkeit','state') < ::ReadingValDoIf($hash,'duHelligkeit','state') or ::DOIF_time_once($hash,8,$wday)
days:
do:
0:
0 setreading di_Rollos_Sueden checkBeschatten_retVal_cond1 checkBeschatten(q(s)), set .*Sued_RL pct [duBeschattenPctRollo:state]
1:
0 setreading di_Rollos_Sueden checkBeschatten_retVal_cond2 !checkBeschatten(q(s)), set .*Sued_RL pct 100
2:
0 set .*Sued_RL pct 0
3:
helper:
DEVFILTER ^global$|^HM_Hellligkeit$|^duAutomatic$|^duHelligkeit$
NOTIFYDEV global|HM_Hellligkeit|duAutomatic|duHelligkeit
event 1.LUX: 6063.4,control: 6063.4,6063.4,hmstate: 6063.4
globalinit 1
last_timer 9
sleepdevice di_Rollos_Sueden
sleepsubtimer 0
sleeptimer 0
timerdev
timerevent 1.LUX: 6063.4,control: 6063.4,6063.4,hmstate: 6063.4
timerevents
timereventsState
triggerDev
internals:
interval:
0 -1
1 0
3 -1
4 3
6 -1
7 6
intervalfunc:
2 ::DOIF_time($hash,0,1,$wday,$hms)
5 ::DOIF_time($hash,3,4,$wday,$hms)
intervaltimer:
0 2
1 2
3 5
4 5
localtime:
0 1600066800
1 1600023600
2 1599995700
3 1600066800
4 1600023600
5 1599995700
6 1600005600
7 1600030800
8 1600023600
readings:
all duAutomatic:state HM_Hellligkeit:state duHelligkeit:state
realtime:
0 09:00:00
1 21:00:00
2 13:15:00
3 09:00:00
4 21:00:00
5 13:15:00
6 16:00:00
7 23:00:00
8 21:00:00
time:
0 09:00:00
1 21:00:00
2 +:15
3 09:00:00
4 21:00:00
5 +:15
6 16:00:00
7 23:00:00
8 21:00:00
timeCond:
0 0
1 0
2 0
3 1
4 1
5 1
6 2
7 2
8 2
timer:
0 0
1 0
2 0
3 0
4 0
5 0
6 0
7 0
8 0
timers:
0 0 1 2
1 3 4 5
2 6 7 8
trigger:
triggertime:
1599995700:
localtime 1599995700
hash:
1600005600:
localtime 1600005600
hash:
1600023600:
localtime 1600023600
hash:
1600030800:
localtime 1600030800
hash:
1600066800:
localtime 1600066800
hash:
uiState:
uiTable:
Attributes:
alias di_Rollos_Sueden
room Automatismen
verbose 5
wait 600:600:240
Die beiden Conditions checkBeschatten_retVal_cond1 und checkBeschatten_retVal_cond2 habe ich jetzt noch nicht im Device gefunden. Evtl. muss ich hier noch etwas warten. In meinem Rollpuffer (addRollbufferBeschatten) erscheint zumindest "13:08:37_s_ Beschattung sinnvoll!".
Oh Wunder. Eben sind die Rollos runtergegangen. Hier die list Ausgabe dazu
Internals:
DEF (
[09:00-21:00,+:15]
and checkBeschatten("s")
)
(
setreading $SELF checkBeschatten_retVal_cond1 checkBeschatten(q(s)),
set .*Sued_RL pct [duBeschattenPctRollo:state]
)
DOELSEIF
(
[09:00-21:00,+:15]
and !checkBeschatten("s")
and [duAutomatic:state] eq "on"
and [HM_Hellligkeit:state] > [duHelligkeit:state]
)
(
setreading $SELF checkBeschatten_retVal_cond2 !checkBeschatten(q(s)),
set .*Sued_RL pct 100
)
DOELSEIF
(
[16:00-23:00]
and [HM_Hellligkeit:state] < [duHelligkeit:state]
or [21:00]
)
(
set .*Sued_RL pct 0
)
FUUID 5c4e1f45-f33f-68c5-e288-334c34dd90a527d7
MODEL FHEM
NAME di_Rollos_Sueden
NOTIFYDEV global,HM_Hellligkeit,duAutomatic,duHelligkeit
NR 90
NTFY_ORDER 50-di_Rollos_Sueden
STATE cmd_1
TYPE DOIF
VERSION 22588 2020-08-12 19:25:15
READINGS:
2020-09-13 13:18:18 Device HM_Hellligkeit
2020-09-13 13:18:37 checkBeschatten_retVal_cond1 checkBeschatten(q(s))
2020-09-13 13:18:38 cmd 1
2020-09-13 13:18:38 cmd_event di_Rollos_Sueden
2020-09-13 13:18:38 cmd_nr 1
2020-09-13 13:18:18 e_HM_Hellligkeit_state 6098.4
2020-09-13 13:07:14 mode enabled
2020-09-13 13:18:38 state cmd_1
2020-09-13 13:07:14 timer_01_c01 14.09.2020 09:00:00
2020-09-13 13:07:14 timer_02_c01 13.09.2020 21:00:00
2020-09-13 13:15:02 timer_03_c01 13.09.2020 13:30:00
2020-09-13 13:07:14 timer_04_c02 14.09.2020 09:00:00
2020-09-13 13:07:14 timer_05_c02 13.09.2020 21:00:00
2020-09-13 13:15:02 timer_06_c02 13.09.2020 13:30:00
2020-09-13 13:07:14 timer_07_c03 13.09.2020 16:00:00
2020-09-13 13:07:14 timer_08_c03 13.09.2020 23:00:00
2020-09-13 13:07:14 timer_09_c03 13.09.2020 21:00:00
2020-09-13 13:18:37 wait_timer no timer
Regex:
accu:
cond:
HM_Hellligkeit:
0:
1:
state ^HM_Hellligkeit$:^state:
2:
state ^HM_Hellligkeit$:^state:
duAutomatic:
1:
state ^duAutomatic$:^state:
duHelligkeit:
1:
state ^duHelligkeit$:^state:
2:
state ^duHelligkeit$:^state:
attr:
cmdState:
wait:
0:
600
1:
600
2:
240
waitdel:
condition:
0 ::DOIF_time($hash,0,1,$wday,$hms) and checkBeschatten("s")
1 ::DOIF_time($hash,3,4,$wday,$hms) and !checkBeschatten("s") and ::ReadingValDoIf($hash,'duAutomatic','state') eq "on" and ::ReadingValDoIf($hash,'HM_Hellligkeit','state') > ::ReadingValDoIf($hash,'duHelligkeit','state')
2 ::DOIF_time($hash,6,7,$wday,$hms) and ::ReadingValDoIf($hash,'HM_Hellligkeit','state') < ::ReadingValDoIf($hash,'duHelligkeit','state') or ::DOIF_time_once($hash,8,$wday)
days:
do:
0:
0 setreading di_Rollos_Sueden checkBeschatten_retVal_cond1 checkBeschatten(q(s)), set .*Sued_RL pct [duBeschattenPctRollo:state]
1:
0 setreading di_Rollos_Sueden checkBeschatten_retVal_cond2 !checkBeschatten(q(s)), set .*Sued_RL pct 100
2:
0 set .*Sued_RL pct 0
3:
helper:
DEVFILTER ^global$|^HM_Hellligkeit$|^duAutomatic$|^duHelligkeit$
NOTIFYDEV global|HM_Hellligkeit|duAutomatic|duHelligkeit
event timer_3
globalinit 1
last_timer 9
sleepdevice di_Rollos_Sueden
sleepsubtimer -1
sleeptimer -1
timerdev
timerevent timer_3
triggerDev
DOIF_eventa:
cmd_nr: 1
cmd: 1
cmd_event: di_Rollos_Sueden
cmd_1
DOIF_eventas:
cmd_nr: 1
cmd: 1
cmd_event: di_Rollos_Sueden
state: cmd_1
timerevents:
timer_3
timereventsState:
timer_3
triggerEvents:
timer_3
triggerEventsState:
timer_3
internals:
interval:
0 -1
1 0
3 -1
4 3
6 -1
7 6
intervalfunc:
2 ::DOIF_time($hash,0,1,$wday,$hms)
5 ::DOIF_time($hash,3,4,$wday,$hms)
intervaltimer:
0 2
1 2
3 5
4 5
localtime:
0 1600066800
1 1600023600
2 1599996600
3 1600066800
4 1600023600
5 1599996600
6 1600005600
7 1600030800
8 1600023600
readings:
all duAutomatic:state HM_Hellligkeit:state duHelligkeit:state
realtime:
0 09:00:00
1 21:00:00
2 13:30:00
3 09:00:00
4 21:00:00
5 13:30:00
6 16:00:00
7 23:00:00
8 21:00:00
time:
0 09:00:00
1 21:00:00
2 +:15
3 09:00:00
4 21:00:00
5 +:15
6 16:00:00
7 23:00:00
8 21:00:00
timeCond:
0 0
1 0
2 0
3 1
4 1
5 1
6 2
7 2
8 2
timer:
0 0
1 0
2 0
3 0
4 0
5 0
6 0
7 0
8 0
timers:
0 0 1 2
1 3 4 5
2 6 7 8
trigger:
triggertime:
1599996600:
localtime 1599996600
hash:
1600005600:
localtime 1600005600
hash:
1600023600:
localtime 1600023600
hash:
1600030800:
localtime 1600030800
hash:
1600066800:
localtime 1600066800
hash:
uiState:
uiTable:
Attributes:
alias di_Rollos_Sueden
room Automatismen
verbose 5
wait 600:600:240
Ich vermute es liegt an den Klammern. Beim Übernehmen der vorgeschlagenen Anpassung sind mir ein paar Klammern aufgefallen, die irgendwie unstimmig wirken. Das muss ich mir noch mal in Ruhe anschauen.
Achso, ich hatte das vorhin nur so runtergeschrieben, checkBeschattung funktioniert im Ausführungsteil ohne {()} nicht. Das muss also wie folgt heißen:
DOIF
(
[09:00-21:00,+:15]
and checkBeschatten("w")
)
(
setreading $SELF checkBeschatten_retVal_cond1 {( checkBeschatten(q(w)); )},
set .*West_RL pct [duBeschattenPctRollo:state]
)
DOELSEIF
(
[09:00-21:00,+:15]
and !checkBeschatten("w")
and [duAutomatic:state] eq "on"
and [HM_Hellligkeit:state] > [duHelligkeit:state]
)
(
setreading $SELF checkBeschatten_retVal_cond2 {( !checkBeschatten(q(w)); )},
set .*West_RL pct 100
)
DOELSEIF
(
[16:00-23:00]
and [HM_Hellligkeit:state] < [duHelligkeit:state]
or [21:00]
)
(
set .*West_RL pct 0
)
Hallo,
leider funktioniert die Beschattung noch nicht so, wie erwartet. Im Rollpuffer wird mir die Beschattung als empfohlen eingetragen aber das cmd1 vom doif wird scheinbar nicht ausgeführt. Wird cmd1 manuell aufgerufen, reagiert der Rollo und würde in die Position der Beschattung anfahren. Aber in den Attributen steht als letzter command cmd2 von heute früh.
Ich habe vom Zustand eben, wo checkBeschatten() true zurückliefert ein list<> erstellt
Internals:
DEF (
([09:00-19:00|7,+:15] or [08:00-20:00|8,+:15])
and checkBeschatten("s")
)
(
setreading $SELF checkBeschatten_retVal_cond1 {( checkBeschatten(q(s)); )},
set .*Sued_RL pct [duBeschattenPctRollo:state]
)
DOELSEIF
(
([09:00-18:30|7,+:15] or [08:00-18:30|8,+:15])
and !checkBeschatten("s")
and [duAutomatic:state] eq "on"
and [HM_Hellligkeit:state] > [duHelligkeit:state]
)
(
setreading $SELF checkBeschatten_retVal_cond2 {( !checkBeschatten(q(s)); )},
set .*Sued_RL pct 100
)
DOELSEIF
(
[16:00-23:00]
and [HM_Hellligkeit:state] < [duHelligkeit:state]
or [21:00]
)
(
set .*Sued_RL pct 0
)
FUUID 5c4e1f45-f33f-68c5-e288-334c34dd90a527d7
MODEL FHEM
NAME di_Rollos_Sueden
NOTIFYDEV duHelligkeit,HM_Hellligkeit,duAutomatic,global
NR 90
NTFY_ORDER 50-di_Rollos_Sueden
STATE cmd_2
TYPE DOIF
VERSION 22588 2020-08-12 19:25:15
READINGS:
2020-09-18 16:23:27 Device HM_Hellligkeit
2020-09-17 10:51:45 checkBeschatten_retVal_cond1 0
2020-09-18 08:00:01 checkBeschatten_retVal_cond2 1
2020-09-18 08:00:02 cmd 2
2020-09-18 08:00:02 cmd_event timer_7
2020-09-18 08:00:02 cmd_nr 2
2020-09-18 16:23:27 e_HM_Hellligkeit_state 6648.2
2020-09-18 10:00:00 e_duAutomatic_state on
2020-09-16 19:24:04 mode enabled
2020-09-18 08:00:02 state cmd_2
2020-09-17 19:00:00 timer_01_c01 18.09.2020 09:00:00|7,+:15
2020-09-17 19:00:00 timer_02_c01 18.09.2020 19:00:00|7,+:15
2020-09-17 20:00:00 timer_03_c01 18.09.2020 08:00:00|8,+:15
2020-09-17 20:00:00 timer_04_c01 18.09.2020 20:00:00|8,+:15
2020-09-17 18:30:00 timer_05_c02 18.09.2020 09:00:00|7,+:15
2020-09-17 18:30:00 timer_06_c02 18.09.2020 18:30:00|7,+:15
2020-09-17 18:30:00 timer_07_c02 18.09.2020 08:00:00|8,+:15
2020-09-17 18:30:00 timer_08_c02 18.09.2020 18:30:00|8,+:15
2020-09-17 23:00:00 timer_09_c03 18.09.2020 16:00:00
2020-09-17 23:00:00 timer_10_c03 18.09.2020 23:00:00
2020-09-17 21:00:00 timer_11_c03 18.09.2020 21:00:00
2020-09-17 19:47:29 wait_timer no timer
Regex:
accu:
cond:
HM_Hellligkeit:
0:
1:
state ^HM_Hellligkeit$:^state:
2:
state ^HM_Hellligkeit$:^state:
duAutomatic:
0:
1:
state ^duAutomatic$:^state:
duHelligkeit:
1:
state ^duHelligkeit$:^state:
2:
state ^duHelligkeit$:^state:
attr:
cmdState:
wait:
0:
600
1:
600
2:
240
waitdel:
condition:
0 (::DOIF_time($hash,0,1,$wday,$hms,"7,+:15") or ::DOIF_time($hash,2,3,$wday,$hms,"8,+:15")) and checkBeschatten("s")
1 (::DOIF_time($hash,4,5,$wday,$hms,"7,+:15") or ::DOIF_time($hash,6,7,$wday,$hms,"8,+:15")) and !checkBeschatten("s") and ::ReadingValDoIf($hash,'duAutomatic','state') eq "on" and ::ReadingValDoIf($hash,'HM_Hellligkeit','state') > ::ReadingValDoIf($hash,'duHelligkeit','state')
2 ::DOIF_time($hash,8,9,$wday,$hms) and ::ReadingValDoIf($hash,'HM_Hellligkeit','state') < ::ReadingValDoIf($hash,'duHelligkeit','state') or ::DOIF_time_once($hash,10,$wday)
days:
0 7,+:15
1 7,+:15
2 8,+:15
3 8,+:15
4 7,+:15
5 7,+:15
6 8,+:15
7 8,+:15
do:
0:
0 setreading di_Rollos_Sueden checkBeschatten_retVal_cond1 {( checkBeschatten(q(s)); )}, set .*Sued_RL pct [duBeschattenPctRollo:state]
1:
0 setreading di_Rollos_Sueden checkBeschatten_retVal_cond2 {( !checkBeschatten(q(s)); )}, set .*Sued_RL pct 100
2:
0 set .*Sued_RL pct 0
3:
helper:
DEVFILTER ^global$|^duAutomatic$|^HM_Hellligkeit$|^duHelligkeit$
NOTIFYDEV global|duAutomatic|HM_Hellligkeit|duHelligkeit
event 1.LUX: 6648.2,control: 6648.2,6648.2,hmstate: 6648.2
globalinit 1
last_timer 11
sleepdevice HM_Hellligkeit
sleepsubtimer -1
sleeptimer -1
timerdev HM_Hellligkeit
timerevent 1.LUX: 4888.2,control: 4888.2,4888.2,hmstate: 4888.2
triggerDev HM_Hellligkeit
timerevents:
1.LUX: 4888.2
control: 4888.2
4888.2
hmstate: 4888.2
timereventsState:
1.LUX: 4888.2
control: 4888.2
state: 4888.2
hmstate: 4888.2
triggerEvents:
1.LUX: 6648.2
control: 6648.2
6648.2
hmstate: 6648.2
triggerEventsState:
1.LUX: 6648.2
control: 6648.2
state: 6648.2
hmstate: 6648.2
internals:
interval:
0 -1
1 0
2 -1
3 2
4 -1
5 4
6 -1
7 6
8 -1
9 8
intervalfunc:
intervaltimer:
localtime:
0 1600412400
1 1600448400
10 1600455600
2 1600408800
3 1600452000
4 1600412400
5 1600446600
6 1600408800
7 1600446600
8 1600437600
9 1600462800
perlblock:
readings:
all duAutomatic:state HM_Hellligkeit:state duHelligkeit:state
realtime:
0 09:00:00
1 19:00:00
10 21:00:00
2 08:00:00
3 20:00:00
4 09:00:00
5 18:30:00
6 08:00:00
7 18:30:00
8 16:00:00
9 23:00:00
time:
0 09:00:00
1 19:00:00
10 21:00:00
2 08:00:00
3 20:00:00
4 09:00:00
5 18:30:00
6 08:00:00
7 18:30:00
8 16:00:00
9 23:00:00
timeCond:
0 0
1 0
10 2
2 0
3 0
4 1
5 1
6 1
7 1
8 2
9 2
timer:
0 0
1 0
10 0
2 0
3 0
4 0
5 0
6 0
7 0
8 0
9 0
timers:
0 0 1 2 3
1 4 5 6 7
2 8 9 10
trigger:
triggertime:
1600446600:
localtime 1600446600
hash:
1600448400:
localtime 1600448400
hash:
1600452000:
localtime 1600452000
hash:
1600455600:
localtime 1600455600
hash:
1600462800:
localtime 1600462800
hash:
uiState:
uiTable:
Attributes:
alias di_Rollos_Sueden
room Automatismen
verbose 5
wait 600:600:240
Vielleicht fällt da jemandem noch was auf. Die Ausgabe fällt mir schwer zu interpretieren.
Gruß
luftdieb
checkbeschatten in einer Bedingung triggert aber nicht. Es wird dann erst wieder aufgerufen, wenn ein anderer Trigger dieselbe Bedingung anstosst.
Um 8 Uhr hat [08:00-18:30|8,+:15] getriggert, dann wurde checkbeschatten ausgeführt, und cmd2 wurde ausgelöst.
Seitdem kalkuliert er anscheinend checkbeschatten nicht mehr weil (zumindest meine Interpretation) alle Trigger der Bedingung 2 immer noch wahr sind.
Dazu noch: ich habe nicht deinen Code für checkbeschattung geprüft. Bist Du sicher, dass deine Bedingungen exklusiv sind? Zwischen 16 Uhr und 20 Uhr, wenn Helligkeit unter Limit, ist systematisch checkbeschattung falsch? Wenn nicht, was soll er ausführen? cmd1 oder cmd3?
Hallo amenomade,
wenn checkbeschatten aufgerufen wird, kommt es zu einem Eintrag in einen Rollpuffer. Der sieht .z.B. wie folgt aus:
19:50:37 Zu Dunkel! (26.588)||
19:53:38 Zu Dunkel! (23.308)||
19:53:38 Zu Dunkel! (20.948)||
19:53:38 Zu Dunkel! (18.588)||
19:56:25 Zu Dunkel! (16.200)||
19:56:25 Zu Dunkel! (14.468)||
19:56:26 Zu Dunkel! (12.736)||
19:58:58 Zu Dunkel! (10.992)||
19:58:58 Zu Dunkel! (9.708)||
19:58:58 Zu Dunkel! (8.424
Ist jetzt leider keine Beschattung für eine Himmelsrichtung empfohlen. Aber man sieht immer 3 Anfragen bei +/- einer Sekunde differenz. Diese werden aufgerufen von den 3 Doifs für Ost / Süd / West. Tagsüber erscheint dann z.B. Ost: Keine Beschattung erforderlich, Süd: Beschattung sinnvoll, West: Keine Beschattung erforderlich.
Der Rollpuffer bildet das auch immer sinnvoll zur Sonneneinstrahlung ab.
Im jeweiligen doif der Himmelsrichtung sind im cmd1 und cmd2 die Abfragen von Checkbeschatten zueinander negiert. Würde ich so z.B.: interpretieren,
Bdg 1: wenn Beschatten sinnvoll und zeitlicher trigger zutrifft, dann führe beschatten aus.
Bdg 2 ist zu diesem Zeitpunkt nicht mehr gültig, da: zeitlicher trigger OK, Nicht Checkbeschatten = True ==>NOK. Dadurch müsste
Bdg 3 ist unzutreffend da Helligkeit nicht unterschritten.
Die Helligkeit ist auch in Checkbeschatten enthalten. Wenn es draußen zu dunkel ist, kann niemals true zurückkommen.
In der Zeit 16-20 Uhr, gehen die Rollos komplett runter, wenn es draußen zu dunkel ist. Trifft eh nur im Winter zu, da gibt es keine Beschattung, weil die Temperatur auch deutlich <26° ;-)
Oder gibt es ein Problem mit dem Interval von 15 Minuten ? Aber das hatte ich letzte Woche zu testzwecken draußen. Wobei 1x sind die Rollos tatsächlich runtergegangen. Muss ich noch mal testen.
Hab jetzt ein bisschen Zeit gefunden, um Tests zu machen... und ich verstehe nicht warum es bei dir nicht geht.
Folgendes habe ich gemacht:
- in myUtils:
sub checkBeschatten {
return ReadingsVal("di_Rollos_Sueden","beschattung",0);
}
- DOIF:
Internals:
CFGFN
DEF (
([00:00-23:59,+:01])
and checkBeschatten("s")
)
(
)
DOELSEIF
(
([00:00-23:59,+:01])
and !checkBeschatten("s")
)
(
)
DOELSEIF
(
[16:00-23:00]
and [HM_Hellligkeit:state] < [duHelligkeit:state]
or [21:00]
)
{Log3 "di_Rollos_Sueden",3, "di_Rollos_Sueden: cmd1"}
DOIFDEV ^global$|^HM_Hellligkeit$|^duHelligkeit$
FUUID 5f652589-f33f-fe91-c57a-228b916cdc160251
MODEL FHEM
NAME di_Rollos_Sueden
NR 402
NTFY_ORDER 50-di_Rollos_Sueden
STATE cmd_2
TYPE DOIF
VERSION 22588 2020-08-12 19:25:15
.attraggr:
.attrminint:
OLDREADINGS:
READINGS:
2020-09-18 23:38:27 beschattung 0
2020-09-18 23:39:00 cmd 2
2020-09-18 23:39:00 cmd_event timer_6
2020-09-18 23:39:00 cmd_nr 2
2020-09-18 23:36:44 mode enabled
2020-09-18 23:39:00 state cmd_2
2020-09-18 23:36:44 timer_01_c01 19.09.2020 00:00:00
2020-09-18 23:36:44 timer_02_c01 18.09.2020 23:59:00
2020-09-18 23:43:00 timer_03_c01 18.09.2020 23:44:00
2020-09-18 23:36:44 timer_04_c02 19.09.2020 00:00:00
2020-09-18 23:36:44 timer_05_c02 18.09.2020 23:59:00
2020-09-18 23:43:00 timer_06_c02 18.09.2020 23:44:00
2020-09-18 23:36:44 timer_07_c03 19.09.2020 16:00:00
2020-09-18 23:36:44 timer_08_c03 19.09.2020 23:00:00
2020-09-18 23:36:44 timer_09_c03 19.09.2020 21:00:00
Regex:
accu:
cond:
HM_Hellligkeit:
2:
state ^HM_Hellligkeit$:^state:
duHelligkeit:
2:
state ^duHelligkeit$:^state:
attr:
cmdState:
waitdel:
condition:
0 (::DOIF_time($hash,0,1,$wday,$hms)) and checkBeschatten("s")
1 (::DOIF_time($hash,3,4,$wday,$hms)) and !checkBeschatten("s")
2 ::DOIF_time($hash,6,7,$wday,$hms) and ::ReadingValDoIf($hash,'HM_Hellligkeit','state') < ::ReadingValDoIf($hash,'duHelligkeit','state') or ::DOIF_time_once($hash,8,$wday)
days:
do:
0:
0
1:
0
2:
0 {Log3 "di_Rollos_Sueden",3, "di_Rollos_Sueden: cmd1"}
3:
helper:
DEVFILTER ^global$|^HM_Hellligkeit$|^duHelligkeit$
NOTIFYDEV global|HM_Hellligkeit|duHelligkeit
event timer_6
globalinit 1
last_timer 9
sleeptimer -1
timerdev
timerevent timer_6
triggerDev
DOIF_eventa:
cmd_nr: 2
cmd: 2
cmd_event: timer_6
cmd_2
DOIF_eventas:
cmd_nr: 2
cmd: 2
cmd_event: timer_6
state: cmd_2
timerevents:
timer_6
timereventsState:
timer_6
triggerEvents:
timer_6
triggerEventsState:
timer_6
interval:
0 -1
1 0
3 -1
4 3
6 -1
7 6
intervalfunc:
2 ::DOIF_time($hash,0,1,$wday,$hms)
5 ::DOIF_time($hash,3,4,$wday,$hms)
intervaltimer:
0 2
1 2
3 5
4 5
localtime:
0 1600466400
1 1600466340
2 1600465440
3 1600466400
4 1600466340
5 1600465440
6 1600524000
7 1600549200
8 1600542000
readings:
all HM_Hellligkeit:state duHelligkeit:state
realtime:
0 00:00:00
1 23:59:00
2 23:44:00
3 00:00:00
4 23:59:00
5 23:44:00
6 16:00:00
7 23:00:00
8 21:00:00
time:
0 00:00:00
1 23:59:00
2 +:01
3 00:00:00
4 23:59:00
5 +:01
6 16:00:00
7 23:00:00
8 21:00:00
timeCond:
0 0
1 0
2 0
3 1
4 1
5 1
6 2
7 2
8 2
timer:
0 0
1 0
2 0
3 0
4 0
5 0
6 0
7 0
8 0
timers:
0 0 1 2
1 3 4 5
2 6 7 8
(...)
Attributes:
readingList beschattung
setList beschattung:0,1
Wenn ich jetzt den Wert von di_Rollos_Sueden:beschattung ändere, wechselt die Minute drauf der Zustand des DOIFs zwischen cmd1 und cmd2 - also eigentlich was Du erwartest.
Kann man noch ein "list" von duHelligkeit haben?
Hat sich die Funktion checkBeschatten geändert, seitdem du sie hieroben gepostet hast?
EDIT: OK, das ist ein Syntaxproblem, das sieht man sogar in deinem "list":
days:
0 7,+:15
1 7,+:15
2 8,+:15
3 8,+:15
4 7,+:15
5 7,+:15
6 8,+:15
7 8,+:15
Die Wochentagsteuerung muss am Ende kommen:
[09:00-19:00,+:15|7]
Vielen Dank. Das war es. Oh man, da wäre ich wirklich nicht darauf gekommen. Sonst funktioniert die Syntax Kontrolle ja echt ziemlich gut. Habe es heute Mittag gleich geändert und siehe da, die Beschattung funktioniert ;-)
Aber auch wieder viel dabei gelernt.
Dafür auch noch mal recht herzlichen Dank :-)
Gruß
luftdieb