Homebridge - Dimmer immer erst auf 100%

Begonnen von hive2015, 13 August 2016, 11:05:01

Vorheriges Thema - Nächstes Thema

stzerre

#45
Hallo zusammen,

dieser Thread ist schon ziemlich alt, jedoch glaube ich eine funktionierende Lösung gefunden zu haben.
Vielleicht gibt's hier irgendwo im Forum auch eine bessere Variante, allerdings funktioniert diese für mich recht zuverlässig.
Dimmen, an- und ausschalten funktioniert.

Ich habe über folgenden cmdAlias (siehe Post von Oberlon 17.01.2017) und diesem Homebridgemapping meine Enocean Opus Bridge LED-Dimmer erfolgreich einbinden können:

cmdalias:
define c_sirion cmdalias set .* dim .* AS {if(ReadingsAge($EVTPART0, "state", 0) > 1) {fhem("set $EVTPART0 dim $EVTPART2")}}

homebridgeMapping:
clear
Brightness=dim,minValue=1,maxValue=99,minStep=1,cmd=dim
On=state,cmdOn=dim+100,cmdOff=dim+0


soweit ich das überblicken kann verursachen die zwei Homebridge Kommandos beim Dimmen (Dimmwert und zusätzliches ON) immernoch dieses Problem, dass die Dimmer immer zwischendrin auf 100% schalten oder sich entweder dimmen oder ein- und ausschalten lassen.
Dadurch hab' ich versucht, dass sich das On-Kommando der Homebridge beim dimmen herauszufiltern und gleichzeitig aber ein simples Einschalten zu ermöglichen.
Am besten ist es gelungen, wenn sich die beiden Wertebereiche nicht überlappen.
DimValue von 1 bis 99 und ON entspricht dim+100 und Off dim+0.
Vielleicht könnte da jemand, der damit mehr Erfahrung hat nochmal nen Blick drauf werfen. Ich denke, dass es so zufriedenstellend funktionieren könnte. Gibt es mittlerweile vielleicht sogar bessere Möglichkeiten?

Vielen Dank und schöne Grüße

jsChris

#46
Hi,

ja, dieses Thema ist alt. Aber so sehr ich auch im Forum gesucht habe, ich habe nichts besseres gefunden. Wie stzerre schon geschrieben hat, ist die einfachste Variante, einen default Wert für den dim Wert (bei mir pct) anzugeben und bei Brightness den min/maxValue anzupassen.

Für mich war das bei meinem Homematic Dimmer HmIP-FDT etwas angenehmer gelöst mit:


clear
Brightness=pct,minValue=1,maxValue=99,minStep=1,cmd=pct,delay=true
On=state,cmdOn=pct+20,cmdOff=pct+0


Damit wollte ich mich aber nicht zufrieden geben, weshalb ich die vorherigen Antworten aufgegriffen und etwas erweitert habe, da ich gerne den zuletzt verwendeten Dim-Wert benutzen wollte.

Zuerst einmal mit einem Userreading, das mir den letzten Dim-Wert speichert, da es dafür kein Reading gibt.


pctCache {(ReadingsNum($NAME,"pct",0) > 0 && ReadingsNum($NAME,"pct",0) < 100) ? ReadingsNum($NAME,"pct",20) : ReadingsNum($NAME,"pctCache",20)}


Nun verwende ich pctCache im homebridgemapping:


clear
Brightness=pct,minValue=1,maxValue=99,minStep=1,cmd=pct,delay=true
On=state,cmdOn=pctCache,cmdOff=pct+0


Nun kann man pctCache aber noch nicht benutzen, da es kein set Befehl ist, die Lösung geht über den cmdalias :


define c_pctCache cmdalias set <device> pctCache AS { setPCTCache($EVENT);  }


ODER direkt für alle devices:


define c_pctCacheAll cmdalias set .* pctCache .* AS { setPCTCache($EVENT);  }


Ich benutze hier aus Faulheit eine function in MyUtils, da ich gerne meine Funktionen alle beisammen habe.


sub setPCTCache($) {
my ($event) = @_;
my ($device,$reading)=split(/\s/,$event);
my $pct = ReadingsNum($device,'pct',0);
my $cache = ReadingsNum($device,$reading,20);
if($pct == 0) { fhem("set $device pct $cache"); }
}


Wahrscheinlich kann man das auch eleganter lösen...

Viele Grüße
Chris

wires.io

Bei meinem Homematic Dimmer funktioniert das ganz gut:

homebridgemapping clear \ On=state,valueOff=off,cmdOff=off,cmdOn=cmdOn_ \ Brightness=pct,minValue=0,maxValue=100,minStep=1,cmd=pct,delay=true

und

userReadings cmdOn_ {if(ReadingsVal($name,"state","") eq "off") {return "on"} elsif(ReadingsVal($name,"state","") eq "on") {return ""}}