Unterscheidung von kurzen und langen, bzw. mehreren Tastendrücken

Begonnen von Vorhand, 06 März 2018, 08:58:08

Vorheriges Thema - Nächstes Thema

Vorhand

Gibt es eine elegante Möglichkeit kurze von langen Befehle zu unterscheiden?
Ich möchte bei meiner Rolladensteuerung den Auf- bzw. den Zulauf stoppen können.
Beide Befehle laufen ca. 60s.
Mit notify kann ich beim Aufbefehl, gleichzeitig den Zubefehl ausschalten - und umgekehrt.
Aber damit dreht er nur die Laufrichtung um.
Danke
Viele Grüße
Raspi,Homatic,ESP,Fronius,KIA-PHEV,DHW300,Mi,Shelly

Beta-User

Da du nicht mitteilst, um welche(s) device(s) es geht und welche events die generieren, mußt du das Problem am besten selbst hiermit lösen:
https://wiki.fhem.de/wiki/Event_monitor
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Vorhand

Danke - wenn ich noch ergänzen darf...
Die Tast-Ereignisse kommen über eine FS20-Fernbedienung. Die Ansteuerung der Rollos erfolgt über normale Relais. Ein event SHORTPRESS oder so, wird hier nicht angeboten.
Kann man die Druck-Zeit irgendwie auswerten ?
Viele Grüße
Raspi,Homatic,ESP,Fronius,KIA-PHEV,DHW300,Mi,Shelly

CoolTux

Das wird so nicht gehen denke ich. Man kann wenn überhaupt mit zweimal drücken kurz hintereinander arbeiten.
Hierzu gibt es bereits den einen oder anderen Thread im Forum. Modulname sequenz
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

nils_

Zitat von: Vorhand am 07 März 2018, 10:07:41
Die Ansteuerung der Rollos erfolgt über normale Relais.

ich hoffe da ist irgendwas zum verblocken drin !?
viele Wege in FHEM es gibt!

Frank_Huber

Hier mein DOIF mit welchem ich die Rollos steuere.
Pro Rollo zwei Relais, eines für AN/AUS, das zweite für AUF/AB.
Rollos sind über das ROLLO Modul angelegt. http://www.fhemwiki.de/wiki/ROLLO


defmod Rollo_Dachterrasse DOIF ([GPIO_IN_10:"^on$"] and [?Rollo4_Dachterrasse] ne "drive-up") (set Rollo4_Dachterrasse open)\
DOELSEIF ([GPIO_IN_11:"^on$"] and [?Rollo4_Dachterrasse] ne "drive-down") (set Rollo4_Dachterrasse closed)\
DOELSEIF (([GPIO_IN_10:"^on$"] or [GPIO_IN_11:"^on$"]) and [?Rollo4_Dachterrasse] =~ "drive-down|drive-up") (set Rollo4_Dachterrasse stop)\
attr Rollo_Dachterrasse checkReadingEvent 1
attr Rollo_Dachterrasse cmdpause 1:1:1
attr Rollo_Dachterrasse do always


Vorhand

besten Dank für die Antworten.
Ich hab mir folgendes ausgedacht.
Mit Taste Auf geht der Laden AUF. Jetzt Taste Zu, dann stoppt der Laden.
Mit Taste Zu geht er ZU. Jetzt Taste Auf, dann stoppt er wieder.
Eigenartigerweise geht es mit dem Befehl Zu - aber nicht mit Auf???
Mit folgendem Code:
attr RollAtlirNW devStateIcon Auf:fts_shutter_10 Zu:fts_shutter_100
attr RollAtlirNW eventMap on:Auf off:Zu
attr RollAtlirNW icon fts_window_2w
attr RollAtlirNW room DG
attr RollAtlirNW setList on:off
attr RollAtlirNW webCmd Auf:Zu
define n_RollAtlirNW_auf notify RollAtlirNW {if ( Value("RollAtlirNW") eq "Auf" and Value("S39x1") ne "on") {fhem("set S39x0 on-for-timer 20")} else {fhem("set S39x1 off")}}
define n_RollAtlirNW_zu notify RollAtlirNW {if (Value("RollAtlirNW") eq "Zu" and Value("39x0") ne "on") {fhem("set S39x1 on-for-timer 20")} else {fhem("set S39x0 off")}}


Was ist falsch?
Danke

Viele Grüße
Raspi,Homatic,ESP,Fronius,KIA-PHEV,DHW300,Mi,Shelly

Beta-User

Zitat von: Vorhand am 14 März 2018, 13:59:21
Was ist falsch?
1. keine code-tags (#-Button oberhalb des Eingabefelds für den Text).
2. vielleicht noch: Das eine Notify sagt "39x0", das andere "S39x1"). Dürfte eigentlich einheitlich sein, also immer mit oder ohne das "S"...

Gruß, Beta-User
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

nils_

Zitat von: Beta-User am 14 März 2018, 14:28:48
2. vielleicht noch: Das eine Notify sagt "39x0", das andere "S39x1"). Dürfte eigentlich einheitlich sein, also immer mit oder ohne das "S"...
einmal das.


und du hast 2x notify mit dem gleichen Regex

define n_RollAtlirNW_auf notify RollAtlirNW .....
define n_RollAtlirNW_zu notify RollAtlirNW ....


ist das so gewollt??
wenn ja, warum? :D
viele Wege in FHEM es gibt!

Vorhand

Danke - tatsächlich hat einmal das S gefehlt. Fehler
Leider war das nicht die Ursache.
Wenn ich ohne die AND Bedingung arbeite, geht alles einwandfrei.
define n_RollAtlirNW_auf notify RollAtlirNW:Auf set S39x1 off;; sleep 1;; set S39x0 on-for-timer 10
define n_RollAtlirNW_zu notify RollAtlirNW:Zu  set S39x0 off;; sleep 1;; set S39x1 on-for-timer 10
Das aber, führt nur zur Umschaltung - ohne Stop.
Ich wollte über die IF-Bedingung: wenn die andere Richtung läuft, nur den "off" Befehl geben, ohne  dass die andere Richtung startet.
Danke
Viele Grüße
Raspi,Homatic,ESP,Fronius,KIA-PHEV,DHW300,Mi,Shelly

Pfriemler

Zitat von: Vorhand am 07 März 2018, 10:07:41
Kann man die Druck-Zeit irgendwie auswerten ?
FS20-Tasten kennen die Zustände "toggle" für kurze und "dimupdown" für längere Tastendrücke.
Abgesehen davon verstehe ich die Logik noch nicht ganz: RollAtlirNW ist ein Dummy, der den Sollzustand des Rolladens speichert? Wie kommen die Tastendrücke da rein?
Beim letzten Satz notifys hast Du einen Knick in der Logik. Abgesehen davon verstehe ich nicht, was S39x1 und S39x0 eigentlich genau sind: Relais, die kurzzeitig schalten um einen Hardwaretaster zu emulieren? Oder sind das direkt die Ansteuerrelais für die Motoren? Welche Verriegelung gegen gleichzeitige Ansteuerung beider Fahrrichtungen ist eingebaut?

Das Modul Rollo dürfte im übrigen wirklich eine überlegenswerte Lösung sein. Vorher hatte ich mit diversen Dummys gearbeitet, inzwischen werkelt bei mir ausnahmslos Hardwarelogik (HomeMatic, Rademacher).


"Änd're nie in fhem.cfg, denn das tut hier allen weh!" *** Wheezy@Raspi(3), HMWLAN+HMUART, CUL868(SlowRF) für FHT+KS+FS20, miniCUL433, Rademacher DuoFern *** "... kaum macht man es richtig, funktioniert es ..."

nils_

Zitat von: Vorhand am 14 März 2018, 23:02:20
Wenn ich ohne die AND Bedingung arbeite, geht alles einwandfrei.
define n_RollAtlirNW_auf notify RollAtlirNW:Auf set S39x1 off;; sleep 1;; set S39x0 on-for-timer 10
define n_RollAtlirNW_zu notify RollAtlirNW:Zu  set S39x0 off;; sleep 1;; set S39x1 on-for-timer 10
jetzt sieht dein regex schonmal anders aus.

Zitat von: Vorhand am 14 März 2018, 23:02:20
Ich wollte über die IF-Bedingung: wenn die andere Richtung läuft, nur den "off" Befehl geben, ohne  dass die andere Richtung startet.
deine if-bedingung könnte so klappen....
aber
Zitat von: Pfriemler am 14 März 2018, 23:26:57
Welche Verriegelung gegen gleichzeitige Ansteuerung beider Fahrrichtungen ist eingebaut?
das solltest du nicht vernachlässigen, sonst reden wir bald über einen kaputten/abgerauchten motor.


Zitat von: Beta-User am 14 März 2018, 14:28:48
1. keine code-tags (#-Button oberhalb des Eingabefelds für den Text).
bitte auch beachten :)
viele Wege in FHEM es gibt!

Vorhand

Noch etwas Hintergrund:
Vor den Rolladenantrieben 230V~ werkeln Schalk-Relais UMS504 mit 24VGS Steuerspannung. Die örtlichen Eingänge bediene ich mit einem einzelnen Taster +24V Auf, Halt,Zu.
Das funktioniert immer - auch ohne Raspi und FHEM.
Die Ferneingänge 24VGS haben prio - sie toggeln nicht. Der Laden läuft solange +24V am jeweiligen Eingang liegt. Wenn beide gleichzeitig +24 haben, hat AUF Vorrang.
Diese Eingänge steuere ich mit I2C_PCF8574 von Horter an - die können direkt 24V.
Benannt sind die Ausgänge nach der I2C Adresse - hier 39 und der Port 0 für Auf bzw. 1 für Zu.
Grundsätzlich will ich natürlich ein fertiges Rolladen-Programm mit Licht und Azimut und ... darauf loslassen.
Ich kämpfe jedoch noch mit den Basics, die u.a. auch eine Fernbedienung z.B. FS20  für das manuelle steuern ermöglicht.
Irgenwie hänge ich ein bisschen fest !??.
Danke
Viele Grüße
Raspi,Homatic,ESP,Fronius,KIA-PHEV,DHW300,Mi,Shelly

Beta-User

So wie ich das verstanden habe, funktionierte doch eines deiner "alten" notify. Da war hinten zum einen quasi die Event-Abfrage drin und dann noch eine Status-Abfrage.

Jetzt hast du die Event-Abfrage nach vorne gezogen. Das war sicher richtig. Jetzt sollte es doch gehen, hinten einfach die Status-Abfrage noch passend mit einzubauen, oder? Also ein reduziertes (und korrekt mit "S" ergänztes) "if {...}" in den Ausführungsteil der notify.

Ob ROLLO helfen kann, kann ich nicht sagen, aber vielleicht wäre das einen Blick wert? Dann könntest du auch die Rollosteuerung von Frini&Cluni verwenden...

Generell noch: Wenn du mehr von diesen Rollos hast, ROLLO aber nicht zu verwenden geht, würde ich an deiner Stelle versuchen, ein generalisiertes notify zu basteln und den Rest mit etwas Perl-code (myUtils) zu erschlagen. Hört sich komplizierter an, als es ist: Du könntest an jedem der potentiell auslösenden $DEVICE-Geräte ein oder zwei userattr definieren, in das du den/die zugehörigen Ausgang/Ausgänge schreibst und damit dann im Code entsprechend umgehen. Wäre im Ergebnis vermutlich übersichtlicher als viele notify.

Just my2ct
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

nils_

RollAtlirNW ist ein dummy??
mit dem willst du nur erstmal(?) das schalten nachbilden. richtig?

dann sollten deine abfragen eigentlich funktionieren....  :o
(mit korrigiertem regex)

define n_RollAtlirNW_auf notify RollAtlirNW:Auf ....
define n_RollAtlirNW_zu notify RollAtlirNW:Zu ...


//edit:
beta-user  war schneller :)
viele Wege in FHEM es gibt!