Hallo,
ich habe mir folgendes DOIF eingerichtet, um die Abwesenheit auszuwerten bzw. zu verwerten:
([ANW_christoph] eq "absent" and [ANW_meike] eq "absent" and [ANW_julia] eq "absent" and [07:00-18:00]) (
set kz1_RolloJulia position 85,
set sz_RolloSchlafzimmer position 85,
set kz2_RolloJoschua position 95,
set kue_Arbeitsflaeche_Spuele off,
set hwr_RolloHWR down,
set AS_AbstellTreppeLicht off,
set az_Arbeitszimmer_Heizung_Climate desired-temp 18,5,
set KUE_Kueche_Heizung_Clima desired-temp 18,5,
set fl_FlurHeizung_Clima desired-temp 18,5,
set wz_Wohnzimmer_Heizung_Climate desired-temp 18,5,
{Log 1, "Sind alle weg"}
)
DOELSEIF ([ANW_christoph] eq "absent" and [ANW_meike] eq "absent" and [ANW_julia] eq "present" and [07:00-18:00]) (
set Anwesenheit.AlleWeg julia,
set sz_RolloSchlafzimmer position 85,
set kz2_RolloJoschua position 95,
set kue_Arbeitsflaeche_Spuele off,
set hwr_RolloHWR down,
set AS_AbstellTreppeLicht off
set kz1_Julia_Heizung_Climate 20.5,
{Log 1, "Nur Julia ist zu Hause"}
)
DOELSEIF ([ANW_christoph] eq "present" or [ANW_meike] eq "present" and [ANW_julia] eq "absent" and [07:00-18:00]) (
set kz1_RolloJulia position 0,
set sz_RolloSchlafzimmer position 0,
set kz2_RolloJoschua position 0,
set hwr_RolloHWR up,
set az_Arbeitszimmer_Heizung_Climate desired-temp 21.0,
set KUE_Kueche_Heizung_Clima desired-temp 20.5,
set fl_FlurHeizung_Clima desired-temp 20.5,
set wz_Wohnzimmer_Heizung_Climate desired-temp 21.0,
{Log 1, "Machen mal etwas wärmer, es ist jemand zu Hause ..."}
)
Grundsätzlich funktioniert es inzwischen soweit zuverlässig - einzig das Ende "18:00" wird nicht eingehalten, und ich habe keine Ahnung, warum ...
Gruß, Christoph
Hallo Christoph,
Du hast aus meiner Sicht kein Ende definiert!?
Du hast nur definiert was in der Zeit von 7:00-18:00 passieren soll.
Wenn alle drei Bedinungen nicht mehr wahr sind passiert einfach nichts.
DOELSE am Ende vergessen?
Ich habe Deinen Code aber nicht im Detail angesehen.
Gruß Otto
Ich hatte es so verstanden, daß nicht unbeding ein DOELSE notwendig ist? Oder liege ich da falsch?
Generell ist das richtig. Aber Du sagst Ende geht nicht. Aber was ist für Dich Ende? Was soll also am Ende passieren?
Bei Zeitintervallen fällt mir keine Möglichkeit ein ohne DOELSE. Siehe auch http://fhem.de/commandref_DE.html#DOIF_Zeitsteuerung_mit_Zeitintervallen
Gruß Otto
Ende soll ab 18:00 Uhr sein - dann soll die An-/Abwesenheit in dieser Form nichts mehr passieren - erst zu 7:00 Uhr soll diese Regel greifen...
dürfte an and / or liegen.
Das hier:
DOELSEIF ([ANW_christoph] eq "present" or [ANW_meike] eq "present" and [ANW_julia] eq "absent" and [07:00-18:00]
ist wahr, wenn
[ANW_christoph] eq "present"
wahr ist, oder wenn
[ANW_meike] eq "present" and [ANW_julia] eq "absent" and [07:00-18:00]
wahr ist.
Wenn Christoph oder Meike anwesend sein sollen und Juli abwesend und das ganze nur zwischen 07-18 Uhr, dann müsstest du es so schreiben:
DOELSEIF (([ANW_christoph] eq "present" or [ANW_meike] eq "present") and [ANW_julia] eq "absent" and [07:00-18:00]
Also so ähnlich wie in Mathe - Klammer geht vor ;)
Ich werde es gleich mal ausprobieren - Danke
das wäre eher Punkt vor Strich... Klammer geht sowieso vor... 8)
Zitat von: caldir65 am 04 Dezember 2016, 21:14:22
Ende soll ab 18:00 Uhr sein - dann soll die An-/Abwesenheit in dieser Form nichts mehr passieren - erst zu 7:00 Uhr soll diese Regel greifen...
Ok da hätten wir das ausgesprochen und geklärt.
Ich finde den Ansatz so irgendwie verkehrt. Leider hat DOIF kein disabledForIntervals, sonst würde ich das damit lösen.
Wenn überhaupt diese Kombination mit den vielen Bedingungen würde ich das Zeitinterval links hinschreiben, Zitat Commandref:
ZitatDie Angaben werden immer von links nach rechts abgearbeitet.
Du könntest Deine Bedingungen so formulieren wie bisher (ich habe die Logik nicht überprüft) allerdings ohne den Zeitbereich und mit einem zweiten DOIF in dem Zeitraum [07:00-18:00] das DOIF set <> disable bzw enable/initialized setzen.
das würde dem disabledForIntervals ansatzweise entsprechen.
Aber Du musst das verstehen und warten können.
Viele Wege führen nach Rom.
Gruß Otto
Nachtrag:
Mir fällt gerade ein ich habe auch ein paar solche DOIFs z.B. dies hier
define di_TemperaturAnsage DOIF ([?06:00 - 20:00] and [PIR1:"motion: on"]) ( set MyTTS volume 30, set MyTTS tts Es sind [SensorAussen:tempText] Grad)
attr di_TemperaturAnsage cmdpause 1800
attr di_TemperaturAnsage do always
attr di_TemperaturAnsage room Haus
Dabei nehme ich den Zeitraum nicht als triggernde sondern nur als Abfragebedingung. Ob das wirklich richtig und gut ist bin ich mir auch nicht sicher. Aber es funktioniert
([ANW_christoph] eq "present" or [ANW_meike] eq "present" and [ANW_julia] eq "absent" and [07:00-18:00])
damit ist klar, dass das Zeitintervall nicht greift.
Du meinst vermutlich:
(([ANW_christoph] eq "present" or [ANW_meike] eq "present" and [ANW_julia] eq "absent") and [07:00-18:00])
Zitat von: Damian am 05 Dezember 2016, 07:30:09
(([ANW_christoph] eq "present" or [ANW_meike] eq "present" and [ANW_julia] eq "absent") and [07:00-18:00])
So habe ich es inzwischen eingetragen ;-)
(([ANW_christoph] eq "present" or [ANW_meike] eq "present" and [ANW_julia] eq "absent") and [07:00-18:00])
dann wird es wahr, wenn christoph present und 07-18 Uhr ist oder aber
meike present und julia absent und 07-18 Uhr ist
Zitat von: automatisierer am 05 Dezember 2016, 12:40:15
dann wird es wahr, wenn christoph present und 07-18 Uhr ist oder aber
meike present und julia absent und 07-18 Uhr ist
Hm, wenn ich das jetzt richtig verstanden habe, müßte es im Grunde letztlich so aussehen
(([ANW_christoph] eq "present" or [ANW_meike] eq "present") and [ANW_julia] eq "absent" and [07:00-18:00])
damit bei (entweder christoph oder meide anwesent) und julia weg und 07-18 Uhr ist
jou, so is...
Einfach merken: and bindet stärker als or (entspricht Punkt vor Strich Regel).
ZitatLeider hat DOIF kein disabledForIntervals, sonst würde ich das damit lösen.
@Otto123: Es hatte nur noch keiner ausgegraben, mit userattr disabledForIntervals funktioniert es auch, s. https://forum.fhem.de/index.php/topic,62180.0.html
Aha, danke 8)
Hauptsache ich vergesse das nicht. ;)
Zitat von: Damian am 05 Dezember 2016, 21:52:38
Einfach merken: and bindet stärker als or (entspricht Punkt vor Strich Regel).
ODER vor UND wird es ohne klammern ungesund! Ist noch aus der Ausbildung hängen geblieben! ;)
Von mobil gesendet daher kurze Antwort
Hey,
damit läuft es soweit:
(([ANW_christoph] eq "absent" and [ANW_meike] eq "absent" and [ANW_julia] eq "absent") and [07:00-17:00]) (
set kz1_RolloJulia position 85,
set sz_RolloSchlafzimmer position 85,
set kz2_RolloJoschua position 95,
set kue_Arbeitsflaeche_Spuele off,
set hwr_RolloHWR down,
set AS_AbstellTreppeLicht off,
set az_Arbeitszimmer_Heizung_Climate desired-temp 18,5,
set KUE_Kueche_Heizung_Clima desired-temp 18,5,
set fl_FlurHeizung_Clima desired-temp 18,5,
set wz_Wohnzimmer_Heizung_Climate desired-temp 18,5,
{Log 1, "Sind alle weg"}
)
DOELSEIF (([ANW_christoph] eq "absent" and [ANW_meike] eq "absent") and [ANW_julia] eq "present" and [07:00-17:00]) (
set sz_RolloSchlafzimmer position 85,
set kz2_RolloJoschua position 95,
set kue_Arbeitsflaeche_Spuele off,
set hwr_RolloHWR down,
set AS_AbstellTreppeLicht off
set kz1_Julia_Heizung_Climate 20.5,
{Log 1, "Nur Julia ist zu Hause"}
)
DOELSEIF (([ANW_christoph] eq "present" or [ANW_meike] eq "present") and [ANW_julia] eq "absent" and [07:00-17:00]) (
set kz1_RolloJulia position 0,
set sz_RolloSchlafzimmer position 0,
set kz2_RolloJoschua position 0,
set hwr_RolloHWR up,
set az_Arbeitszimmer_Heizung_Climate desired-temp 21.0,
set KUE_Kueche_Heizung_Clima desired-temp 20.5,
set fl_FlurHeizung_Clima desired-temp 20.5,
set wz_Wohnzimmer_Heizung_Climate desired-temp 21.0,
{Log 1, "Machen mal etwas wärmer, es ist jemand zu Hause ..."}
)
aber: kommen wir mal nach der von diesem DOIF überwachten Intervall nach Hause, wird cmd_3 ausgeführt - genau um 7:00 Uhr morgens. Ist meistens nicht schlimm, nur am WE lästig, wenns im Schlafzimmer um die Uhrzeit bereits hochfährt ;) Läßt sich das unterbinden?
Gruß, Christoph
ZitatLäßt sich das unterbinden?
Ja, das geht mit ?