Dummy nach Zeit abschalten und Relais vom net io für 5 Sekunden schalten

Begonnen von Tueftler1983, 30 März 2015, 13:12:22

Vorheriges Thema - Nächstes Thema

Tueftler1983

Hallo ich habe mein AVR NET IO erfolgreich an Fhem angebunden. Sprich ich kann die 8 Relais schalten und die eingänge abfragen.
Jetzt zu meinen Problemen, die eingänge setzt mir in FHEM jeweils einen Dummy auf on solange der Jeweilige Eingang geschlossen ist. Jetzt hätte ich gerne das der dummy bei einem kurzen on Signal mir einen weiteren dummy für 30 sek ein schaltet. Hintergrund ist das ich diesen zweiten dummy im Floorplan anzeigen lassen möchte als Türklingel.

Problem 2.
ich würde gerne das Relais1 und 2 jeweils über das Icon im Floorplan für 5 sek einschalten. Sprich ich drücke kurz das Icon und das Relais schaltet für 5 sek.
Leider können die Relais den Befehl on-for-timer x nicht.
geht ja über ECMD (ethersex)

Wie bekomme ich das hin
habe die Relais jetzt mit
define a1 +*00:00:05 set Relais1 off ok
soweit das sie wieder allein abschalten aber es sind ja nicht immer 5 sek da der Befehl nach 5 sek neu startet egal welchen Zustand das Relais hat.

Pfriemler

Problem 1 und Problem 2 lassen sich recht einfach und parallel lösen. Als Freund des DOIF würde ich es etwa so machen (natürlich müssen alle Namen bei Dir ggf. angepasst werden):
define di_Klingelmeldung DOIF ([dummy1] eq "on") (set Klingelmelder on) DOELSEIF ([dummy1] eq "off) (set Klingelmelder off)
attr di_Klingelmeldung wait 0:30

Das DOIF reagiert auf die Zustandsänderung von dummy1 und nimmt für den Fall, dass er "on" wird, Zustand 1 ein, d.h. schaltet den Klingelmelderdummy an. Falls dummy1 "off" wird, wird der zweite Zustand eingenommen und der Dummy wieder zurückgesetzt. Die Zustandsänderung wird aber um 30 Sekunden verzögert, d.h. nach einer Klingelbetätigung bleibt der Dummy 30 Sekunden aktiv. Jedes Klingeln innerhalb der 30 Sekunden setzt die Wartefrist zurück. Genauer: die Wartefrist beginnt mit dem Loslassen des Klingelknopfs.

Für das Relais:
define di_Relais1ViaIcon DOIF ([Icon1] eq "on")(set Relais1 on, sleep 5, set Relais1 off, set Icon1 off)
attr di_Relais1ViaIcon do always

Wird Icon "on", wird das Relais eingeschaltet, 5 Sekunden gewartet, dann wieder ausgeschaltet und das Icon zurückgesetzt. So bekommt man eine passende optische Rückmeldung über den Vorgang.
Das DOIF bekommt keinen zweiten Zustand, muss daher bei jedem Trigger erneut laufen, deswegen do always.

Meines Wissens wirkt sleep in einem DOIF nicht blockierend. (bin aber nicht sicher, ich setze es für maximal 1s ein). Alternativ kann man einen temporäres AT setzen (also ohne *), das im Ausführungsteil das Relais abschaltet und das Icon zurücksetzt.

Also etwa
define di_Relais1WithIcon DOIF ([Icon1] eq "on")(set Relais on, define at_Rel1 +00:00:05 AT set Relais off;set Icon off)
attr di_Relais1WithIcon do always


Alles ohne Gewähr. Bitte schlagt mich, wenn ich falsch liege.
"Änd're nie in fhem.cfg, denn das tut hier allen weh!" *** Wheezy@Raspi(3), HMWLAN+HMUART, CUL868(SlowRF) für FHT+KS+FS20, miniCUL433, Rademacher DuoFern *** "... kaum macht man es richtig, funktioniert es ..."

Damian

Zitat von: Pfriemler am 30 März 2015, 21:57:51
Meines Wissens wirkt sleep in einem DOIF nicht blockierend. (bin aber nicht sicher, ich setze es für maximal 1s ein). Alternativ kann man einen temporäres AT setzen (also ohne *), das im Ausführungsteil das Relais abschaltet und das Icon zurücksetzt.


Doch. Damit Sleep nicht blockiert, müssen die folgenden Anweisungen mit einem Semikolon (im DEF-Editor) angegeben werden. Damit gehören sie zum Sleep und nicht zu DOIF.

define di_Relais1ViaIcon DOIF ([Icon1] eq "on")(set Relais1 on, sleep 5; set Relais1 off; set Icon1 off)
attr di_Relais1ViaIcon do always


Gruß

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

Pfriemler

Zitat von: Damian am 30 März 2015, 22:30:12
Damit Sleep nicht blockiert, müssen die folgenden Anweisungen mit einem Semikolon (im DEF-Editor) angegeben werden. Damit gehören sie zum Sleep und nicht zu DOIF.
Wieder einmal eine winzige Nuance, die ich auf Anhieb nicht verstehe, aber interessiert zur Kenntnis nehme. Heißt das konkret, dass sleep nebst allen folgenden Befehlen als Ganzes an FHEM zur Ausführung gegeben wird, statt einzeln nacheinander alle Teile zwischen den Kommas?
Dass das DOIF während der Ausführung von Sleep blockiert, ist mir natürlich klar (und das wäre in diesem Fall auch nicht schädlich), aber ob FHEM insgesamt dadurch auch blockiert, wäre die akademische Frage...
"Änd're nie in fhem.cfg, denn das tut hier allen weh!" *** Wheezy@Raspi(3), HMWLAN+HMUART, CUL868(SlowRF) für FHT+KS+FS20, miniCUL433, Rademacher DuoFern *** "... kaum macht man es richtig, funktioniert es ..."

Damian

Zitat von: Pfriemler am 31 März 2015, 00:09:58
Wieder einmal eine winzige Nuance, die ich auf Anhieb nicht verstehe, aber interessiert zur Kenntnis nehme. Heißt das konkret, dass sleep nebst allen folgenden Befehlen als Ganzes an FHEM zur Ausführung gegeben wird, statt einzeln nacheinander alle Teile zwischen den Kommas?
Dass das DOIF während der Ausführung von Sleep blockiert, ist mir natürlich klar (und das wäre in diesem Fall auch nicht schädlich), aber ob FHEM insgesamt dadurch auch blockiert, wäre die akademische Frage...

ja, bei Komma werden die FHEM-Befehle einzeln an FHEM zur Ausführung gegeben. Mit Komma wird Sleep einzeln, also fhem("sleep 5") an FHEM übergeben. Mit Semikolon sieht das dann so aus: fhem(" sleep 5; set Relais1 off; set Icon1 off"). Warum das System im ersten Fall komplett stillsteht, kann nur Rudi als sleep-Maintainer beantworten.

Gruß

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

Tueftler1983

Hallo wenn ich den code So eingebe
define di_Klingelmeldung ([DI1] eq "on") (set Klingelmelder on) DOELSEIF ([DI1] eq "off) (set Klingelmelder off)
attr di_Klingelmeldung wait 0:30

bekomme ich die Meldung
unknowed Module ([DI1]
Den code für die Relais habe ich noch nicht probiert.

Pfriemler

oh sorry, nach dem Namen des DOIF gehört natürlich der Modulname, also "define di_Klingelmeldung DOIF ([...")
Klar, dass es ein Modul mit dem Namen des Regex für das DOIF nicht gibt  ;)
Hatte ich oben vergessen, korrigiert.
"Änd're nie in fhem.cfg, denn das tut hier allen weh!" *** Wheezy@Raspi(3), HMWLAN+HMUART, CUL868(SlowRF) für FHT+KS+FS20, miniCUL433, Rademacher DuoFern *** "... kaum macht man es richtig, funktioniert es ..."

Tueftler1983

Okay das schluckt er.... aber beim attr am ende stimmt noch was nicht da fort er noch ein DOELSEIF oder DOELSE

Sorry wenn ich mich was dumm anstelle aber mit dem Syntax bei FHEM stehe ich auf dem Kriegsfuß hoffe das ändert sich noch

Tueftler1983

Beim Relais Code bekommein ich auch nen Fehler das die klammern falsch gesetzt sind.
define di_Relais1WithIcon DOIF ([DI5] eq "on")(set Relais1 on, define at_Rel1 +00:00:05 AT set Relais1 off;set DI5 off) attr di_Relais1WithIcon do always
Fehlermeldung im Screenshot

Tueftler1983

Noch jemand ideen? Ich muss den Quellcode aber oben in die Kommandozeile eingeben oder?
nicht direkt in die config.cfg

Damian

Zitat von: Tueftler1983 am 31 März 2015, 23:33:21
Beim Relais Code bekommein ich auch nen Fehler das die klammern falsch gesetzt sind.
define di_Relais1WithIcon DOIF ([DI5] eq "on")(set Relais1 on, define at_Rel1 +00:00:05 AT set Relais1 off;set DI5 off) attr di_Relais1WithIcon do always
Fehlermeldung im Screenshot

Das sollte funktionieren:

define di_Relais1WithIcon DOIF ([DI5] eq "on") (set Relais1 on, sleep 5;set Relais1 off;set DI5 off)
attr di_Relais1WithIcon do always


Gruß

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

Tueftler1983

Hallo also wenn ich den Dummy DI5 auf on setze passiert garnix.
so sieht es jetzt aus

Damian

Zitat von: Tueftler1983 am 01 April 2015, 22:50:22
Hallo also wenn ich den Dummy DI5 auf on setze passiert garnix.
so sieht es jetzt aus

Das kann ich mir nicht vorstellen ;)

Bis du sicher das es DI5 lautet und nicht Dl5? Sonst müsste in jedem Fall, egal auf was du DI5 setzt, bei DOIF ein Reading mit e_DI5_STATE mit dem Status entstehen.


Gruß

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

Tueftler1983