Hallo,
weis jetzt nicht ob es in dieser Gruppe richtig ist.
Wie kann ich denn mit einem Wandtaster (HM-PB-2-WM55-2) einen FS20 Dimmer dimmen ?
Mach dies derzeit mit einem notify zum ein- und ausschalten.
define SchalterNotifyoben notify HM_Wandtaster_oben set flur_licht on
define SchalterNotifyunten notify HM_Wandtaster_unten set flur_licht off
Möchte nun aber genau so steuern wie aus einem FS20 Taster, damit keine Unterschiede in der Bedienung vorhanden sind.
Hab es bereits so versucht, funzt aber nicht so richtig
define SchalterNotifyoben notify HM_Wandtaster_oben set flur_licht dimup
define SchalterNotifyunten notify HM_Wandtaster_unten set flur_licht dimdown
Hallo, habe folgendes versucht
define FlurEGonNotify notify HM_Wandtaster_oben.Short.* set flur_licht on
define FlurEGoffNotify notify HM_Wandtaster_unten.Short.* set flur_licht off
define FlurEGupNotify notify HM_Wandtaster_oben.Long.* set flur_licht dimup
define FlurEGdownNotify notify HM_Wandtaster_unten.Long.* set flur_licht dimdown
funzt auch gut bei einem Tastenpaar, doch wie mach ich das mit einer Taste ????
Nach weiteren Suchen nach Information und probieren, bin ich nun soweit gekommen, der Toggle schein kein Problem zu machen aber der Dimupdown. In FS 20 wird der Dimmer von der Taste mit einem Domupdown Befehl angesteuert. Das bedeutet bei langem Tastendruck wird immer zwischen dem Dimup und Dimdown gewechselt, ähnlich wie beim Toggle.
Nun habe ich es so eingestellt:
define FlurEGtoggleNotify notify HM_Wandtaster.Short.* set flur_licht Toggle
define FlurEGDimNotify notify HM_Wandtaster.Long.* set flur_licht dimupdown
Leider funktioniert das mit dem dimupdown nicht. kann mir bitte jemand helfen ?
Vieleicht geht es mit einem virtuellen HM-Schalter den ich dann mit dem Wandtaster peere und dann auf den Registersatz zugreifen kann, aber welchen Registersatz muss ich dann nehmen, damit das der FS20 Dimmer versteht ??
Hat denn hier keiner ne Idee oder ein ähnliches Problem (gehabt) ????? :-\
Habe das Problem durch "Stufenschaltung via myUtils gelöst.
Ich nutze zwar FS20 Taster und HM Dimmer, aber das Sollte kein Problem sein.
Musst das pct dann halt durch ein dim ersetzen.
sub UntoggleDimmer($;$)
{
my ($sender, $actor) = @_;
if (Value($sender) eq "toggle")
{
if (Value($actor) eq "off") {fhem ("set ".$actor." pct 50")}
else {fhem ("set ".$actor." pct 0")}
}
elsif (ReadingsVal("$actor", "pct", 0) > "90") {fhem ("set ".$actor." pct 90")}
elsif (ReadingsVal("$actor", "pct", 0) > "80") {fhem ("set ".$actor." pct 80")}
elsif (ReadingsVal("$actor", "pct", 0) > "70") {fhem ("set ".$actor." pct 70")}
elsif (ReadingsVal("$actor", "pct", 0) > "60") {fhem ("set ".$actor." pct 60")}
elsif (ReadingsVal("$actor", "pct", 0) > "50") {fhem ("set ".$actor." pct 50")}
elsif (ReadingsVal("$actor", "pct", 0) > "40") {fhem ("set ".$actor." pct 40")}
elsif (ReadingsVal("$actor", "pct", 0) > "30") {fhem ("set ".$actor." pct 30")}
elsif (ReadingsVal("$actor", "pct", 0) > "20") {fhem ("set ".$actor." pct 20")}
elsif (ReadingsVal("$actor", "pct", 0) > "10") {fhem ("set ".$actor." pct 10")}
elsif (ReadingsVal("$actor", "pct", 0) > "0") {fhem ("set ".$actor." pct 0")}
elsif (ReadingsVal("$actor", "pct", 0) eq "0") {fhem ("set ".$actor." pct 100")}
return;
}
Und hier noch das List des notify:
Internals:
DEF FL_Taster11 {UntoggleDimmer("FL_Taster11","FL_Decke")}
NAME FL_T11
NOTIFYDEV FL_Taster11
NR 211
NTFY_ORDER 50-FL_T11
REGEXP FL_Taster11
STATE active
TYPE notify
Attributes:
room System
Gruß Detlef
etwas schneller sein sollte
sub UntoggleDimmer($;$)
{
my ($sender, $actor) = @_;
my $val = ReadingsVal("$actor", "pct", 0);
if (Value($sender) eq "toggle") {
$val = (Value($actor) eq "off")
? 50 :
0}
elsif ($val == 0) {$val = 100}
else {$val = int($val/10)*10}
fhem ("set $actor pct $valInt");
return;
}
es wird nur einmal der pct wert gelesen...
Zitat von: martinp876 am 14 Februar 2015, 15:41:02
etwas schneller sein sollte
sub UntoggleDimmer($;$)
{
my ($sender, $actor) = @_;
my $val = ReadingsVal("$actor", "pct", 0);
if (Value($sender) eq "toggle") {
$val = (Value($actor) eq "off")
? 50 :
0}
elsif ($val == 0) {$val = 100}
else {$val = int($val/10)*10}
fhem ("set $actor pct $valInt");
return;
}
es wird nur einmal der pct wert gelesen...
Das funktioniert bei mir nicht. Er macht pct 0 und dann wars das.
Gruß Detlef
Am ende steht $valInt. Das muss $val sein. Mein fehler
Geht auch nicht.
Wenn ich das richtig verstehe, werden die Werte ja rerundet.
Wenn Sie bereits auf dem Wert stehen, bleibt der Wert doch, oder?
Gruß Detlef
ich sehe jetzt den Fehler nicht. was du erreichen willst war mir nicht wirklich klar - warum bei 0 die 100 kommt und so.
gestört hat mich, dass du etliche male die Funktion readingsval aufrufst. das sollte in jedem Fall nur einmal passieren - eine performance-sünde.
du willst den wert in 10er stufen abgerundet ausgeben - korrekt? wenn du also durch 10 teilst und rundest kannst du danach wieder mit 10 multiplizieren. Ein eingangswertebereich von 0 bis 100 wird dann zu stufen 0 bis 10, also 00,10,...100 gemacht.
ReadingsVal des Aktor sollte "pct" sollte erst einmal stimmen - hoffe ich.
toggel wackelt zwischen 0 und 50.
baue ein
Log 1,"myval: $val from ".ReadingsVal("$actor", "pct", 0);;
ein - dann kann man sehen, welche werte gelesen werden sowie sie verarbeitet wurden.
Hallo Martin,
Ziel ist es mit jedem "langen" Tastendruck das Licht um 10% zu dimmern. Egal welcher Wert eingestellt ist.
Er geht dann auf jen jeweils vollen 10er Wert. NAch 0 kommt dann 100 und es geht wieder runter.
Mit "kurzem" Tastendruck wird zwischen 0 und 50 (Das reicht für 90% aller Fälle) gewechselt. Also quasi ein/aus.
Kann sein das meine Lösung eine Performance Sünde ist. Würds ja gerne anders machen.
Wobei ich auf meinem System sowas von keinen Performance Problemen habe. ;-)
Gruß Detlef
Performance ist zum teil einstellungssache. Wie du es magst.
Das problem ist wohl, dass ich bei 90 wieder auf 90 komme. Man muss eins abziehen. Ausserdem soll es modulo 10 sein.
Dann mache
Val = (int((val-1)/10))*10
Val = ((int((val-1)/10)+10)%10)*10
Sollte das if 0 ersparen
Nur falls du lust hast. Ich vermeide case wo ich kann
Zitat von: martinp876 am 17 Februar 2015, 21:04:47
Nur falls du lust hast. Ich vermeide case wo ich kann
Auf jeden Fall. Werds heute Abend mal versuchen einzubauen.
Gruß Detlef