(gelöst)Hochdimmen abbrechen

Begonnen von jhohmann, 16 Oktober 2020, 15:52:55

Vorheriges Thema - Nächstes Thema

jhohmann

Hallo,
in der Küche habe ich jetzt neu zwei Leuchten als HUEDevice über deCONZ angebracht und kann diese auch schön über einen Taster ein- und ausschalten.
Jetzt hatte ich mir noch überlegt, dass man über langes Drücken an den Tastern noch das Dimmen aktivieren kann und wenn man den Taster loslässt, dass er bei der aktuellen Stufe stehen bleibt.
Ein set KuecheHerdLichtLinks pct 100 30 lässt die Lampe zwar schön dimmen, aber ich komme nicht dazwischen, um das abzubrechen.
Ich hatte auch schon mit einem at experimentiert, dass immer wieder neu definiert wird, und beim Loslassen kann ich das at einfach löschen, wenn es noch existiert.
sub incrementHerdLicht() {
my $pct = ReadingsNum("KuecheHerdLichtLinks", "pct", "");
if ($pct < 100) {
  $pct = $pct + 10;
  fhem("set KuecheHerdLichtLinks pct ".$pct.";set KuecheHerdLichtRechts pct ".$pct);
  fhem("define atIncrementHerdLicht at +00:00:02 {incrementHerdLicht()}");
}
}

Aber da komme ich vermutlich mit den Namen in Konflikt, da das erste at ja anscheinend noch aktiv ist. Einen Eintrag im Log bekomme ich dazu aber nicht.
Dynamisch den Namen des at anpassen gingen auch noch, aber dann wird das Löschen wieder schwieriger.
Hat jemand für das Problem eine Lösung?
Inzwischen weiß ich, dass nicht anstelle der Eigenberechnung des pct Wertes auch einfach dimUp sagen könnte. Das hilft mir für das Hochzählen aber auch nicht.
Wäre sehr dankbar?
Raspberry Pi 4 - bookworm / EnOcean - Rollo+Licht, deCONZ - Licht+Sensoren, ZWave - CO Messung, HMCCU mit piVCCU - Heizung+Rollo
plus dovecot, minidlna

jhohmann

Habe es zwischenzeitig selbst gelöst.
Mein Taster hat im State die zuletzt "getätigte" Schalterstellung. Damit kann ich in der Schleife erkennen, ob die Taste losgelassen wurde. Es gibt bestimmt noch Zustände, bei denen das schief gehen kann, aber mal schauen, wie sich das auf Dauer verhält.
Als Beispiel die Funktion zum Hochdimmen aus 99_myUtils.pm
sub incrementHerdLicht() {
  my $pct = ReadingsNum("KuecheHerdLichtLinks", "pct", "");
  my $schalter = ReadingsVal("SchalterHerdLicht", "state", "");
  #Log 1,"incrementHerdLicht : pct ".$pct." schalter ".$schalter;
  if ($pct < 100 && $schalter ne "1003") {
    fhem("set KuecheHerdLichtLinks dimUp;sleep 0.2;set KuecheHerdLichtRechts dimUp");
    fhem("sleep 0.5;{incrementHerdLicht()}");
  }
}
Raspberry Pi 4 - bookworm / EnOcean - Rollo+Licht, deCONZ - Licht+Sensoren, ZWave - CO Messung, HMCCU mit piVCCU - Heizung+Rollo
plus dovecot, minidlna