FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: wolliballa73 am 05 Mai 2024, 15:21:17

Titel: Schalt-Sequenz bei bestimmtem Event
Beitrag von: wolliballa73 am 05 Mai 2024, 15:21:17
Hallo allerseits,

ich hab gerade einen Knoten im Hirn und weiß nicht so recht, wie ich meinen Plan umsetzen soll   :-\

Der Plan: ich habe eine Tropfbewässerung (Magnetventil, gesteuert über KNX). Nun möchte ich gerne (entweder zeitgesteuert oder manuell über einen Button in FHEM) die Bewässerung nicht einfach nur starten und beenden, sondern z.B. 2 Minuten an, 10 Minuten Pause und das Ganze 3x

Irgendwie hab ich mich jetzt in at, notify, on-for-timer etc. verloren und seh den Wald vor lauter Bäumen nicht - kann ja nicht so schwer sein, oder?

Ich danke für sachdienliche Hinweise :-)

Titel: Aw: Schalt-Sequenz bei bestimmtem Event
Beitrag von: Prof. Dr. Peter Henning am 06 Mai 2024, 04:41:28
Nein, ist wirklich nicht so schwer. CommandRef zu DOIF lesen, da steht alles drin.

LG

pah
Titel: Aw: Schalt-Sequenz bei bestimmtem Event
Beitrag von: tomcat.x am 06 Mai 2024, 09:47:53
Ja, mit einem DOIF, aber selbst mit einem Notify ginge das. Dort kannst Du mit ";" getrennt mehrere Befehle angeben. Ein "sleep x" dazwischen startet den nächsten Befehl x Sekunden verzögert (intern ein temporärer Timer mit "at").

Wenn Du das als Macro anlegst (sozusagen ein Notify ohne Auslöser, siehe Commandref zu Notify") kannst Du es über "Trigger" manuell auslösen und hast im Timer nur den einen (Trigger) Befehl. Wobei das auch bei einem Timer über "execNow" ginge. Aber manchmal finde ich das mit dem Macro etwas übersichtlicher. Ist Geschmackssache.

Viele Grüße
Thomas
Titel: Aw: Schalt-Sequenz bei bestimmtem Event
Beitrag von: betateilchen am 06 Mai 2024, 12:28:41
Das geht auch ohne DOIF.

Zitatsondern z.B. 2 Minuten an, 10 Minuten Pause und das Ganze 3x

defmod test_at at +*{3}00:12:00 set wasser on-for-timer 120
Dieses define kannst Du an beliebiger Stelle erzeugen, z.B. wenn Du das immer um 12 Uhr möchtest:

define 12uhr_at at *12:00:00 defmod test_at at +*{3}00:12:00 set wasser on-for-timer 12
oder in einem notify auf event:

define test_notify notify <notifyRegex> defmod test_at at +*{3}00:12:00 set wasser on-for-timer 12
Zwei Dinge sind zu beachten:


Titel: Aw: Schalt-Sequenz bei bestimmtem Event
Beitrag von: Prof. Dr. Peter Henning am 07 Mai 2024, 04:41:52
Zitat von: betateilchen am 06 Mai 2024, 12:28:41Das geht auch ohne DOIF
Du hast natürlich vollkommen Recht. Ich bin auch kein Freund von DOIF, weil es zu viele (und auch leicht kryptische) Möglichkeiten bietet.

Aber: Dein Code mit dem geschachtelten at ist, vorsichtig gesagt, schwer wartbar. Nach 3 Jahren weißt Du nicht mehr, was das eigentlich machen soll.

Wenn man sich bei einem DOIF hingegen auf die Basics beschränkt, und den eher unsäglichen "Perl-Modus" außer Acht lässt, geht das mit wenigen Zeilen ganz gut zu machen.

LG

pah
Titel: Aw: Schalt-Sequenz bei bestimmtem Event
Beitrag von: betateilchen am 07 Mai 2024, 17:10:19
Zitat von: Prof. Dr. Peter Henning am 07 Mai 2024, 04:41:52Dein Code mit dem geschachtelten at ist, vorsichtig gesagt, schwer wartbar. Nach 3 Jahren weißt Du nicht mehr, was das eigentlich machen soll.

Wenn man sich verinnerlicht, dass "define" (oder defmod) genau so ein FHEM Befehl ist wie "set" oder "get", dann versteht man auch in drei Jahren noch, was da passiert. Es ist einfach ein at, das ein at anlegt.

Und "verschachtelt" ist dabei überhaupt nichts, es ist die klassische Syntax für ein at oder notify, in der ein FHEM Befehl ausgeführt werden soll.