Ein Taster mit zwei Funktionen (kurzem/langen Betätigen)

Begonnen von butaluk, 26 Januar 2017, 20:53:13

Vorheriges Thema - Nächstes Thema

butaluk

Hallo,

mit welcher Funktion kann ich eine lange und kurze Betätigung von einem Taster erkennen um unterschiedliche Evens auszuführen.
Im Moment schalte ich mit dem Taster das Licht einfach ein und aus:

define Taster_Licht_Flur_OG readingsProxy INPUT_07:Port6
define Licht_Flur_ObenNotify notify Taster_Licht_Flur_OG:off { \
if (Value("Licht_Flur_Oben") eq "off") {fhem"set Licht_Flur_Oben on"} \
else{fhem"set Licht_Flur_Oben off"}}


Ich möchte dass bei kurze Betätigung das Licht für eine bestimmte Zeit an bleibt:

define Taster_Licht_Flur_OG readingsProxy INPUT_07:Port6
define Licht_Flur_ObenNotify notify Taster_Licht_Flur_OG:off { \
if (Value("Licht_Flur_Oben") eq "off") {fhem"set Licht_Flur_Oben on-for-timer 60"} \
else{fhem"set Licht_Flur_Oben off"}}


und bei lange Betätigung das Licht so lange an bleibt biss der Taster noch mal betätigt wird.

Otto123

Hi,

wenn Du noch verraten würdest was das für Taster sind?

readingsProxy INPUT_07:Port6 kann ja praktisch alles sein  :-X

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

butaluk

Das sind i2c Porterweiterungsmodule PCF8574. Als Eingang konfiguriert mit angezogenem Pul-Up widerstand. Angeschlossen sind ganz normale UP Taster.

Otto123

#3
Huch, das ist mir zu kompliziert  ???

Eigentlich haben ja alle Schalter/Input Module diese Funktionen schon eingebaut - dachte ich.

Und dein Licht_Flur_Oben kann kein toggle? Damit wäre zumindest Dein erstes notify kürzer :)

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

butaluk


Thorsten Pferdekaemper

Zitat von: butaluk am 27 Januar 2017, 14:09:40
Hat keiner eine Idee?
Doch: Aktiviere mal den Event monitor und drücke kurz bzw. lang auf Deinen Taster. Dann zeig' und mal, was der Event monitor anzeigt.
Gruß,
   Thorsten
FUIP

Otto123

Zitat von: butaluk am 27 Januar 2017, 14:09:40
Hat keiner eine Idee?
Gestern beim Lesen fiel noch auf ->
ZitatErmöglicht die Verwendung eines PCF8574 I2C 8 Bit Portexenders. Auf einem Raspberry Pi kann der Interrupt Pin des PCF8574 mit einem GPIO verbunden werden und ¨ber die Interrupt Funktionen von RPI_GPIO l&aml;sst sich dann ein get für den PCF8574 bei Pegel&aml;nderung ausl&oml;sen.
I2C-Botschaften werden über ein I2C Interface Modul wie beispielsweise das RPII2C, FRM oder NetzerI2C gesendet. Daher muss dieses vorher definiert werden.
Das Attribut IODev muss definiert sein.
Musst Du alle Module kombinieren und die Taste schlussendlich über RPI_GPIO auslesen? Dort hättest Du dann sofort die Funktion (short, long, entprellen ) die Du hier zu Fuß bauen willst.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

butaluk

Folgendes wird im Event Monitor bei kurzer Betätigung eingetragen:
2017-01-27 22:08:37 readingsProxy Licht_Flur_Oben on
2017-01-27 22:08:37 I2C_PCA9685 OUT_00 Port07: on
2017-01-27 22:08:37 I2C_PCA9685 OUT_00 Ok
2017-01-27 22:08:37 readingsProxy Taster_Licht_Flur_OG off
2017-01-27 22:08:37 I2C_PCF8574 INPUT_07 Port6: off
2017-01-27 22:08:37 I2C_PCF8574 INPUT_07 191
2017-01-27 22:08:37 RPI_GPIO int Pinlevel: high
2017-01-27 22:08:37 RPI_GPIO int on
2017-01-27 22:08:37 RPI_GPIO int Toggle: off
2017-01-27 22:08:37 RPI_GPIO int Counter: 146


und das bei langer Betätigung:
2017-01-27 22:10:09 readingsProxy Licht_Flur_Oben on
2017-01-27 22:10:09 I2C_PCA9685 OUT_00 Port07: on
2017-01-27 22:10:09 I2C_PCA9685 OUT_00 Ok
2017-01-27 22:10:09 readingsProxy Taster_Licht_Flur_OG off
2017-01-27 22:10:09 I2C_PCF8574 INPUT_07 Port6: off
2017-01-27 22:10:09 I2C_PCF8574 INPUT_07 191
2017-01-27 22:10:09 RPI_GPIO int Pinlevel: high
2017-01-27 22:10:09 RPI_GPIO int on
2017-01-27 22:10:09 RPI_GPIO int Toggle: off
2017-01-27 22:10:09 RPI_GPIO int Counter: 150


Wie man sieht, kein Unterschied.

Otto123

ZitatWie man sieht, kein Unterschied.
Was zu erwarten war ...
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Thorsten Pferdekaemper

Hi,
soweit ich das verstehe hat das I2C_PCF8574 nur Readings (und Events) für Pegel (bzw. Pegeländerungen). Allerdings verstehe ich bei den zur Verfügung gestellten Event Logs nicht, dass nur "off" sichtbar ist. Wenn eine Taste gedrückt wird, dann müsste man ja einmal "on" und einmal "off" sehen, oder?
Sind die Event Logs wirklich komplett?
Gruß,
   Thorsten
FUIP

butaluk

Hi,
Ich habe nur das Teil herauskopiert wo der Taster betätigt wird, so sieht der Komplette log aus:

2017-01-28 11:00:44 I2C_PCF8574 INPUT_00 255
2017-01-28 11:00:44 I2C_PCF8574 INPUT_01 255
2017-01-28 11:00:44 I2C_PCF8574 INPUT_02 255
2017-01-28 11:00:44 I2C_PCF8574 INPUT_03 255
2017-01-28 11:00:44 I2C_PCF8574 INPUT_04 255
2017-01-28 11:00:44 I2C_PCF8574 INPUT_05 255
2017-01-28 11:00:44 I2C_PCF8574 INPUT_06 255
2017-01-28 11:00:44 readingsProxy Licht_Flur_Oben on
2017-01-28 11:00:44 I2C_PCA9685 OUT_00 Port07: on
2017-01-28 11:00:44 I2C_PCA9685 OUT_00 Ok
2017-01-28 11:00:44 readingsProxy Taster_Licht_Flur_OG off
2017-01-28 11:00:44 I2C_PCF8574 INPUT_07 Port6: off
2017-01-28 11:00:44 I2C_PCF8574 INPUT_07 191
2017-01-28 11:00:44 RPI_GPIO int Pinlevel: high
2017-01-28 11:00:44 RPI_GPIO int on
2017-01-28 11:00:44 RPI_GPIO int Toggle: off
2017-01-28 11:00:44 RPI_GPIO int Counter: 256
2017-01-28 11:00:44 I2C_PCF8574 INPUT_00 255
2017-01-28 11:00:44 I2C_PCF8574 INPUT_01 255
2017-01-28 11:00:44 I2C_PCF8574 INPUT_02 255
2017-01-28 11:00:44 I2C_PCF8574 INPUT_03 255
2017-01-28 11:00:44 I2C_PCF8574 INPUT_04 255
2017-01-28 11:00:44 I2C_PCF8574 INPUT_05 255
2017-01-28 11:00:44 I2C_PCF8574 INPUT_06 255
2017-01-28 11:00:44 readingsProxy Taster_Licht_Flur_OG on
2017-01-28 11:00:44 I2C_PCF8574 INPUT_07 Port6: on
2017-01-28 11:00:44 I2C_PCF8574 INPUT_07 255
2017-01-28 11:00:44 I2C_PCF8574 INPUT_00 255
2017-01-28 11:00:44 I2C_PCF8574 INPUT_01 255
2017-01-28 11:00:44 I2C_PCF8574 INPUT_02 255
2017-01-28 11:00:44 I2C_PCF8574 INPUT_03 255
2017-01-28 11:00:44 I2C_PCF8574 INPUT_04 255
2017-01-28 11:00:44 I2C_PCF8574 INPUT_05 255
2017-01-28 11:00:44 I2C_PCF8574 INPUT_06 255
2017-01-28 11:00:44 I2C_PCF8574 INPUT_07 255


ich habe 8xPCF8574 an Raspberry mittels I2C angebunden. Die Gesamten Taster im Haus sind dran angebunden.

Definition vom PCF8574(am Beispiel nur ein Port):
##GPIO 00
define INPUT_00 I2C_PCF8574 0x38
attr INPUT_00 IODev i2c
attr INPUT_00 InputPorts 0 1 2 3 4 5 6 7


Definition vom Interrupt:
define int RPI_GPIO 21
attr int direction input
attr int active_low yes
attr int interrupt rising
attr int pud_resistor up
attr int userReadings get_INPUT_00 {fhem ("get INPUT_00,INPUT_01,INPUT_02,INPUT_03,INPUT_04,INPUT_05,INPUT_06,INPUT_07")}


Thorsten Pferdekaemper

Hi,

Zitat von: butaluk am 28 Januar 2017, 11:07:24
Ich habe nur das Teil herauskopiert wo der Taster betätigt wird, so sieht der Komplette log aus:

2017-01-28 11:00:44 I2C_PCF8574 INPUT_07 Port6: off
2017-01-28 11:00:44 I2C_PCF8574 INPUT_07 191
2017-01-28 11:00:44 I2C_PCF8574 INPUT_07 Port6: on
2017-01-28 11:00:44 I2C_PCF8574 INPUT_07 255

Ich habe das jetzt mal auf das gefiltert, von dem ich vermute, dass es die Taste ist. Ich nehme mal an, dass "off" beim Drücken der Taste kommt und "on" beim Loslassen. Das, was wir hier sehen, ist vermutlich der kurze Tastendruck.
Mach jetzt nochmal einen langen Tastendruck und zeige das Entsprechende. Da muss es ja auch irgendwo ein "off" und "on" geben.
Gruß,
   Thorsten

FUIP

butaluk

Hi,

hier ist der log vom langen drücken:

2017-01-28 11:24:32 I2C_PCF8574 INPUT_00 255
2017-01-28 11:24:32 I2C_PCF8574 INPUT_01 255
2017-01-28 11:24:33 I2C_PCF8574 INPUT_02 255
2017-01-28 11:24:33 I2C_PCF8574 INPUT_03 255
2017-01-28 11:24:33 I2C_PCF8574 INPUT_04 255
2017-01-28 11:24:33 I2C_PCF8574 INPUT_05 255
2017-01-28 11:24:33 I2C_PCF8574 INPUT_06 255
2017-01-28 11:24:33 readingsProxy Licht_Flur_Oben on
2017-01-28 11:24:33 I2C_PCA9685 OUT_00 Port07: on
2017-01-28 11:24:33 I2C_PCA9685 OUT_00 Ok
2017-01-28 11:24:33 readingsProxy Taster_Licht_Flur_OG off
2017-01-28 11:24:33 I2C_PCF8574 INPUT_07 Port6: off
2017-01-28 11:24:33 I2C_PCF8574 INPUT_07 191
2017-01-28 11:24:33 I2C_PCF8574 INPUT_00 255
2017-01-28 11:24:33 I2C_PCF8574 INPUT_01 255
2017-01-28 11:24:33 I2C_PCF8574 INPUT_02 255
2017-01-28 11:24:33 I2C_PCF8574 INPUT_03 255
2017-01-28 11:24:33 I2C_PCF8574 INPUT_04 255
2017-01-28 11:24:33 I2C_PCF8574 INPUT_05 255
2017-01-28 11:24:33 I2C_PCF8574 INPUT_06 255
2017-01-28 11:24:33 I2C_PCF8574 INPUT_07 191
2017-01-28 11:24:38 I2C_PCF8574 INPUT_00 255
2017-01-28 11:24:38 I2C_PCF8574 INPUT_01 255
2017-01-28 11:24:38 I2C_PCF8574 INPUT_02 255
2017-01-28 11:24:38 I2C_PCF8574 INPUT_03 255
2017-01-28 11:24:38 I2C_PCF8574 INPUT_04 255
2017-01-28 11:24:38 I2C_PCF8574 INPUT_05 255
2017-01-28 11:24:38 I2C_PCF8574 INPUT_06 255
2017-01-28 11:24:38 readingsProxy Taster_Licht_Flur_OG on
2017-01-28 11:24:38 I2C_PCF8574 INPUT_07 Port6: on
2017-01-28 11:24:38 I2C_PCF8574 INPUT_07 255
2017-01-28 11:24:38 RPI_GPIO int Pinlevel: high
2017-01-28 11:24:38 RPI_GPIO int on
2017-01-28 11:24:38 RPI_GPIO int Toggle: off
2017-01-28 11:24:38 RPI_GPIO int Counter: 268


An der Zeit sieht man das der Taster 5 sec. lang gedrückt war.

Thorsten Pferdekaemper

Zitat von: butaluk am 28 Januar 2017, 11:27:26

2017-01-28 11:24:33 I2C_PCF8574 INPUT_07 Port6: off
2017-01-28 11:24:33 I2C_PCF8574 INPUT_07 191
2017-01-28 11:24:38 I2C_PCF8574 INPUT_07 Port6: on
2017-01-28 11:24:38 I2C_PCF8574 INPUT_07 255


An der Zeit sieht man das der Taster 5 sec. lang gedrückt war.
Ja, genau. Jetzt musst Du sozusagen nur noch die Zeit zwischen "off" und "on" messen. Das könnte mit FHEM-"Bordmitteln" in etwa so gehen. (Vielleicht gibt es dazu aber auch schon eine andere Lösung, die müsstest Du dann vielleicht im ensprechenden Forumsbereich erfragen. (Also in dem, wo auch PCF8574 besprochen wird.))

  • Du legst ein notify an, das bei "off" triggert und ein "at" anlegt, das nach einer Sekunde (oder wie lange auch immer ein langer Tastendruck ist) das macht, was Du bei einem langen Tastendruck machen willst. Zusätzlich setzt Du in dem "at" noch ein Reading, das den langen Tastendruck anzeigt.
  • Ein anderes notify triggert bei "on" und löscht das "at". Außerdem prüft es, ob das "long"-Reading gesetzt ist. Falls ja, dann das "long"-Reading zurücksetzen. Falls nein, dann ist das ein kurzer Tastendruck. In dem Fall das machen, was Du bei einem kurzen Tastendruck machen willst.
Ich habe das nicht ausprobiert, aber so würde ich es ggf. angehen.
Gruß,
   Thorsten
FUIP

Otto123

Zitat von: Thorsten Pferdekaemper am 28 Januar 2017, 11:43:50
Ja, genau. Jetzt musst Du sozusagen nur noch die Zeit zwischen "off" und "on" messen. Das könnte mit FHEM-"Bordmitteln" in etwa so gehen. (Vielleicht gibt es dazu aber auch schon eine andere Lösung, die müsstest Du dann vielleicht im ensprechenden Forumsbereich erfragen. (Also in dem, wo auch PCF8574 besprochen wird.))

  • Du legst ein notify an, das bei "off" triggert und ein "at" anlegt, das nach einer Sekunde (oder wie lange auch immer ein langer Tastendruck ist) das macht, was Du bei einem langen Tastendruck machen willst. Zusätzlich setzt Du in dem "at" noch ein Reading, das den langen Tastendruck anzeigt.
  • Ein anderes notify triggert bei "on" und löscht das "at". Außerdem prüft es, ob das "long"-Reading gesetzt ist. Falls ja, dann das "long"-Reading zurücksetzen. Falls nein, dann ist das ein kurzer Tastendruck. In dem Fall das machen, was Du bei einem kurzen Tastendruck machen willst.
Ich habe das nicht ausprobiert, aber so würde ich es ggf. angehen.
Gruß,
   Thorsten
Moin,

gute Idee. Löscht sich ein temporäres at nicht von selbst?

Ich würde trotzdem nochmal forschen ob man nicht wie in meinem Zitat die RPI_GPIO mit einbinden kann? In der wäre ja für Taster quasi schon alles geklärt. Oder hältst Du das für ausgeschlossen?

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz