Welchen Code verwendet man, damit Fhem auf eine lange gedrückte Taste (Taste ist für 1-3 Sekunden gedrückt) und/oder auf einen Doppelklick (2x die gleiche Taste gedrückt innerhalb z.B. einer Sekunde) reagiert, wenn es sich um einen Enocean Taster (z.B. FT55) handelt?
Hallo,
so wie für jeden anderen Sensor auch.
notify oder sequence (wenn ich das richtig im Kopf habe).
Das nötige regexp findest du über den EventMonitor raus.
Grüße
Hallo!
Vielen Dank für die rasche Antwort.
EnOcean Taster definieren:
define EnO_switch_FEFF1111 EnOcean FEFF1111
attr EnO_switch_FEFF1111 IODev TCM310_0
attr EnO_switch_FEFF1111 eventMap AI:aus A0:ein BI:off B0:on
attr EnO_switch_FEFF1111 model FT55
attr EnO_switch_FEFF1111 room EnOcean
attr EnO_switch_FEFF1111 subType switch
Doppelklick:
define sq_doppelklick sequence EnO_switch_FEFF1111:on 0.5 EnO_switch_FEFF1111:on
define n_doppelklick notify sq_doppelklick:trigger set lampe2 on
Wie triggere ich nun, wenn der Taster nur einmal gedrückt wird?
Untenstehende notify-Zeile löst ja auch bei einem Doppelklick aus (2x ... gewünscht wäre jedoch, dass nur bei einfachem Klick ausgelöst wird)
define n_einmalklick notify EnO_switch_FEFF1111:on set lampe1 on
Guten Morgen,
ZitatUntenstehende notify-Zeile löst ja auch bei einem Doppelklick aus (2x ... gewünscht wäre jedoch, dass nur bei einfachem Klick ausgelöst wird)
Hast du mittlerweile eine Lösung für das Problem gefunden? Würde mich auch interessieren...
Gruss
Auch wenn ich nicht 50watt bin, der sich aber sicherlich noch meldet, würde ich folgendermaßen vorgehen:
Im notify für 1xKlick ein "at" definieren, dass nach 3 Sekunden erst den Schalt-Befehl für 1xKlick ausführt.
In notify für 2xKlick (welches durch sequence ausgelöst wird) dieses "at" für 1xKlick löschen und dann den Schaltbefehl für 2xKlick ausführen.
Mir fehlt aber ein wenig der praktische Hintergrund....
Für den Doppelklick bitte sequence in der Commandref anschauen.
@marvin78: Das Problem ist anscheinend, dass alles durch einen Taster ausgelöst werden soll. Wüsste aber nicht wie dies allein durch sequence lösbar ist.
Wie könnte ich denn das Loslassen der Taste mittels notify feststellen?
define temptest notify Schalter1:released set Alles on
funktioniert bei mir nicht, auch wenn im event monitor
2014-07-22 21:58:24 EnOcean Schalter1 buttons: released
erscheint. So könnte ich die von krikan vorgeschlagene Lösung mit "at", sequence und wieder löschen umsetzen.
Grüsse
ZitatSchalter1 buttons: released
Warum nimmst Du nicht das Event Schalter1:on wie oben im Thread angegeben?
Edit:
Es funktioniert nicht, da Dein Event im notify falsch ist:
Ich möchte eben lange Tastendrücke erkennen und mit deiner Idee umsetzen, nicht Doppelklicks.
Ich habe verschiedene Varianten ausprobiert, wie müsste es denn genau heissen?
notify Schalter1 buttons: released funktioniert ja auch nicht...
Trockenübung, da ich gerade nicht testen kann:
define tmptest notify Schalter1:buttons:.*released xyz
Vorsicht: Event "..buttons: released" hat bei meinen Tastern den Nachteil, das es beim Loslassen 2x gesendet wird. Siehe mein Beispiel-Log hier: http://forum.fhem.de/index.php/topic,21201.msg164872.html#msg164872
Nach nochmaligen Überdenken:
Da es Dir um die Tastendruckdauer (bspw. Zeitdifferenz zwischen Events :A0 und :buttons: released) geht, würde ich eher nicht mit sequence arbeiten. Stattdessen im notify die Zeitdifferenzen aus ReadingsTimestamp(...) (vgl. commandref Perl Specials) auswerten und mit if-Abfrage darauf reagieren. Sobald ich wieder testen kann, probiere ich es mal.
Vielleicht gibt es aber noch andere Ideen...
Für einen Taster mit 1 Wippe funktioniert im Kurztest zur Unterscheidung von Kurz- und Langklick:
define klickdauer notify EnO_switch_:buttons:.released {\
my $start=time_str2num(ReadingsTimestamp("%NAME", "channelB", 0));;\
my $stop=time_str2num(ReadingsTimestamp("%NAME", "buttons", 0));;\
if ($stop-$start<=1) {fhem "setstate Raffstore 50"} else {fhem "setstate Raffstore 100"}}
Bei einem Taster mit 2 Wippen müsste man das weiter ausbauen...
Super, vielen Dank!
Ich hab's bis jetzt so gelöst:
define Schalter1BIlongclick notify Schalter1:BI { fhem "define Test at +00:00:01 set Alles off" }
define sSchalter1BIlongclick sequence Schalter1:BI 1 Schalter1:buttons:.*released
define nSchalter1BIlongclick notify sSchalter1BIlongclick:trigger { fhem "delete Test" }
Deine (zweite) Lösung scheint mir aber eleganter.
Halte Deine Lösung für besser. Meine hat in der derzeitige Form die "Nebenwirkung", dass Sie B0 und BI-Events nicht unterscheidet. Hierzu müsste das notify weiter mit Abfragen für BO und BI ausgebaut werden, dann wird es mMn zu kompliziert...
Für Einfach- versus Doppelklick finde ich Andre´s (justme1968) Ansatz hier http://forum.fhem.de/index.php/topic,12965.msg186119.html#msg186119 umsetzbar.
"Doppelklick"
Habe Andre´s Vorschlag zur Unterscheidung von Einfach- und Doppelklick einmal umgesetzt. Folgenden Code für eine Tasterseite (B0) hat bei mir ohne erkennbare Nebenwirkungen funktioniert:
define sDoppelklickB0 sequence Taster2:channelB:.B0 1 Taster2:channelB:.B0
define nDoppelklickB0 notify DoppelklickB0:trigger { fhem "set Lampe off" }
define wEinfachklickB0 watchdog Taster2:channelB:.B0 00:00:01 SAME set Lampe on;; trigger wEinfachklickB0 .
attr wEinfachklickB0 regexp1WontReactivate 1
"Taste lange gedrückt"
Für die Unterscheidung von Kurz- und Langklick auf Timestamp-Basis habe ich meinen Code überarbeitet/korrigiert. Beide Tasterseiten (B0/BI) unterscheiden hiermit die Tastdauer:
define nklickdauer notify Taster:buttons:.released {\
my $start=time_str2num(ReadingsTimestamp("$NAME", "channelB", 0));;\
my $stop=time_str2num(ReadingsTimestamp("$NAME", "buttons", 0));;\
if (ReadingsVal("$NAME","channelB",0) eq "B0"){\
if ($stop-$start<=1) {fhem "set Raffstore 50"} else {fhem "set Raffstore 100"}}\
else {if ($stop-$start<=1) {fhem "set Raffstore 20"} else {fhem "set Raffstore 80"}}\
}
Gleichen Zweck erfüllt auch der Code von zfranz für eine Tasterseite (BI) (http://forum.fhem.de/index.php/topic,22289.msg186089.html#msg186089):
define Schalter1BIlongclick notify Schalter1:BI { fhem "define Test at +00:00:01 set Alles off" }
define sSchalter1BIlongclick sequence Schalter1:BI 1 Schalter1:buttons:.*released
define nSchalter1BIlongclick notify sSchalter1BIlongclick:trigger { fhem "delete Test" }
Wenn noch jemand Verbesserungsvorschläge/andere Ideen hat, dann bitte anführen.
Zitat von: krikan am 25 Juli 2014, 21:38:15
Für die Unterscheidung von Kurz- und Langklick auf Timestamp-Basis habe ich meinen Code überarbeitet/korrigiert. Beide Tasterseiten (B0/BI) unterscheiden hiermit die Tastdauer:
define nklickdauer notify Taster:buttons:.released {\
my $start=time_str2num(ReadingsTimestamp("$NAME", "channelB", 0));;\
my $stop=time_str2num(ReadingsTimestamp("$NAME", "buttons", 0));;\
if (ReadingsVal("$NAME","channelB",0) eq "B0"){\
if ($stop-$start<=1) {fhem "set Raffstore 50"} else {fhem "set Raffstore 100"}}\
else {if ($stop-$start<=1) {fhem "set Raffstore 20"} else {fhem "set Raffstore 80"}}\
}
Ich habe das heute mal mit meinem FT55 ausprobiert und stieß dabei auf das Problem, dass die auch noch vorhandene A-Seite vergessen wurde (also A0/AI), das führt nämlich dazu, dass das notify auch reagiert, wenn die A-Seite und nicht die B-Seite gedrückt wurde und dann eben einen langen Tastendruck annimmt (das abgefragte released-Event wird ja auch beim Drücken der A-Hälfte des Tasters erzeugt). Ich habe den Code nun wie folgt verändert und damit eine Tasterfunktion nach meinen Wünschen erhalten, bei denen sich alle vier möglichen Tasteraktionen eines FT55 je noch einmal nach lang und kurz unterscheiden und sich damit je Taster somit de facto acht Schaltaufträge unterscheiden lassen:
define nklickdauer notify Taster:buttons:.released {\
my $startA=time_str2num(ReadingsTimestamp("$NAME", "channelA", 0));;\
my $startB=time_str2num(ReadingsTimestamp("$NAME", "channelB", 0));;\
my $stop=time_str2num(ReadingsTimestamp("$NAME", "buttons", 0));;\
if($startB>$startA) { \
if (ReadingsVal("$NAME","channelB",0) eq "B0"){\
if ($stop-$start<=1) {fhem "set Raffstore 50"} else {fhem "set Raffstore 100"}}\
else {if ($stop-$start<=1) {fhem "set Raffstore 20"} else {fhem "set Raffstore 80"}}\
} else { \
if (ReadingsVal("$NAME","channelA",0) eq "A0"){\
if ($stop-$start<=1) {fhem "set AktionA0 kurz"} else {fhem "set AktionA0 lang"}}\
else {if ($stop-$start<=1) {fhem "set AktionAI kurz"} else {fhem "set AktionAI lang"}}\
} \
}
Einziger Schönheitsfehler ist nun aus meiner Sicht die geringe zeitliche Auflösung von ReadingsTimestamp (laut Commandref wohl nur sekundengenau - stimmt das?). Wünschenswert wäre für mich eine zumindest millisekundengenaue Auflösung, sodass bspw. auch ein halbsekündiger Tastendruck bereits als lang interpretiert werden kann, bei der aktuellen if-Abfrage muss man eher zwei Sekunden drücken, um wirklich sicher zu sein, dass die Aktion für langen Tastendruck ausgeführt wird. Gibt es eventuell eine Möglichkeit, die Genauigkeit von ReadingsTimestamp in den Millisekundenbereich zu erhöhen? Als Alternative wäre auch vorstellbar, dass die Aktion für langen Tastendruck nicht vom released-Event abhängt, sondern bereits ausgeführt wird, wenn die Taste nur lang genug gehalten wurde. Ich denke, das könnte man dann mit einer Kombination aus einem notify, welches ein at einrichtet (+00:00:01) sowie einer Modifikation des obigen Codes erreichen, der dann nur noch die durchzuführenden Aktionen für kurze Tastendrücke mit einem delete des zuvor angelegten ats enthält. Auch hierfür wäre aber eine größere Präzision als eine Sekunde wünschenswert.
VG
crispinus
Nun aber mal halblang. ;) Das haben wir nicht vergessen. Es entsprach nicht den Anforderungen. Wenn man das mit einem Einfachtaster macht ist, ist dass vollkommen korrekt so. Wenn Du natürlich das auf einem Doppeltaster haben willst, dann muss man es -wie von Dir getan- anpassen. Danke für Deinen Code.
Zu Deiner zeitlichen Auflösung kann ich nicht wirklich etwas beitragen.
Frage mich nur, ob man das nicht auch über triggerPartial irgendwie hinbekommen könnte.
http://forum.fhem.de/index.php/topic,26772.msg198050.html#msg198050
Gruß, Christian
Zitat von: krikan am 12 September 2014, 23:51:14
Nun aber mal halblang. ;) Das haben wir nicht vergessen. Es entsprach nicht den Anforderungen. Wenn man das mit einem Einfachtaster macht ist, ist dass vollkommen korrekt so. Wenn Du natürlich das auf einem Doppeltaster haben willst, dann muss man es -wie von Dir getan- anpassen. Danke für Deinen Code.
Also am Anfang des Threads war aber auch nicht davon die Rede, dass der FT55 mit der Einfachwippe betrieben wird ;). Aber ist ja auch egal - jetzt steht hier für Leute wie mich, die erst beim Ausprobieren drauf kommen, warum auf einmal alles so komisch reagiert, hier noch die Lösung für alle, die den FT55 mit Doppelwippe benutzen.
Zitat von: krikan am 12 September 2014, 23:51:14
Zu Deiner zeitlichen Auflösung kann ich nicht wirklich etwas beitragen.
das hab ich im Code zwischenzeitlich mal nachgeschaut und dabei verifiziert, dass die Timestamps tatsächlich nur Sekunden und nichts kleineres halten, eine Modifikation wäre extrem aufwändig und sicherlich auch mit zahlreichen Inkompatibilitäten in anderen Modulen verbunden. Wenn man das WIRKLICH möchte, könnte man wahrscheinlich readingsBeginUpdate so verändern, dass neben TIME auch noch MILLITIME (o.ä.) gespeichert wird, worin dann eine um Millisekunden erweiterte Zeit enthalten ist. Entsprechend würde man dann ein ReadingsTimestampMillis ergänzen. So könnte man das zumindest für neuen Code, der die Präzision benötigt, recht einfach verwenden.
Zitat von: krikan am 12 September 2014, 23:51:14
Frage mich nur, ob man das nicht auch über triggerPartial irgendwie hinbekommen könnte.
http://forum.fhem.de/index.php/topic,26772.msg198050.html#msg198050
Das sieht im Prinzip gar nicht schlecht aus, zumal hier ja auch eine bessere zeitliche Auflösung geboten wird. Als zusätzlichen Benefit hätte man hier die von mir eigentlich favorisierte Lösung, dass bei langem Tastendruck schon geschaltet wird, bevor der Button losgelassen wird (nämlich bei Ablauf des "Timeouts" für einen langen Tastendruck), das entspricht der von mir als sehr intuitiv empfundenen Funktionsweise meiner HomeMatic-Funkschalter. Ein Codebeispiel würde sich dann wohl so lesen:
define sKurzerLangerDruck sequence Taster:A0 0.5 Taster:buttons:.released
attr sKurzerLangerDruck triggerPartial
define nKurzerDruck notify sKurzerLangerDruck:trigger set Lampe an
define nLangerDruck notify sKurzerLangerDruck:partial_1 set Lampe aus
Hier müsste nach meinem Verständnis (werde das morgen dann auch mal testen) bei kurzem Druck (also A0-Event und binnen 500ms released-Event) die Lampe eingeschaltet werden (im Moment des Loslassens des Tasters) und bei langem Druck (A0-Event und released-Event jenseits des Timeouts) die Lampe ausgeschaltet werden - aber eben schon in dem Moment, wenn das Timeout erreicht ist, und nicht erst, wenn ich den Taster los lasse. Ich als Benutzer bekomme also signalisiert, wann ich lange genug für einen langen Tastendruck gedrückt habe und musst nicht im Kopf die Sekunden zählen ^^.
VG
crispinus
Zitat von: crispinus am 13 September 2014, 00:27:12
das hab ich im Code zwischenzeitlich mal nachgeschaut und dabei verifiziert, dass die Timestamps tatsächlich nur Sekunden und nichts kleineres halten, eine Modifikation wäre extrem aufwändig und sicherlich auch mit zahlreichen Inkompatibilitäten in anderen Modulen verbunden. Wenn man das WIRKLICH möchte, könnte man wahrscheinlich readingsBeginUpdate so verändern, dass neben TIME auch noch MILLITIME (o.ä.) gespeichert wird, worin dann eine um Millisekunden erweiterte Zeit enthalten ist. Entsprechend würde man dann ein ReadingsTimestampMillis ergänzen. So könnte man das zumindest für neuen Code, der die Präzision benötigt, recht einfach verwenden.
Habe gerade nochmal nachgesehen und muss mich korrigieren, es wird von readingsEndUpdate mit dem Key "t" auch der direkte, unformatierte Wert von gettimeofday() hinterlegt (dieser enthält auch Millisekunden), es scheint nur noch keine einfache Zugriffsfunktion wie das ReadingsTimestamp für den Key "TIME" zu geben. Gerade für solche Zeitrechnungen wie im obigen Code wäre das aber wohl ganz praktisch. Es scheint auch nicht so richtig schwer zu ergänzen - eigentlich muss man ja nur ReadingsTimestamp kopieren und stattdessen den Inhalt von "t" zurückgeben. Ein passender Name wäre dann analog zu den im Quelltext gewählten assoziativen Arraykeys ReadingsTime.
sub
ReadingsTime($$$)
{
my ($d,$n,$default) = @_;
if(defined($defs{$d}) &&
defined($defs{$d}{READINGS}) &&
defined($defs{$d}{READINGS}{$n}) &&
defined($defs{$d}{READINGS}{$n}{t})) {
return $defs{$d}{READINGS}{$n}{t};
}
return $default;
}
damit sollte man dann auch problemlos im Millisekundenbereich rechnen können, und der Umweg über time_str2num entfällt auch.
Der Haken an ReadingsTime ist, dass {t} nur fuer userReadings existiert.
Da die meisten kein Handbuch lesen, wuerde das zu Verwirrung fuehren.
Habe den Code für die Tastendruckdauer-Unterscheidung über sequence von crispinus mal probiert. Das funktioniert bei mir ohne erkennbare Probleme. Finde ich persönlich bisher die beste Lösung für Druckdauerunterscheidung.
@crispinus: Wenn Du es auch noch testet, gib bitte eine kurze Rückmeldung. Danke.
@Rudi: Danke für die Erweiterung von sequence um triggerPartial
Zitat von: rudolfkoenig am 13 September 2014, 08:41:39
Der Haken an ReadingsTime ist, dass {t} nur fuer userReadings existiert.
Da die meisten kein Handbuch lesen, wuerde das zu Verwirrung fuehren.
Stimmt. Wobei man das doch eigentlich problemlos auf alle Readings erweitern könnte, ohne die Kompatibilität zu gefährden. Es wäre dann entsprechend eine Modifikation von setReadingsVal erforderlich, sowie die Übergabe eines zusätzlichen Argumentes in Form der unformatierten gettimeofday()-Ausgabe. Da setReadingsVal nur intern in fhem.pl genutzt wird sowie in drei anderen Modulen (10_SOMFY, 00_KM271 sowie 58_GPIO4 in contrib) sollte sich das mit überschaubarem Aufwand einbauen lassen. Von readingsBeginUpdate wird ja immer eine time in .updateTime gespeichert, unabhängig davon, ob userReadings oder andere geupdatet werden, das müsste man dann in readingsBulkUpdate bloß entsprechend zusätzlich verwerten, etwa so:
sub
setReadingsVal($$$$$)
{
my ($hash,$rname,$val,$ts,$numtime) = @_;
$hash->{READINGS}{$rname}{VAL} = $val;
$hash->{READINGS}{$rname}{TIME} = $ts;
$hash->{READINGS}{$rname}{t} = $numtime;
}
# Call in readingsBulkUpdate()
setReadingsVal($hash, $reading, $value, $hash->{".updateTimestamp"}, $hash->{".updateTime"});
Oder gibt es da irgendeinen Haken, den ich gerade übersehe?
Ja, alle Module, die READINGS direkt aendern. Und abspeichern muss man auch, also setstate anpassen. Und der Uebergang von alten Statefile auf Neu muss auch irgendwie geloest werden.
Abgesehen davon halte ich den Nutzen dieser Feature fuer marginal. Und wenn der Benutzer anfangen muss, mit solchen Werten rumzurechnen, dann ist was grundsaetzlich kaputt, und sollte es an der richtigen Stelle gefixed werden.
Zitat von: krikan am 13 September 2014, 12:11:21
Habe den Code für die Tastendruckdauer-Unterscheidung über sequence von crispinus mal probiert. Das funktioniert bei mir ohne erkennbare Probleme. Finde ich persönlich bisher die beste Lösung für Druckdauerunterscheidung.
@crispinus: Wenn Du es auch noch testet, gib bitte eine kurze Rückmeldung. Danke.
Bei mir funktionierts auch genau so wie gewünscht :).
Danke für Deine Rückmeldung. Code ist dort gelandet: http://www.fhemwiki.de/wiki/EnOcean-PTM-210-Taster#.22Taste_lange_gedr.C3.BCckt.22_und_.22Taste_kurz_gedr.C3.BCckt.22_unterscheiden
Natürlich auch der Hinweis, das es für Doppeltaster hier im Thread auch etwas gibt :).
Gruß, Christian
Hallo liebe FHEMler,
ich habe nach dem Post von krikan eine Taster-Doppelklick-Steuerung realisiert (steht auch so in der Wiki). Diese funktionierte auch bis vor kurzem.
Bevor ich jetzt den ganzen Code poste wollte ich eine Frage vorab abklären.
Wie wird das erkennen eines Einzelklicks beim zweiten Klick des Doppelklicks verhindert?
Das passiert seit kurzem bei meiner Konfig.
Danke.
Hallo!
Kannst Du bitte den betroffenen Code posten und die Ausgabe "list <device>" des zugehörigen Tasters. Ich würde mir das lieber anhand des betroffenen Codes anschauen, bevor ich in die falsche Richtung renne.
Gruß, Christian
Hallo und schon mal vielen Dank Christian,
hier der Code:
define doppelclick_Taster_Schlafzimmer_2 sequence Taster_Schlafzimmer_2:channelB:.B0 1 Taster_Schlafzimmer_2:channelB:.B0
define a_doppelclick_Taster_Schlafzimmer_2 notify doppelclick_Taster_Schlafzimmer_2:trigger set Rollladen_Schlafzimmer up
define a_einfachclick_Taster_Schlafzimmer_2 watchdog Taster_Schlafzimmer_2:channelB:.B0 00:00:02 SAME set
Wandleuchte_Schlafzimmer_Jessica 25;;set Rollladen_Schlafzimmer down;; trigger a_einfachclick_Taster_Schlafzimmer_2 .
attr a_einfachclick_Taster_Schlafzimmer_2 regexp1WontReactivate 1
und hier die Devicelist:
Internals:
DEF 00001041
IODev TCM_ESP2_0
LASTInputDev TCM_ESP2_0
MSGCNT 60
NAME Taster_Schlafzimmer_2
NR 113
NTFY_ORDER 50-Taster_Schlafzimmer_2
STATE B0
TCM_ESP2_0_MSGCNT 60
TCM_ESP2_0_TIME 2016-11-18 13:12:32
TYPE EnOcean
Readings:
2016-11-18 13:12:32 buttons released
2016-11-18 13:12:31 channelB B0
2016-11-18 13:12:31 state B0
2016-07-26 19:00:34 teach RPS teach-in accepted EEP F6-02-01 Manufacturer: no ID
Helper:
Attributes:
IODev TCM_ESP2_0
eep F6-02-01
manufID 7FF
room EnOcean
subType switch
teachMethod RPS
Hallo!
Danke und ich kann Dein Problem nachstellen. Seit dieser Aenderung https://forum.fhem.de/index.php/topic,60414.msg518405.html#msg518405 funktioniert der Code so nicht mehr. Das Verhalten des watchdogs mit gesetztem Attribut regexp1WontReactivate hat sich geaendet. Wenn Du auf die vorherige Version von 91_watchdog.pm zurückgehst, funktioniert es wieder. Zumindest bei mir.
Mit der aktuellen Version bekomme ich es auf die Schnelle nicht gelöst und bin mir unsicher, ob man das als Fehler sehen sollte oder nicht. Die Logik hat sich nach meinem Verstaendnis insoweit geaendert, dass der 2. Tastendruck beim Doppelklick den watchdog zurücksetzt und jetzt gleichzeitig einen weiteren Tastendruck wegen SAME innerhalb einer Sekunde erwartet, damit der watchdog-Befehl nicht ausgeführt wird. Ich habe aber beim Grübeln darüber schon einen Knoten im Kopf bekommen :-[. Also müsste jemand anderes bitte ggfs. einsteigen.
Für Dich als kurzfristige und für mich einfacher verstaendliche Lösung: Stelle es auf die neuere Lösungs-Variante mit sequence und Nutzung von triggerpartial um.
Gruß, Christian
ZitatFür Dich als kurzfristige und für mich einfacher verstaendliche Lösung: Stelle es auf die neuere Lösungs-Variante mit sequence und Nutzung von triggerpartial um.
Das wuerde ich auch begruessen. Wenn ich den watchdog reparieren soll/muss, dann bitte eine Liste der Events hier anhaengen, und das erwartete Verhalten auch kurz beschreiben.
Vielen dank für die Hilfe.
Ich werde es auf sequence und Nutzung von triggerpartial umstellen.
Das sollte dann wohl so aussehen:
define Sequenz sequence Taster_Schlafzimmer_2:channelB:.B0 0.5 Taster_Schlafzimmer_2:channelB:.B0
attr Sequenz triggerPartial
define einfachclick_Taster_Schlafzimmer_2 notify Sequenz:partial_1 set Wandleuchte_Schlafzimmer_Jessica 25;;set Rollladen_Schlafzimmer down
define doppelclick_Taster_Schlafzimmer_2 notify Sequenz:partial_2 set Rollladen_Schlafzimmer up
werde das heute Abend mal testen.
Also ein Tastendruck wird erkannt, ein doppelter Tastendruck leider nicht.
Hat jemand auf die schnelle eine Idee?
Danke.
define doppelclick_Taster_Schlafzimmer_2 notify Sequenz:partial_2 set Rollladen_Schlafzimmer up
ersetzen durch
define doppelclick_Taster_Schlafzimmer_2 notify Sequenz:trigger set Rollladen_Schlafzimmer up
Danke jetzt läufts.
Das war wieder mal ein Fall von blindem und hirnlosem copy-and-paste von mir.
Mit trigger funktioniert es...
Hallo
ich bin gerade noch an Anfang mit Fhem aber bist jetz lief es Ziemlich gut und hatte alles hinbekommen aber das mit den Lang und Kurz Tasten grieg ich nicht hin
Zu mein Problem ich habe Fhem und dann per I2C_PCF8574 als ein und Ausgangs Karten von Horter.de
ich habe das Script von crispinus und viele andere Probiert aber bei crispinus ging wenigstens kurz zu schalten zu mein Befehlen
define sKurzerLangerDruck sequence E38.1:on 0.5 E38.1:on:.released
attr sKurzerLangerDruck triggerPartial
define nKurzerDruck notify sKurzerLangerDruck:trigger set EG_Wohnzimmer_Jalousie stop
define nLangerDruck notify sKurzerLangerDruck:partial_1 set EG_Wohnzimmer_Jalousie closed
hab in der 1 zeile Jede variante probiert aber der lange Tasten Truck steh ich auf auf schlauch
mit 1 mal und 2 mal geht das Script aber mit den Langer Tastendruck nicht
könnte mir einer helfen?
Ist E38.1 überhaupt ein Device für einen EnOcean-Taster? Wie sehen denn die Events von E38.1 bei einem langen Tastendruck aus?
Gruß, Christian
Hallo
das ist ein PCF8574A von Horter.de (https://www.horter-shop.de/de/i2c-hutschienen-module/232-bausatz-i2c-digital-input-modul-mit-optokoppler-4260404260851.html) der low oder high erkennt und per i2c abrufbar ist ich hab den int als abrufen für alle i2c karten auf den Repeater von horter.de (https://www.horter-shop.de/de/i2c-hutschienen-module/182-bausatz-i2c-repeater-mit-taste-fur-raspberry-pi-4260404261186.html) auf Gpio 17 das wenn der GPIO an geht er Alle karten abfragen soll
2019-05-08 19:25:10 readingsProxy E38.0 off
2019-05-08 19:25:10 I2C_PCF8574 modulE38 254
2019-05-08 19:25:10 I2C_PCF8574 modulE38 Port0: off
2019-05-08 19:25:10 RPI_GPIO interupt Dblclick: off
2019-05-08 19:25:10 RPI_GPIO interupt Pinlevel: low
2019-05-08 19:25:10 RPI_GPIO interupt off
2019-05-08 19:25:10 RPI_GPIO interupt Longpress: off
2019-05-08 19:25:10 RPI_GPIO interupt Dblclick: off
2019-05-08 19:25:10 RPI_GPIO interupt Pinlevel: low
2019-05-08 19:25:10 RPI_GPIO interupt off
2019-05-08 19:25:10 RPI_GPIO interupt Longpress: off
define modulE38 I2C_PCF8574 0x38
attr modulE38 IODev myI2C
attr modulE38 InputPorts 0,1,2,3,4,5,6,7
attr modulE38 OnStartup 0=on,1=on,2=on,3=on,4=on,5=on,6=on,7=on
attr modulE38 event-on-change-reading state,Port0,Port1,Port2,Port3,Port4,Port5,Port6,Port7
attr modulE38 group ModulE38
attr modulE38 room i2c
define E38.0 readingsProxy modulE38:Port0
attr E38.0 alias E38.0
attr E38.0 devStateIcon on:off:off off:on:on
attr E38.0 group ModulE38
attr E38.0 room i2c
define E38.1 readingsProxy modulE38:Port1
attr E38.1 devStateIcon on:off:off off:on:on
attr E38.1 group ModulE38
attr E38.1 room i2c
define E38.2 readingsProxy modulE38:Port2
Doppel und einfach tasten Funktioniert
define seq sequence E38.0:on 0.5 E38.0:on
attr seq triggerPartial 1
define nA notify seq:partial_1 set A27.1 on
define nC notify seq:trigger set A27.1 off
A27.1 ist ein Ausgang auf ein 8fach relais karte für Beleuchtung
OK, hat also nichts mit EnOcean zu tuen.
Mit welchen Events kann man denn jetzt die Tastendruckdauer ermitteln? Erkenne ich in Deinen Angaben nicht. Um das EnOcean-Beispiel aus dem Thread übertragen zu können, braucht man u.a. separate Events für "Taster gedrückt" und "Taster loslassen". Falls es ein besonderes Event für "Taster lange gedrückt" gibt, ist der Weg über sequence vermutlich falsch.
hat sich erledigt habe was gefunden in Forum
https://forum.fhem.de/index.php/topic,47219.0.html