Ich habe einen Homematic Wandtaster ( HM-PB-2-WM55 )
und möchte bei kurzem druck das Rolladen ( Intertechno ) steuern, das funktioniert.
Bei langem Druck soll die Warmwasserzirkulation ( HM-LC-SW1-PL Steckdosenaktor ) anspringen, aber das funktioniert gar nicht. Hab hin unb her probiert und viel gelesen,
aber über long short finde ich kaum etwas.
Hat einer ne Idee ?
define notify_HM_Tast_kuecheoff notify HM_47BD06_Btn_01:Short.* set RolloKueche off
define notify_HM_Tast_kuecheon notify HM_47BD06_Btn_02:Short.* set RolloKueche on
define notify_HM_Tast_kuechelong notify HM_47BD06_Btn_01:long.* set Warmwasserzyrkulation on
define notify_HM_Tast_kuechelong2 notify HM_47BD06_Btn_02:Long.5 set Warmwasserzyrkulation on-for-timer 45
Hi
Du musst auf das Event LongRelease schauen.
Hier ein, etwas älteres Beispiel, um mit einem Notify beide Tastendrücke anzufangen.
6fach1.6fach1_3.(Short|LongRelease) {
if($EVENT =~ m/Short/){
toggleSpeaker();
}else{
toggleMusic();
}}
Heute würde ich es mit einem DOIF machen ;)
Zitat von: andy6090 am 17 Oktober 2016, 12:19:22
Hat einer ne Idee ?
...
Sieht bei mir z.B. so aus...
define n_sz_6fach_Taster_Btn_04_short notify sz_6fach_Taster_Btn_04:Short.* {leiser}
define n_sz_6fach_Taster_Btn_04_long notify sz_6fach_Taster_Btn_04:LongRelease.* set Endstufe_02 off
Warum nicht direkt peeren und in den Aktoren die short bzw long Register entsprechend setzen?
Chipmunk
Schreibweise beachten: Triggern auf long wird nie funktionieren, Long schon ... :D
Das Problem mit HM_47BD06_Btn_01:Long.* set Warmwasserzyrkulation on ist, dass es für alle Long-Events (und davon shippern viele durch, inkl. LongRelease) gefeuert wird, Long.5 könnte gelegentlich "übersehen" werden. Ich hatte da auch schon viel Tebs mit und arbeite auch mit LongRelease. DOIF könnte man mit zwei Zweigen bauen: [HM_47BD06_Btn_01] =~ "Long " (mit Leerzeichen!) als auslösenden Zweig und [HM_47BD06_Btn_01] =~ "LongRelease" als Alternativzweig - ohne attr ... do always, dann löst es nur einmal aus, reagiert aber trotzdem auf alle Long-Events und "kippt" beim Loslassen der Taste auf den Alternativzweig (der keine Aktionen beinhalten muss), um für den nächsten Einsatz bereit zu sein.
In der Tat wäre es aber eine Option, Intertechno per short-Notify schalten zu lassen und den Warmwasser-Aktor zu peeren und danach die Reaktion auf short-Tastendrücke auszuschalten:
set Warmwasserzyrkulation regset shActionType off HM_47BD06_Btn_01
Setzt man statt "off" "jmpToTarget", wird das normale Verhalten wiederhergestellt.
Beim Notify wird sie nur eingeschaltet. Beim Peeren würde sie toggeln. Aber auch das kann man auf "nur ein" ändern.
Wie geht die Warmwasserpumpe dann eigentlich wieder aus?
Erstmal danke für die vielen Vorschläge.
Long.* und long.5 war nur ein Versuch.
Die Warmwasserzyrkulation soll eigentlich auf on-for-timer 45 gesetzt werden.
Ich hatte im inet noch das gefunden :
define notify_name notify
(handsender_name_open:Short.*|handsender_name_open:Long.1[^0-9].*) {
fhem("set haustuer_name open");
}
Nur verstehe ich die eingeklammerte Zahl (0-9) nicht
Peeren wollte ich es noch nicht, da ich noch was ändern wollte und dann muss ich von neu anfangen alles zu Peeren und einzustellen
45 Sekunden reichen aus? Dann würde wie beschrieben peeren und dann noch lgOnTime auf 45 setzen. Dann wird der Aktor automatisch nach 45 Sekunden abschalten. Wenn Du denn mal peeren willst. Ansonsten bin ich auch eher ein Freund des DOIF.
Long.1[^0-9].* : Ich bin da auch Anfänger, aber ich interpretiere, dass nur das Ereignis "Long 1" (der Punkt symbolisiert ein beliebiges Zeichen, auch das Leerzeichen) akzeptiert wird, nicht jedoch Long 11, Long 12 usw, weil das auf "1" folgende Zeichen NICHT 0...9 sein darf, danach ist alles erlaubt (.*).
Ich empfehle Dir ein bisschen Einlernen in Regex, das ist extrem kompliziert, aber auch extrem mächtig.
Last but not least und BTW: Du steuerst eine Warmwasserzirkulation...
VIELEN VIELEN DANK.
Ich habe das erste Notify durch DOIF ersetz und schon läuft es einwandfrei .
So sieht es jetzt aus und 45 sekunden waren doch ein bisschen wenig:
define doif_HM_Tast_kuechelong notify HM_47BD06_Btn_01:Long.* set Warmwasserzyrkulation on-for-timer 75
define doif_HM_Tast_kuechelong2 notify HM_47BD06_Btn_02:Long.* set Warmwasserzyrkulation on-for-timer 75
VOLL COOL
;D ;D ;D ;D ;D ;D ;D ;D ;D
Zitat von: andy6090 am 18 Oktober 2016, 23:06:11
define doif_HM_Tast_kuechelong notify HM_47BD06_Btn_01:Long.* set Warmwasserzyrkulation on-for-timer 75
define doif_HM_Tast_kuechelong2 notify HM_47BD06_Btn_02:Long.* set Warmwasserzyrkulation on-for-timer 75
Ich will Dich nicht bremsen in Deiner Freude, aber das sind immer noch Notifys und keine DOIFs ...
Aba issa egal, wenn's funzt, funzt's.
Ja, das ist mir auch aufgefallen, aber es geht.
Ich habe das mit dem DOIF so gelöst: Ich habe einen HM Geber der ein Tor mit Short und Long schließt und öffnet und über ein FS20 SIG ein Signal ausgegeben wird.
define Toreinfahrt_DOIF DOIF ([Geber1_Btn_01] =~ "Long") (set Toreinfahrt Zu, set Toreinfahrt_Text on) DOELSEIF ([Geber1_Btn_01] =~ "Short") (set Toreinfahrt Auf, set Toreinfahrt_Text off)
attr Toreinfahrt_DOIF do always
Man hätte vielleicht den Geber mit dem Aktor direkt peeren können, aber so gehts auf jeden Fall.
Gruß aus Köln
Norbert
@cocojambo: Das DOIF hat den kleinen Schönheitsfehler, dass es bei Long auf alle Long-Events (einschließlich des LongRelease) reagiert und entsprechend oft den Ausführungsteil abfeuert. Wenn das nicht stört ...
@Pfriemler:
DANKE
gut, dann so:
define Toreinfahrt_DOIF DOIF ([Geber1_Btn_01:"Long"]) (set Toreinfahrt Zu, set Toreinfahrt_Text on) DOELSEIF ([Geber1_Btn_01:"Short"]) (set Toreinfahrt Auf, set Toreinfahrt_Text off)
attr Toreinfahrt_DOIF do always
einverstanden?
Gruß aus Kölle
Norbert