Mehrfach schalten - Anregung gesucht

Begonnen von karo, 24 Dezember 2016, 18:04:16

Vorheriges Thema - Nächstes Thema

karo

Hallo zusammen,
ich habe eine Deckenlampe an einen Intertechno Aktor angeschlossen - fröhliches Weihnachtsbasteln :-).
Die Lampe kennt mehrere Helligkeitsstufen, die durch mehrfaches hintereinander schalten gewählt werden, also z.B. an, aus, an =75% Helligkeit. Ich würde nun gern diese Mehrfachschaltbefehle auf insgesamt 5 Schalter legen (100%, 75%, 50%, 25%, 0%). Wie mache ich das am besten - in welche Richtung recherchiere ich - oder gibt es so was schon?
Grüße
      Karsten

justme1968

vielleicht ein readingsProxy der der die helligkeitsstufe nun in passende blink umsetzt.

versuch aber vorher mal von hand ob das über funk überhaupt geht und nicht zu langsam ist.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

karo

Hallo Andre,
ja es funktioniert per Funk durch mehrfaches klicken. Die fünf Schalter sollten jedoch keine 5 eigenen Geräte sein, das wäre beim readingsProxy so, wenn ich es richtig verstanden habe. Mir wären 5 Zustände lieber, man könnte 5 Birnen mit unterschiedlicher Helligkeit nebeneinander darstellen und bei einem Tastendruck die Blink-Sequenzen absenden. Ich vermute, dass es so etwas schon gibt, z.B. bei Rollos: unten, halb auf, oben. Ich müsste dem IT-Gerät irgendwie mehrere Zustände beibringen.   
Grüße
Karsten

justme1968

du kannst einem readingsProxy über die setList beliebige kommandos und auch beliebig viele beibringen. das können einzelne kommandos wie unten, halb, oben sein oder auch ein pct mit slider mit 5 stufen.

in der setFn triggers du dann abhängig vom kommando die benötigte sequenz.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

karo

Hallo Andre,
nach einigen Experimenten noch einige Fragen, zunächst zu Deiner letzten Antwort:
> das können einzelne kommandos wie unten, halb, oben sein oder auch ein pct mit slider mit 5 stufen
ein pct mit slider mit 5 Stufen verstehe ich nicht pct = percent? - wie dann mit slider?

Versucht habe ich das folgende:

define ku.DeckeDimmer readingsProxy ku.DeckenLicht:state

dazu die setList 0 25 50 75 100
und valueFn auf {$LASTCMD}
Die setFn sieht wie folgt aus (aktueller experimenteller Status):

{
my $lastVal = ReadingsVal($hash->{NAME},"state",-1);
$lastVal = $lastVal eq "off" ? 0 : $lastVal; #unklar warum off
Log3 "ownProxy",3,"in setFn with CMD $CMD and lastVal $lastVal";
if ($CMD == 0 ){ return "off"; }
elsif ($CMD == 100) {return "on";}
elsif ($CMD == 75) {return "blink 2 0.2";}
}


Die Probleme:

  • Die Darstellung ist eine alphabetisch sortierte Liste also 100 < 75, ich bin mit meinen Kenntnissen nicht so weit, dass ich eine Ahnung hätte wie ich daraus 5 States mit 5 Glühbirnen unterschiedlicher Helligkeit machen könnte oder einen Slider
  • Gravierender: Nach einem blink ist die Lampe aus - ich müsste aber noch ein on nachsenden - mir ist nicht klar, wie ich das umsetzen könnte. Oder kann ich das verknüpfte device aus der setFn selbst schalten und einen Wert zurück geben, der danach kein set mehr auf dem verknüpften Device auslöst?
Grüße

justme1968

#5
wenn du in die set list ein <reading>:slider,0,25,100 einbaust bekommst du einen slider mit 5 stufen.

je nach dem ob du state verwenden willst oder ein anderes reading gibst du state oder z.b. pct oder was auch immer als reading an.


ja. genau. du kannst in der setFn selber ein oder mehrere set über fhem("...") aufrufen und dann undef zurück geben.

vermutlich ist es einfacher fhem("set on; sleep 0.5; set off; sleep 0.5; set on") zu verwenden als blink.


icons für den aktuellen zustand bekommst du mit passendem devStateIcon oder hiermit: https://wiki.fhem.de/wiki/Color#Farbige_Lampen_Icons.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

karo

Hallo Andre,
ich habe inzwischen etwas weiter experimentiert und folgendes gebastelt:

define ku.DeckeDimmer readingsProxy ku.DeckenLicht:xxx
attr ku.DeckeDimmer setList 0 25 50 75 100

xxx gibt es nicht, also muesste der state des Proxys vom state des Devices getrennt sein.
die valueFn habe ich nicht verändert, die setFn auf den folgenden Wert gesetzt:

{
my $lastVal = ReadingsVal($hash->{NAME},"state",-1);
$lastVal = $lastVal eq "off" ? 0 : $lastVal; #unklar warum off
my $commandChain = "set $DEVICE off";
my $delta = $lastVal - $CMD;
$delta /= 25;
if ($lastVal != $CMD)
{
     $delta = ($delta < 0) ? $delta + 4 : $delta;
     if ($CMD != 0)
     {
         $commandChain   = ($lastVal ==  0) ? "set $DEVICE on;"  : "";
         #falls aus: vorab anschalten - ist dann auf 100 %
         for (my $i = 0; $i < $delta; ++$i)
         {
             $commandChain .= "set $DEVICE off;set $DEVICE on;";
         }
     }
     readingsSingleUpdate($hash, 'state', $CMD, 1);
     fhem($commandChain);
}
Log3 "ownProxy",3,"in setFn with CMD $CMD and lastVal $lastVal, delta is $delta";
Log3 "ownProxy",3,"this leads to commandChain $commandChain";
#debug spaeter auf 5 setzen
return  undef;
}

also wie Dein Vorschlag nur nicht in valueFn sondern in setFn, beide habe ich aufgrund fehlendem Überblick noch nicht ganz verstanden, soweit ich es sehe, dürfte es jedoch keine Nachteile bei "meinem" Weg gehen.
Der Code funktioniert zunächst mal (Kurztest) - ich werde mich jetzt mal der Darstellung zuwenden, außer Du schreibst dass die setFn ungeeignet ist :-)
Grüße und Danke
Karsten

justme1968

sorry. valueFn oben war ein tippfehler. es muss natürlich setFn heissen. du hast also alles richtig gemacht.
#
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968