FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: OK_DE am 13 Juli 2016, 18:59:38

Titel: Langer Tastendruck setzt -> Beleuchtungsdauer
Beitrag von: OK_DE am 13 Juli 2016, 18:59:38
Habe mir einen Homematic Handsender zugelegt.

Dieser sendet wie jeder Taster bei einem kurzen Tastendruck:
HANDSENDER_TASTE4   Short (to VCCU)

Dieser sendet wie jeder Taster bei einem Langen Tastendruck:
HANDSENDER_TASTE4   LongRelease 9_19 (to VCCU)

Beim Langen Tastendruck wird die Dauer desselben mitgesendet hier 9sec.

Kann man das irgendwie nutzen um die Beleuchtungsdauer zu setzen.
Quasi Lange gedrückt 5 => of-for-timer (5*60)sec = 5 Minuten Beleuchtung an ?

Bisher:
#WEGBELEUCHGUNG
define NOTIFY_HANDSENDER_TASTE4_SHORT notify HANDSENDER_TASTE4:Short.* set GARTEN_WEG_BELEUCHTUNG on-for-timer 150
attr NOTIFY_HANDSENDER_TASTE4_SHORT room _HANDSENDER

define NOTIFY_HANDSENDER_TASTE4_LONG notify HANDSENDER_TASTE4:Long.* set GARTEN_WEG_BELEUCHTUNG on-for-timer 300
attr NOTIFY_HANDSENDER_TASTE4_LONG room _HANDSENDER
Titel: Antw:Langer Tastendruck setzt -> Beleuchtungsdauer
Beitrag von: OK_DE am 13 Juli 2016, 22:31:19
So nach einigem Probieren bin ich nun selbst drauf gekommen.
Wer es nachbauen möchte nachfolgend die Lösung...

Funktion:
Kurzer Tastendruck = Lampe aus
Langer Tastendruck = Lampe entsprechend der Dauer des Tastendrucks an

Hier der Code aus der fhem.cfg

define NOTIFY_HANDSENDER_TASTE4_SHORT notify HANDSENDER_TASTE4:Short.* set GARTEN_WEG_BELEUCHTUNG off
attr NOTIFY_HANDSENDER_TASTE4_SHORT room _HANDSENDER

define NOTIFY_HANDSENDER_TASTE4_LONG notify HANDSENDER_TASTE4:LongRelease.* {myUtils_TasteLongPress($NAME,"GARTEN_WEG_BELEUCHTUNG");; }
attr NOTIFY_HANDSENDER_TASTE4_LONG room _HANDSENDER

Erklärung:
$NAME übergibt den Devicenamen HANDSENDER_TASTE4 an die Funktion.
GARTEN_WEG_BELEUCHTUNG ist die zu schaltende Lampe

Hier der Code aus der 99_myUtils.pm

sub
myUtils_TasteLongPress($$)
{
my($TasterDevice,$OnTimeDevice) = @_;
my $PressDeviceState = ReadingsVal($TasterDevice,"state","0");
my($OnTime) = $PressDeviceState =~ /(\d+)/;
$OnTime = int($OnTime * 17);
fhem("set $OnTimeDevice on-for-timer $OnTime");
}

Erklärung:
$PressDeviceState schreibt den State aus dem übergebenen $DEVICE in die Variable, Ersatzwert = 0.
Die Reguläre Expression filtert aus dem String "LongRelease 9_19 (to VCCU)" den ersten vorkommenden reinen numerischen Wert heraus also hier "9".
In $OnTime gibt es den Faktor 17 diesen habe ich eingeführt da die Fernbedienung in einer Sekunde nicht nur um eins hochzählt sondern mehrere Counts liefert.
Ermittelt wurde der so -> Taste 10 Sec gedrückt halten -> 600 sec durch den im LongPress angezeigten Wert teilen -> Ergebnis eintragen.