Hallo zusammen,
ich hatte mir mal ein DOIF zusammengebaut für eine Warnung bei geöffneter Terrassentür in Abhängigkeit zu Temepratur. Das gleiche habe ich für eine Dachluke gemacht. Das hat auch schon mal funktioniert. Seit einer Weile gibt es nun folgendes Problem. Die Tür meldet das reguöäre öffnen und schliessen ganz normal. Aber während der Öffnungsphase behauptet FHEM auch das die Tür geschlossen sei und tut dies mit einer Ansage kund. Das ist natürlich falsch und nervt, meine FRau extrem (Sie hat schon gedrohtden FHEM Stecker zu ziehen).
Hier das DOIF der Terassentür als list:
Internals:
DEF ([TFA07:temperature] > [TFA08:temperature] and [Kontakt_Garten] eq "opened") (set Warnung_Gartentuer on) (set gong_MP3 playTone 010) DOELSE (set Warnung_Gartentuer off, set gong_MP3 playTone 011)
NAME Warnung_Gartentuer_doif
NR 389
NTFY_ORDER 50-Warnung_Gartentuer_doif
STATE cmd_1_1
TYPE DOIF
Readings:
2016-07-06 07:06:57 Device TFA07
2016-07-06 07:06:56 cmd 1.1
2016-07-06 07:06:55 cmd_count 1
2016-07-06 07:06:56 cmd_event TFA07
2016-07-06 07:06:56 cmd_nr 1
2016-07-06 07:06:56 cmd_seqnr 1
2016-07-06 06:23:52 e_Kontakt_Garten_STATE opened
2016-07-06 07:06:57 e_TFA07_temperature 22.8
2016-07-06 07:06:24 e_TFA08_temperature 15.2
2016-07-06 07:06:56 state cmd_1_1
2016-07-06 07:06:56 wait_timer 06.07.2016 07:07:56 cmd_1_2 TFA07
Condition:
0 ReadingValDoIf($hash,'TFA07','temperature','','',AttrVal($hash->{NAME},'notexist',undef)) > ReadingValDoIf($hash,'TFA08','temperature','','',AttrVal($hash->{NAME},'notexist',undef)) and InternalDoIf($hash,'Kontakt_Garten','STATE','','',AttrVal($hash->{NAME},'notexist',undef)) eq "opened"
Devices:
0 TFA07 TFA08 Kontakt_Garten
all TFA07 TFA08 Kontakt_Garten
Do:
0:
0 set Warnung_Gartentuer on
1 set gong_MP3 playTone 010
1:
0 set Warnung_Gartentuer off, set gong_MP3 playTone 011
Helper:
event T: 22.8 H: 50.0,humidity: 50.0
globalinit 1
last_timer 0
sleepdevice TFA07
sleepsubtimer 1
sleeptimer 0
timerdev TFA07
timerevent T: 22.8 H: 50.0,humidity: 50.0
triggerDev TFA07
timerevents:
T: 22.8 H: 50.0
humidity: 50.0
timereventsState:
state: T: 22.8 H: 50.0
humidity: 50.0
triggerEvents:
T: 22.8 H: 50.0
humidity: 50.0
triggerEventsState:
state: T: 22.8 H: 50.0
humidity: 50.0
Internals:
0 Kontakt_Garten:STATE
all Kontakt_Garten:STATE
Itimer:
Readings:
0 TFA07:temperature TFA08:temperature
all TFA07:temperature TFA08:temperature
Regexp:
0:
All:
State:
Trigger:
Attributes:
repeatsame 3:0
room Wohnzimmer
wait 0,60:0
Habt Ihr vielleicht einen Einfall was sich geändert hat?
Gruß
Micha
Es ist Sommer geworden, daher kann es vorkommen, dass die Temperaturen innen und aussen sich angleichen und manchmal die Eine höher ist als die Andere und umgekehrt, das lässt den DOELSE-Zweig triggern.
Du könntest den DOELSE-Zweig durch DOELSEIF ersetzen und ihn über eine Hysterese triggern lassen, etwa wie bei dem Zweipunktregler: http://fhem.de/commandref_DE.html#DOIF_Weitere_Anwendungsbeispiele
Hallo Ellert,
danke für den Hinweis. Ja, auch in Berlin ist es Sommer geworden ;-) Also ist es eigentlich gar kein Fehler sondern eine "falsche" Ausdrucksweise von mir, vielleicht sollte ich für die Überganszeit irgendwie ein +5 für die Temperatur setzen ?! Den Zweipunktregler habe ich leider gar nicht verstanden :-(
Gruß
Micha
Im Zweipunktregler ist eine Schaltdifferenz eingebaut.
Einschalten bei T_ist < T_soll - 3
Ausschalten bei T_ist > T_soll + 3
also im prinzip das was ich ja wollte mit der temperatur +5 aber halt als differenz.
könntest du mir mit dem code helfen ?
Schlag mal den DOELSEIF Zweig mit dem Temperatur-Vergleich und der closed Abfrage vor.
Ich verstehe schon nicht die ersten beiden Zeilen in der commandref:
setreading sensor default 20
setreading sensor hysteresis 1
soll ich das jetzt für Beide Sensoren, also TFA07 und TFA08 ausführen?
([TFA07:temperature] > [TFA08:temperature] and [Kontakt_Garten] eq "opened") (set Warnung_Gartentuer on) (set gong_MP3 playTone 010) DOELSEIF ([sensor:temperature]>[sensor:default]) (set Warnung_Gartentuer off, set gong_MP3 playTone 011)
würde sich ja den nur auf einen Sensor beziehen ?!
Gruß
Micha
Ich gehe mal von diesem Vergleich aus [TFA07:temperature] > [TFA08:temperature]
dann könnte eine Hysterese so aussehen
[TFA07:temperature] < [TFA08:temperature] - 1
Beispiel
Bei TFA08 = 20°C und TFA07 steigt über 20°C schaltet Zweig 1,
bei TFA08 = 20°C und TFA07 sinkt unter (20 - 1 = 19) °C schaltet Zweig 2.
Welche Bedeutung haben eigentlich die TFA07 u. 08?
TFA08 ist die Temperatur im Garten und TFA07 die Temperatur im Wohnzimmer. Eine Warnung zur offenen Terassentür ist für mich nur sinnvoll, wenn die Außentemperatur niedriger ist als die Wohnzimmertemperatur. Hintergrund ist, das im Winter sonst die Heizung anspringen würde und ich für den Garten heizen würde.
Ich vermute so einfach wird es wohl nicht ?!:
([TFA07:temperature] > [TFA08:temperature] and [Kontakt_Garten] eq "opened") (set Warnung_Gartentuer on) (set gong_MP3 playTone 010) DOELSEIF ([TFA07:temperature] < [TFA08:temperature] - 1) (set Warnung_Gartentuer off, set gong_MP3 playTone 011)
Mir wird dann vermutlich das normale schliessen der Tür nicht mehr signalisiert ?
Ja, Du müsstest Dir schon genau überlegen, welche Fälle auftreten können und welche davon etwas bewirken sollen:
- eine offen/geschlossen Meldung sollte wohl in jedem Fall erfolgen.
- eine noch offen Meldung könnte regelmässig wiederholt werden.
- der Zeitabstand der Wiedeholungen könnte mit sinkender Innentemperatur kürzer werden
- eine Temperaturwarnung sollte nicht während einer normalen Lüftungsphase erfolgen z.B. erstmals nach 7 Minuten
- Begrenzung der Temperaturwarnung auf die Heizperiode oder bestimmte Monate, z.B. mit $month !~ "5|6|7|8|9"
TFK = Tür- und Fensterkontakt
HP = während der Heizperiode 1, sonst 0
Ti = Innentemperatur
$SELF, $cmd siehe die deutschsprachige Befehlsreferenz zum DOIF. Sie dienen dazu das DOIF zu triggern oder zu verriegeln.
## 1
DOIF ([TFK] eq "open" and $cmd =~ "^(5|0)\$") (...) ## Fenster/Tür wird geöffnet, wenn geschlossen oder initialisiert
## 2
DOELSEIF ([?HP] and [?TFK] eq "open" and [?Ti] > 16.5 and [$SELF] =~ "cmd_(1|2|3)") (...) ## Heizperiode, Wiederholungsmeldung langer Erinnerungsbstand
## 3
DOELSEIF ([?HP] and [?TFK] eq "open" and [?Ti] <= 16.5 and [$SELF] =~ "cmd_(1|2|3)") (...) ## Heizperiode, Wiederholungsmeldung kurzer Erinnerungsbstand
## 4
DOELSEIF (![?HP] and [?TFK] eq "open" [?07:00-21:00] and [$SELF] =~ "cmd_(1|4)") (...) ## keine Heizperiode, Wiederholungsmeldung langer Erinnerungsbstand, nachts wir nicht wiederholt (schlafen bei offen Fenster).
## 5
DOELSEIF (TKF] eq "closed" and $cmd != 5) (...) ## Fenster/Tür wird geschlossen
Es sind folgende Attribute zu setzen:
do always
selftrigger wait
timerWithWait 1
wait 0.1:420:60:2700:0
Dieses Schema nutze ich um den Fensterstatus ansagen zu lassen, das lässt sich auch zur Signalisierung einer Terrassentür verwenden.
Hallo Ellert,
danke für die Unterstützung und Codezeilen, das muss ich dann mal für meinen Fall übersetzen.
Was mich jetzt aber wunder ist, das ich momentan zum Beispiel eine Aussentemperatur von 24 und einen Wohnzimmertemperatur von 19 habe und offenbar trotzdem in das else fällt das angeblich die Tür geschlossen ist obwohl Sie offen ist.
Wobei mir auch merkwürdige Temperaturschwankungen am Wonzimmerthermostat auffallen.
Gruß
Micha
Batterie wechseln?
Danke ! Batterie wechsel ! Was der so alles bewirkt :o