FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Chris8888 am 06 Februar 2017, 19:44:49

Titel: Perl Fehlermeldung Bareword not allowed while "strict subs"
Beitrag von: Chris8888 am 06 Februar 2017, 19:44:49
Hallo,

ich verzweifel an Perl...nix für mich.

Ich möchte in einem Doif folgendes abfragen:
....
DOELSEIF ([HM_Thermostat_Badgr:1.HUMIDITY] < 55 and [HM_Thermostat_Badkl:1.HUMIDITY] < 55 and [Feuchtigkeitsalarm] = 1 and [AutoLueftungslevel] = 1)
(set vccu_Bt2 press, set Feuchtigkeitsalarm 0)

Leider wird die Regel mit folgendem Fehler nicht ausgeführt:
perl error in condition: ReadingValDoIf($hash,'HM_Thermostat_Badgr','1.HUMIDITY') < 55 and ReadingValDoIf($hash,'HM_Thermostat_Badkl','1.HUMIDITY') < 55 and (Feuchtigkeitsalarm = 1) and (AutoLueftungslevel = 1): Can't modify constant item in scalar assignment at (eval 116285) line 1, near "1) " Bareword "Feuchtigkeitsalarm" not allowed while "strict subs" in use at (eval 116285) line 1. Bareword "AutoLueftungslevel" not allowed while "strict subs" in use at (eval 116285) line 1.

Google hat mich nicht weiter gebracht. Ich verstehe das es an den beiden Dummys Feuchtigkeitsalarm und AutoLueftungslevel liegt, verstehe aber nicht was ich anders machen muss.

Könnte mich jemand bitte in die richtige Richtung schubsen?

Besten Dank vorab!

VG
Christian
Titel: Antw:Perl Fehlermeldung Bareword not allowed while "strict subs"
Beitrag von: DeeSPe am 06 Februar 2017, 19:48:20
Was ist ReadingValDoIf ??

Und meinst Du nicht ein DOIF Thema wäre im DOIF-Forum besser aufgehoben als im Anfängerfragen-Forum?

Gruß
Dan
Titel: Antw:Perl Fehlermeldung Bareword not allowed while &quot;strict subs&quot;
Beitrag von: knopf_piano am 06 Februar 2017, 19:50:20
perl variablen starten mit $,@,%. in deinem doif  mußt du den wert mit Value oder ReadingsVal Feuchtigkeitsalarm holen

Gesendet von meinem GT-I9301I mit Tapatalk

Titel: Antw:Perl Fehlermeldung Bareword not allowed while "strict subs"
Beitrag von: Chris8888 am 06 Februar 2017, 20:28:46
Hallo zusammen,

ich habe es jetzt so versucht:
...
DOELSEIF ([HM_Thermostat_Badgr:1.HUMIDITY] < 55 and [HM_Thermostat_Badkl:1.HUMIDITY] < 55 and ReadingsVal("Feuchtigkeitsalarm","","") = 1 and ReadingsVal("AutoLueftungslevel","","") = 1)
(set vccu_Bt2 press, set Feuchtigkeitsalarm 0)

bricht jetzt ab mit:
perl error in condition: ReadingValDoIf($hash,'HM_Thermostat_Badgr','1.HUMIDITY') < 55 and ReadingValDoIf($hash,'HM_Thermostat_Badkl','1.HUMIDITY') < 55 and ReadingsVal("Feuchtigkeitsalarm","","") = 1 and ReadingsVal("AutoLueftungslevel","","") = 1: Can't modify non-lvalue subroutine call in scalar assignment at (eval 127740) line 1, near "1 and"

Es wäre echt super, wenn jemand einen Idee hätte.
Falls es das falsche Forum ist oder die Frage überflüssig oder ich den Eindruck erwecke mich nicht ausreichend selber bemüht zu haben, entschuldigt es bitte. Aber Perl ist für mich ein Buch mit 7 Siegeln, die ganzen Klammern und Ausdrücke bringen mich zum Verzweifeln.

Ich hoffe auf euer Verständnis!

VG
Christian


Titel: Antw:Perl Fehlermeldung Bareword not allowed while "strict subs"
Beitrag von: Thorsten Pferdekaemper am 06 Februar 2017, 20:34:52
Hi,
der Vergleichsoperator müsste "==" und nicht "=" heißen, zumindest in Perl.
Was so im DOIF geht weiß ich nicht, aber ich vermute mal, dass z.B. AutoLueftungslevel ein dummy ist. Möglicherweise muss man das Reading "state" explizit angeben. Also im DOIF [AutoLueftungslevel:state] statt nur [AutoLueftungslevel].
Nur so eine Vermutung. DOIF ist mir zu kompliziert, das verwende ich nicht.
Gruß,
   Thorsten 
Titel: Antw:Perl Fehlermeldung Bareword not allowed while "strict subs"
Beitrag von: DeeSPe am 06 Februar 2017, 20:35:10
Zitat von: Chris8888 am 06 Februar 2017, 20:28:46
Hallo zusammen,

ich habe es jetzt so versucht:
...
DOELSEIF ([HM_Thermostat_Badgr:1.HUMIDITY] < 55 and [HM_Thermostat_Badkl:1.HUMIDITY] < 55 and ReadingsVal("Feuchtigkeitsalarm","","") = 1 and ReadingsVal("AutoLueftungslevel","","") = 1)
(set vccu_Bt2 press, set Feuchtigkeitsalarm 0)

bricht jetzt ab mit:
perl error in condition: ReadingValDoIf($hash,'HM_Thermostat_Badgr','1.HUMIDITY') < 55 and ReadingValDoIf($hash,'HM_Thermostat_Badkl','1.HUMIDITY') < 55 and ReadingsVal("Feuchtigkeitsalarm","","") = 1 and ReadingsVal("AutoLueftungslevel","","") = 1: Can't modify non-lvalue subroutine call in scalar assignment at (eval 127740) line 1, near "1 and"

Es wäre echt super, wenn jemand einen Idee hätte.
Falls es das falsche Forum ist oder die Frage überflüssig oder ich den Eindruck erwecke mich nicht ausreichend selber bemüht zu haben, entschuldigt es bitte. Aber Perl ist für mich ein Buch mit 7 Siegeln, die ganzen Klammern und Ausdrücke bringen mich zum Verzweifeln.

Ich hoffe auf euer Verständnis!

VG
Christian

Du verwechselst und vermischst hier Dinge!
DOIF hat erst einmal nichts mit Perl zu tun! Das hat seine eigene Syntax.

Du vermischst also DOIF Syntax mit Perl Syntax und das wird nicht funktionieren.
Ich kenne mich mit DOIF überhaupt nicht aus, und möchte es auch gar nicht. Aber das sieht für mich einfach schlichtweg falsch aus.

Des Weiteren würde ich Dir immer noch empfehlen Dein Thema in das DOIF Forum zu verschieben wenn Du möglichst schnell Hilfe erhalten möchtest. ;)
Auch ein Blick in die commandref könnte offenbarend sein.

Gruß
Dan
Titel: Antw:Perl Fehlermeldung Bareword not allowed while "strict subs"
Beitrag von: Thorsten Pferdekaemper am 06 Februar 2017, 20:40:27
Zitat von: DeeSPe am 06 Februar 2017, 20:35:10
Du verwechselst und vermischst hier Dinge!
DOIF hat erst einmal nichts mit Perl zu tun! Das hat seine eigene Syntax.
Das hat er aber erst gemacht, nachdem eine meiner Meinung nach nicht ganz so zielführende Antwort gegeben wurde...
Gruß,
   Thorsten
Titel: Antw:Perl Fehlermeldung Bareword not allowed while &quot;strict subs&quot;
Beitrag von: knopf_piano am 06 Februar 2017, 22:30:05
ReadingsVal() braucht zum device noch ein reading. Aber das geht im doif eh nicht, bzw.  nur mit umwegen. Bitte doif commandref bemühen, um auf devicewerte zuzugreifen

Gesendet von meinem GT-I9301I mit Tapatalk

Titel: Antw:Perl Fehlermeldung Bareword not allowed while "strict subs"
Beitrag von: Chris8888 am 06 Februar 2017, 22:48:35
Hallo,

so hat es jetzt geklappt:
DOELSEIF ([HM_Thermostat_Badgr:1.HUMIDITY] < 55 and [HM_Thermostat_Badkl:1.HUMIDITY] < 55 and [Feuchtigkeitsalarm:state] == 1 and [AutoLueftungslevel:state] == 1)

Danke für den Schubs....

VG
Christian