DOIF "perl error in condition" bei einer von mehreren Abfragen

Begonnen von Kermit20, 02 Juni 2016, 10:55:06

Vorheriges Thema - Nächstes Thema

Kermit20

Hallo Gemeinde,

ich baue gerade meine Rolladensteuerung um. Nun habe ich leider ein Problem, welches ich nicht nachvollziehen kann. ich habe mehrere DOIF... welche auf einen Dummy "DU_SW_RolladenAuto" zugreifen um mir die Unterscheidung und Steuerung von Manuell und Automatisch zu ermöglichen. Zudem gibt es noch einen der das Aussperren verhindern soll und als Variable bei komplexen Abfragen dient.

Internals:
   NAME       DU_SW_RolladenAuto
   NR         202
   STATE      on
   TYPE       dummy
   Readings:
     2016-06-02 10:35:17   state           on
Attributes:
   DbLogExclude .*
   room       1.2_Diele_Kueche,1.9_Steuerung
   webCmd     on:off



Internals:
   CFGFN
   NAME       DU_SW_RolladenSperre
   NR         2374
   STATE      off
   TYPE       dummy
   Readings:
     2016-06-01 12:29:19   state           off
Attributes:
   DbLogExclude .*
   room       1.9_Steuerung
   webCmd     on:off



Nun habe ich für einen weiteren Raum eine Steuerung begonnen und bekomme folgende Fehlermeldung:

perl error in condition: InternalDoIf($hash,'DU_SW_RolladenAuto','STATE','','',AttrVal($hash->{NAME},'notexist',undef)) eq "on" and InternalDoIf($hash,'EG_HZ_KONT_Tuer','STATE','','',AttrVal($hash->{NAME},'notexist',undef)) eq "closed" and InternalDoIf($hash,'DU_SW_RolladenSperre','STATE','','',AttrVal($hash->{NAME},'notexist',undef)) = "on": Can't modify non-lvalue subroutine call in scalar assignment at (eval 177079) line 2, at EOF

wenn ich diese nun richtig deute, wird bemängelt, dass es den Status der verschiedenen Geräte nicht gibt....

ABER

in einer anderen DOIF Abfrage greife ich aber in der gleichen Art und Weise auf den Dummy "DU_SW_RolladenAuto" zu.

Internals:
   DEF        ([DU_SW_RolladenAuto] eq "on" and [+{sunrise_rel(900,"7:30","9:00")}]) (set EG_KU_ROL_DoppelFenster pct 0)
DOELSEIF ([DU_SW_RolladenAuto] eq "on" and [+{sunset_rel(0,"17:00","21:30")}]) (set EG_KU_ROL_DoppelFenster pct 100)
DOELSEIF ([DU_SW_Beschattung] eq "on" and [EXT_BLK_Helligkeitssensor:brightness:d] > 12000 and [EXT_BLK_SEN_Temp_T1:temperature] > 22 and [11:00-18:00]) (set EG_KU_ROL_DoppelFenster pct 65, set DU_SW_Beschattung_Status ja)
DOELSEIF ([DU_SW_Beschattung] eq "on" and [EXT_BLK_Helligkeitssensor:brightness:d] < 12000 and [DU_SW_Beschattung_Status]  eq "ja" and [11:00-18:00]) (set EG_KU_ROL_DoppelFenster pct 0, set DU_SW_Beschattung_Status nein)
   NAME       DI_Rolladen_Automatisierung_EG_Front
   NR         200
   NTFY_ORDER 50-DI_RolladenAutomatisierung
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2016-06-02 10:50:52   Device          EXT_BLK_Helligkeitssensor
     2016-06-02 07:30:00   cmd             1
     2016-06-02 07:30:00   cmd_event       timer_1
     2016-06-02 07:30:00   cmd_nr          1
     2016-06-02 10:35:17   e_DU_SW_Beschattung_STATE on
     2016-06-02 10:35:17   e_DU_SW_RolladenAuto_STATE on
     2016-06-02 10:50:52   e_EXT_BLK_Helligkeitssensor_brightness 4716.42
     2016-06-02 10:49:32   e_EXT_BLK_SEN_Temp_T1_temperature 21.8
     2016-06-02 07:30:00   state           cmd_1
     2016-06-02 07:30:00   timer_1_c1      03.06.2016 07:30:00
     2016-06-01 21:29:59   timer_2_c2      02.06.2016 21:29:59
     2016-06-01 18:00:00   timer_3_c3      02.06.2016 11:00:00
     2016-06-01 18:00:00   timer_4_c3      02.06.2016 18:00:00
     2016-06-01 18:00:00   timer_5_c4      02.06.2016 11:00:00
     2016-06-01 18:00:00   timer_6_c4      02.06.2016 18:00:00



Hier wird der state richtig erkannt.

Nun hoffe ich auf Hilfe bei der Analyse.... evtl. lese ich die Errormeldung auch einfach falsch.

Danke und Gruß


RPi1: FHEM mit HMLAN und CUL Eigenbau: diverse Homematic Geräte; Technoline Temp/Feuchte 868 MHz // Schalsteckdosen 433 MHz
RPi2: FHEM mit Viessmann(optolink) mit VControl und 1W Sensoren
RPi3: Apache / Owncloud 9

Kermit20

da mir das Problem keine ruhe gelassen hat, habe ich FHEM mal durchgeladen.... (ist normalerweise kein Lösungsmittel =))

hierdurch konnte ich aber , da ich die Abfrage von "on" auf "off" geändert habe, einen Logeintrag identifizieren, der mit der DOIF Problematik im Zusammenhang steht:

2016.06.02 11:52:24 1: PERL WARNING: Argument "off" isn't numeric in numeric lt (<) at (eval 337) line 1.

Warum hier ein nummericher Wert erwartet wird, verstehe ich nicht ....
RPi1: FHEM mit HMLAN und CUL Eigenbau: diverse Homematic Geräte; Technoline Temp/Feuchte 868 MHz // Schalsteckdosen 433 MHz
RPi2: FHEM mit Viessmann(optolink) mit VControl und 1W Sensoren
RPi3: Apache / Owncloud 9

Ellert

#2
perl error in condition: InternalDoIf($hash,'DU_SW_RolladenAuto','STATE','','',AttrVal($hash->{NAME},'notexist',undef)) eq "on" and InternalDoIf($hash,'EG_HZ_KONT_Tuer','STATE','','',AttrVal($hash->{NAME},'notexist',undef)) eq "closed" and InternalDoIf($hash,'DU_SW_RolladenSperre','STATE','','',AttrVal($hash->{NAME},'notexist',undef)) = "on": Can't modify non-lvalue subroutine call in scalar assignment at (eval 177079) line 2, at EOF
Wenn Du Dir die Fehlermeldung durchliest, wirst Du feststellen, dass Du keinen Vergleich durchführst, sondern eine Zuweisung. Siehe Nr. 9 https://wiki.selfhtml.org/wiki/Perl/Operatoren#Operatorenrangfolge

Kermit20

Zitat von: Ellert am 02 Juni 2016, 19:45:39
perl error in condition: InternalDoIf($hash,'DU_SW_RolladenAuto','STATE','','',AttrVal($hash->{NAME},'notexist',undef)) eq "on" and InternalDoIf($hash,'EG_HZ_KONT_Tuer','STATE','','',AttrVal($hash->{NAME},'notexist',undef)) eq "closed" and InternalDoIf($hash,'DU_SW_RolladenSperre','STATE','','',AttrVal($hash->{NAME},'notexist',undef)) = "on": Can't modify non-lvalue subroutine call in scalar assignment at (eval 177079) line 2, at EOF
Wenn Du Dir die Fehlermeldung durchliest, wirst Du feststellen, dass Du keinen Vergleich durchführst, sondern eine Zuweisung. Siehe Nr. 9 https://wiki.selfhtml.org/wiki/Perl/Operatoren#Operatorenrangfolge

Danke für den Hinweis, Ich habe mir dies mal durchgelesen.

Fehler war leider ein Syntaxproblem... hatte noch ein "=" in der Formel.... muss beim ganzen hin und her mit den Versionen passiert sein. Zumindest bekommen ich aktuell keine Fehlermeldung.

Manchmal muss man einfach eine Nacht drüber Schlafen =)
RPi1: FHEM mit HMLAN und CUL Eigenbau: diverse Homematic Geräte; Technoline Temp/Feuchte 868 MHz // Schalsteckdosen 433 MHz
RPi2: FHEM mit Viessmann(optolink) mit VControl und 1W Sensoren
RPi3: Apache / Owncloud 9