[GELÖST] Fenster-ist-offen-Melder: Zu viele Statusübermittlungen

Begonnen von svenson6, 09 Januar 2016, 20:25:14

Vorheriges Thema - Nächstes Thema

svenson6

Hallo Forum,

ich spiele noch nicht sonderlich lange mit Fhem herum, habe schon einiges hinbekommen, jetzt aber beiße ich mir gerade die Zähne aus.

Was ich möchte: Im Obergeschoss habe wir drei Fenster mit MAX!-Fensterkontakten. Deren Status kann ich einwandfrei in Fhem abfragen, das klappt. Ich möchte nun, dass in der Küche zehn Minuten, nachdem eins der Fenster geöffnet worden ist, eine Lampe eingeschaltet wird. (Zehn Minuten zum Lüften sind okay, danach möchte ich daran erinnert werden, dass ich die Fenster wieder schließen muss.) Sind alle Fenster wieder geschlossen, soll die Lampe wieder erlöschen. Folgendes habe ich eingerichtet:

FensterObenStatus
Ich habe die drei Fensterkontakte in einer structure zusammengefasst:

define FensterObenStatus structure Fensterkontakt_struc Ti.Fensterkontakt Ju.Fensterkontakt Sz.Fensterkontakt
attr FensterObenStatus clientstate_behavior relative
attr FensterObenStatus clientstate_priority opened closed


Diese structure gibt mir nun den Status opened (wenn mindestens ein Fenster geöffnet ist) oder closed (wenn alle Fenster geschlossen sind) aus. Klappt auch.

FensterObenWatchdog
Ein watchdog soll dafür sorgen, dass die Lampe eingeschaltet wird:

define FensterObenWatchdog watchdog FensterObenStatus:opened 00:10:00 FensterObenStatus:closed set Funkschalter_FensterOben on;; setstate FensterObenWatchdog defined

Der Funkschalter an sich funktioniert übrigens auch perfekt.

FensterObenZu
Irgendjemand muss die Lampe beizeiten dann ja auch mal wieder ausschalten. Dafür ist FensterObenZu zuständig:

define FensterObenZu notify FensterObenStatus:closed set Funkschalter_FensterOben off

Klappt? Jawoll, klappt. Wenn die Lampe denn mal leuchtet.

Das Problem
Der watchdog weigert sich beharrlich, die Lampe einzuschalten. Wird ein Fenster geöffnet, wechselt der Status der structure wie gewünscht auf opened. Das fällt auch dem watchdog auf, sein Status wechselt von defined auf beispielsweise ,,Next: 18:55:30". Die Zeit entspricht "jetzt plus zehn Minuten". Prima. Aber jetzt geschieht das Seltsame: Jeweils nach Ablauf einer Minute erhöht sich die Zeit ebenfalls um eine Minute, also zum Beispiel auf ,,Next: 18:56:30". Und das geht dann immer so weiter, der watchdog schiebt konstant mehr oder weniger zehn Minuten vor sich her, und so kommt er natürlich nie zum Auslösen.

Mein Verdacht ist, dass der Fensterkontakt in regelmäßigen Abständen seinen Status neu übermittelt (auch wenn er sich nicht ändert), die structure ihren Status dann ebenfalls aktualisiert (auch wenn er sich nicht ändert) und der watchdog deshalb immer wieder neu startet. So sieht das etwa alle Minute in der Log-Datei aus:

2016.01.09 19:06:37 5: ml dispatch MAX,1,ShutterContactState,0e6618,10
2016.01.09 19:06:37 5: MAX_Parse MAX,1,ShutterContactState,0e6618,10
2016.01.09 19:06:37 5: ShutterContact isopen 0, rferror 0, battery 0, unkbits 0
2016.01.09 19:06:37 5: Triggering Ju.Fensterkontakt (3 changes)
2016.01.09 19:06:37 5: Notify loop for Ju.Fensterkontakt battery: ok
2016.01.09 19:06:37 5: Update structure 'FensterObenStatus' to opened because device Ju.Fensterkontakt has changed
2016.01.09 19:06:37 5: Triggering FensterObenStatus (1 changes)
2016.01.09 19:06:37 5: Notify loop for FensterObenStatus opened
2016.01.09 19:06:37 5: Triggering Ju.Fensterkontakt (5 changes)
2016.01.09 19:06:37 5: Notify loop for Ju.Fensterkontakt MAXLAN_initialized: 1
2016.01.09 19:06:37 5: Update structure 'FensterObenStatus' to opened because device Ju.Fensterkontakt has changed
2016.01.09 19:06:37 5: Triggering FensterObenStatus (1 changes)
2016.01.09 19:06:37 5: Notify loop for FensterObenStatus opened


Wie bekomme ich es hin, dass die structure eine Statusänderung nur dann übermittelt, wenn sich der Status auch geändert hat?

Viele Grüße von
Sven

P.S.: Noch ein paar Infos über das System (auf Raspberry Pi 2):

Fhem info:
  Release  : 5.7 FeatureLevel: 5.7
  OS       : linux
  Arch     : arm-linux-gnueabihf-thread-multi-64int
  Perl     : v5.20.2
  uniqueID : ******************************
  upTime   : 03:21:44

Defined modules:
  CUL        : 2
  CUL_HM     : 3
  FHEMWEB    : 3
  FHT        : 2
  FS20       : 1
  FileLog    : 26
  HMLAN      : 1
  IT         : 10
  MAX        : 19
  MAXLAN     : 1
  Pushover   : 1
  SVG        : 2
  Twilight   : 1
  Weather    : 1
  at         : 5
  autocreate : 1
  eventTypes : 1
  notify     : 7
  structure  : 2
  watchdog   : 2

Defined models per module:
  CUL_HM     : HM-LC-Sw1-Pl-DN-R1,HM-LC-Sw1PBU-FM
  FS20       : fs20fms
  IT         : itswitch

Transmitting this information during an update: no
You can change this via the global attribute sendStatistics

Baumi


svenson6

Yeah! Das war's! Kaum macht man's richtig, schon funktioniert's!

Herzlichen Dank für den Tipp, der hat weitergeholfen!

Noch einen schönen Abend wünscht
Sven