FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: karo am 24 Dezember 2016, 18:04:16

Titel: Mehrfach schalten - Anregung gesucht
Beitrag von: karo am 24 Dezember 2016, 18:04:16
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
Titel: Antw:Mehrfach schalten - Anregung gesucht
Beitrag von: justme1968 am 24 Dezember 2016, 18:35:22
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
Titel: Antw:Mehrfach schalten - Anregung gesucht
Beitrag von: karo am 25 Dezember 2016, 10:12:23
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
Titel: Antw:Mehrfach schalten - Anregung gesucht
Beitrag von: justme1968 am 25 Dezember 2016, 10:36:29
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.
Titel: Antw:Mehrfach schalten - Anregung gesucht
Beitrag von: karo am 26 Dezember 2016, 19:00:02
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:
Grüße
Titel: Antw:Mehrfach schalten - Anregung gesucht
Beitrag von: justme1968 am 26 Dezember 2016, 21:05:55
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 (https://wiki.fhem.de/wiki/Color#Farbige_Lampen_Icons).

gruss
  andre
Titel: Antw:Mehrfach schalten - Anregung gesucht
Beitrag von: karo am 26 Dezember 2016, 21:44:47
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
Titel: Antw:Mehrfach schalten - Anregung gesucht
Beitrag von: justme1968 am 26 Dezember 2016, 22:01:35
sorry. valueFn oben war ein tippfehler. es muss natürlich setFn heissen. du hast also alles richtig gemacht.
#