FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: Tedious am 07 September 2017, 11:04:17

Titel: Ereignisabhängige Rolladensteuerung - DOIF - Denkfehler?
Beitrag von: Tedious am 07 September 2017, 11:04:17
Guten Morgen zusammen,

irgendwo scheine ich einen Knoten m Hirn zu haben, es geht um folgendes Doif:

([sonoff_sw2:BH1750_Illuminance] > 60 and [sonoffpow_2:Power] > 50 and [Rol.WZFenster:pct] > 40) (set Rol.WZFenster pct 40) DOELSEIF ([06:00-23:00] and [sonoffpow_2:Power] < 50 and [Rol.WZFenster:pct] = 40) (set Rol.WZFenster pct 100)

Folgendes soll passieren:

- Ein Sonoff mit BH1750-Sensor misst die Helligkeit am/über dem TV, der liegt einem großen Fenster gegenüber - dessen Rolladen wird via HM von Rol.WZFenster gesteuert. Wenn der TV an ist steigt der Verbrauch am Sonoff über/um 60W.

- Das Doif soll erkennen es ist hell [sonoff_sw2:BH1750_Illuminance] > 60, der TV ist an [sonoffpow_2:Power] > 50 und der Rollo schattet nicht ab and [Rol.WZFenster:pct] > 40  --> Rolladen 60% zu fahren. Das funktioniert soweit set Rol.WZFenster pct 40

Nun soll er, wenn der TV aus ist tagsüber den Rollo wieder hoch fahren...

- [06:00-23:00] tagsüber, wenn TV aus [sonoffpow_2:Power] < 50 (an dem Sonoff hängt auch ein AVR, also wenn nur Musik spielt bitte auch hoch fahren...) und die TV-Abschattung nicht mehr gebraucht wird [Rol.WZFenster:pct] = 40 (er soll nur bei exakt 40% fahren, denn nur denn wurde er vom Doif dort hin gefahren... kann ja sein dass man von hand ein wenig abgeschattet hat, dass man exakt 40% getroffen hat ist da eher unwahrscheinlich...) fahre bitte wieder hoch set Rol.WZFenster pct 100. Genau da macht er leider nicht.

Irgendwas scheint mit meinem Zeit-Operanden nicht zu stimmen, aber im Prinzip stehts ja so im Wiki:

define di_lamp DOIF ([06:00-19:00] and [sensor:brightness] < 40) (set lamp on) DOELSE (set lamp off)

Das Logfine spuckt aber einen Fehler aus:

2017.09.07 10:42:45 1: PERL WARNING: Useless use of a constant ("06:00") in void context at (eval 87115) line 1.
2017.09.07 10:42:45 3: eval: RolloTV: warning in condition c02


Mir ist nicht klar wo mein Denkfehler liegt... jemad einen tip für mich?

Hier noch ein List:


Internals:
   CFGFN
   DEF        ([sonoff_sw2:BH1750_Illuminance] > 60 and [sonoffpow_2:Power] > 50 and [Rol.WZFenster:pct] > 40) (set Rol.WZFenster pct 40) DOELSEIF ([06:00-23:00] and [sonoffpow_2:Power] < 50 and [Rol.WZFenster:pct] = 40) (set Rol.WZFenster pct 100)
   NAME       RolloTV
   NR         33158
   NTFY_ORDER 50-RolloTV
   STATE      initialize
   TYPE       DOIF
   Helper:
     DBLOG:
       cmd:
         myDbLog:
           TIME       1504773879.1067
           VALUE      0
       cmd_event:
         myDbLog:
           TIME       1504773165.14873
           VALUE      Rol.WZFenster
       cmd_nr:
         myDbLog:
           TIME       1504773165.14873
           VALUE      1
       cmd_seqnr:
         myDbLog:
           TIME       1504773160.18525
           VALUE      2
       error:
         myDbLog:
           TIME       1504773160.09197
           VALUE      [06:00-23:00] and 65 < 50 and 40 = 40
       last_cmd:
         myDbLog:
           TIME       1504773171.12138
           VALUE      cmd_1
       mode:
         myDbLog:
           TIME       1504773977.31546
           VALUE      enable
       state:
         myDbLog:
           TIME       1504774218.83047
           VALUE      initialize
   READINGS:
     2017-09-07 10:47:46   Device          sonoffpow_2
     2017-09-07 10:46:43   e_sonoff_sw2_BH1750_Illuminance 70
     2017-09-07 10:47:46   e_sonoffpow_2_Power 5
     2017-09-07 10:47:46   error           condition c02: Can't modify non-lvalue subroutine call in scalar assignment, line 1, at EOF

     2017-09-07 10:50:18   state           initialize
     2017-09-07 10:44:39   timer_01_c02    08.09.2017 06:00:00
     2017-09-07 10:44:39   timer_02_c02    07.09.2017 23:00:00
   condition:
     0          ReadingValDoIf($hash,'sonoff_sw2','BH1750_Illuminance') > 60 and ReadingValDoIf($hash,'sonoffpow_2','Power') > 50 and ReadingValDoIf($hash,'Rol.WZFenster','pct') > 40
     1          DOIF_time($hash,0,1,$wday,$hms) and ReadingValDoIf($hash,'sonoffpow_2','Power') < 50 and ReadingValDoIf($hash,'Rol.WZFenster','pct') = 40
   days:
   devices:
     0           sonoff_sw2 sonoffpow_2 Rol.WZFenster
     1           sonoffpow_2 Rol.WZFenster
     all         sonoff_sw2 sonoffpow_2 Rol.WZFenster
   do:
     0:
       0          set Rol.WZFenster pct 40
     1:
       0          set Rol.WZFenster pct 100
     2:
   helper:
     event      Power: 5,Total: 6.821,Yesterday: 0.293,Today: 0.165,Time: 2017-09-07T09:47:46,Period: 0,Voltage: 227,Current: 0.122,Factor: 0.2
     globalinit 1
     last_timer 2
     sleeptimer -1
     triggerDev sonoffpow_2
     triggerEvents:
       Power: 5
       Total: 6.821
       Yesterday: 0.293
       Today: 0.165
       Time: 2017-09-07T09:47:46
       Period: 0
       Voltage: 227
       Current: 0.122
       Factor: 0.2
     triggerEventsState:
       Power: 5
       Total: 6.821
       Yesterday: 0.293
       Today: 0.165
       Time: 2017-09-07T09:47:46
       Period: 0
       Voltage: 227
       Current: 0.122
       Factor: 0.2
   internals:
   interval:
     0          -1
     1          0
   itimer:
   localtime:
     0          1504843200
     1          1504818000
   readings:
     0           sonoff_sw2:BH1750_Illuminance sonoffpow_2:Power Rol.WZFenster:pct
     1           sonoffpow_2:Power Rol.WZFenster:pct
     all         sonoff_sw2:BH1750_Illuminance sonoffpow_2:Power Rol.WZFenster:pct
   realtime:
     0          06:00:00
     1          23:00:00
   regexp:
     0:
     1:
     all:
   state:
     STATE:
   time:
     0          06:00:00
     1          23:00:00
   timeCond:
     0          1
     1          1
   timer:
     0          0
     1          0
   timers:
     1           0  1
   trigger:
   triggertime:
     1504818000:
       localtime  1504818000
       hash:
     1504843200:
       localtime  1504843200
       hash:
Attributes:
   room       Rollladen


Danke und Grüße

Sascha
Titel: Antw:Ereignisabhängige Rolladensteuerung - DOIF - Denkfehler?
Beitrag von: nils_ am 07 September 2017, 13:48:31
die warning:
2017-09-07 10:47:46   error           condition c02: Can't modify non-lvalue subroutine call in scalar assignment, line 1, at EOF
kommt von diesem teil
and [Rol.WZFenster:pct] = 40

'=' ist eine Zuweisung, du willst aber vergleichen, versuch es mit '==' (sicher bin ich mir aber nicht, ob er wirklich immer exakt bei 40 steht!)
Titel: Antw:Ereignisabhängige Rolladensteuerung - DOIF - Denkfehler?
Beitrag von: Tedious am 07 September 2017, 13:54:38
Danke für den Tip. Mist, mal wieder ne Kleinigkeit übersehen... == statt =, oder halt eq. Manchmal sieht man den Wald vor lauter Bäumen nicht. Danke!