Schalt-Sequenz bei bestimmtem Event

Begonnen von wolliballa73, 05 Mai 2024, 15:21:17

Vorheriges Thema - Nächstes Thema

wolliballa73

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 :-)

CU,
Matze

Prof. Dr. Peter Henning

Nein, ist wirklich nicht so schwer. CommandRef zu DOIF lesen, da steht alles drin.

LG

pah

tomcat.x

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
FHEM: 6.1 auf Raspi 3, Raspbian (Buster), Perl v5.28.1
Sender/Empfänger: 2 x CULv3, Duofern Stick, HM-MOD-RPI-PCB
Gateways: FRITZ!Box 6591 (OS: 7.57), Trädfri, ConBee 2,  piVCCU, OpenMQTTGateway
Sensoren/Aktoren: FRITZ!DECT, FS20, FHT, HMS, HomeMatic, Trädfri, DuoFern, NetAtmo

betateilchen

#3
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:

  • Solche at sind immer TEMPORARY, das heißt, sie sind nicht dauerhaft in FHEM vorhanden. Deshalb der Weg, dieses notify bei Bedarf von einem Auslöser anlegen zu lassen
  • Der Beginn der Ausführung des at zur Wassersteuerung erfolgt logischerweise erst nach Ablauf des ersten Intervalls (im Beispiel also nach 12 Minuten). Das kann man auch noch ändern, aber ich wollte es für das Verständnis nicht unnötig kompliziert machen. Das beschriebene 12-notify selbst existiert natürlich dauerhaft. hier könnte man beispielsweise anstatt 12 Uhr auch 11:48:00 angeben, dann startet die Wassersteuerung um 12 Uhr.

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Prof. Dr. Peter Henning

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

betateilchen

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.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!