DOIF erkennt Zustand nicht?

Begonnen von kschi, 27 Juni 2020, 07:39:09

Vorheriges Thema - Nächstes Thema

kschi

Hi,
ich habe eine Gartenbewässerung mit 3 Schaltventilen. In einer DOIF sollen die Schalter testweiser erst einmal nur 10 Sekunden an sein und danach abschalten:

DOIF_WasserZeit DOIF ([Wasser1:"on"]) (set Wasser1 on-for-timer 10)DOELSEIF\
([Wasser2:"on"]) (set Wasser2 on-for-timer 10)DOELSEIF\
([Wasser3:"on"]) (set Wasser3 on-for-timer 10)


Wenn ich die Schalter manuell anklicke, geht jeder einzelne nach 10 sekunden wieder aus. So soll es sein.

Nun möchte ich per DOIF eine Zeitschaltuhr definieren, wann die einzelnen Ventile schalten sollen.

DOIF_WASSER_morgens DOIF ([06:00]) (set Wasser1 on) DOELSEIF \
([06:30]) (set Wasser2 on) DOELSEIF \
([07:24]) (set Wasser3 on)\


Ich hätte jetzt gedacht, da die Ventile durch die zeitschaltuhr angeschaltet werden, dass diese sich dann durch das erste DOIF wieder abschalten. Aber das tun sie nicht.

Wie kann ich es besser machen?

Danke für Eure Hilfe,
Karsten

Damian

Vermutlich wird zuerst set Wasser1 on-for-timer 10 und dann erst set Wasser1 on, weil beide den gleichen Trigger haben und da ist die Reihenfolge nicht gewährleistet.

Du kannst aber aus zwei eins machen:

DOIF_WasserZeit DOIF ([Wasser1:"on"] or [06:00]) (set Wasser1 on-for-timer 10) ...


Besser ist es aber einen anderen Trigger zu nehmen:

DOIF_WasserZeit DOIF ([Fernbedienung:"on"] or [06:00]) (set Wasser1 on-for-timer 10) ...
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Müller

Hallo,

ich hätte folgenden Vorschlag: Benutze den on-for-timer von deinem Schalter.
Über eventMap kannst du ein einen /on-for-timer xxx/:an anlegen
und über "set Wasser an" würde dann das Wasser für die voreingestellte Zeit laufen.

oder du mußt dein DOIF für die Zeitschaltung "on" durc h "on-for-timer X" ersetzen.

Ergänzung: das zeitlich Problem (Damian) könntest du mit "wait" in deinem DOIF umgehen?
FHEM auf Raspberry, 433mHz & Zigbee für Rollläden, Gartenbewässerung, Beleuchtung, Fußbodenheizung

Damian

Zitat von: Müller am 27 Juni 2020, 09:49:30
Hallo,

ich hätte folgenden Vorschlag: Benutze den on-for-timer von deinem Schalter.
Über eventMap kannst du ein einen /on-for-timer xxx/:an anlegen
und über "set Wasser an" würde dann das Wasser für die voreingestellte Zeit laufen.

oder du mußt dein DOIF für die Zeitschaltung "on" durc h "on-for-timer X" ersetzen.

Ergänzung: das zeitlich Problem (Damian) könntest du mit "wait" in deinem DOIF umgehen?

All das kann man alternativ machen, es ist aber immer besser Ursache und Wirkung zu entkoppeln um nicht auf eigene Trigger reagieren zu müssen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

kschi

#4
Danke für Eure Tipps, ich hab es jetzt hinbekommen. Tatsächlich läuft es zuverlässig, wenn das Magnetventil durch einen Dummy geschaltet wird.

Ich habe dann eine Zeitsteuerung, wie lange die Magnetventile laufen sollen, hier drin sind die Dummys der Gartenventile:

DOIF_WasserZeit DOIF ([Gartenwasser1:"on"]) (set Wasser_CH1 on-for-timer 1200)DOELSEIF\
([Gartenwasser2:"on"]) (set Wasser_CH2 on-for-timer 1200)DOELSEIF\
([Gartenwasser3:"on"]) (set Wasser_CH3 on-for-timer 1200)DOELSEIF\
([Gartenwasser4:"on"]) (set Wasser_CH4 on-for-timer 1200)


Dann gibt es noch ein  DOIF wann die Ventile Morgens und abend geschsltet werden sollen:

DOIF_WASSER_morgens DOIF ([06:00]) (set Gartenwasser1 on) DOELSEIF \
([06:30]) (set Gartenwasser2 on) DOELSEIF \
([07:00]) (set Gartenwasser3 on) DOELSEIF \
([07:30]) (set Gartenwasser4 on) 


Ich mache das nicht alles in einem DOIF, damit ich einfach mal im einen doif die Zeiten anpassen kann oder im anderen Fall die Zeitschaltuhr.

P.s. wie löst man denn einen thread? Ist das die Option "Thema schließen?"

Damian

Du kannst gelöst im Betreff schreiben, aber nicht schließen, denn es gibt immer Verbesserungsvorschläge, die man nicht kennt. Z. B. kannst du mit indirekten Timern arbeiten, dann brauchst du die Zeiten nicht im DOIF zu ändern.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

kschi

Zitat von: Damian am 28 Juni 2020, 09:06:40
Du kannst gelöst im Betreff schreiben, aber nicht schließen, denn es gibt immer Verbesserungsvorschläge, die man nicht kennt. Z. B. kannst du mit indirekten Timern arbeiten, dann brauchst du die Zeiten nicht im DOIF zu ändern.

Äh, ah ja, das hab ich jetzt nicht verstanden... was sind denn indirekte Timer? Variablen, in  der die Uhrzeit steht?

Damian

Zitat von: kschi am 28 Juni 2020, 12:54:01
Äh, ah ja, das hab ich jetzt nicht verstanden... was sind denn indirekte Timer? Variablen, in  der die Uhrzeit steht?

https://fhem.de/commandref_DE.html#DOIF_Indirekten_Zeitangaben
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF