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ß
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 ....
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
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 =)