FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: ffdec am 12 März 2018, 20:24:45

Titel: [gelöst] Briefkasten (Fensterkontakt) sendet Nachricht und widerruft Alarm nicht
Beitrag von: ffdec am 12 März 2018, 20:24:45
Hi, wenn der Fenstekontakt im Briekasten geschlossen wird, wird eine Sprachansage erzeugt und der Alarm in der Alarmanlage widerrufen.
Leider funktioniert letzteres nicht regelmäßig, Außerdem wird beim Widerrufen die Ansage zum Einwurf übersprochen. Das habe ich mich wait zum lösen versucht, nur klappt es auch nicht rihtig. Hier der letzte Code. Hat jemand eine Idee ;-)

define Briefk_Einwurf DOIF ([Briefkasten] eq "closed") ({fhem ("set WARNER canceled 1")}, set HM_541A8B_Mp3 playTone 030)

define Briefk_Einwurf DOIF ([Briefkasten] eq "closed") (set HM_541A8B_Mp3 playTone 030, {fhem ("set WARNER canceled 1"))
set Briefk_Einwurf wait 0, 10


Titel: Antw:Briefkasten (Fensterkontakt) sendet Nachricht und widerruft den Alarm
Beitrag von: Otto123 am 12 März 2018, 21:34:01
Hast Du den Code im Lotto gewonnen?

Ich weiß, dass manche Perl bervorzugen, aber was soll das: ({fhem ("set WARNER canceled 1")}, set HM_541A8B_Mp3 playTone 030) ???
Ich kann mich nicht entscheiden? ;D ;D ;D

Und wait ist ein Attribute und wird nicht per set übergeben!?

Hast Du schon mal in die Doku  (https://fhem.de/commandref_DE.html#DOIF_wait)geschaut?
define Briefk_Einwurf DOIF ([Briefkasten] eq "closed") (set HM_541A8B_Mp3 playTone 030) (set WARNER canceled 1)
attr Briefk_Einwurf wait 0,10



Gruß Otto
Titel: Antw:Briefkasten (Fensterkontakt) sendet Nachricht und widerruft den Alarm
Beitrag von: ffdec am 12 März 2018, 21:59:34
Ich habe natürlich die Doku gelesen und Deinen Code habe ich so sicher auch schon so oder ähnlich getestet. Ich hatte gelesen, dass set-Aktionen per Komma getrennt werden. So richtig bin ich nicht schlau geworden. Das attr ist auch nicht die Ursache, ich habe es hier ja nur als Beispiel nachformuliert. Das Perlisieren habe ich nur gemacht, weil ich da eine Fehlerquelle sah. In der Alarmanlage funktioniert es nur mw in Perl. Naja egal. Ich versuche Dein Beispiel mal. Gehe aber erst morgen wieder an den Briefkasten.

Gruß JH

ZitatAngaben im Ausführungsteil:   back

Der Ausführungsteil wird durch runde Klammern eingeleitet. Es werden standardmäßig FHEM-Befehle angegeben, wie z. B.: ...(set lamp on)

Sollen mehrere FHEM-Befehle ausgeführt werden, so werden sie mit Komma statt mit Semikolon angegeben ... (set lamp1 on, set lamp2 off)

Falls ein Komma nicht als Trennzeichen zwischen FHEM-Befehlen gelten soll, so muss der FHEM-Ausdruck zusätzlich in runde Klammern gesetzt werden: ...((set lamp1,lamp2 on),set switch on)
Titel: Antw:Briefkasten (Fensterkontakt) sendet Nachricht und widerruft den Alarm
Beitrag von: Otto123 am 13 März 2018, 11:31:25
Moin,

nimm meine scherzhafte Bemerkung nicht krumm  ;)

Wenn Du aber von zwei Befehle hintereinander einen mit einem wait verzögern willst, musst Du beide Befehle separat klammern. In einer Klammer sind die Befehle aus Sicht des wait nur Einer.
Diese Erklärung findest Du direkt auf meinem Link, ich habe nicht einfach auf irgendeine Doku verwiesen  :D

BTW: Das im DOIF (und nur dort) Befehle innerhalb der Klammer mit Komma getrennt werden ist aus meiner Sicht ein großes Übel.

Gruß Otto
Titel: Antw:Briefkasten (Fensterkontakt) sendet Nachricht und widerruft den Alarm
Beitrag von: Per am 13 März 2018, 13:02:23
Zitat von: ffdec am 12 März 2018, 21:59:34Ich hatte gelesen, dass set-Aktionen per Komma getrennt werden.
Ja, Und was sagt wait (https://fhem.de/commandref_DE.html#DOIF_wait) dazu?


Zitat von: ffdec am 12 März 2018, 21:59:34In der Alarmanlage funktioniert es nur mw in Perl
Dann dürftest du es aber nicht wieder über fhem() aufrufen müssen. {fhem(abc)} = abc, dauert nur länger.
Titel: Antw:Briefkasten (Fensterkontakt) sendet Nachricht und widerruft den Alarm
Beitrag von: ffdec am 13 März 2018, 16:23:08
Beides geht nicht. Der Alarm wird ausgelöst aber der Rest wird nicht ausgeführt. set WARNER canceled 1 funktioniert direkt in der Eingabezeile.

define Briefk_Einwurf DOIF ([Briefkasten] eq "closed") (set HM_541A8B_Mp3 playTone 030) (set WARNER canceled 1)
attr Briefk_Einwurf wait 0:10


[code]define Briefk_Einwurf DOIF ([Briefkasten] eq "closed") (set HM_541A8B_Mp3 playTone 030) (set WARNER canceled 1)
attr Briefk_Einwurf wait 0,10
[/code]
Titel: Antw:Briefkasten (Fensterkontakt) sendet Nachricht und widerruft den Alarm
Beitrag von: Damian am 13 März 2018, 16:27:29
Zitat von: ffdec am 13 März 2018, 16:23:08
[code]define Briefk_Einwurf DOIF ([Briefkasten] eq "closed") (set HM_541A8B_Mp3 playTone 030) (set WARNER canceled 1)
attr Briefk_Einwurf wait 0,10


Hast du das auch mit Attribut do always probiert?
Titel: Antw:Briefkasten (Fensterkontakt) sendet Nachricht und widerruft den Alarm
Beitrag von: ffdec am 13 März 2018, 16:33:28
Zitat von: Damian am 13 März 2018, 16:27:29
Hast du das auch mit Attribut do always probiert?

Jetzt rennt es. Das war es. Gestern hatte ich es auch mal drin aber da war wieder was anderes falsch. Ich muss es mir noch mal genau durchlesen. Dankee an Alle für die Hilfe
Titel: Antw:[gelöst] Briefkasten (Fensterkontakt) sendet Nachricht und widerruft Alarm nicht
Beitrag von: Otto123 am 13 März 2018, 19:53:18
ZitatIch habe natürlich die Doku gelesen
hast Du nicht :(
ZitatBeispiel: Bei einer Befehlssequenz, hier: (set lamp1 on, set lamp2 on), soll vor dem Schalten von lamp2 eine Verzögerung von einer Sekunde stattfinden. Die Befehlsfolge muss zunächst mit Hilfe von Klammerblöcke in eine Befehlssequenz aufgespalten werden: (set lamp1 on)(set lamp2 on). Nun kann mit dem wait-Attribut nicht nur für den Beginn der Sequenz, sondern für jeden Klammerblock eine Verzögerung, getrennt mit Komma, definieren werden, hier also: wait 0,1. Damit wird lamp1 sofort, lamp2 eine Sekunde danach geschaltet. Die Verzögerungszeit bezieht sich immer auf den vorherigen Befehl.
Der : ist für Bedingungsblöcke  ;D

ZitatDer Alarm wird ausgelöst
das war aber dann kein Bestandteil des DOIF - oder?

Gruß Otto
Titel: Antw:[gelöst] Briefkasten (Fensterkontakt) sendet Nachricht und widerruft Alarm nicht
Beitrag von: ffdec am 13 März 2018, 20:46:40
... doch sogar mehrmals, aber ich habe es nicht richtig verstanden. Nun ist der Groschen durch  ;D
Okay die Doku ist ja sehr viel, kann wirklich sein, dass ich das nicht gelesen habe, denn es steht ja sehr klar dort. Ich habe wahrscheinlich auch keine gute Suche/Maschine...

Ja, Alarm löst der Kontakt in der Alarmanlage aus und wird dann durch das doif gecancelt also widerrufen, damit der nächste Postmann wieder den Alarm/die Ansage auslöst
Titel: Antw:[gelöst] Briefkasten (Fensterkontakt) sendet Nachricht und widerruft Alarm nicht
Beitrag von: Otto123 am 13 März 2018, 21:17:21
Was ich noch nicht verstehe: Wieso Du do always brauchst. Dein Fensterkontakt wechselt doch von closed auf open - oder? Liefert der immer nur closed Events?

Gruß Otto
Titel: Antw:[gelöst] Briefkasten (Fensterkontakt) sendet Nachricht und widerruft Alarm nicht
Beitrag von: ffdec am 13 März 2018, 21:48:03
Der liefert in der "Klappe zu Position" immer open. Nur wenn er (die Klappe) geöffnet wird, wir die Lichtschranke durch eine Alufolienfahne geschlossen und liefert closed. Kann auch sein, dass da mal Preller dabei sind. Wahrscheinlich brauch er always, weil der Briefkasten ja mehrmals am Tag geöffnet wird und damit auch immer den letzteren Befehl ausführt --- klingt komisch, es werden ja immer (eigentlich) beide Befehle ausgeführt??? Vlt ist da ja doch noch etwas im doif inkorrekt.
Titel: Antw:[gelöst] Briefkasten (Fensterkontakt) sendet Nachricht und widerruft Alarm nicht
Beitrag von: Otto123 am 13 März 2018, 22:40:24
Das meine ich, mit dem Event und Zustandswechsel von closed nach open ändert doch die Bedingung ihren Zustand. Damit wäre ohne do always auch alles ok.
So dachte ich, hätte ich do always verstanden  :-[