FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: Michi240281 am 23 Februar 2015, 19:18:17

Titel: DOIF: Perl error
Beitrag von: Michi240281 am 23 Februar 2015, 19:18:17
Hi Damian,

möchte mit dem DOIF Modul die Helligkeit meines Wandtablets steuern - über Twilight! Ich bekomme dabei jedoch einen perl error! Hast du eine Idee, was da faul sein könnte?

Hier ein list:

Internals:
   DEF        ([My_Twilight:light] >=5) (set androidTablet screenBrightness 200) DOELSEIF ([My_Twilight:light] =4) (set androidTablet screenBrightness 150) DOELSEIF ([My_Twilight:light] =3) (set androidTablet screenBrightness 100) DOELSEIF ([My_Twilight:light] <=2) (set androidTablet screenBrightness 50)
   NAME       Helligkeit_Display_Tablet
   NR         915
   NTFY_ORDER 50-Helligkeit_Display_Tablet
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2015-02-23 07:46:19   cmd_event       My_Twilight
     2015-02-23 07:46:19   cmd_nr          1
     2015-02-23 18:38:00   e_My_Twilight_light 2
     2015-02-23 18:38:00   error           perl error in condition: ReadingValDoIf('My_Twilight','light','') =4: Can't modify non-lvalue subroutine call in scalar assignment at (eval 789096) line 2, at EOF

     2015-02-23 07:46:19   state           cmd_1
   Condition:
     0          ReadingValDoIf('My_Twilight','light','') >=5
     1          ReadingValDoIf('My_Twilight','light','') =4
     2          ReadingValDoIf('My_Twilight','light','') =3
     3          ReadingValDoIf('My_Twilight','light','') <=2
   Devices:
     0           My_Twilight
     1           My_Twilight
     2           My_Twilight
     3           My_Twilight
     all         My_Twilight
   Do:
     0          set androidTablet screenBrightness 200
     1          set androidTablet screenBrightness 150
     2          set androidTablet screenBrightness 100
     3          set androidTablet screenBrightness 50
   Helper:
     last_timer 0
     sleeptimer -1
     Bm:
       Doif_notify:
         cnt        6872
         dmx        0
         max        132
         tot        648
         mAr:
           HASH(0x662b298)
           HASH(0x69529a0)
   Internals:
   Readings:
     0           My_Twilight:light
     1           My_Twilight:light
     2           My_Twilight:light
     3           My_Twilight:light
     all         My_Twilight:light
   State:
   Timerfunc:
   Trigger:
Attributes:
   room       Flur


Besten Dank schon mal!!
Titel: Antw:DOIF: Perl error
Beitrag von: Mitch am 23 Februar 2015, 19:27:19
sieht eigentlich gut aus?

Einzig die Leerzeichen vor dem =, aber ob es daran liegt, da hilft nur probieren.
Titel: Antw:DOIF: Perl error
Beitrag von: Michi240281 am 23 Februar 2015, 19:36:51
Habe schon zig DOIF Anweisungen bei mir drin, keine macht Probleme! Verstehe ich auch nicht! Und warum gerade beim dem 2. DO(ELSE)IF?
Titel: Antw:DOIF: Perl error
Beitrag von: Mitch am 23 Februar 2015, 19:44:23
Hast Du mal den Teil mit der 4 weg lassen und getestet?
Vielleicht mag DOIF keine 4  ;D
Titel: Antw:DOIF: Perl error
Beitrag von: Mitch am 23 Februar 2015, 19:51:36
Hab es mal schnell nachgebaut

([Twilight:light] >=5) (set Nexus screenBrightness 200) DOELSEIF ([Twilight:light] =4) (set Nexus screenBrightness 150) DOELSEIF ([Twilight:light] =3) (set Nexus screenBrightness 100) DOELSEIF ([Twilight:light] <=2) (set Nexus screenBrightness 50)

und bekomme die gleiche Fehlermeldung

perl error in condition: ReadingValDoIf('Twilight','light','') =4: Can't modify non-lvalue subroutine call in scalar assignment at (eval 85397) line 1, at EOF

dann habe ich mal so geändert

([Twilight:light] >=5) (set Nexus screenBrightness 200) DOELSEIF ([Twilight:light] <=4) (set Nexus screenBrightness 150) DOELSEIF ([Twilight:light] =3) (set Nexus screenBrightness 100) DOELSEIF ([Twilight:light] <=2) (set Nexus screenBrightness 50)

und siehe da, es geht.

Allerdings habe ich mit light 5 und 8 getriggert und es wurde cmd_2 ausgeführt, also <=4, was ich nicht ganz verstehe??
Titel: Antw:DOIF: Perl error
Beitrag von: flurin am 23 Februar 2015, 20:15:04
Bei einem Vergleich auf "gleich" verwendet man normalerweise "==" oder "eq" für Strings.

Gruss
flurin
Titel: Antw:DOIF: Perl error
Beitrag von: Mitch am 23 Februar 2015, 20:20:47
Oh mann, ich wußte doch es ist eine Kleinikeit   :'(

Danke  8)
Titel: Antw:DOIF: Perl error
Beitrag von: Michi240281 am 23 Februar 2015, 20:32:03
Vielen Dank! Habs jetzt auch geändert! Mal sehn ob es morgen funktioniert! Heute leider schon immer bei light=0!
Titel: Antw:DOIF: Perl error
Beitrag von: flurin am 23 Februar 2015, 20:46:02
Zitat von: Michi240281 am 23 Februar 2015, 20:32:03
Vielen Dank! Habs jetzt auch geändert! Mal sehn ob es morgen funktioniert! Heute leider schon immer bei light=0!

So kannst Du den Wert ändern:

setreading My_Twilight light 3
Titel: Antw:DOIF: Perl error
Beitrag von: Michi240281 am 23 Februar 2015, 20:57:17
Zitat von: flurin am 23 Februar 2015, 20:46:02
So kannst Du den Wert ändern:

setreading My_Twilight light 3

Ahhh, seeeeeeehr cool! :)

Gleich getestet --> funktioniert!!