Geschachteltes notify mit mehreren Befehlen?

Begonnen von USTA70, 11 Mai 2014, 14:32:16

Vorheriges Thema - Nächstes Thema

USTA70

Hallo,

Ich brauche dringend Eure Hilfe, da all meine Versuche und mein Suchen im Nezt bisher keine Antwort gebracht hat.

Ich möchte innerhalb eines notify`s (neben einigen weitern  Befehlen) ein weiteres notify definieren. Dieses soll mehrere Befehle beinhalten, wie im Folgenden zum Beispiel =>   set Sw2_Del off und set DelAl off. 

define nf.DelAl notify DelAl:on {if(Value("IntAl") eq "on"){\
   fhem("define nf.tmp_9.delAl notify Sw2_Del:on set Sw2_Del off;;set DelAl off");;\
   fhem("set DelOn on;;set IntAl off");;}\
}

Allerdings wird bei diesem Syntax nur der Befehl ,,set Sw2_Del off" dem notify zugeordnet und ,,set DelAl off" ohne notify Bedingung sequenziell abgearbeitet.

Wie müsste der Code an dieser Stelle richtigerweise lauten? Ich hoffe, Ihr könnt mir helfen!

Dank + Grüße
   Uli 


Sent from my iPad using Tapatalk HD

UliM

Hi Uli,
hast Du's mit 4 Semikola versucht?
Siehe http://fhem.de/commandref.html#command :
For every further indirection you need to double the semicolons:, e.g. to switch on every day 2 devices at 7:00 for 10 minutes you have to write:
    define onAt at 07:00 set Lamp1 on;;set Lamp2 on;; define offAt at +00:10 set Lamp1 off;;;;set Lamp2 off

Gruß, Uli
RPi4/Raspbian, CUL V3 (ca. 30 HomeMatic-devices), LAN (HarmonyHub, alexa etc.).  Fördermitglied des FHEM e.V.

Dietmar63

Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm

Bennemannc

Hallo,

nur mal so zum Verständniss - warum in ein notify ein anderes define notify packen? Was soll das bringen?
Normalerweise ist es doch so, das wenn etwas passiert der notify auslöst - dort könnten man dann in Abhängigkeit von beliebigen Bedingungen (if oder IF) schalten und walten wie man möchte.
Wenn ich auf ein zweites Ereignis warte (zweites notify) würde ich beim ersten Ereignis einen Dummy mit einem Wert belegen und den im zweiten Notify mit abfragen.
Von der Logik her (bei Deinem Konstrukt)- das erste event legt einen neuen notify an (define). Wo und wann wird der denn wieder gelöscht ? Bzw warum muß notify den anlegen und er ist nicht schon vorher angelegt? In welchem Zeitraum werden die beiden Ereignisse erwartet?

Gruß Christoph
Cubietruck, Fhem 5.8
CC-RT-DN|LC-SW2-FM|RC-12|RC-19|LC-SW4-BA-PCB|LCp-SW1-BA-PCB|ES-PMSw1-Pl|LC-Bl1PBU-FM|PBI-4-FM|CC-VD|CC-TC|SEC-SC(2)|RC-KEY3-B|LC-Sw1PBU-FM|PB-2-FM|WDS100-C6-O|WDC7000|LC-Bl1-FM
Module: Dewpoint,FB_Callmonitor,HCS,Panstamp,at,notify,THRESHOLD,average,DOIF

USTA70

...Ja, die 4 Semikolons waren es. Klasse, Vielen Dank, UliM!

@Bennemannc
...ich habe unsere 20 Jahre alte Alarmanlage umgestrickt, so dass ich sie über FHEM steuern kann. Für bestimmte Funktionen z.B. ,,Löschen eines Alarms" muss ich mit dem Relais-Modul HM-LC-SW4-WM Schaltzustände in fester Reihenfolge bzw. in Abhängigkeiten realisieren, daher scheidet eine Lösung nur mit ,,if" Befehlen aus.

Ja, Du hast natürlich Recht, dass man hier mit separaten Notify`s in Verbindung mit Dummies arbeiten könnte. Ich habe mich aber zunächst für die geschachtelte Variante entschieden. Das Eingangs-Beispiel zeigt nur eine verkürzte Version. Der ganze Code enthält ein delete im letzten Notify, mit dem ich die temporären Notifiy's nach der Abarbeitung wieder lösche.

define nf.DelAl notify DelAl:on {if(Value("IntAl") eq "on" && Value("AlOn") eq "Alarm"){\
   fhem("define nf.tmp_6.delAl notify Sw1_Panel:on set Sw3_Int on");;\
   fhem("define nf.tmp_7.delAl notify Sw3_Int:on set Sw3_Int off");;\
   fhem("define nf.tmp_8.delAl notify Sw3_Int:off set Sw2_Del on");;\
   fhem("define nf.tmp_9.delAl notify Sw2_Del:on set Sw2_Del off;;;;set DelAl off");;\
   fhem("define nf.tmp_10.delAl notify Sw2_Del:off set Sw1_Panel off");;\
   fhem("define nf.tmp_11.delAl notify Sw1_Panel:off delete .*tmp_.*;;;;set Sw.* statusRequest;;;;set LED07_FZ300 led green");;\
   fhem("set DelOn on;;set IntAl off");;}\
}\ 

So schlimm sieht es doch gar nicht aus ;o), wenn es aber, aus welchen Gründen auch immer, keine zu empfehlende Lösung ist, bin ich für Ratschläge weiterhin dankbar.

Grüße
   Uli

Sent from my iPad using Tapatalk HD

Bennemannc

Hallo,

wie wäre es mit "at" ?
Also der erste set Sw3_Int_on on-for-timer 1
define next_1 at *00:00:02 set Sw2_Del on-for-timer 1
define next_2 at *00:00:04 set Sw1-Panel off
Und dann die next.* wieder löschen.

Gruß Christoph
Cubietruck, Fhem 5.8
CC-RT-DN|LC-SW2-FM|RC-12|RC-19|LC-SW4-BA-PCB|LCp-SW1-BA-PCB|ES-PMSw1-Pl|LC-Bl1PBU-FM|PBI-4-FM|CC-VD|CC-TC|SEC-SC(2)|RC-KEY3-B|LC-Sw1PBU-FM|PB-2-FM|WDS100-C6-O|WDC7000|LC-Bl1-FM
Module: Dewpoint,FB_Callmonitor,HCS,Panstamp,at,notify,THRESHOLD,average,DOIF

USTA70

Hallo Christoph,

...so hatte ich es bisher, ist aber anfällig, wenn Befehle verloren gehen oder verzögert ausgeführt werden. Die Gefahr gibt es bei der notify Lösung zwar auch, aber hier werde ich noch versuchen entspr. Watchdog's zu definieren.

Grüsse
   Uli