FHEM Forum

FHEM - Hausautomations-Systeme => Homematic => Thema gestartet von: l.with am 31 Januar 2017, 19:24:47

Titel: HM-SEC-WIN open unterscheiden (FHEM/Gerät)
Beitrag von: l.with am 31 Januar 2017, 19:24:47
Hallo zusammen,

ich möchte bei meinem Winmatic das Öffnen über FHEM von dem Öffnen an der Winmatic unterscheiden können, damit ich auch beim Öffnen an der Winmatic (nachträglich) eine Verweildauer im gekippten Zustand festlegen kann.
In FHEM habe ich für die Winmatic folgende eventMap und folgendes devStateIcon angelegt

attr Hz.FensterWinmatic eventMap /level lock:lock/level 100 ignore 100:open/level 100 900 100:open15/
attr Hz.FensterWinmatic devStateIcon 100:fts_window_1w_tilt:lock 0:fts_window_1w locked:secur_locked:open15

Wenn ich über das Icon für lock open15 aufrufe, zeigt der Event-Monitor folgendes

2017-01-30 19:31:09 CUL_HM Hz.FensterWinmatic set_open15
2017-01-30 19:31:10 CUL_HM Hz.FensterWinmatic direction: up
2017-01-30 19:31:10 CUL_HM Hz.FensterWinmatic lock: locked
2017-01-30 19:31:10 CUL_HM Hz.FensterWinmatic motorErr: ok
2017-01-30 19:31:10 CUL_HM Hz.FensterWinmatic locked
2017-01-30 19:31:15 CUL_HM Hz.FensterWinmatic direction: up
2017-01-30 19:31:15 CUL_HM Hz.FensterWinmatic lock: unlocked
2017-01-30 19:31:15 CUL_HM Hz.FensterWinmatic motorErr: ok
2017-01-30 19:31:15 CUL_HM Hz.FensterWinmatic 0
2017-01-30 19:31:48 CUL_HM Hz.FensterWinmatic direction: no
2017-01-30 19:31:48 CUL_HM Hz.FensterWinmatic level: 100
2017-01-30 19:31:48 CUL_HM Hz.FensterWinmatic lock: unlocked
2017-01-30 19:31:48 CUL_HM Hz.FensterWinmatic motorErr: ok
2017-01-30 19:31:48 CUL_HM Hz.FensterWinmatic 100


Wenn ich am Winmatic-Gerät auf die Taste für das Kippen des Fenster drücke, zeigt der Event-Monitor

2017-01-30 19:28:23 CUL_HM Hz.FensterWinmatic direction: up
2017-01-30 19:28:23 CUL_HM Hz.FensterWinmatic lock: locked
2017-01-30 19:28:23 CUL_HM Hz.FensterWinmatic motorErr: ok
2017-01-30 19:28:23 CUL_HM Hz.FensterWinmatic locked
2017-01-30 19:28:26 CUL_HM Hz.FensterWinmatic direction: up
2017-01-30 19:28:26 CUL_HM Hz.FensterWinmatic lock: unlocked
2017-01-30 19:28:26 CUL_HM Hz.FensterWinmatic motorErr: ok
2017-01-30 19:28:26 CUL_HM Hz.FensterWinmatic 0
2017-01-30 19:28:58 CUL_HM Hz.FensterWinmatic direction: no
2017-01-30 19:28:58 CUL_HM Hz.FensterWinmatic level: 100
2017-01-30 19:28:58 CUL_HM Hz.FensterWinmatic lock: unlocked
2017-01-30 19:28:58 CUL_HM Hz.FensterWinmatic motorErr: ok
2017-01-30 19:28:58 CUL_HM Hz.FensterWinmatic 100


Das ist bis auf

2017-01-30 19:31:09 CUL_HM Hz.FensterWinmatic set_open15

identisch.

Ich dachte, das set_open15 könnte ich jetzt mit einem notify aufgreifen (und mir etwas in einem userReading merken)

define Hz.FensterWinmaticNotify notify Hz.FensterWinmatic:set_open15\
setReading Hz.FensterWinmatic timer 900


Das notify wird aber nicht ausgelöst.

Woran liegt das oder hat jemand eine bessere Lösung (z.B. ein Register, in dem die Verweildauer zu finden ist)?

Vielen Dank im Voraus
Lars
Titel: Antw:HM-SEC-WIN open unterscheiden (FHEM/Gerät)
Beitrag von: Otto123 am 31 Januar 2017, 20:49:19
Hallo Lars,

wozu ist der Zeilenwechsel hinter dem Trigger? Ich bin nicht sicher ob der stört. Versuch mal
defmod Hz.FensterWinmaticNotify notify Hz.FensterWinmatic:set_open15 setReading Hz.FensterWinmatic timer 900

Gruß Otto
Titel: Antw:HM-SEC-WIN open unterscheiden (FHEM/Gerät)
Beitrag von: l.with am 31 Januar 2017, 21:08:40
Zitat von: Otto123 am 31 Januar 2017, 20:49:19
Hallo Lars,

wozu ist der Zeilenwechsel hinter dem Trigger? Ich bin nicht sicher ob der stört. Versuch mal
defmod Hz.FensterWinmaticNotify notify Hz.FensterWinmatic:set_open15 setReading Hz.FensterWinmatic timer 900

Gruß Otto
Lieber Otto,

der Zeilenwechsel war zur Lesbarkeit. Tatsächlich funktioniert es ohne!
Vielen Dank! Jetzt kann ich weitermachen (auf 100 reagieren, das userReading prüfen und ggf. nachträglich level 100 900 100 setzen).

Ich habe allerdings auch schon mehrere notify mit Zeilenumbruch und zwei Zeilen, die funktionieren, z.B.

define ArbZ.Notify.FensterKontClosed notify ArbZ.FensterKont:closed \
set ArbZ.FensterKontKrit closed;;\
set ArbZ.FensterOderTuer closed

Warum geht das eine und das andere nicht? Machen zwei Anweisungen den Unterschied?
Das sieht ja nach der Konvention aus, dass eine Anweisung immer in derselben Zeile stehen muss.

Herzliche Grüße
Lars
Titel: Antw:HM-SEC-WIN open unterscheiden (FHEM/Gerät)
Beitrag von: Otto123 am 31 Januar 2017, 21:22:37
Hallo Lars,

frag mich nicht solche Feinheiten  ;) ich bin da immer argwöhnisch und vermeide sowas.

Allerdings ist hier kein Hz.FensterWinmatic:set_open15\ und hier ein ArbZ.FensterKont:closed \ Leerzeichen.
Der integrierte Editor im FHEMWEB nimmt meines Wissen einfach Enter am Ende und schreibt die \ richtig in die cfg.

Gruß Otto
Titel: Antw:HM-SEC-WIN open unterscheiden (FHEM/Gerät)
Beitrag von: l.with am 31 Januar 2017, 21:32:16
Lieber Otto,

sehr fein beobachtet!

Vermutlich "frisst" der Backslash alle "white spaces" im Anschluss, so dass der Parser folgendes sieht:

define Hz.FensterWinmaticNotify notify Hz.FensterWinmatic:set_open15setReading Hz.FensterWinmatic timer 900


Das funktioniert dann eben gar nicht.

Nochmal vielen Dank!

Herzliche Grüße
Lars
Titel: Antw:HM-SEC-WIN open unterscheiden (FHEM/Gerät)
Beitrag von: l.with am 01 Februar 2017, 21:26:10
Hallo zusammen,

so sieht jetzt die funktionierende Lösung aus (hmid mit ###### ersetzt):

define Hz.FensterWinmatic CUL_HM ######
attr Hz.FensterWinmatic devStateIcon 100:fts_window_1w_tilt:lock 0:fts_window_1w locked:secur_locked:open15
attr Hz.FensterWinmatic eventMap /level lock:lock/level 100 ignore 100:open/level 100 900 100:open15/
attr Hz.FensterWinmatic icon fts_window_1w_tilt
attr Hz.FensterWinmatic model HM-SEC-WIN
attr Hz.FensterWinmatic peerIDs 00000000,
attr Hz.FensterWinmatic userReadings timer

define Hz.Notify.FensterWinmaticOpen15 notify Hz.FensterWinmatic:set_open15 \
setReading Hz.FensterWinmatic timer 900
define Hz.Notify.FensterWinmaticLocked notify Hz.FensterWinmatic:locked \
setReading Hz.FensterWinmatic timer off
define Hz.DOIF.FensterWinmaticOpen DOIF ([Hz.FensterWinmatic] eq "100" and [Hz.FensterWinmatic:timer] ne "900") (set Hz.FensterWinmatic open15)


Mit open15 wird das Fenster 15 Minuten angekippt und dann wieder geschlossen und verriegelt.
Das erste Notify erkennt das open15 und setzt timer auf 900.
Das zweite Notify erkennt das Verriegeln und setzt timer auf off.
Mit dem DOIF wird beim öffnen mit der Kipp-Taste an der Winmatic nach dem erreichen von 100% Öffnung geprüft, ob timer gesetzt ist. Wenn nicht, werden nachträglich mit open15 die 15 Minuten eingestellt. Dabei passiert motorisch nichts.

Das ganze lässt sich bestimmt auch mit einem einzigen DOIF erledigen. In das mächtige, aber auch komplexe DOIF habe ich mich aber noch nicht genügend eingearbeitet und finde daher die Aufteilung übersichtlicher.

Herzliche Grüße
Lars