Hallo.
Ich habe ein Perl DOIF, welches wunderbar schaltet und waltet. Sogar so schnell, dass meine Lampen manchmal auf den zweiten Befehl nicht mehr reagieren (können):
fhem_set("Group_Lichter_Vorgarten brightness ".ReadingsVal("Group_Lichter_Vorgarten","brightnessOLD","1") );
fhem_set("Group_Lichter_Vorgarten ".lc(ReadingsVal("Group_Lichter_Vorgarten","stateOLD","OFF")) );
Also brauche ich eine Verzögerung, welche ich via set_Exec realisieren kann. Klappt auch:
fhem_set("Group_Lichter_Vorgarten brightness ".ReadingsVal("Group_Lichter_Vorgarten","brightnessOLD","1") );
set_Exec("off_timer",2,'fhem_set("Group_Lichter_Vorgarten ".lc(ReadingsVal("Group_Lichter_Vorgarten","stateOLD","OFF")) )');
Nur werden mir diese Hinweise ins LOG geworfen:
2022.01.18 10:36:01 1: PERL WARNING: Argument "set 1" isn't numeric in numeric eq (==) at (eval 4268197) line 14.
2022.01.18 10:36:01 3: eval: doif_Aussenlicht: warning in condition c04
Also dachte ich, könnte an der Auflösung von ReadingsVal() in set_Exec liegen und habe kurzerhand umgestellt und löse die Variable vorher auf (Rückgabe ist on oder off):
fhem_set("Group_Lichter_Vorgarten brightness ".ReadingsVal("Group_Lichter_Vorgarten","brightnessOLD","1") );
my $mytargetstate = lc(ReadingsVal("Group_Lichter_Vorgarten","stateOLD","OFF"));
set_Exec("off_timer",2,'fhem_set("Group_Lichter_Vorgarten '.$mytargetstate.'")');
Meckert aber auch im Log.
Mit verbose 4 konnte ich leider auch nix erkennen. Wo habe ich meinen Denkfehler? Ich machen doch im set_Exec keinen Vergleich und kein "set 1". Ohne set_Exec bekomme ich keine Warnings, also wird mein Fehler wohl dort sein. Nur welcher?
Vielen Dank und beste Grüße
rob
das komplette DOIF schaut so aus:
define doif_Aussenlicht DOIF #Taster drücken\
block_one{\
if ([Eingangssteuerung:EingangTaster3] eq "on") {\
fhem_set("Eingangslicht toggle");; \
}\
}\
\
#Bewegungsmelder\
block_two{\
if ([IT_V3_5ac01] eq "on") {\
fhem_set("Eingangslicht on");;\
} else {\
fhem_set("Eingangslicht off");;\
}\
}\
\
#Klingel LED\
block_three{\
if ([15:30-23:00] and [WH1080:Lux] < 150) {\
fhem_set("KlingelLED on");;\
if ([?Group_Lichter_Vorgarten] eq "OFF") {\
fhem_set("Group_Lichter_Vorgarten brightness 1");;\
}\
} else {\
fhem_set("KlingelLED off");;\
if ([?Group_Lichter_Vorgarten] eq "ON" and [?Group_Lichter_Vorgarten:brightness] <=15 ) {\
fhem_set("Group_Lichter_Vorgarten off");;\
}\
}\
}\
\
#eingangslicht geht an\
block_four{\
if ([Eingangslicht] eq "on") {\
if ([?Group_Lichter_Vorgarten] eq "OFF") {\
fhem("setreading Group_Lichter_Vorgarten stateOLD OFF");;\
fhem_set("Group_Lichter_Vorgarten brightness 254");;\
} else {\
if ([?Group_Lichter_Vorgarten:brightness] <= 15) {\
fhem("setreading Group_Lichter_Vorgarten brightnessOLD 1");;\
fhem("setreading Group_Lichter_Vorgarten stateOLD ON");;\
fhem_set("Group_Lichter_Vorgarten brightness 254");; \
}\
}\
} else {\
if ([?Group_Lichter_Vorgarten] eq "ON" and [?Group_Lichter_Vorgarten:brightness] == 254) {\
fhem_set("Group_Lichter_Vorgarten brightness ".ReadingsVal("Group_Lichter_Vorgarten","brightnessOLD","1") );;\
#fhem_set("Group_Lichter_Vorgarten ".lc(ReadingsVal("Group_Lichter_Vorgarten","stateOLD","OFF")) );;\
set_Exec("off_timer",2,'fhem_set("Group_Lichter_Vorgarten ".lc(ReadingsVal("Group_Lichter_Vorgarten","stateOLD","OFF")) )');;\
#my $mytargetstate = lc(ReadingsVal("Group_Lichter_Vorgarten","stateOLD","OFF"));;\
#set_Exec("off_timer",2,'fhem_set("Group_Lichter_Vorgarten '.$mytargetstate.'")');; \
}\
}\
}
attr doif_Aussenlicht room 17_Eingangsbereich
attr doif_Aussenlicht verbose 0
setstate doif_Aussenlicht initialized
setstate doif_Aussenlicht 2022-01-18 10:37:58 Device WH1080
setstate doif_Aussenlicht 2022-01-18 10:36:01 block_four executed
setstate doif_Aussenlicht 2022-01-18 10:33:01 block_one executed
setstate doif_Aussenlicht 2022-01-18 10:37:58 block_three executed
setstate doif_Aussenlicht 2022-01-18 10:36:01 block_two executed
setstate doif_Aussenlicht 2022-01-18 10:36:01 e_Eingangslicht_STATE off
setstate doif_Aussenlicht 2022-01-18 10:33:01 e_Eingangssteuerung_EingangTaster3 off
setstate doif_Aussenlicht 2022-01-18 10:36:01 e_IT_V3_5ac01_STATE off
setstate doif_Aussenlicht 2022-01-18 10:37:58 e_WH1080_Lux 9562
setstate doif_Aussenlicht 2022-01-18 10:32:12 mode enabled
setstate doif_Aussenlicht 2022-01-18 10:32:12 state initialized
setstate doif_Aussenlicht 2022-01-18 10:32:12 timer_01_c03 18.01.2022 15:30:00
setstate doif_Aussenlicht 2022-01-18 10:32:12 timer_02_c03 18.01.2022 23:00:00
Hi rob,
ganz nüchtern betrachtet kann es doch nur hierher kommen -> [?Group_Lichter_Vorgarten:brightness] == 254
dann steht temporär in brightness was anderes drin? nimm doch hier mal [?Group_Lichter_Vorgarten:brightness:d]
Aber je länger ich lese, ist das problem ev. doch woanders.
Gruß Otto
Hi Otto.
Danke Dir für den Denkanstoß. Anscheinend setze ich irgendwo den Wert falsch. Denn im LOG zum Device sehe ich plötzlich:
2022-01-18_08:46:11 Group_Lichter_Vorgarten brightness: set 254
2022-01-18_08:46:12 Group_Lichter_Vorgarten ON
2022-01-18_08:46:12 Group_Lichter_Vorgarten brightness: 254
2022-01-18_08:49:11 Group_Lichter_Vorgarten brightness: set 1
2022-01-18_08:49:12 Group_Lichter_Vorgarten brightness: 1
2022-01-18_08:49:14 Group_Lichter_Vorgarten set_off
2022-01-18_08:49:14 Group_Lichter_Vorgarten OFF
2022-01-18_10:33:01 Group_Lichter_Vorgarten brightness: set 254
2022-01-18_10:33:01 Group_Lichter_Vorgarten brightness: 254
2022-01-18_10:33:01 Group_Lichter_Vorgarten ON
2022-01-18_10:36:01 Group_Lichter_Vorgarten brightness: set 1
2022-01-18_10:36:01 Group_Lichter_Vorgarten brightness: 1
2022-01-18_10:36:03 Group_Lichter_Vorgarten set_off
2022-01-18_10:36:03 Group_Lichter_Vorgarten OFF
Wenn ich also Stuss reinschreibe, kann auch der Vergleich nicht gelingen ;D
Ja, mit [?Group_Lichter_Vorgarten:brightness:d] ist die Warnung weg. Die Ursache muss ich trotzdem woanders suchen, wie Du schon schreibst :)
Komisch, dass mir das erst durch set_Exec auf die Füße fällt. Na besser später als nie ;)
VG
rob
Edit: Ich hab anscheinend Ramsch in meiner setList im MQTT2-Device, welches das DOIF schaltet/ abfragt, und bislang nicht gemerkt.