ein weiteres DOIF Problem !! Lichsteuerung im Aussenbereich

Begonnen von sash.sc, 11 September 2016, 12:10:46

Vorheriges Thema - Nächstes Thema

Damian

Zitat von: sash.sc am 25 November 2016, 17:24:16
Oder auch nicht..... ;-)

habe jetzt nach einigen Updates, dass das DOIF nicht mehr von alleine startet !!!! :o ::)




Internals:
   DEF        ([lichtsens:Indikator] < [lichtanteil]) (set LS scene 01) (set LS scene 02) (set LS scene Off)
   NAME       LW1
   NR         144
   NTFY_ORDER 50-LW1
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2016-11-25 17:07:52   Device          lichtsens
     2016-11-25 00:58:11   cmd             1.3
     2016-11-24 22:58:11   cmd_count       4
     2016-11-25 00:58:11   cmd_event       lichtsens
     2016-11-25 00:58:11   cmd_nr          1
     2016-11-25 00:58:11   cmd_seqnr       3
     2016-11-25 17:07:52   e_lichtsens_Indikator 0
     2016-11-24 16:48:56   last_cmd        initialize
     2016-11-25 00:58:11   state           cmd_1
     2016-11-25 17:07:53   wait_timer      no timer
   Condition:
     0          ReadingValDoIf($hash,'lichtsens','Indikator','','',AttrVal($hash->{NAME},'notexist',undef)) < InternalDoIf($hash,'lichtanteil','STATE','','',AttrVal($hash->{NAME},'notexist',undef))
   Devices:
     0           lichtsens lichtanteil
     all         lichtsens lichtanteil
   Do:
     0:
       0          set LS scene 01
       1          set LS scene 02
       2          set LS scene Off
     1:
   Helper:
     event      Indikator: 0
     globalinit 1
     last_timer 0
     sleepdevice lichtsens
     sleepsubtimer -1
     sleeptimer -1
     timerdev   lichtsens
     timerevent Indikator: 0
     triggerDev lichtsens
     timerevents:
       Indikator: 0
     timereventsState:
       Indikator: 0
     triggerEvents:
       Indikator: 0
     triggerEventsState:
       Indikator: 0
   Internals:
     0           lichtanteil:STATE
     all         lichtanteil:STATE
   Itimer:
   Readings:
     0           lichtsens:Indikator
     all         lichtsens:Indikator
   Regexp:
     0:
     All:
   State:
   Trigger:
Attributes:
   devStateIcon cmd_2:rc_2:disable disabled:general_aus@red:initialize initialize:general_an@lime:disable cmd_1_1:rc_1:disable cmd_1_2:rc_2:disable cmd_1_3:rc_3:disable cmd_1_4:rc_4:disable initialized:general_an@orange:initialize
   icon       light_light_dim_100@yellow
   repeatsame 4
   room       10_Draussen
   wait       1,3600,3600





Ist klar, wenn sich das Modul im cmd_1-Zustand befindet, dann wird es nichts machen. Es hätte zwischendurch in den cmd_2-Zustand wechseln müssen, als die Bedingung nicht wahr war. Das hat das Modul nicht mitbekommen. (das System war nicht aktiv oder sonstiges)


Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

sash.sc

Das Modul ist immer aktiv. Nach einer Änderung muss ich es ja manuell starten. Gestern habe ich nix geändert. Nun ja. Werde es gleich mal starten und schauen was sich die nächsten tage ergibt. Ist aber komisch, dass nur dieses doif Probleme macht. Habe noch andere doif für die Rollos am laufen und die machen nicht solche faxen.

Gruß Sascha

Von mobil gesendet daher kurze Antwort

Raspi 4B+ Bullseye ;LaCrosse; HomeMatic; MapleCUL; ZigBee; Signalduino ESP32 ; Shellys; MQTT2; Grafana mit Influxdb

Damian

Zitat von: sash.sc am 25 November 2016, 18:53:11
Das Modul ist immer aktiv. Nach einer Änderung muss ich es ja manuell starten. Gestern habe ich nix geändert. Nun ja. Werde es gleich mal starten und schauen was sich die nächsten tage ergibt. Ist aber komisch, dass nur dieses doif Probleme macht. Habe noch andere doif für die Rollos am laufen und die machen nicht solche faxen.

Gruß Sascha

Von mobil gesendet daher kurze Antwort

Wenn es immer aktiv ist, dann sollte doch auch [lichtsens:Indikator] >= [lichtanteil] mitbekommen, dass ist ja die Bedingung für cmd_2
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

sash.sc

Richtig. Deswegen habe ich mich gewundert, dass es heute nicht geschaltet hat. Ich hatte auch kein Neustart von fhem durchgeführt, während die Timer liefen.

Von mobil gesendet daher kurze Antwort

Raspi 4B+ Bullseye ;LaCrosse; HomeMatic; MapleCUL; ZigBee; Signalduino ESP32 ; Shellys; MQTT2; Grafana mit Influxdb

sash.sc

#34
Muss mich nochmal zu Wort melden.

Habe ja versucht das DOIF ein wenig zu verkürzen.



([lichtsens:Indikator:d] < [lichtanteil]) (set LS scene 01) (set LS scene 02) (set LS scene Off)


Ich möchte jetzt den letzten Teil (set LS scene Off) erst schalten, wenn die ganze Sequenz  4x abgelaufen ist.

Ich habe das mir so gedacht.



([lichtsens:Indikator:d] < [lichtanteil]) (set LS scene 01) (set LS scene 02)
DOELSEIF ([LW1:cmd_count] = 3 and [LW1:cmd_seqnr]= 2) (set LS scene Off)

wait 1,3600:3600
repeatsame 4:1


Klappt aber nicht. Bekomme da eine Fehlermeldung

error

perl error in condition: ReadingValDoIf($hash,'LW1','cmd_count') = 3 and ReadingValDoIf($hash,'LW1','cmd_seqnr')= 2: Can't modify non-lvalue subroutine call in scalar assignment at (eval 132269) line 1, near "3 and"



List des DOIF

Internals:
   DEF        ([lichtsens:Indikator:d] < [lichtanteil]) (set LS scene 01) (set LS scene 02)
DOELSEIF ([LW1:cmd_count] = 3 and [LW1:cmd_seqnr]= 2) (set LS scene Off)
   NAME       LW1
   NR         144
   NTFY_ORDER 50-LW1
   STATE      cmd_1_1
   TYPE       DOIF
   Readings:
     2016-12-08 23:31:59   Device          lichtsens
     2016-12-08 23:23:05   cmd             1.1
     2016-12-08 23:23:52   cmd_count       3
     2016-12-08 23:23:05   cmd_event       lichtanteil
     2016-12-08 23:23:05   cmd_nr          1
     2016-12-08 23:23:05   cmd_seqnr       1
     2016-12-08 23:23:52   e_LW1_cmd_count 3
     2016-12-08 23:23:52   e_LW1_cmd_seqnr 1
     2016-12-08 23:23:04   e_lichtanteil_STATE 21
     2016-12-08 23:31:59   e_lichtsens_Indikator 0
     2016-12-08 23:23:52   error           perl error in condition: ReadingValDoIf($hash,'LW1','cmd_count') = 3 and ReadingValDoIf($hash,'LW1','cmd_seqnr')= 2: Can't modify non-lvalue subroutine call in scalar assignment at (eval 132269) line 1, near "3 and"

     2016-12-08 23:23:05   state           cmd_1_1
     2016-12-08 23:23:05   wait_timer      09.12.2016 00:23:05 cmd_1_2 lichtanteil
   Condition:
     0          ReadingValDoIf($hash,'lichtsens','Indikator','','(-?\d+(\.\d+)?)') < InternalDoIf($hash,'lichtanteil','STATE')
     1          ReadingValDoIf($hash,'LW1','cmd_count') = 3 and ReadingValDoIf($hash,'LW1','cmd_seqnr')= 2
   Devices:
     0           lichtsens lichtanteil
     1           LW1
     all         lichtsens lichtanteil LW1
   Do:
     0:
       0          set LS scene 01
       1          set LS scene 02
     1:
       0          set LS scene Off
   Helper:
     event      Indikator: 0
     globalinit 1
     last_timer 0
     sleepdevice lichtanteil
     sleepsubtimer 1
     sleeptimer 0
     timerdev   lichtsens
     timerevent Indikator: 0
     triggerDev lichtsens
     timerevents:
       Indikator: 0
     timereventsState:
       Indikator: 0
     triggerEvents:
       Indikator: 0
     triggerEventsState:
       Indikator: 0
   Internals:
     0           lichtanteil:STATE
     all         lichtanteil:STATE
   Itimer:
   Readings:
     0           lichtsens:Indikator
     1           LW1:cmd_count LW1:cmd_seqnr
     all         lichtsens:Indikator LW1:cmd_count LW1:cmd_seqnr
   Regexp:
     0:
     1:
     All:
   State:
   Trigger:
Attributes:
   devStateIcon cmd_2:rc_2:disable disabled:general_aus@red:initialize initialize:general_an@lime:disable cmd_1_1:rc_1:disable cmd_1_2:rc_2:disable cmd_1_3:rc_3:disable cmd_1_4:rc_4:disable initialized:general_an@orange:initialize
   icon       light_light_dim_100@yellow
   loglevel   2
   repeatsame 3
   room       10_Draussen
   wait       1,3600:3600


Also mit anderen Worten, comando 1 und 2 soll 4x bzw 3x abgearbeitet werden, dann die Prüfung auf die Anzahl der ausgeführten commandos. Wenn erreicht dann ausschalten.

Jemand eine Idee ???

Gruß
Sascha
Raspi 4B+ Bullseye ;LaCrosse; HomeMatic; MapleCUL; ZigBee; Signalduino ESP32 ; Shellys; MQTT2; Grafana mit Influxdb