FHEM > DOIF

[gelöst] set_Exec: gibt mir Perl Warning

(1/1)

rob:
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):

--- Code: ---fhem_set("Group_Lichter_Vorgarten brightness ".ReadingsVal("Group_Lichter_Vorgarten","brightnessOLD","1") );
fhem_set("Group_Lichter_Vorgarten ".lc(ReadingsVal("Group_Lichter_Vorgarten","stateOLD","OFF")) );

--- Ende Code ---

Also brauche ich eine Verzögerung, welche ich via set_Exec realisieren kann. Klappt auch:

--- Code: ---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")) )');

--- Ende Code ---

Nur werden mir diese Hinweise ins LOG geworfen:

--- Code: ---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

--- Ende Code ---

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

--- Code: ---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.'")');

--- Ende Code ---
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:

--- Code: ---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

--- Ende Code ---

Otto123:
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

rob:
Hi Otto.

Danke Dir für den Denkanstoß. Anscheinend setze ich irgendwo den Wert falsch. Denn im LOG zum Device sehe ich plötzlich:

--- Code: ---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

--- Ende Code ---
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.

Navigation

[0] Themen-Index

Zur normalen Ansicht wechseln