Hallo Zusammen,
nachdem ich immer mehr begeistert bin was mit dem DOIF Modul alles funktioniert und wie mächtig das Modul ist komme ich gerade trotzdem nicht weiter.
Was möchte ich realisiere? --> Eine Alarmanlage. Scharf geschalten wird das ganze über einen Button "Schalter.Alarmanlage", und wenn alle Kontakte geschlossen sind, dann wird die Alarmanlage scharf. Wenn ich das Haus nun verlasse, dann drücke ich noch im Haus, auf den Knopf "Schalter.Alarmanlage" und verlasse dann das Haus, d.h. ich möchte eine Ansage erhalten dass die Anlage scharf geschalten wurde, diese soll aber tatsächlich erst nach 60 Sekunden wirklich scharf sein.
Wie kann ich das realisieren? Ich denke mal da fehlt irgendwo ein "wait", ich steh nur gerade absolut auf dem Schlauch ...
Hier die List des DOIFs:
Internals:
CFGFN
DEF ([Schalter.Alarmanlage] eq "on" and [haus_TuerKontakt.Alle] eq "open" and $cmd=~"0|1|5") (
set MyTTS volume 5,
#set MyTTS tts "Fehler, Alarmanlage kann nicht aktiviert werden da nicht alle Türen geschlossen sind"
)
DOELSEIF ([Schalter.Alarmanlage] eq "on" and [haus_TuerKontakt.Alle] eq "closed" and $cmd=~"0|1|5")
(set MyTTS volume 5,
set MyTTS tts "Alarmanlage ist scharf geschaltet"
)
DOELSEIF ([Schalter.Alarmanlage] eq "on" and [haus_TuerKontakt.Alle] eq "closed" and $cmd=="2") (
set MyTTS volume 5,
#set MyTTS tts "Alarmanlage ist bereits aktiv"
)
DOELSEIF ([Schalter.Alarmanlage] eq "on" and [haus_TuerKontakt.Alle] eq "open" and $cmd=~"2|3") (
set MyTTS volume 5,
#set MyTTS tts "Alarm ausgelöst",
set ku_Steckdose.LEDFenster on
)
DOELSEIF ([Schalter.Alarmanlage] eq "off") (
set MyTTS volume 5,
#set MyTTS tts "Alarmanlage wurde deaktiviert"
)
NAME di_Alarmanlage
NR 2158
NTFY_ORDER 50-DOIF_Alarmmeldung
STATE Alarmanlage aus
TYPE DOIF
READINGS:
2018-07-23 00:44:48 Device Schalter.Alarmanlage
2018-07-23 00:44:48 cmd 5
2018-07-23 00:44:48 cmd_event Schalter.Alarmanlage
2018-07-23 00:44:48 cmd_nr 5
2018-07-23 00:44:48 e_Schalter.Alarmanlage_STATE off
2018-07-23 00:44:46 e_haus_TuerKontakt.Alle_STATE closed
2018-07-23 00:44:21 mode enabled
2018-07-23 00:44:48 state Alarmanlage aus
2018-07-23 00:44:48 wait_timer no timer
Regex:
condition:
0 InternalDoIf($hash,'Schalter.Alarmanlage','STATE') eq "on" and InternalDoIf($hash,'haus_TuerKontakt.Alle','STATE') eq "open" and $cmd=~"0|1|5"
1 InternalDoIf($hash,'Schalter.Alarmanlage','STATE') eq "on" and InternalDoIf($hash,'haus_TuerKontakt.Alle','STATE') eq "closed" and $cmd=~"0|1|5"
2 InternalDoIf($hash,'Schalter.Alarmanlage','STATE') eq "on" and InternalDoIf($hash,'haus_TuerKontakt.Alle','STATE') eq "closed" and $cmd=="2"
3 InternalDoIf($hash,'Schalter.Alarmanlage','STATE') eq "on" and InternalDoIf($hash,'haus_TuerKontakt.Alle','STATE') eq "open" and $cmd=~"2|3"
4 InternalDoIf($hash,'Schalter.Alarmanlage','STATE') eq "off"
devices:
0 Schalter.Alarmanlage haus_TuerKontakt.Alle
1 Schalter.Alarmanlage haus_TuerKontakt.Alle
2 Schalter.Alarmanlage haus_TuerKontakt.Alle
3 Schalter.Alarmanlage haus_TuerKontakt.Alle
4 Schalter.Alarmanlage
all Schalter.Alarmanlage haus_TuerKontakt.Alle
do:
0:
0 set MyTTS volume 5, #set MyTTS tts "Fehler, Alarmanlage kann nicht aktiviert werden da nicht alle Türen geschlossen sind"
1:
0 set MyTTS volume 5, set MyTTS tts "Alarmanlage ist scharf geschaltet"
2:
0 set MyTTS volume 5, #set MyTTS tts "Alarmanlage ist bereits aktiv"
3:
0 set MyTTS volume 5, #set MyTTS tts "Alarm ausgelöst", set ku_Steckdose.LEDFenster on
4:
0 set MyTTS volume 5, #set MyTTS tts "Alarmanlage wurde deaktiviert"
5:
helper:
DOIF_Readings_events
DOIF_eventas
event off
globalinit 1
last_timer 0
sleepdevice haus_TuerKontakt.Alle
sleepsubtimer 0
sleeptimer -1
timerdev Schalter.Alarmanlage
timerevent off
triggerDev Schalter.Alarmanlage
timerevents:
off
timereventsState:
state: off
triggerEvents:
off
triggerEventsState:
state: off
internals:
0 Schalter.Alarmanlage:STATE haus_TuerKontakt.Alle:STATE
1 Schalter.Alarmanlage:STATE haus_TuerKontakt.Alle:STATE
2 Schalter.Alarmanlage:STATE haus_TuerKontakt.Alle:STATE
3 Schalter.Alarmanlage:STATE haus_TuerKontakt.Alle:STATE
4 Schalter.Alarmanlage:STATE
all Schalter.Alarmanlage:STATE haus_TuerKontakt.Alle:STATE
itimer:
readings:
trigger:
uiState:
uiTable:
Attributes:
cmdState Fehler bei Aktivierung|Alarmanlage scharf|Alarmanlage scharf|Alarmanlage wurde ausgelöst|Alarmanlage aus
do always
repeatcmd 0:0:0:5:0
room 00_Kontrollzentrum
So ein Zufall, das Attribut heißt wait
Ach ne, so weit war ich auch schon :P Aber bei welcher cmd muss ich das einfügen, denn ich will ja die Ansage dass die Alarmanlage scharf ist sofort beim Knopfdruck haben, die Anlage soll aber erst nach 60 Sekunden scharf sein so dass ich Zeit habe um aus dem Haus zu gehen.
DOELSEIF ([Schalter.Alarmanlage] eq "on" and [haus_TuerKontakt.Alle] eq "closed" and $cmd=~"0|1|5")
(set MyTTS volume 5,set MyTTS tts "Alarmanlage ist scharf geschaltet")
(set Alarm on)
attr di_Alarmanlage wait 0:0,30
Siehe http://commandref.fhem.de/commandref_DE.html#DOIF_wait
Okay, dann würde ich das nach deinem Vorschlag mal vereinfacht auf drei CMDs so umbauen:
([Schalter.Alarmanlage] eq "on")
(set MyTTS volume 5,set MyTTS tts "Alarmanlage wird in 30 Sekunden scharf geschaltet")
(set MyTTS tts "ALARMANLAGE IST SCHARF"))
DOELSEIF ([Schalter.Alarmanlage] eq "on" and [haus_TuerKontakt.Alle] eq "open")
(set MyTTS volume 100,
set MyTTS tts "Alarm ausgelöst")
DOELSEIF ([Schalter.Alarmanlage] eq "off")
(set MyTTS volume 5,
set MyTTS tts "Alarmanlage wurde deaktiviert")
attr di_Alarmanlage wait 0,30:0:0
attr repeatcmd 0:5:0
Aber wird dann nicht beim Öffnen eines Kontaktes trotzdem schon der CMD_2 (in welchem der Alarm ausgelöst wird) ausgelöst, oder wird erst gewartet bis CMD_1 (also die 30 Sekunden) abegearbeitet sind, bevor wieder auf ein evtl. zutreffendes Event reagiert wird?
die letzten nullen könne weg ansonsten sollte es so gehen.
Okay, ich habe jedoch auch das hier in der CommandRef gefunden:
...Eine bereits ausgelöste Verzögerung wird zurückgesetzt, wenn während der Wartezeit ein Kommando eines anderen DO-Falls, ausgelöst durch ein neues Ereignis, ausgeführt werden soll.
Ich probiere es heute Abend mal aus und werde dann berichten. Danke schon mal für die Unterstützung!
Hi,
warum nutzt Du nicht ein at +0:01 mit dem Kommando?
Gruß Arnd
Gesendet von iPhone mit Tapatalk
Ich denke da ist nen Denkfehler drin.
Der Schalter.... Sollte nur zum schärfen genommen werden.
Ich würde einen zweiten dummy "Status_EMA" anlegen und diesen in cmd2 usw abfragen.
Cmd1 muss den dann nach den 60sek setzen.
Gesendet von meinem Doogee S60 mit Tapatalk
ZitatAber wird dann nicht beim Öffnen eines Kontaktes trotzdem schon der CMD_2 (in welchem der Alarm ausgelöst wird) ausgelöst, oder wird erst gewartet bis CMD_1 (also die 30 Sekunden) abegearbeitet sind, bevor wieder auf ein evtl. zutreffendes Event reagiert wird?
Ich fage nicht nur die auslösenden Kontakte ab, sondern auch ob die Alarmanlage auch scharf ist.
Zitat von: RaspiLED am 23 Juli 2018, 12:25:20
Hi,
warum nutzt Du nicht ein at +0:01 mit dem Kommando?
Gruß Arnd
Gesendet von iPhone mit Tapatalk
Meinst du das anstatt der wait-Funktion?
Zitat von: Frank_Huber am 23 Juli 2018, 12:36:08
Ich denke da ist nen Denkfehler drin.
Der Schalter.... Sollte nur zum schärfen genommen werden.
Ich würde einen zweiten dummy "Status_EMA" anlegen und diesen in cmd2 usw abfragen.
Cmd1 muss den dann nach den 60sek setzen.
Gesendet von meinem Doogee S60 mit Tapatalk
Ich hätte das gerne ohne dummy gelöst, DOIF gibt das ja eigentlich her, indem man den eigenen Status, also das aktuelle Kommando abfragen kann z.B. cmd=~"0|3")
Zitat von: rabehd am 23 Juli 2018, 12:45:49
Ich fage nicht nur die auslösenden Kontakte ab, sondern auch ob die Alarmanlage auch scharf ist.
Wieder ein Punkt der für die Erstellung eines Dummys spricht.
Ich kann meinen Code oben erst heute Abend ausprobieren, aber ich denke inzwischen dass er nicht funktionieren wird, da CMD_1 immer zutrifft, wenn CMD_2 auch aktiv ware. Somit würde aber CMD_2 nie in Kraft treten weil das DOIF bei CMD_1 schon stopppt.
Ich denke ich muss trotzdem den CMD_1 ergänzen mit
([Schalter.Alarmanlage] eq "on" and $cmd=~"0|3")
(set MyTTS volume 5,set MyTTS tts "Alarmanlage wird in 30 Sekunden scharf geschaltet")
(set MyTTS tts "ALARMANLAGE IST SCHARF")
...
attr di_Alarmanlage wait 0,30:0:0
...
Bleibt trotzdem die Frage ob CMD_2 dann, falls die Bedinungung innerhalb der ersten 30 Sekunden schon zutrifft auslöst, oder ich die 30 Sekunden Zeit um die Tür zu schließen...
Zitat von: z0lt1 am 23 Juli 2018, 13:14:40
Ich hätte das gerne ohne dummy gelöst, DOIF gibt das ja eigentlich her, indem man den eigenen Status, also das aktuelle Kommando abfragen kann z.B. cmd=~"0|3")
Du müsstest aber abfragen ob cmd 1.2 erreicht ist. cmd1 alleine reicht ja nicht. cmd2 darf erst anschlagen können wenn der zweite befehl von cmd1 raus ist.
und sobald cmd 2 erreicht ist wäre das wieder unwahr. anstelle eines weiteren dummy kannst auch ein DOIF-reading setzen.
So, wollte kurz Rückmeldung geben, dass es jetzt so funktioniert wie es soll. Der Hinweis mit cmd_1.2 hat mich zum Ziel gebracht. Vielen Dank nochmal an alle für die Mithilfe, das ist das beste Forum hier!
([Schalter.Alarmanlage] eq "on" and [haus_TuerKontakt.Alle] eq "open" and $cmd=~"0|4")
(set MyTTS volume 5,
set MyTTS tts "Achtung, es sind nicht alle Türen geschlossen, Alarmanlage wird in 60 Sekunden scharf geschaltet")
(set MyTTS tts "Alarmanlage ist nun scharf geschalten")
DOELSEIF ([Schalter.Alarmanlage] eq "on" and [haus_TuerKontakt.Alle] eq "closed" and $cmd=~"0|4")
(set MyTTS volume 5,
set MyTTS tts "Alarmanlage wird in 60 Sekunden scharf geschaltet")
(set MyTTS tts "Alarmanlage ist nun scharf geschalten")
DOELSEIF ([Schalter.Alarmanlage] eq "on" and [haus_TuerKontakt.Alle] eq "open" and $cmd=~"1.2|2.2")
(set MyTTS volume 5,
set MyTTS tts "Alarm wurde ausgelöst")
DOELSEIF ([Schalter.Alarmanlage] eq "off")
(set MyTTS volume 5,
set MyTTS tts "Alarmanlage wurde deaktiviert")