FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: Spezialtrick am 11 Juni 2017, 20:28:22

Titel: [Gelöst]DOIF Error: Can't modify non-lvalue subroutine call in scalar assignment
Beitrag von: Spezialtrick am 11 Juni 2017, 20:28:22
Hallo,

bei folgendem DOIF

([BZ.Klimasensor:schimmelGefahr] eq "ja"   and [BZ.Klimasensor:lueftenMoeglich] eq "ja"   and [BZ.Fenster:state] eq "closed") (msg push @[Anwesenheit:residentsHomeDevs] Lüften im Bad notwendig!) DOELSEIF
([BZ.Klimasensor:schimmelGefahr] eq "ja"   and [BZ.Klimasensor:lueftenMoeglich] eq "ja"   and [BZ.Fenster:state] eq "open")   DOELSEIF
([BZ.Klimasensor:schimmelGefahr] eq "nein" and [BZ.Klimasensor:lueftenMoeglich] eq "nein" and [BZ.Fenster:state] eq "closed") DOELSEIF
([BZ.Klimasensor:schimmelGefahr] eq "nein" and [BZ.Klimasensor:lueftenMoeglich] eq "nein" and [BZ.Fenster:state] eq "open" and [BZ.Klimasensor:humdiff_avg] < -0.001) DOELSEIF 
([BZ.Klimasensor:schimmelGefahr] eq "nein" and [BZ.Klimasensor:lueftenMoeglich] eq "nein" and [BZ.Fenster:state] eq "open" and [BZ.Klimasensor:humdiff_avg] = 0) DOELSEIF
([BZ.Klimasensor:schimmelGefahr] eq "nein" and [BZ.Klimasensor:lueftenMoeglich] eq "nein" and [BZ.Fenster:state] eq "open" and [BZ.Klimasensor:humdiff_avg] > 0.001) (msg push @[Anwesenheit:residentsHomeDevs] Fenster im Bad schließen - Luftfeuchtigkeit steigt!) DOELSEIF
([BZ.Klimasensor:schimmelGefahr] eq "ja"   and [BZ.Klimasensor:lueftenMoeglich] eq "nein" and [BZ.Fenster:state] eq "closed") DOELSEIF
([BZ.Klimasensor:schimmelGefahr] eq "ja"   and [BZ.Klimasensor:lueftenMoeglich] eq "nein" and [BZ.Fenster:state] eq "open" and [BZ.Klimasensor:humdiff_avg] < -0.001) DOELSEIF
([BZ.Klimasensor:schimmelGefahr] eq "ja"   and [BZ.Klimasensor:lueftenMoeglich] eq "nein" and [BZ.Fenster:state] eq "open" and [BZ.Klimasensor:humdiff_avg] = 0) DOELSEIF
([BZ.Klimasensor:schimmelGefahr] eq "ja"   and [BZ.Klimasensor:lueftenMoeglich] eq "nein" and [BZ.Fenster:state] eq "open" and [BZ.Klimasensor:humdiff_avg] > 0.001) (msg push @[Anwesenheit:residentsHomeDevs] Fenster im Bad schließen - Lüften bringt nichts - Luftfeuchtigkeit steigt!) DOELSEIF
([BZ.Klimasensor:schimmelGefahr] eq "nein" and [BZ.Klimasensor:lueftenMoeglich] eq "ja"   and [BZ.Fenster:state] eq "closed") DOELSEIF
([BZ.Klimasensor:schimmelGefahr] eq "nein" and [BZ.Klimasensor:lueftenMoeglich] eq "ja"   and [BZ.Fenster:state] eq "open")


erhalte ich diese Fehlermeldung:

condition c05: Can't modify non-lvalue subroutine call in scalar assignment, line 1, at EOF

Hat jemand eine Idee woran es liegt und was die Fehlermeldung bedeutet?


Titel: Antw:DOIF Error: Can't modify non-lvalue subroutine call in scalar assignment
Beitrag von: Thorsten Pferdekaemper am 11 Juni 2017, 20:31:08
Hi,
Vergleiche in Perl gehen mit "==" und nicht mit "=". Das gilt wahrscheinlich auch für DOIF.
Gruß,
   Thorsten
Titel: Antw:DOIF Error: Can't modify non-lvalue subroutine call in scalar assignment
Beitrag von: Spezialtrick am 11 Juni 2017, 20:36:31
Zitat von: Thorsten Pferdekaemper am 11 Juni 2017, 20:31:08
Hi,
Vergleiche in Perl gehen mit "==" und nicht mit "=". Das gilt wahrscheinlich auch für DOIF.
Gruß,
   Thorsten

Danke für die rasend schnelle Hilfe!  :)
Titel: Antw:DOIF Error: Can't modify non-lvalue subroutine call in scalar assignment
Beitrag von: Damian am 11 Juni 2017, 20:39:04
Zitat von: Spezialtrick am 11 Juni 2017, 20:36:31
Danke für die rasend schnelle Hilfe!  :)

Bedingungen in DOIF sind "aufgebohrtes" Perl ;) d. h. alles außerhalb eckiger Klammern ist Perl.
Titel: Antw:[Gelöst]DOIF Error: Can't modify non-lvalue subroutine call in scalar assignment
Beitrag von: Spezialtrick am 11 Juni 2017, 20:50:18
Zitat von: Damian am 11 Juni 2017, 20:39:04
Bedingungen in DOIF sind "aufgebohrtes" Perl ;) d. h. alles außerhalb eckiger Klammern ist Perl.

Ok, das merke ich mir. :)

Ich hätte noch eine Frage zu diesem Teil:

and [BZ.Klimasensor:humdiff_avg] == 0)

Dieser Teil trifft nur zu, wenn humdiff_avg tatsächlich exakt 0 ist oder? Wie würde man den Bereich von -0.001 bis 0.001 abdecken?
Titel: Antw:[Gelöst]DOIF Error: Can't modify non-lvalue subroutine call in scalar assignment
Beitrag von: Damian am 11 Juni 2017, 21:05:40
Zitat von: Spezialtrick am 11 Juni 2017, 20:50:18
Ok, das merke ich mir. :)

Ich hätte noch eine Frage zu diesem Teil:

and [BZ.Klimasensor:humdiff_avg] == 0)

Dieser Teil trifft nur zu, wenn humdiff_avg tatsächlich exakt 0 ist oder? Wie würde man den Bereich von -0.001 bis 0.001 abdecken?

so wie man das in höheren Programmiersprachen macht:

[BZ.Klimasensor:humdiff_avg] >= -0.001 and [BZ.Klimasensor:humdiff_avg] <= 0.001
Titel: Antw:[Gelöst]DOIF Error: Can't modify non-lvalue subroutine call in scalar assignment
Beitrag von: Spezialtrick am 11 Juni 2017, 21:10:59
Zitat von: Damian am 11 Juni 2017, 21:05:40
so wie man das in höheren Programmiersprachen macht:

[BZ.Klimasensor:humdiff_avg] >= -0.001 and [BZ.Klimasensor:humdiff_avg] <= 0.001

Ich beherrsche leider keinerlei Programmiersprachen. Vielen Dank!
Titel: Antw:[Gelöst]DOIF Error: Can't modify non-lvalue subroutine call in scalar assignment
Beitrag von: Damian am 11 Juni 2017, 21:17:18
Zitat von: Spezialtrick am 11 Juni 2017, 21:10:59
Ich beherrsche leider keinerlei Programmiersprachen. Vielen Dank!

Bald die DOIF´sche ;)