Fensterüberwachung mit notify und at schaltet wild

Begonnen von allgaier, 11 Februar 2014, 12:51:45

Vorheriges Thema - Nächstes Thema

allgaier

Servus,
ich habe mir eine Fensterüberwachung mit Notify und At gebastelt. Die Fenster werden über FHT sensoren (CUL_FHTTK) überwacht.
Bei den Sensoren habe ich die Option "event-on-change-reading Window" aktiviert.

Auszug aus der fhem.cfg:


...

# Wohnzimmer
define Fenster_Wohnzimmer CUL_FHTTK XXXXXXXXX
attr Fenster_Wohnzimmer event-on-change-reading Window

...

define FileLog_Fenster_Wohnzimmer FileLog /opt/var/log/fhem/Fenster_Wohnzimmer-%Y.log Fenster_Wohnzimmer
attr FileLog_Fenster_Wohnzimmer logtype fht80tf:Window,text

define SVG_Fenster_Wohnzimmer SVG FileLog_Fenster_Wohnzimmer:fht80tf:CURRENT
attr SVG_Fenster_Wohnzimmer label "Fenster_Wohnzimmer Min $data{min1}, Max $data{max1}, Last $data{currval1}"

...

## Fensterüberwachung mit timer
define Fensterueberwachung.timer notify (Fenster_Buero|Fenster_Kinderzimmer|Fenster_Schlafzimmer|Fenster_Wohnzimmer) { if (Value("Fenster_Buero") eq "Closed" && Value("Fenster_Kinderzimmer") eq "Closed" && Value("Fenster_Schlafzimmer") eq "Closed" && Value("Fenster_Wohnzimmer") eq "Closed") { fhem ("set Schalter3 off") } else { fhem ("define tmp_time1 at +00:10:00 set Schalter3 on") }}



Problem: Wenn  mehrere Fenster geöffnet werden, kommt die Routine irgendwie durcheinander und Schalter3 bleibt am schluss eingeschaltet obwohl alle fenster geschlossen sind.

Auszug aus verschiedenen Logfiles, Zeitmäßig zusammenkopiert: (Im Anhang farbig hinterlegt)



2014-02-11 07:05:43 Fenster Wohnzimmer Window: Open
2014-02-11 07:15:43 2: IT set Schalter3 on
2014-02-11 07:20:18  Fenster Wohnzimmer Window: Closed
2014-02-11 07:20:18 2: IT set Schalter3 off
2014-02-11 07:37:13 Fenster Schlafzimmer Window: Open
2014-02-11 07:37:47  Fenster Kinderzimmer Window: Open
2014-02-11 07:37:47 3: define tmp_time1 at +00:10:00 set Schalter3 on : tmp_time1 already defined, delete it first
2014-02-11 07:37:47 3: Fensterueberwachung-timer return value: tmp_time1 already defined, delete it first
2014-02-11 07:44:16  Fenster Wohnzimmer Window: Open
2014-02-11 07:44:16 3: define tmp_time1 at +00:10:00 set Schalter3 on : tmp_time1 already defined, delete it first
2014-02-11 07:44:16 3: Fensterueberwachung-timer return value: tmp_time1 already defined, delete it first
2014-02-11 07:45:18  Fenster Wohnzimmer Window: Closed
2014-02-11 07:45:18 3: define tmp_time1 at +00:10:00 set Schalter3 on : tmp_time1 already defined, delete it first
2014-02-11 07:45:18 3: Fensterueberwachung-timer return value: tmp_time1 already defined, delete it first
2014-02-11 07:47:13 2: IT set Schalter3 on
2014-02-11 08:01:10  Fenster Schlafzimmer Window: Closed
2014-02-11 08:01:21  Fenster Kinderzimmer Window: Closed
2014-02-11 08:01:21 2: IT set Schalter3 off
2014-02-11 08:11:10 2: IT set Schalter3 on



Um 0705 wird das fenster im Wohnzimmer geöffnet. 10min später geht Schalter3 an.                              --> soweit alles IO
Um 0720 wird das Fenster wieder geschlossen. Schalter3 geht aus                                                          --> alles IO
Um 0737 wird das fenster im Schlafzimmer und Kinderzimmer geöffnet. Um 0747 geht der Schalter3 an. --> auch alles IO
Um 0801 werden die Fenster wieder geschlossen und Schalter3 geht aus                                                --> immernoch IO
Um 0811 geht nun der Schalter3 10min nach dem Fenster schließen wieder an.                    --> WARUM?

Könnt ihr mir Helfen wo der Fehler im System ist?

Gruß Markus

betateilchen

vielleicht ist das Bürofenster noch offen?

Warum löst Du das Ganze eigentlich mit einer structure? Das wäre doch viel einfacher und übersichtlicher.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

allgaier

Servus,
ne, das Bürofenster war geschlossen, sonst hätte er garnicht ausgeschaltet, oder? (und im Büro lüfte ich morgens nicht :-) )

Wie müsste das ganze mit einer Structure aussehen?

Gruß

Puschel74

#3
Hallo,

ähem trifft der else-Zweig nicht IMMER zu wenn von den FHTTK was anderes als "Closed" kommt?
Also sprich - Battery und die anderen Readings die ankommen?

Das attribut event-on-change-reading ist ja schön und gut und sorgt nur dafür das ein Event erzeugt wird wenn sich am Reading Window was ändert.
Die restlichen Readings kommen aber ungefiltert im notify an und matchen natürlich nicht mit "Closed" und bringen dann mMn den else-Zweig zur Ausführung.

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

allgaier

Servus,
da hast du recht. Müsste eigentlich so sein. Finde aber in den Fensterlogs keinen wert der zu 08:11:10 passt, außer das Fenster schließen um 08:01:10, also 10min später...

Wie würdest du es umschreiben? einschalten wenn Open und bei allem anderen ausschalten?

Oder doch mit Structure?

Da erstellen ich dann einen StructureDummy (der alle Fenster beinhaltet) der dann über notify und at +00:10:00 geschalten wird, oder?

Gruß

Puschel74

Hallo,

structure siehe commandref und/oder Forum.
FHTTK siehe Forum
Event Monitor siehe Forum.

Du hast alle Möglichkeiten den Code lauffähig zu bekommen.
Das Zauberwort heisst "regexp" - aber wenn du unter den obigen Stichpunkten suchst wirst du sicher fündig werden.

Grüsse
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

allgaier

Servus zusammen,
habe es nun hinbekommen. Es läuft nun seit gut drei wochen fehlerfrei. Danke für die Hilfe.

Hier noch der Code:



## Fensterüberwachung mit timer
define Fensterueberwachtung.gruppe structure fensterstruct Fenster_Wohnzimmer Fenster_Buero Fenster_Kinderzimmer Fenster_Schlafzimmer
attr Fensterueberwachtung.gruppe clientstate_behavior relative
attr Fensterueberwachtung.gruppe clientstate_priority on|Open off|Closed

define Fensterueberwachung.dummy dummy

define Fensterueberwachung.timer notify Fensterueberwachtung.gruppe {if (Value("Fensterueberwachtung.gruppe") eq "on") { fhem("define Fensterueberwachung.zeit at +00:10:00 set Fensterueberwachung.dummy on")}else { fhem("set Fensterueberwachung.dummy off")}}

define Fensterueberwachung.schalter notify (Fensterueberwachtung.gruppe|Fensterueberwachung.dummy) { if (Value("Fensterueberwachtung.gruppe") eq "on" && Value("Fensterueberwachung.dummy") eq "on") { fhem ("set Fensterueberwachung.aktor on") } else { fhem ("set Fensterueberwachung.aktor off");; fhem ("set Fensterueberwachung.dummy off") ;; fhem ("del Fensterueberwachung.zeit")   }}



Bei jedem Fenster steht dann noch als Option dabei:


attr Fenster_Wohnzimmer event-on-change-reading Window
attr Fenster_Wohnzimmer fensterstruct Fensterueberwachtung.gruppe
attr Fenster_Wohnzimmer fensterstruct_map Window:Open:on Window:Closed:off


Ist zwar so recht "lang" und über sieben ecken, aber so funktioniert es so wie ich will.

Gruß Markus

PS. Jetzt muss ich nur noch meinen RF Empfänger zum Laufen bringen:
http://forum.fhem.de/index.php/topic,20065.msg136212.html#msg136212