Mehrere Befehle Etappenweise ausführen

Begonnen von kud, 29 Mai 2014, 18:06:36

Vorheriges Thema - Nächstes Thema

kud

Hallöchen,
stehe mal wieder auf dem Schlauch.
Möchte mit einem Befehl starten und nach Ablauf einer gewissen Zeit den nächsten Befehl starten usw.
Konkret die Gartenbewässerung.
Jedes "Gerät" soll für eine bestimmte Zeit aktiv sein und sich danach auschalten .
Mein Konstrukt sieht zZeit so aus. Leider werden alle 3 Gräte zur gleichen Zeit aktiviert :-(( (Da reicht der Wasserdruck nicht aus)
Der Ablauf startet mit einem Notify wenn die Hauptbewässerung abgeschaltet wird.
define Restbewaesserung_an notify Gartenwasser:.*off* {
fhem("delete Gartenwasser_off");
fhem("set stellantrieb_garten_1 valve 50; define Uhr_Wasser1_aus at +00:02:00 {
set stellantrieb_garten_1 valve 0; set stellantrieb_garten_2 valve 100; define Uhr_Wasser2_aus at +00:02:00 { set stellantrieb_garten_2 valve 0; set stellantrieb_garten_3 valve 100; define Uhr_Wasser3_aus at +00:02:00 set Gartenwasseraus on}}");
}


Kann mir Jemand helfen?
Danke Kai-Uwe

herrmannj

Hi,

Du könntest das Konstrukt durch "sleep" ersetzen. (Sleep ist innerhalb fhem nonblocking).

set stellantrieb_garten_1 valve 50; sleep 120; set stellantrieb_garten_1 valve 0; set stellantrieb_garten_2 valve 100; sleep 120 ....

vg
jörg

Zrrronggg!

#2
Ah, ein weiteres Opfer der hier beliebten Cargocult-Schreibweise, die wahllos Klammern und übeflüssige  {fhem(" einfügt, "weil man das so macht".

Seufz.


So (Einzeiler)

define Restbewaesserung_an notify Gartenwasser:.*off* {fhem("delete Gartenwasser_off ;; set stellantrieb_garten_1 valve 50 ;; define Uhr_Wasser1_aus at +00:02:00 set stellantrieb_garten_1 valve 0 ;;;; set stellantrieb_garten_2 valve 100 ;; define Uhr_Wasser2_aus at +00:04:00 set stellantrieb_garten_2 valve 0 ;;;; set stellantrieb_garten_3 valve 100 ;; define Uhr_Wasser3_aus at +00:06:00 set Gartenwasseraus on")}

müsste es gehen.

Beachte die notwendigen Escapes.
Ich erspare mir längere Erklärungen, da ich im Moment eine Hand verbunden habe und nicht gut tippen kann. Wenns prinzipielle Fragen gibt, dann Frag, versuchs aber erstmql zu verstehen bitte.

Auch diese Ebene
{fhem("..." )}
ist übrigens streng genommen überflüssig.

folgendes müsste(TM) auch gehen:

define Restbewaesserung_an notify Gartenwasser:.*off* delete Gartenwasser_off ;; set stellantrieb_garten_1 valve 50 ;; define Uhr_Wasser1_aus at +00:02:00 set stellantrieb_garten_1 valve 0 ;;;; set stellantrieb_garten_2 valve 100 ;; define Uhr_Wasser2_aus at +00:04:00 set stellantrieb_garten_2 valve 0 ;;;; set stellantrieb_garten_3 valve 100 ;; define Uhr_Wasser3_aus at +00:06:00 set Gartenwasseraus on




FHEM auf Linkstation Mini, CUL 868 SlowRF, 2xCUL 868 RFR, CUL 433 für IT, 2xHMLAN-Configurator mit VCCU, ITV-100 Repeater, Sender und Aktoren von FHT, FS20, S300, HM, IT, RSL

P.A.Trick

Naja wenn ich mir die 4fach Semikolons angucke dann lieber fhem(..);!
Cubietruck,RPI,QNAP Ts-419p+, FS20, FRITZ!DECT200, 7 MAX! Thermostate, 3 MAX! Fensterkontakte, Kodi, CUL V3.3, EM1000S, LW12, LD382, HUE, HM-CFG-USB-2, 1x HM-LC-SW1-FM, 2x HM-LC-SW2-FM, 2x HM-LC-Sw1PBU-FM, 3xHM-LC-Bl1PBU-FM,HM-SEC-RHS, 2xHM-SEC-SD,HM-WDS30-T-O, 3x HM-LC-Dim1TPBU-FM, RPI+AddOn

Puschel74

Hallo,

aber auch im Teil mit fhem(" hat es ;;;;
;)

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

P.A.Trick

Cubietruck,RPI,QNAP Ts-419p+, FS20, FRITZ!DECT200, 7 MAX! Thermostate, 3 MAX! Fensterkontakte, Kodi, CUL V3.3, EM1000S, LW12, LD382, HUE, HM-CFG-USB-2, 1x HM-LC-SW1-FM, 2x HM-LC-SW2-FM, 2x HM-LC-Sw1PBU-FM, 3xHM-LC-Bl1PBU-FM,HM-SEC-RHS, 2xHM-SEC-SD,HM-WDS30-T-O, 3x HM-LC-Dim1TPBU-FM, RPI+AddOn

Zrrronggg!

#6
Klar muss es. Bei defines in defines muss man doppelt escapen. Ob man da noch eine überflüssige FEHM->perl->FEHM Verschachtelung einbaut ist egal.
FHEM auf Linkstation Mini, CUL 868 SlowRF, 2xCUL 868 RFR, CUL 433 für IT, 2xHMLAN-Configurator mit VCCU, ITV-100 Repeater, Sender und Aktoren von FHT, FS20, S300, HM, IT, RSL

topfi

Sonst schalten die wieder alle gleichzeitig. trotz {fhem("

Hat mich letzte Woche 2 Stunden gekostet....  :o

kud

Danke für die Tips.
Die "Vierfach-Semikolons" hatte ich lange nicht mehr.  ;)

Zrrronggg!

Wenn man im define ein define macht in dem ein define ist, muss man 8fach Escapen!

Wenns hier mal einen Wettbewerb gibt , der heisst: " der seltsamste Code der eine sinnvolle Funktion hat", dann bring ich das.   ;D

Z.B. so, sollte das selbe machen wie oben, nur werden die nachfolgenden defines erst später definiert:

define Restbewaesserung_an notify Gartenwasser:.*off* delete Gartenwasser_off ;; set stellantrieb_garten_1 valve 50 ;; define Uhr_Wasser1_aus at +00:02:00 set stellantrieb_garten_1 valve 0 ;;;; set stellantrieb_garten_2 valve 100 ;;;; define Uhr_Wasser2_aus at +00:02:00 set stellantrieb_garten_2 valve 0 ;;;;;;;; set stellantrieb_garten_3 valve 100 ;;;;;;;; define Uhr_Wasser3_aus at +00:02:00 set Gartenwasseraus on

Ist natürlich... suboptimal, schon weil ich diese Version für inherent unsicherer halte, da in der Ersten das AUSCHALTEN gleich zu Anfang mit angelegt wird. Das finde ich besser (auch ein Grund, warum ich es der sleep-variante vorziehen würde).
FHEM auf Linkstation Mini, CUL 868 SlowRF, 2xCUL 868 RFR, CUL 433 für IT, 2xHMLAN-Configurator mit VCCU, ITV-100 Repeater, Sender und Aktoren von FHT, FS20, S300, HM, IT, RSL

herrmannj

sleep wird doch intern in ein at übersetzt. Ich persönlich halte die die Lesbarkeit (Wartbarkeit) bei den verschachtelten defines nicht so hoch - aber:  timtowtdi  8)

vg
jörg



Puschel74

Hallo,

da lob ich mir doch die Möglichkeit sowas über Macros zu realisieren  ;)

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Damian

#12
Zitat von: herrmannj am 30 Mai 2014, 22:11:53
sleep wird doch intern in ein at übersetzt. Ich persönlich halte die die Lesbarkeit (Wartbarkeit) bei den verschachtelten defines nicht so hoch - aber:  timtowtdi  8)

vg
jörg

Sehe ich auch so.

Man könnte auch ein Wettbewerb veranstalten - wer schafft die meisten Semikolons :) Oder anders herum: wer kommt ohne aus.

Ich würde es schaffen z. B. ohne Perl und ohne Code auszulagern,  nur mit FHEM-Befehlen den Konstrukt:

define Restbewaesserung_an notify Gartenwasser:.*off* delete Gartenwasser_off ;; set stellantrieb_garten_1 valve 50 ;; define Uhr_Wasser1_aus at +00:02:00 set stellantrieb_garten_1 valve 0 ;;;; set stellantrieb_garten_2 valve 100 ;;;; define Uhr_Wasser2_aus at +00:02:00 set stellantrieb_garten_2 valve 0 ;;;;;;;; set stellantrieb_garten_3 valve 100 ;;;;;;;; define Uhr_Wasser3_aus at +00:02:00 set Gartenwasseraus on

auch ohne ein einziges Semikolon zu schreiben ;)

Ob es allerdings schöner wäre, wage ich zu bezweifeln.

Gruß

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

Puschel74

Hallo,

ZitatIch würde es schaffen z. B. ohne Perl und ohne Code auszulagern,  nur mit FHEM-Befehlen den Konstrukt:
Das wären ja dann Macros, oder hast du noch eine andere Möglichkeit?

Zitatauch ohne ein einziges Semikolon zu schreiben
Ok, das klappt bei mir nicht.
Die Zeilen in meinem define muss ich mit Semikolon abschliessen.

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Zrrronggg!

wenn tippen im Moment nicht so mühsam wäre...
FHEM auf Linkstation Mini, CUL 868 SlowRF, 2xCUL 868 RFR, CUL 433 für IT, 2xHMLAN-Configurator mit VCCU, ITV-100 Repeater, Sender und Aktoren von FHT, FS20, S300, HM, IT, RSL