NEWS
Homematic Taster gedrückt halten
-
Hallo zusammen,
ich versuche gerade ein neues Script zu erstellen.
Ziel soll es sein mit einer Homematic Tasterschnittstelle eine Hue oder IKEA Lampe zu dimmen.
Hierzu habe ich mir die Datenpunkte der Tasterschnitstelle angeschaut:
Leider finde ich nicht den richtigen Weg um das gedrückt halten des Tasters auszulesen.
Hat jemand eine Idee wie das klappen könnte ?
Gruß
Michael
-
Betätige doch mal den Taster lange und schaue nach, ob da ein "true" bei Press_long kommt. Ich habe solch einen Taster noch nicht in Betrieb. Genauso sollte beim Loslassen auch bei Press_long_Release irgendwas kommen, oder?
Enrico
-
So, ich habe meinen Taster (HM-RC-2-PBU-FM) mal mit Spannung versorgt und ausprobiert. Also, alle Werte, außer "Short" gehen nur auf "true". Da diese Werte nicht gelöscht werden, würde ich sagen, wenn man darauf reagieren/triggern will, muss auf jeden Fall "aktualisieren" und nicht "ändern" ausgewählt sein.
Die Long-Press Meldung kommt nach der eingestellten Zeit im Taster nur einmal die Cont-Meldung blinkt immer wieder auf, die könnte man also rein theoretisch noch länger als die Long-Press Meldung auswerten.
!
Sollte noch jemand Fragen dazu haben, bitte melden! :ugeek:
Enrico
-
Ok, Taster senden grundsätzlich nur "true" … aber halt immer, wenn man drückt.
Ich hab da grade mal damit bissl experimentiert:
!
subscribe({id: "hm-rpc.0.LEQ123456.1.PRESS_CONT"/*HM-PB-2-WM55-2 LEQ123456:1.PRESS_CONT*/, change:"any"}, function(dp){ dwmlog ("PRESS_CONT "+JSON.stringify(dp),4); }); ! subscribe({id: "hm-rpc.0.LEQ123456.1.PRESS_SHORT"/*HM-PB-2-WM55-2 LEQ123456:1.PRESS_SHORT*/, change:"any"}, function(dp){ dwmlog ("PRESS_SHORT "+JSON.stringify(dp),4); }); ! subscribe({id: "hm-rpc.0.LEQ123456.1.PRESS_LONG"/*HM-PB-2-WM55-2 LEQ123456:1.PRESS_LONG*/, change:"any"}, function(dp){ dwmlog ("PRESS_LONG "+JSON.stringify(dp),4); }); ! subscribe({id: "hm-rpc.0.LEQ123456.1.PRESS_LONG_RELEASE"/*HM-PB-2-WM55-2 LEQ123456:1.PRESS_LONG_RELEASE*/, change:"any"}, function(dp){ dwmlog ("PRESS_LONG_RELEASE "+JSON.stringify(dp),4); }); !
Resultat nach etwa 5s auf den Taster drücken:
! ````
09:18:54.179 [info] javascript.0 script.js.Steuerung.testzeugs: PRESS_LONG {
"id": "hm-rpc.0.LEQ123456.1.PRESS_LONG",
"newState": {
"val": true,
"ts": 1510733934161,
"ack": true,
"lc": 1510733165339,
"from": "system.adapter.hm-rpc.0"
},
"oldState": {
"val": true,
"ts": 1510733611892,
"ack": true,
"lc": 1510733165339,
"from": "system.adapter.hm-rpc.0"
},
"state": {
"val": true,
"ts": 1510733934161,
"ack": true,
"lc": 1510733165339,
"from": "system.adapter.hm-rpc.0"
},
"common": {
"def": false,
"type": "boolean",
"read": false,
"write": true,
"role": "button.long",
"name": "HM-PB-2-WM55-2 LEQ123456:1.PRESS_LONG"
},
"native": {
"CONTROL": "BUTTON.LONG",
"DEFAULT": false,
"FLAGS": 1,
"ID": "PRESS_LONG",
"MAX": true,
"MIN": false,
"OPERATIONS": 6,
"TAB_ORDER": 1,
"TYPE": "ACTION",
"UNIT": ""
},
"name": "HM-PB-2-WM55-2 LEQ123456:1.PRESS_LONG",
"channelId": "hm-rpc.0.LEQ123456.1",
"channelName": "HM-PB-2-WM55-2 LEQ123456:1",
"deviceId": "hm-rpc.0.LEQ123456",
"deviceName": "Taster Test",
"enumIds": ["enum.functions.Taster"],
"enumNames": ["Taster"]
}
09:18:54.180 [info] javascript.0 script.js.Steuerung.testzeugs: PRESS_LONG_RELEASE {
"id": "hm-rpc.0.LEQ123456.1.PRESS_LONG_RELEASE",
"newState": {
"val": true,
"ts": 1510733934168,
"ack": true,
"lc": 1510733165344,
"from": "system.adapter.hm-rpc.0"
},
"oldState": {
"val": true,
"ts": 1510733611908,
"ack": true,
"lc": 1510733165344,
"from": "system.adapter.hm-rpc.0"
},
"state": {
"val": true,
"ts": 1510733934168,
"ack": true,
"lc": 1510733165344,
"from": "system.adapter.hm-rpc.0"
},
"common": {
"def": false,
"type": "boolean",
"read": false,
"write": false,
"role": "button.release",
"name": "HM-PB-2-WM55-2 LEQ123456:1.PRESS_LONG_RELEASE"
},
"native": {
"DEFAULT": false,
"FLAGS": 3,
"ID": "PRESS_LONG_RELEASE",
"MAX": true,
"MIN": false,
"OPERATIONS": 4,
"TAB_ORDER": 4,
"TYPE": "ACTION",
"UNIT": ""
},
"name": "HM-PB-2-WM55-2 LEQ123456:1.PRESS_LONG_RELEASE",
"channelId": "hm-rpc.0.LEQ123456.1",
"channelName": "HM-PB-2-WM55-2 LEQ123456:1",
"deviceId": "hm-rpc.0.LEQ123456",
"deviceName": "Taster Test",
"enumIds": ["enum.functions.Taster"],
"enumNames": ["Taster"]
}(JSON Ausgabe der Objekte lesbar formatiert :)) Bei langem Tastendruck werden PRESS_LONG und PRESS_LONG_RELEASE praktisch gleichzeitig gesendet, und zwar wenn man die Taste LOSLÄSST. Hm … z.B. für Dimmer-Implementationen per Script also eher ungeeignet ... Wieder ne Idee, die solange gut war solang sie gedauert hat ...
-
@dwm:Bei langem Tastendruck werden PRESS_LONG und PRESS_LONG_RELEASE praktisch gleichzeitig gesendet, und zwar wenn man die Taste LOSLÄSST.
Hm … z.B. für Dimmer-Implementationen per Script also eher ungeeignet ... `
Das sollte doch aber auswertbar sein, also Dimmvorgang starten wenn Long_Press aktualisiert wird und stoppen, wenn auch Long_Press_Release aktualisiert wird, oder? Wenn man dann noch einen Dimmvorgang auf ca. 10 sek eingestellt bekommt, sollte das doch auch steuerbar sein. Mir fehlt im Moment die Idee einen Dimmvorgang per Skript (Blockly) zu erstellen.
Ich hätte für solch ein Szenario z.B. einen Eltako-Dimmer FUD61NPN den man dann mit dem Taster schalten/Dimmen könnte.
Enrico
-
Ja, das war die Idee - also quasi die Direktverknüpfung nachbauen.
Klappt aber eben NICHT, weil der PRESS_LONG nicht kommt, wenn der Taster das "LONG" detektiert (also nach 0.4s), sondern nach dem LOSLASSEN der Taste zusammen mit dem LONG_RELEASE.
Nochmal, die beiden Events PRESS_LONG und PRESS_LONG_RELEASE kommen quasi gleichzeitig.
Das ist für so ein Dimmer-Szenario eher … schlecht.
Werner
-
Ich habe jetztmal ein wenig probiert. Man kann sehr wohl dimmen, jedenfalls in meiner Konstellation. (Homematic Taster + Eltako Dimmer)
Ich habe jetzt mal einen Dimmer in fünf Stufen gebastelt, leider nur in Blockly.
Ich habe jetzt erstmal nur hochdimmen sowie voll an und aus drin, runterdimmen sollte aber genau wie hochdimmen gehen, eben auf den anderen Taster. Oder man macht sich die Mühe, noch eine Logik reinzuprogrammieren, die noch die Richtungsumkehr mit einer Variable macht, dann könnte man mit einem Taster zwei Dimmer betätigen:
Hier mal das Blockly:
oberer Teil:
!
unterer Teil:!
Und noch der Export, falls es noch einer probieren will:! ````
<block xmlns="http://www.w3.org/1999/xhtml" id="l9mSvbnid`.+gK#|~I!d" type="on_ext" y="-166" x="488"><mutation items="1"></mutation>
<field name="CONDITION">any</field><value name="OID0"><shadow id="~Nr5]k7D{(vIBO2Mc#Qi" type="field_oid"><field name="oid">hm-rpc.0.NEQ1317257.1.PRESS_LONG_RELEASE</field></shadow></value>
<statement name="STATEMENT"><block id="}w2?tHcJ3s1@-ekU]uT" type="timeouts_cleartimeout"><field name="NAME">timeout</field> <next><block id="q{t5@|/D!e?gM-]h/6UC" type="timeouts_cleartimeout"><field name="NAME">timeout2</field> <next><block id="kPHOzJT7%Q%c6aztTjV|" type="timeouts_cleartimeout"><field name="NAME">timeout3</field> <next><block id="[10cu~PGNET+;/Wf?ElW" type="timeouts_cleartimeout"><field name="NAME">timeout4</field> <next><block id="iOL7ECyI88hdjm_=rY?2" type="timeouts_cleartimeout"><field name="NAME">timeout5</field> <next><block id="c@H-E6
M+gHWZ=7GGwoT" type="timeouts_cleartimeout"><field name="NAME">timeout6</field>
<next><block id="67aw[a^H+ZYqd_`t#jcr" type="timeouts_cleartimeout"><field name="NAME">timeout7</field>
<next><block id="5OwbQdB0J0e^#NJQ|B+I" type="timeouts_cleartimeout"><field name="NAME">timeout8</field></block></next></block></next></block></next></block></next></block></next></block></next></block></next></block></statement></block>Edit: Noch was zur Erläuterung: Ich habe den unteren Teil drin, weil meine LEDs erst bei über 25% Dimmer angehen, deshalb bei Dimmer=0% gleich ein Sprung auf 30% sonst plus 20%. Enrico
-
Strange …
Nur sicherheitshalber ... wir reden aber schon vom gleichen Verhalten, oder?
Also Du drückst den Taster, und solange Du den gedrückt hältst, dimmts hoch.
Beim Loslassen wird der erreichte Level gehalten.
Mit dem Verhalten des Homematic Tasters, das ich bei mir sehe, dürfte das nicht funktionieren ...
Hm.
Der Taster ist bei mir ein HM-PB-2-WM55-2, mit Firmware 1.4 ... nur an der Zentrale angelernt, nicht verknüpft.
Eventuell liegt's an der Taster-Version?
-
@dwm:Nur sicherheitshalber … wir reden aber schon vom gleichen Verhalten, oder?
Also Du drückst den Taster, und solange Du den gedrückt hältst, dimmts hoch.
Beim Loslassen wird der erreichte Level gehalten. `
Genauso, ich habs ja ausprobiert. Mit 20% Schritten und jeweils 1sek timeout dazwischen, hat das eben ca. 5sek gedauert, bis das Licht voll hochgedimmt war. Sinnvoll wären wohl eher 10% Schritte, das muss ich mal noch probieren.
Ich habe den 230V Taster HM-RC-2-PBU-FM von HM, es kann schon sein, dass sich Batterietaster und Stromtaster anders verhalten. Andererseits hast du aber auch geschrieben nahezu praktisch zeitgleich, vielleicht reicht diese sehr kurze Zeit aus um da einen UNterschied zu machen.
Dein log ist so lang, solange kann ich mir die Zahl nicht merken, bin schon alt!
Aber du kannst ja mal ein kurzes Skript schreiben, dass nur der Long_Press und der Long_Press_Release geloggt werden. Ich mache das mal von meinem Taster.
Enrico
-
So ich habe jetzt mal auf die Schnelle ein log eingebaut:
! ```
2017-11-15 17:52:29.336 - [32minfo[39m: javascript.0 Start javascript script.js.Eltako_Dimmer 2017-11-15 17:52:29.358 - [32minfo[39m: javascript.0 script.js.Eltako_Dimmer: registered 5 subscriptions and 0 schedules 2017-11-15 17:52:55.673 - [32minfo[39m: javascript.0 script.js.Eltako_Dimmer: 17:52:55.672Press_Short_2 2017-11-15 17:52:55.695 - [32minfo[39m: javascript.0 script.js.Eltako_Dimmer: 17:52:55.695Dimmer0 2017-11-15 17:53:05.067 - [32minfo[39m: javascript.0 script.js.Eltako_Dimmer: 17:53:05.067Press_Short_1 2017-11-15 17:53:05.087 - [32minfo[39m: javascript.0 script.js.Eltako_Dimmer: 17:53:05.086Dimmer100 2017-11-15 17:53:20.062 - [32minfo[39m: javascript.0 script.js.Eltako_Dimmer: 17:53:20.062Press_Short_2 2017-11-15 17:53:20.079 - [32minfo[39m: javascript.0 script.js.Eltako_Dimmer: 17:53:20.079Dimmer0 2017-11-15 17:53:24.709 - [32minfo[39m: javascript.0 script.js.Eltako_Dimmer: 17:53:24.709Press_Long 2017-11-15 17:53:24.725 - [32minfo[39m: javascript.0 script.js.Eltako_Dimmer: 17:53:24.723Dimmer30 2017-11-15 17:53:25.728 - [32minfo[39m: javascript.0 script.js.Eltako_Dimmer: 17:53:25.728Dimmer50 2017-11-15 17:53:26.722 - [32minfo[39m: javascript.0 script.js.Eltako_Dimmer: 17:53:26.722Dimmer70 2017-11-15 17:53:26.874 - [32minfo[39m: javascript.0 script.js.Eltako_Dimmer: 17:53:26.874Press_Long_Release 2017-11-15 17:53:35.058 - [32minfo[39m: javascript.0 script.js.Eltako_Dimmer: 17:53:35.057Press_Long 2017-11-15 17:53:35.089 - [32minfo[39m: javascript.0 script.js.Eltako_Dimmer: 17:53:35.088Dimmer90 2017-11-15 17:53:36.068 - [32minfo[39m: javascript.0 script.js.Eltako_Dimmer: 17:53:36.067Dimmer100 2017-11-15 17:53:39.360 - [32minfo[39m: javascript.0 script.js.Eltako_Dimmer: 17:53:39.360Press_Long_Release 2017-11-15 17:53:46.483 - [32minfo[39m: javascript.0 script.js.Eltako_Dimmer: 17:53:46.483Press_Short_2 2017-11-15 17:53:46.496 - [32minfo[39m: javascript.0 script.js.Eltako_Dimmer: 17:53:46.495Dimmer0[/code]
! Is leider nur der Auszug aus der log-Datei direkt vom log-Ordner, das Erstellen eines Auszuges direkt aus dem log funktioniert irgendwie nicht, das ging aber schonmal!? :?:
! Enrico -
Ja. Definitiv anderes Verhalten der Taster.
Das obige Script loggt übrigens nur die Tastenevents, halt mit dem kompletten Zustand der Datenpunkte als JSON.
Egal, ich hab das JSON wieder rausgeschmissen, machts nur unübersichtlich.
Nach 5s Drücken des Tasters:
06:57:08.067 [info] javascript.0 script.js.Steuerung.testzeugs: PRESS_LONG 06:57:08.068 [info] javascript.0 script.js.Steuerung.testzeugs: PRESS_LONG_RELEASE
Zeitunterschied nach IOBroker 1ms! Und zwar gesendet beim Loslassen des Tasters.
Heißt also (für mich):
Wenn man von HM-Taster einen Nicht-HM Dimmer steuern will, muss man einen 230V Taster (HM-RC-2-PBU-FM) nehmen, nur so kann man über ein IOBroker Programm das gleiche Verhalten erreichen wie bei der Homematic Direktverknüpfung.
Mit dem Batterie-Wandtaster (HM-PB-2-WM55-2) klappts NICHT.
HM-Taster auf HM-Dimmer ist sowieso die Direktverknüpfung schlauer, weil man dann den Dutycycle der CCU nicht zumüllt.
Ja, wieder was gelernt
Werner
-
@dwm:Heißt also (für mich):
Mit dem Batterie-Wandtaster (HM-PB-2-WM55-2) klappts NICHT.
Werner `
hast du mal probiert beim WM55 bei den Kanälen die AES Verschlüsselung zu deaktivieren? -
Hm, nein. Weiss ehrlich gesagt gar nicht, ob die Verschlüsselung aktiviert ist,
aber das ist ein guter Punkt.
Muss heut Abend mal schaun.
-
@dwm:Hm, nein. Weiss ehrlich gesagt gar nicht, ob die Verschlüsselung aktiviert ist,
aber das ist ein guter Punkt.
Muss heut Abend mal schaun.
`
Zusätzlich hilft vielleicht in der CCU leere Programme mit all den Kanälen zu erzeugen.
Ich kann leider das nicht ausprobieren weil ich 900km entfernt von meiner Installtion bin. Verwende openhab.
-
Hatte auch bei mir das Problem.
Die Verschlüsselung muss deaktiviert sein.
-
Stimmt, hab das auch mittlerweile entdeckt, hab den thread vergessen. Danke
-
-
Ich habe diesen Vorschlag zum abdimmen.
Dieses Script funktioniert bei mit jedoch nur mit einem Trigger (ohne release), weil ich bei mir das Schlafzimmer automatisch abdimmen lasse. Deshalb wirds auch bei mir so langsam dunkel, aber man kann ja die Zeiten und Schritte ändern.
-
Hast du die "CONT" option probiert.
Das CONT kommt periodisch. Ich habe (openhab) damit das dimmen realisiert, indem ich bei jedem CONT einen 5% Schritt die Helligkeit erhöhe.
Die Funktion des Tasters ist:
Kurz -> EIN/AUS (100%/0%)
Lang -> Hochdimmen in 5% basierend auf CONT events.
Gruss