Verschluss-abhängige Rolladen-Steuerung mit DOIF - Wo ist der Fehler?

Begonnen von Ralli, 19 April 2015, 21:11:27

Vorheriges Thema - Nächstes Thema

Ralli

Hallo,

ich möchte den Rolladen einer Terrassentüre grundsätzlich zum Sonnenuntergang absenken. Allerdings nur dann, wenn auch die Türe verschlossen ist. Wenn nicht verschlossen, sollte bis ca. Sonnenaufgang trotzdem noch bei späterem Verschluss der Rolladen absenken.

Ich habe folgende Definition für DOIF:


([{sunset(-600,"","22:00")}-{sunrise_abs(+900,"","07:58")}] and [HWR_Aussentuer_Verschluss] eq "closed" and [?HWR_Rollo_Tuer] ne "off" and [?HWR_Rollo_Tuer:motor] =~ "stop:.*") (set HWR_Rollo_Tuer 0)


Allerdings klappt es so nicht. Nach dem Startzeitpunkt wurde die Türe verschlossen, Trigger hat ausgelöst. Allerdings scheint da die zeitliche Bedingung nicht mehr gegriffen zu haben.

Wo ist der Fehler?

Edit:
Ich denke, das Problem könnte sein, dass der timer_1_c1 unmittelbar nachdem der Zeitpunkt überschritten ist, bereits auf den nächsten sunset aktualisiert wird. M.E. müsste aber stattdessen - laienhaft formuliert - ein timer_3_c1 mit dem nächsten sunset angelegt werden und nach Ablauf des bis sunrise_abs definierten Zeitfensters müsste dann timer_1_c1 und timer_2_c1 gelöscht werden, timer_3_c1 würde zu timer_1_c1 und timer_2_c1 würde aktualisiert.
Gruß,
Ralli

Proxmox 8.4 Cluster mit HP ED800G2i7, Intel NUC11TNHi7+NUC7i5BNH, virtualisiertes fhem 6.4 dev, virtualisierte RaspberryMatic (3.83.6.20250705) mit HB-RF-ETH 1.3.0 / RPI-RF-MOD, HM-LAN-GW (1.4.1) und HMW-GW, FRITZBOX 7490 (07.59), FBDECT, Siri und Alexa

Ralli

Meine Vermutung bestätigt sich insoweit:

Wenn zum Zeitpunkt  timer_1_c1 auch der Verschluss gegeben ist, wird der Rolladen abgesenkt. Wird erst verschlossen nach dem Zeitpunkt timer_1_c1 aber vor timer_2_c1, klappt das nicht - obwohl es klappen sollte :).
Gruß,
Ralli

Proxmox 8.4 Cluster mit HP ED800G2i7, Intel NUC11TNHi7+NUC7i5BNH, virtualisiertes fhem 6.4 dev, virtualisierte RaspberryMatic (3.83.6.20250705) mit HB-RF-ETH 1.3.0 / RPI-RF-MOD, HM-LAN-GW (1.4.1) und HMW-GW, FRITZBOX 7490 (07.59), FBDECT, Siri und Alexa

Damian

Zitat von: Ralli am 21 April 2015, 07:16:21
Meine Vermutung bestätigt sich insoweit:

Wenn zum Zeitpunkt  timer_1_c1 auch der Verschluss gegeben ist, wird der Rolladen abgesenkt. Wird erst verschlossen nach dem Zeitpunkt timer_1_c1 aber vor timer_2_c1, klappt das nicht - obwohl es klappen sollte :).

Dann poste hier die Ausgabe von list <dein_doif_modul> von einem solchen Fall.

Gruß

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

Ralli

Mache ich heute abend, danke.

Aber die Definition sollte so eigentlich richtig sein, oder habe ich einen Logik-Fehler eingebaut?
Gruß,
Ralli

Proxmox 8.4 Cluster mit HP ED800G2i7, Intel NUC11TNHi7+NUC7i5BNH, virtualisiertes fhem 6.4 dev, virtualisierte RaspberryMatic (3.83.6.20250705) mit HB-RF-ETH 1.3.0 / RPI-RF-MOD, HM-LAN-GW (1.4.1) und HMW-GW, FRITZBOX 7490 (07.59), FBDECT, Siri und Alexa

Damian

Zitat von: Ralli am 21 April 2015, 08:53:47
Mache ich heute abend, danke.

Aber die Definition sollte so eigentlich richtig sein, oder habe ich einen Logik-Fehler eingebaut?

Du hast nur einen Fall und kein do always Attribut. Damit wird das Kommando nur nach Zustandswechsel ausgeführt, d. h. es muss zwischendurch cmd_2 (false) zuschlagen, bevor wieder cmd_1 ausgeführt wird.

Gruß

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

Ralli

Korrekt. Aber die Zustandsänderung muss ja zwangsläufig kommen, wenn beide Bedingungen erfüllt sind - also wenn Zeitfenster gegeben und Verschluss ebenfalls gegeben. Dann müsste CMD1 ausgeführt werden. Es wird ja auf jeden Fall nach Ablauf des Zeitfensters (das nicht vorhandene) CMD2 ausgeführt, es sei denn, die ganze Nacht wäre kein Verschluss eingetreten. Somit habe ich täglich auf jeden Fall einen Statuswechsel.
Gruß,
Ralli

Proxmox 8.4 Cluster mit HP ED800G2i7, Intel NUC11TNHi7+NUC7i5BNH, virtualisiertes fhem 6.4 dev, virtualisierte RaspberryMatic (3.83.6.20250705) mit HB-RF-ETH 1.3.0 / RPI-RF-MOD, HM-LAN-GW (1.4.1) und HMW-GW, FRITZBOX 7490 (07.59), FBDECT, Siri und Alexa

Damian

Zitat von: Ralli am 21 April 2015, 09:28:09
Korrekt. Aber die Zustandsänderung muss ja zwangsläufig kommen, wenn beide Bedingungen erfüllt sind - also wenn Zeitfenster gegeben und Verschluss ebenfalls gegeben. Dann müsste CMD1 ausgeführt werden. Es wird ja auf jeden Fall nach Ablauf des Zeitfensters (das nicht vorhandene) CMD2 ausgeführt, es sei denn, die ganze Nacht wäre kein Verschluss eingetreten. Somit habe ich täglich auf jeden Fall einen Statuswechsel.

Wenn ein Statuswechsel sichergestellt ist, dann sind zumindest schon mal die Voraussetzungen erfüllt.

Gruß

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

Ralli

Wie versprochen hier die lists. Aber: es ist wie immer, Murphys Gesetz hat zugeschlagen, und heute hat es - ohne Codeänderungen - so geklappt wie erwartet. Grrr  ;D.

DOIF vor timer_1_c1:

Internals:
   DEF        ([{sunset(-600,"","22:00")}-{sunrise_abs(+900,"","07:58")}] and [HWR_Aussentuer_Verschluss] eq "closed" and [?HWR_Rollo_Tuer] ne "off" and [?HWR_Rollo_Tuer:motor] =~ "stop:.*") (set HWR_Rollo_Tuer 0)
   NAME       TuerenRolloRunter_Timer
   NR         425
   NTFY_ORDER 50-TuerenRolloRunter_Timer
   STATE      cmd_2
   TYPE       DOIF
   CHANGETIME:
   Helper:
     Dblog:
       Cmd_event:
         Eventlog:
           TIME       1429589070.56963
           VALUE      timer_2
       Cmd_nr:
         Eventlog:
           TIME       1429589070.56963
           VALUE      2
       State:
         Eventlog:
           TIME       1429589070.56963
           VALUE      cmd_2
   Readings:
     2015-04-21 06:04:30   cmd_event       timer_2
     2015-04-21 06:04:30   cmd_nr          2
     2015-04-21 19:08:47   e_HWR_Aussentuer_Verschluss_STATE open
     2015-04-21 06:04:30   state           cmd_2
     2015-04-20 20:54:52   timer_1_c1      21.04.2015 20:56:36
     2015-04-21 06:04:30   timer_2_c1      22.04.2015 06:02:21
     2015-04-19 12:49:16   wait_timer      no timer
   Condition:
     0          DOIF_time($hash->{realtime}{0},$hash->{realtime}{1},$wday,$hms,"") and InternalDoIf('HWR_Aussentuer_Verschluss','STATE','') eq "closed" and InternalDoIf('HWR_Rollo_Tuer','STATE','') ne "off" and ReadingValDoIf('HWR_Rollo_Tuer','motor','') =~ "stop:.*"
   Days:
   Devices:
     0           HWR_Aussentuer_Verschluss
     all         HWR_Aussentuer_Verschluss
   Do:
     0          set HWR_Rollo_Tuer 0
   Helper:
     last_timer 2
     sleeptimer -1
   Internals:
     0           HWR_Aussentuer_Verschluss:STATE
     all         HWR_Aussentuer_Verschluss:STATE
   Itimer:
   Readings:
   Realtime:
     0          20:56:36
     1          06:02:21
   State:
   Time:
     0          {sunset(-600,"","22:00")}
     1          {sunrise_abs(+900,"","07:58")}
   Timecond:
     0          0
     1          0
   Timer:
     0          0
     1          0
   Timerfunc:
   Timers:
     0           0  1
   Trigger:
Attributes:
   disable    0
   group      Timer
   room       System
   wait       30


DOIF nach timer_1_c1 aber mit noch offenem Verschluss:


Internals:
   DEF        ([{sunset(-600,"","22:00")}-{sunrise_abs(+900,"","07:58")}] and [HWR_Aussentuer_Verschluss] eq "closed" and [?HWR_Rollo_Tuer] ne "off" and [?HWR_Rollo_Tuer:motor] =~ "stop:.*") (set HWR_Rollo_Tuer 0)
   NAME       TuerenRolloRunter_Timer
   NR         425
   NTFY_ORDER 50-TuerenRolloRunter_Timer
   STATE      cmd_2
   TYPE       DOIF
   CHANGETIME:
   Helper:
     Dblog:
       Cmd_event:
         Eventlog:
           TIME       1429589070.56963
           VALUE      timer_2
       Cmd_nr:
         Eventlog:
           TIME       1429589070.56963
           VALUE      2
       State:
         Eventlog:
           TIME       1429589070.56963
           VALUE      cmd_2
   Readings:
     2015-04-21 06:04:30   cmd_event       timer_2
     2015-04-21 06:04:30   cmd_nr          2
     2015-04-21 19:08:47   e_HWR_Aussentuer_Verschluss_STATE open
     2015-04-21 06:04:30   state           cmd_2
     2015-04-21 20:56:36   timer_1_c1      22.04.2015 20:58:21
     2015-04-21 06:04:30   timer_2_c1      22.04.2015 06:02:21
     2015-04-19 12:49:16   wait_timer      no timer
   Condition:
     0          DOIF_time($hash->{realtime}{0},$hash->{realtime}{1},$wday,$hms,"") and InternalDoIf('HWR_Aussentuer_Verschluss','STATE','') eq "closed" and InternalDoIf('HWR_Rollo_Tuer','STATE','') ne "off" and ReadingValDoIf('HWR_Rollo_Tuer','motor','') =~ "stop:.*"
   Days:
   Devices:
     0           HWR_Aussentuer_Verschluss
     all         HWR_Aussentuer_Verschluss
   Do:
     0          set HWR_Rollo_Tuer 0
   Helper:
     last_timer 2
     sleeptimer -1
   Internals:
     0           HWR_Aussentuer_Verschluss:STATE
     all         HWR_Aussentuer_Verschluss:STATE
   Itimer:
   Readings:
   Realtime:
     0          20:58:21
     1          06:02:21
   State:
   Time:
     0          {sunset(-600,"","22:00")}
     1          {sunrise_abs(+900,"","07:58")}
   Timecond:
     0          0
     1          0
   Timer:
     0          0
     1          0
   Timerfunc:
   Timers:
     0           0  1
   Trigger:
Attributes:
   disable    0
   group      Timer
   room       System
   wait       30


Und schlussendlich nach timer_1_c1 und auch nach danach eingetretenem Verschluss:


Internals:
   DEF        ([{sunset(-600,"","22:00")}-{sunrise_abs(+900,"","07:58")}] and [HWR_Aussentuer_Verschluss] eq "closed" and [?HWR_Rollo_Tuer] ne "off" and [?HWR_Rollo_Tuer:motor] =~ "stop:.*") (set HWR_Rollo_Tuer 0)
   NAME       TuerenRolloRunter_Timer
   NR         425
   NTFY_ORDER 50-TuerenRolloRunter_Timer
   STATE      cmd_1
   TYPE       DOIF
   CHANGETIME:
   Helper:
     Dblog:
       Cmd_event:
         Eventlog:
           TIME       1429642808.27356
           VALUE      HWR_Aussentuer_Verschluss
       Cmd_nr:
         Eventlog:
           TIME       1429642808.27356
           VALUE      1
       State:
         Eventlog:
           TIME       1429642808.27356
           VALUE      cmd_1
       Wait_timer:
         Eventlog:
           TIME       1429642808.00541
           VALUE      no timer
   Readings:
     2015-04-21 21:00:08   cmd_event       HWR_Aussentuer_Verschluss
     2015-04-21 21:00:08   cmd_nr          1
     2015-04-21 20:59:37   e_HWR_Aussentuer_Verschluss_STATE closed
     2015-04-21 21:00:08   state           cmd_1
     2015-04-21 20:56:36   timer_1_c1      22.04.2015 20:58:21
     2015-04-21 06:04:30   timer_2_c1      22.04.2015 06:02:21
     2015-04-21 21:00:08   wait_timer      no timer
   Condition:
     0          DOIF_time($hash->{realtime}{0},$hash->{realtime}{1},$wday,$hms,"") and InternalDoIf('HWR_Aussentuer_Verschluss','STATE','') eq "closed" and InternalDoIf('HWR_Rollo_Tuer','STATE','') ne "off" and ReadingValDoIf('HWR_Rollo_Tuer','motor','') =~ "stop:.*"
   Days:
   Devices:
     0           HWR_Aussentuer_Verschluss
     all         HWR_Aussentuer_Verschluss
   Do:
     0          set HWR_Rollo_Tuer 0
   Helper:
     last_timer 2
     sleepdevice HWR_Aussentuer_Verschluss
     sleeptimer -1
   Internals:
     0           HWR_Aussentuer_Verschluss:STATE
     all         HWR_Aussentuer_Verschluss:STATE
   Itimer:
   Readings:
   Realtime:
     0          20:58:21
     1          06:02:21
   State:
   Time:
     0          {sunset(-600,"","22:00")}
     1          {sunrise_abs(+900,"","07:58")}
   Timecond:
     0          0
     1          0
   Timer:
     0          0
     1          0
   Timerfunc:
   Timers:
     0           0  1
   Trigger:
Attributes:
   disable    0
   group      Timer
   room       System
   wait       30


Sobald es das nächste mal nicht wie erwartet klappt, werde ich den entsprechenden list hier posten.
Gruß,
Ralli

Proxmox 8.4 Cluster mit HP ED800G2i7, Intel NUC11TNHi7+NUC7i5BNH, virtualisiertes fhem 6.4 dev, virtualisierte RaspberryMatic (3.83.6.20250705) mit HB-RF-ETH 1.3.0 / RPI-RF-MOD, HM-LAN-GW (1.4.1) und HMW-GW, FRITZBOX 7490 (07.59), FBDECT, Siri und Alexa

Damian

Zitat von: Ralli am 21 April 2015, 21:07:12
Sobald es das nächste mal nicht wie erwartet klappt, werde ich den entsprechenden list hier posten.

Dass das Zeit-Intervall fälschlicherweise nicht wahr ist, ist eher unwahrscheinlich, ich würde eher auf eine der mit and verknüpften Bedingungen:  [?HWR_Rollo_Tuer] ne "off" and [?HWR_Rollo_Tuer:motor] =~ "stop:.*" tippen, die zu diesem Zeitpunkt möglicherweise nicht wahr ist.

Gruß

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