Gelöst: Problem mit Selftrigger und Abbruch wait

Begonnen von Niel, 20 April 2020, 22:23:38

Vorheriges Thema - Nächstes Thema

Niel

Hallo!

Nach einem Wochenende mit viel Probieren und noch mehr nachlesen, brauche ich jetzt doch mal Eure Hilfe.

Ich habe Ventile (im Test erstmal 2) für die Gartenbewässerung. Davon darf immer nur eins aktiv sein, da der Wasserhahn nicht ausreichend Wasser liefert. Also Ansteuerung nacheinander. Das klappt auch.

Jetzt würde ich gerne auch mal ein Ventil sperren, weil z. B. das Trampolin dort steht. Wenn ich also das erste Ventil sperren, springt das zweite aber trotzdem erst an, nachdem die Zeit für das erste Ventil abgelaufen ist, obwohl es nicht aktiviert wurde.

Wie erreiche ich, dass bei der Triggerung durch set du_Ventil_aktiv 2 das cmd_1 quasi abgebrochen wird und die Waittimer gelöscht werden?

Hier das list während des Wartens:

Internals:
   DEF        ([du_FTUI_Bewaesserung_manuell] eq "on") (set du_Ventil_aktiv 1)
DOELSEIF ([du_Ventil_aktiv] == 1)
(IF ([AG_Ventil_1] eq "Auto") (set AG_Ventil_1 An) ELSE (set du_Ventil_aktiv 2))
(IF ([AG_Ventil_1] ne "Gesperrt") (set AG_Ventil_1 Auto))
(set du_Ventil_aktiv 2)
DOELSEIF ([du_Ventil_aktiv] == 2)
(IF ([AG_Ventil_2] eq "Auto") (set AG_Ventil_2 An) ELSE (set du_Ventil_aktiv 3))
(IF ([AG_Ventil_2] ne "Gesperrt") (set AG_Ventil_2 Auto))
(set du_Ventil_aktiv 3)
DOELSEIF ([du_Ventil_aktiv] == 3)
(set du_Ventil_aktiv 0,set du_FTUI_Bewaesserung_manuell off)
   MODEL      FHEM
   NAME       di_AG_Test_Bewaesserung
   NR         315
   NTFY_ORDER 50-di_AG_Test_Bewaesserung
   STATE      cmd_1
   TYPE       DOIF
   READINGS:
     2020-04-20 22:11:35   Device          du_Ventil_aktiv
     2020-04-20 22:11:35   cmd             1
     2020-04-20 22:11:35   cmd_event       du_FTUI_Bewaesserung_manuell
     2020-04-20 22:11:35   cmd_nr          1
     2020-04-20 22:11:35   e_du_FTUI_Bewaesserung_manuell_STATE on
     2020-04-20 22:11:35   e_du_Ventil_aktiv_STATE 1
     2020-04-20 22:07:48   mode            enabled
     2020-04-20 22:11:35   state           cmd_1
     2020-04-20 22:11:35   wait_timer      20.04.2020 22:11:40 cmd_2_2 du_Ventil_aktiv
   Regex:
   attr:
     cmdState:
     wait:
       0:
         0
       1:
         0
         [du_Bewaesserungsdauer]
         0
       2:
         0
         [du_Bewaesserungsdauer]
       3:
         0
     waitdel:
   condition:
     0          InternalDoIf($hash,'du_FTUI_Bewaesserung_manuell','STATE') eq "on"
     1          InternalDoIf($hash,'du_Ventil_aktiv','STATE') == 1
     2          InternalDoIf($hash,'du_Ventil_aktiv','STATE') == 2
     3          InternalDoIf($hash,'du_Ventil_aktiv','STATE') == 3
   devices:
     0           du_FTUI_Bewaesserung_manuell
     1           du_Ventil_aktiv
     2           du_Ventil_aktiv
     3           du_Ventil_aktiv
     all         du_FTUI_Bewaesserung_manuell du_Ventil_aktiv
   do:
     0:
       0          set du_Ventil_aktiv 1
     1:
       0          IF ([AG_Ventil_1] eq "Auto") (set AG_Ventil_1 An) ELSE (set du_Ventil_aktiv 2)
       1          IF ([AG_Ventil_1] ne "Gesperrt") (set AG_Ventil_1 Auto)
       2          set du_Ventil_aktiv 2
     2:
       0          IF ([AG_Ventil_2] eq "Auto") (set AG_Ventil_2 An) ELSE (set du_Ventil_aktiv 3)
       1          IF ([AG_Ventil_2] ne "Gesperrt") (set AG_Ventil_2 Auto)
       2          set du_Ventil_aktiv 3
     3:
       0          set du_Ventil_aktiv 0,set du_FTUI_Bewaesserung_manuell off
     4:
   helper:
     event      1
     globalinit 1
     last_timer 0
     sleepdevice du_Ventil_aktiv
     sleepsubtimer 1
     sleeptimer 1
     timerdev   du_Ventil_aktiv
     timerevent 1
     triggerDev du_Ventil_aktiv
     DOIF_eventas:
       cmd_nr: 1
       cmd: 1
       cmd_event: du_FTUI_Bewaesserung_manuell
       state: cmd_1
     timerevents:
       1
       2
     timereventsState:
       state: 1
     triggerEvents:
       1
       2
     triggerEventsState:
       state: 1
   internals:
     0           du_FTUI_Bewaesserung_manuell:STATE
     1           du_Ventil_aktiv:STATE
     2           du_Ventil_aktiv:STATE
     3           du_Ventil_aktiv:STATE
     all         du_FTUI_Bewaesserung_manuell:STATE du_Ventil_aktiv:STATE
   itimer:
   readings:
   trigger:
   uiState:
   uiTable:
Attributes:
   selftrigger all
   wait       0:0,[du_Bewaesserungsdauer],0:0,[du_Bewaesserungsdauer]:0


Ich drehe mich im Kreis und habe jetzt den Überblick total verloren. Für einen Schubs in die richtige Richtung wäre ich dankbar.

Grüße

Niel

Damian

Du kannst die Waitzeiten als indirekte Zeiten angeben. Diese kannst du dann nach Bedarf auf Null setzen.


z. B. attr wait [$SELF:wait1]:....

und

setreading $SELF wait1 0
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Niel

Danke, werde ich morgen ausprobieren und mich melden.

Niel

Hallo!

Den Vorschlag mit setReading habe ich kurz probiert, aber dann verworfen, da dann immer ein save fällig wird.

Habe es jetzt anders gelöst. Pro Ventil Wird die Zeit vorher in einem dummy festgelegt, wenn sich der Status des Ventils ändert (Auto -> Gesperrt -> Auto) Dieser dummy steht im wait-Attribut. Daher kein save notwendig.

Allerdings darf der dummy nicht 0 sein, sonst hängt das doif. Habe es jetzt bei gesperrtem Ventil auf 0.01 gesetzt. Da passiert am Ventil nichts. Die 0 funktionierte bei der Variante mit setReading übrigens auch nicht.

Grüße

Niel