NEWS
Homematic IP Fensterkontakt meldet zweifach Werte
-
Moin zusammen,
Nach Umstellung auf das Homeatic IP System habe ich einen Anwendungsfall, wo ich momentan keine Lösung sehe.
Anwendungsfall:
Recht einfach zu sagen. Wenn ein Fenster geöffnet wird, soll eine Aktion ausgelöst werden.Das script fange ich als so an, damit bei Änderung eine Aktion ausgelöst wird:
on({id: "hmip.0.devices.3014FXXXXXXXXXXXXXXX.channels.1.functionalChannelType"}, function(){Danach Frage ich den Wert in einer if Schleife ab, und wenn WindowOpen = true ist, wird die Aktion ausgelöst.
Nun das Problem ... Der Homematic IP Fensterkontakt meldet beim öffnen immer zwei Werte.
- den Zustand bevor das Fenster geöffnet wurde (also false)
- den Zustand nacdem das Fenster geöffnet wurde (also true), und zwar ca 0.5 Sekunden später
Dieses ist sehr unglücklich, da die if Schleife zuerst auf false reagiert und das true 0,5 Sekunden später verschluckt.
Zum anderen wird beim schließen auch erst ein true und danach ein false gemeldet. Das bedeutet, dass die Aktion auch beim schließen ausgeführt wird.Gibt es evtl. die Möglichkeit in dem oben genannten on({id: "hmip.0.de ... noch den gewünschten zustand mitzgeben?
Oder kann man unten im script angeben, dass die variable mit getState erst später gelesen wird, wenn nur noch der zweite Wert steht?Ich habe hier schon ein wenig gesucht, aber noch nichts passendes gefunden. Wäre echt klasse wenn hier jemande eine Idee hat oder schon mal auf dieses Problem gestoßen ist und gelöst hat.
Beste Grüße,
Leo -
@leo4455 sagte in Homematic IP Fensterkontakt meldet zweifach Werte:
on({id: "hmip.0.devices.3014FXXXXXXXXXXXXXXX.channels.1.functionalChannelType"}, function(){
Wenn du in der Funktion einen Parameter angibst, erhälst du direkt das Objekt und den Datenpunkt (State) mitgeliefert:
on({id: "hmip.0.devices.3014FXXXXXXXXXXXXXXX.channels.1.functionalChannelType"}, function(obj){ if (obj.state.val === true) { ...
-
@leo4455 Zudem könntest du auch schon im
on()
angeben, welchen Wert du haben willst. Das habe ich aber selber noch nie versucht. Hier die ganze Doku:
https://www.iobroker.net/docu/index-81.htm?page_id=5809&lang=de#on_8211_Subscribe_on_changes_or_updates_of_some_state -
@UncleSam , besten Dank fürs feedback.
So ähnlich habe ich es bereits gemacht und frage auf true (also geöffnet) ab.
Das Problem ist dann jedoch, dass die Aktion auch ausgeführt wird, wenn das Fenster geschossen wird, da hier erst true und dann false gemeldet wird.Ich benötige jedoch immer nur den letzten Wert, damit nur beim öffnen und nicht beim schließen die Aktion ausgeführt wird.
Gerade sehe ich auch, dass es das Attribute state.val bei mir im hmip devide nicht gibt. Aktuell frage ich auf windowOpen ab ....
-
@leo4455 sagte:
on({id: "hmip.0.devices.3014FXXXXXXXXXXXXXXX.channels.1.functionalChannelType"}, function(){
Triggere auf Wertänderung.
on('hmip.0.devices.3014FXXXXXXXXXXXXXXX.channels.N.windowOpen', function(dp) { // Triggert bei Wertänderung if(dp.state.val) { // Aktionen bei Öffnen } else { // Aktionen bei Schließen } });
-
@leo4455 sagte in Homematic IP Fensterkontakt meldet zweifach Werte:
Gerade sehe ich auch, dass es das Attribute state.val bei mir im hmip devide nicht gibt. Aktuell frage ich auf windowOpen ab
Das ist eine Eigenschaft vom Objekt das du in der Funktion erhältst. Das hat jeder State. Sonst kannst du ja einfach mal ein
log(JSON.stringify(obj);
machen in der Funktion wie ich sie beschrieben habe. Dann siehst du was da daher kommt. -
Hi @UncleSam,
Habe das gerade einmal so umgesetzt und was soll ich sagen ... PERFEKT!
Es klappt alles wie es soll.
Besten Dank für deine Hilfe