Frage zu Homematic Tastsensor 6 Fach und Notify

Begonnen von Kautz8953, 30 Oktober 2016, 18:50:16

Vorheriges Thema - Nächstes Thema

Kautz8953

Hallo, ich hätte da mal eine Frage und zwar habe ich vor mit einem 6 Fach Tastsensor Gruppen zu Schalten. Ich bräuchte alle 6 Tasten desshalb würde ich gerne Togglen mein problem hierbei ist das dann Leuchten die bereits eingeschaltet sind wieder ausgehen. Gibt es einemöglichkeit da eine on off sendung aus der gruppe an die devices zu generieren? Ich habe folgendes versucht,

für ein
define lichtgruppe1 notify (HMKanal1|lichtgruppe1:off) { fhem "set lichtgruppe1 on"}

für aus
define lichtgruppe1 notify (HMKanal1|lichtgruppe1:on) { fhem "set lichtgruppe1 off"}

leider funktioniert es nicht. Hat jemand vlt einen Tipp für mich?

RadioJames

#1
Hallo Kautz,

ich würde mir ein 'notify' für deine Taste erstellen, welches dann eine Perl Funktion aufruft. Die Perl Funktion packst du im einfachsten Fall in das Modul '99_MyUtils.pm'. Bei komplexeren Szenarien mache ich mir gerne neue Perl Module im Stile '99_My<xxx>Utils.pm', wobei <xxx> das Szenario bzw. die Funktionalität beschreibt.

Im Perl Modul definierst du dir eine Variable, die sich den Zustand der Gruppe merkt und mit 'off' initialisiert wird. Die Funktion, die durch den mit 'notfy' definierten Tastendruck aufgerufen wird, schaltet abhängig von der Variablen deine Gruppe an oder aus und setzt die Variable auf den neuen Zustand der Gruppe.

Problem dabei:
Du kannst deine Lampen auch von Hand schalten, d.h. das Ergebnis des Tastendrucks mag manchmal seltsam erscheinen. Außerdem wird nach Neustart der Software immer mit 'off' initialisiert, d.h. der erste Tastendruck danach schaltet immer ein, auch alle Lampen zuvor schon 'on' waren.

Folgender Code ist ungetestet und soll dir nur das Prinzip zeigen.

Also in etwa so:
fhem.cfg

define ntfy.DeineTaste notify Switch6_Btn0x.*:(Short.*|Long.*) {ToggleMyLightGroup($NAME, $EVENT)}


99_MyUtils.pm

<snip>
my $my_light_group_state = "off";

<snip>
###########################################################################
# Diese Funktion behandelt den Druck der Taste xxx und toggelt die Lichtgruppe yyy
#
# Parameters: name     name of trigger device
#                     evti        trigger event
#   
###########################################################################
sub
ToggleMyLightGroup($$)
{
  my ($name, $evti) = @_;  # mit $evti kannst du zwischen hort und long Tastendrücken unterscheiden.

  Log(1, "KeyHandler: name:$name event:$evti");   # zum debuggen, kommentier es aus, wenn alles geht

  $my_light_group_state =  ($my_light_group_state eq "off") ? "on" : "off";    # toggelt die Variable
  fhem("set lichtgruppe1 $my_light_group_state");                                           # setzt deine Lichtgruppe entsprechend
}

<snip>



Zum Schluss ein Tipp:
Du hast 12 Tasten, wenn du zwischen 'short' und 'long' Tastendruck unterscheidest. Also warum nicht den einen für "on" und den anderen für "off" verwenden? Ist erheblich einfacher. Allerdings solltest du bei den Tasten evtl. den Zeitwert zur Unterscheidung long/short erhöhen (R-longPress). Default ist lediglich 400 ms (0.4 s). Das ist mir zu wenig, deshalb habe ich den Wert auf 600 ms erhöht.

Grüße
James
There are 10 kind of people. Those who understand binary and those who don't.

Kautz8953

Das wäre natürlich auch eine Idee, vielen Dank. Kann es sein das Fhem mit dem gleichzeitigen ausführen mehrerer Schaltbefehle überfordert wird? Irgendwie dauert es sehr lange bis die Aktion des Tasters an den Gruppen bzw. Aktoren ankommt.

Ich denke das ich die Lösung mit dem short und long Tastendruck umsetzen werde. Der einfachste weg ist ja auch oft der bessere ;)