Hey zusammen,
sorry für die vermutlich blöde Frage aber wie kann 2 Sets in einem AT ausführen? Derzeit schalte ich erfolgreich einen:
define MorningWeekOnL at *7:00:00 { fhem("set Lueftung_A1 on") if($wday == 1 || $wday == 2 || $wday == 3 || $wday == 4 || $wday == 5 && Value("User.CM") eq "on" && Value("User.RM") eq "on") }
Aneinanderreihen scheint aber nicht zu gehen und ich finde keine Beispiele von anderen ;)
fhem("set Lueftung_A1 on","set Warmwasser_A2 on")
Fast das gleiche Problem habe ich bei einem Notify. Ich möchte den Wert erst setzen wenn beide da sind. Einer geht:
define AnwesendAn notify User.CM.bt:present set Fritz1OG_A2 on
aber zwei wollen nicht (ja was heirate ich auch :P)
define AnwesendAn notify User.CM.bt:present, User.RM.bt:present set Fritz1OG_A2 on
daaaanke euch!
ciao Carlo
Vorab: Ich würde mir angewöhnen erst alle Bedingungen zu nennen und dann zu beschreiben was gemacht werden soll. Machts Debuggen leichter.
Also anstatt:
define MorningWeekOnL at *7:00:00 { fhem("set Lueftung_A1 on") if($wday == 1 || $wday == 2 || $wday == 3 || $wday == 4 || $wday == 5 && Value("User.CM") eq "on" && Value("User.RM") eq "on") }
lieber
define MorningWeekOnL at *7:00:00 { if($wday == 1 || $wday == 2 || $wday == 3 || $wday == 4 || $wday == 5 && Value("User.CM") eq "on" && Value("User.RM") eq "on") { fhem("set Lueftung_A1 on") } }
Denn sonst hast du den Effekt, das vorne Bedingungen stehen unter denen was passiert (at *7:00:00) und hinten noch mal.Ich persönlich finde das unübersichtlich. Nur meine Meinung.
Okay, jetzt zu deiner Frage:
define MorningWeekOnL at *7:00:00 { if($wday == 1 || $wday == 2 || $wday == 3 || $wday == 4 || $wday == 5 && Value("User.CM") eq "on" && Value("User.RM") eq "on") { fhem("set Lueftung_A1 on ;; set lampe1 on ,, set dingens off") } }
Ganz allgemein.
1.
set lampe1 on ; set lampe2 on
führt beides sofort aus
2.
define morgens at *7:00:00 set lampe1 on ; set lampe2 on
schaltet lampe 1 immer um 7 an, aber lampe2 sofort
3.
define morgens at *7:00:00 set lampe1 on ;; set lampe2 on
schaltet BEIDE Lampen immer um 7 an.
D.H. Abtrennung mehrerer Befehle mit Semikolon und in einem define oder Perl-Konstrukt das Semikolon verdopplen ("Escapen")
Ferner ginge auch folgendes
define morgens at *7:00:00 set lampe1,lampe2 on
schaltet BEIDE Lampen immer um 7 an. Geht nur wenn der gleiche Befehl an 2 oder mehr Geräte gesendet werden soll
Dein zweites Problem ist nicht fast gleich, eher ganz anders. ;D Hier soll eine notify ausgelöst werden.
Ein Notify wird durch eine Bedingung ausgelöst. Es ist zwar möglich, mehrer Bedingungen zu nennen:
http://www.fhemwiki.de/wiki/Trick_der_Woche#notify_durch_mehrere_Ereignisse_ausl.C3.B6sen_lassen
aber es ist soweit ich weiss nicht möglich diese logisch zu verknüpfen. (bzw. die implizite Verknüpfung ist ODER).
Du willst eine UND. Das machst du über ein if.
Entweder du checkst alle paar Minuten ob beide da sind oder, was ich machen würde, du machst 2 notifys, die jeweils durch eine Person ausgelöst werden und dann prüft, ob die andere Person auch da ist.
define AnwesendAnCM notify User.CM.bt:present {if (Value("User.RM.bt") eq "present") { fhem("set Fritz1OG_A2 on") } }
define AnwesendAnRM notify User.RM.bt:present {if (Value("User.CM.bt") eq "present") { fhem("set Fritz1OG_A2 on") } }
(alles ungetestet und rein aus dem Kopf um 2:20 morgens hintippt. So und jetzt ins Bett)
Noch eine letzte Anmerkung_
Zitatif($wday == 1 || $wday == 2 || $wday == 3 || $wday == 4 || $wday == 5 ...
Also kurzum, NICHT am WochenEnde.
Das ginge kürzer so:
Zitat{if (!($we)) {fhem ...
Hey Zrrronggg,
Knaller!!! Das hab ich jetzt gebraucht ;). Danke für das nächtliche KnowhowUpdate und die Improvements. Genau das waren die Syntaxlücken. Vielen lieben Dank.
ciao Carlo
Noch ein Tipp: sieh dir mal DOIF an...
Yeah :) danke!!!
define Fritz1OG DOIF ([User.CM.bt:present] or [User.RM.bt:present]) (set Fritz1OG_A2 on) DOELSEIF ([User.CM.bt:absent] and [User.RM.bt:absent]) (set Fritz1OG_A2 off)
Zitat von: Calle78 am 11 März 2015, 20:41:26
Yeah :) danke!!!
define Fritz1OG DOIF ([User.CM.bt:present] or [User.RM.bt:present]) (set Fritz1OG_A2 on) DOELSEIF ([User.CM.bt:absent] and [User.RM.bt:absent]) (set Fritz1OG_A2 off)
([User.CM.bt:absent] and [User.RM.bt:absent]) kann niemals wahr sein, da zwei verschiedene Ereignisse nie zu einem Zeitpunkt vorkommen können.
dann schon eher:
define Fritz1OG DOIF ([User.CM.bt:present] or [User.RM.bt:present]) (set Fritz1OG_A2 on) DOELSE (set Fritz1OG_A2 off)
sonst immer Zustände abfragen z. B.
([User.CM.bt] eq "absent" and [User.RM.bt] eq "absent")
All das ist ausführlich in der Commandref zu DOIF erklärt.
Gruß
Damian
Du hast natürlich recht! 1000 Dank, schon geändert...
Heyho, darf ich noch einmal doof fragen?
Eine Tür funktioniert schon prima:
define EG.alarm.Controll DOIF ([Anwesend] eq "off" and [EG.tuer.terasse] eq "open") (set EG.alarm on) DOELSE (set EG.alarm off)
aber mehrere in die Bedingung einzufügen will nicht gelingen.
define EG.alarm.Controll DOIF ([Anwesend] eq "off" and ([EG.tuer.terasse] eq "open" or [EG.tuer.haus] eq "open")) (set EG.alarm on) DOELSE (set EG.alarm off)
Er löst leider nicht aus, das Logfile sagt
EG.alarm.Controll: reading does not exist: [EG.tuer.haus:Open]
Vermute es ist nur eine Kleinigkeit aber ich sehs nicht mehr.
Danke euch
ciao Carlo
Mit DOIF kann ich dir nicht helfen. Ich benutze die PERL Varianten und kann keinen Vorteil darin erkennen auf DOIF umzusteigen.
Wenn man neu Anfängt mag das natürlich anders sein.
Zitat von: Calle78 am 18 März 2015, 00:11:39
Heyho, darf ich noch einmal doof fragen?
Eine Tür funktioniert schon prima:
define EG.alarm.Controll DOIF ([Anwesend] eq "off" and [EG.tuer.terasse] eq "open") (set EG.alarm on) DOELSE (set EG.alarm off)
aber mehrere in die Bedingung einzufügen will nicht gelingen.
define EG.alarm.Controll DOIF ([Anwesend] eq "off" and ([EG.tuer.terasse] eq "open" or [EG.tuer.haus] eq "open")) (set EG.alarm on) DOELSE (set EG.alarm off)
Er löst leider nicht aus, das Logfile sagt
EG.alarm.Controll: reading does not exist: [EG.tuer.haus:Open]
Vermute es ist nur eine Kleinigkeit aber ich sehs nicht mehr.
Danke euch
ciao Carlo
Die Fehlermeldung sagt es doch schon: "reading does not exist" also kein Reading zu diesem Zeitpunkt vorhanden. Das kann auch bedeuten, dass auch das Device zu diesem Zeitpunkt nicht definiert war.
Gruß
Damian
Da hast du recht. Inzwischen gehts auch, ich vermute es war zu diesem Zeitpunkt nur nicht richtig initialisiert. Nach diversen Änderungen und Neustarts gehts jedenfalls :). Leider ists noch nicht ganz zuverlässig aber das wär ja auch zu einfach ;)
Danke
ciao
Ich habe das Gefühl, dass DOIF etwas unzuverlässig ist. Inzwischen hatte ich mehrere Tage wo sie (ohne Änderung) nicht korrekt ausgeführt wurden. Ist sowas bekannt?
ciao Carlo
Zitat von: Calle78 am 26 März 2015, 12:42:41
Ich habe das Gefühl, dass DOIF etwas unzuverlässig ist. Inzwischen hatte ich mehrere Tage wo sie (ohne Änderung) nicht korrekt ausgeführt wurden. Ist sowas bekannt?
ciao Carlo
nein ;)
Zitat von: Calle78 am 26 März 2015, 12:42:41
Ich habe das Gefühl, dass DOIF etwas unzuverlässig ist.
niemals, dass Problem ist sicher der Code... ;) :D
Eher die Zuverlässigkeit der Anwesenheitserkennung.
(Mal keine Witz)
Zitat von: Zrrronggg! am 27 März 2015, 04:10:31
Eher die Zuverlässigkeit der Anwesenheitserkennung.
(Mal keine Witz)
Ich habe bereits vor Kurzem schon geschrieben: "in fhem geht nichts verloren und DOIF wirft auch nichts weg". Ich kenne deine aktuelle Konfiguration nicht, aber wenn du nur einen DOIF-Fall hast ohne DOELSE... und damit nur einen Zustand, dann solltest du noch mal die Commandref bzgl. do always mal durchlesen, ansonsten steht in der Doku:
ZitatStandardmäßig, ohne das Attribut do always, wird das Wiederholen desselben Kommmandos vom Modul unterbunden. Daher sollte nach Möglichkeit eine Problemlösung mit Hilfe eines und nicht mehrerer DOIF-Module realisiert werden, getreu dem Motto "wer die Lampe einschaltet, soll sie auch wieder ausschalten". Dadurch wird erreicht, dass unnötiges (wiederholendes) Schalten vom Modul unterbunden werden kann, ohne dass sich der Anwender selbst darum kümmern muss.
Gruß
Damian
Oh man Leute, können wir bitte so tun als wenn dieses Gespräch niemals stattgefunden hat? Herber Rückschlag: es war wirklich die Anwesenheitserkennung bzw. mein völlig übermüdeter Schädel - ich hatte nur die Variablen vergessen mit umzubenennen nach einem Refactoring.
sorry und danke an alle!
Worüber sprachen wir gerade? 8)