Hi Ihr,
folgendes Problem:
Ich hab einen HM-Zwischenstecker-Dimmer an dem eine Leuchte hängt, mit einer dimmbaren E17-Filament-LED-Birne. Das Problem ist, dass die zwar dimmbar ist, die Kennlinie jedoch alles andere als linear ist. Also wenn man von 100% auf 50% runter dimmt, dann tut sich erstmal nicht viel. Erst wenn man unter 30% dimmt, passiert wirklich was. Der dimmbare Bereich liegt effektiv zwischen 15% und 30%.
Das ist nun natürlich doof wenn man das selbst berücksichtigen muss beim Bedienen in FHEM. Gerade wenn man mehrere Leuchten zusammen auf z.B. 50% dimmen möchte, ist das doof, wenn eine so eine abweichende Kennlinie hat.
Nur war meine Idee, ein cmdalias anzulegen, welches sozusagen, die "set pct"-Kommandos für das entsprechende Device "abfängt", den Wert korrigiert und erst dann weiterleitet. Sieht dann so aus:
defmod sys_ca_lightSet cmdalias set wz_lightRed pct .* AS {setLightLedBulb($EVENT)}
Die Funktion sieht dann so aus:
sub setLightLedBulb {
my ($event) = @_;
Log 3, "setLightLedBulb: event: $event";
my @params = split " ", $event;
my $device = shift @params;
my $set = shift @params;
my $raw = shift @params;
my $extraparams = join " ", @params;
Log 3, "setLightLedBulb: Device: $device Raw: $raw";
my $val = getLedBulbCurveValue($raw);
my $cmd = "set $device pct $val $extraparams";
Log 3, "setLightLedBulb: cmd: $cmd";
fhem($cmd);
}
Die Funktion "getLedBulbCurveValue" nimmt den linearen Wunschwert entgegen (z.B. 50) und gibt den an die Kennwerte angeglichenen Wert zurück (z.B. 23).
Die Idee ist, dass diese Korrektur ohne weitere Anpassungen "global" in FHEM für diese Leuchte funktioniert, da es für alle "set pct"-Befehle an das Device greifen sollte. Eigentlich ist das auch so.
Jedoch zwei Probleme sind aufgefallen:
1. Einerseits merkt FHEM, dass das Ganze ja einen rekursiven Aufruf darstellt, da ja der cmdalias am Ende auch wieder "set pct" aufruft. FHEM meldet dann "cmdalias sys_ca_lightSet called recursively, skipping execution". Ist das irgendwie ein Problem? Generell stört mich das nicht, wenn es nur geloggt wird und aber korrekt gehandhabt wird.
2. Viel schlimmer: Ich hab für alle meine HM-Dimmer-Leuchten "webcmd pct" gesetzt, so dass in FHEMWEB ein Slider für die Helligkeit angezeigt wird. Jetzt nach anlegen des cmdalias sind die Slider in FHEMWEB verschwunden und es taucht stattdessen nur der String "pct" auf. Also offenbar stört das cmdalias das FHEMWEB? Versteht jemand, woran das liegt? Und viel wichtiger: gibt es dafür wohl eine Lösung?
List der Leucht:
Internals:
DEF 2072A5
FUUID 5c42ef58-f33f-af31-0ab8-6670dd79f4bd018b
IODev sys_culHm
LASTInputDev sys_culHm
MSGCNT 1
NAME wz_lightRed
NR 120
NTFY_ORDER 50-wz_lightRed
STATE on
TYPE CUL_HM
chanNo 01
disableNotifyFn 1
lastMsg No:EA - t:10 s:2072A5 d:F15544 0601C8003A
peerList wz_virtBtnLight_0_1,wz_virtBtnLight_0_2,wz_virtBtnLight_100_1,wz_virtBtnLight_100_2,wz_virtBtnLight_RDC_100_10,wz_virtBtnLight_RDC_100_3
protLastRcv 2021-09-07 21:52:29
protRcv 1 last_at:2021-09-07 21:52:29
protSnd 2 last_at:2021-09-07 21:52:29
protState CMDs_done
rssi_at_sys_culHm cnt:1 min:-58 max:-58 avg:-58 lst:-58
rssi_sys_culHm cnt:1 min:-58 max:-58 avg:-58 lst:-58
sys_culHm_MSGCNT 1
sys_culHm_RAWMSG 0501003AEAA4102072A5F155440601C8003A
sys_culHm_RSSI -58
sys_culHm_TIME 2021-09-07 21:52:29
READINGS:
2021-09-07 21:47:39 CommandAccepted yes
2019-07-20 10:25:52 D-firmware 2.2
2019-07-20 10:25:52 D-serialNr KEQ0041260
2021-09-07 21:52:29 IODev sys_culHm
2019-07-20 10:26:51 PairedTo 0xF15544
2019-07-20 10:26:51 R-pairCentral 0xF15544
2019-07-20 10:26:52 R-powerUpAction off
2019-07-20 10:26:54 R-wz_virtBtnLight_0_1-lgActionTypeDim toggelDim
2019-07-20 10:26:54 R-wz_virtBtnLight_0_1-lgOnLevel 100 %
2019-07-20 10:26:54 R-wz_virtBtnLight_0_1-shActionTypeDim jmpToTarget
2019-07-20 10:26:54 R-wz_virtBtnLight_0_1-shOnLevel 100 %
2019-07-20 10:26:57 R-wz_virtBtnLight_0_2-lgActionTypeDim toggelDim
2019-07-20 10:26:57 R-wz_virtBtnLight_0_2-lgOnLevel 100 %
2019-07-20 10:26:57 R-wz_virtBtnLight_0_2-shActionTypeDim jmpToTarget
2019-07-20 10:26:57 R-wz_virtBtnLight_0_2-shOnLevel 100 %
2019-07-20 10:26:55 R-wz_virtBtnLight_100_1-lgActionTypeDim toggelDim
2019-07-20 10:26:55 R-wz_virtBtnLight_100_1-lgOnLevel 100 %
2019-07-20 10:26:55 R-wz_virtBtnLight_100_1-shActionTypeDim jmpToTarget
2019-07-20 10:26:55 R-wz_virtBtnLight_100_1-shOnLevel 100 %
2019-07-20 10:27:00 R-wz_virtBtnLight_100_2-lgActionTypeDim toggelDim
2019-07-20 10:27:00 R-wz_virtBtnLight_100_2-lgOnLevel 100 %
2019-07-20 10:27:00 R-wz_virtBtnLight_100_2-shActionTypeDim jmpToTarget
2019-07-20 10:27:00 R-wz_virtBtnLight_100_2-shOnLevel 100 %
2019-07-20 10:27:01 R-wz_virtBtnLight_RDC_100_10-lgActionTypeDim toggelDim
2019-07-20 10:27:01 R-wz_virtBtnLight_RDC_100_10-lgOnLevel 100 %
2019-07-20 10:27:01 R-wz_virtBtnLight_RDC_100_10-shActionTypeDim jmpToTarget
2019-07-20 10:27:01 R-wz_virtBtnLight_RDC_100_10-shOnLevel 100 %
2019-07-20 10:26:58 R-wz_virtBtnLight_RDC_100_3-lgActionTypeDim toggelDim
2019-07-20 10:26:58 R-wz_virtBtnLight_RDC_100_3-lgOnLevel 100 %
2019-07-20 10:26:58 R-wz_virtBtnLight_RDC_100_3-shActionTypeDim jmpToTarget
2019-07-20 10:26:58 R-wz_virtBtnLight_RDC_100_3-shOnLevel 100 %
2019-07-20 10:26:51 RegL_00. 00:00 02:01 0A:F1 0B:55 0C:44 15:FF 16:00
2019-07-20 10:26:52 RegL_01. 00:00 30:06 32:50 33:64 34:4B 35:50 56:00 57:24
2019-07-20 10:26:54 RegL_03.wz_virtBtnLight_0_1 00:00 01:00 02:00 03:00 04:32 05:64 06:00 07:FF 08:00 09:FF 0A:01 0B:55 0C:55 0D:55 0E:20 0F:00 10:00 11:C8 12:00 13:0A 14:0A 15:00 16:C8 17:0A 18:0A 19:04 1A:04 81:00 82:00 83:00 84:32 85:64 86:00 87:FF 88:00 89:FF 8A:26 8B:14 8C:52 8D:63 8E:20 8F:00 90:14 91:C8 92:0A 93:05 94:05 95:00 96:C8 97:0A 98:0A 99:04 9A:04
2019-07-20 10:26:57 RegL_03.wz_virtBtnLight_0_2 00:00 01:00 02:00 03:00 04:32 05:64 06:00 07:FF 08:00 09:FF 0A:01 0B:55 0C:55 0D:55 0E:20 0F:00 10:00 11:C8 12:00 13:14 14:14 15:00 16:C8 17:0A 18:0A 19:04 1A:04 81:00 82:00 83:00 84:32 85:64 86:00 87:FF 88:00 89:FF 8A:26 8B:14 8C:52 8D:63 8E:20 8F:00 90:14 91:C8 92:0A 93:05 94:05 95:00 96:C8 97:0A 98:0A 99:04 9A:04
2019-07-20 10:26:55 RegL_03.wz_virtBtnLight_100_1 00:00 01:00 02:00 03:00 04:32 05:64 06:00 07:FF 08:00 09:FF 0A:01 0B:22 0C:22 0D:22 0E:20 0F:00 10:00 11:C8 12:00 13:0A 14:0A 15:00 16:C8 17:0A 18:0A 19:04 1A:04 81:00 82:00 83:00 84:32 85:64 86:00 87:FF 88:00 89:FF 8A:26 8B:14 8C:52 8D:63 8E:20 8F:00 90:14 91:C8 92:0A 93:05 94:05 95:00 96:C8 97:0A 98:0A 99:04 9A:04
2019-07-20 10:27:00 RegL_03.wz_virtBtnLight_100_2 00:00 01:00 02:00 03:00 04:32 05:64 06:00 07:FF 08:00 09:FF 0A:01 0B:22 0C:22 0D:22 0E:20 0F:00 10:00 11:C8 12:00 13:14 14:14 15:00 16:C8 17:0A 18:0A 19:04 1A:04 81:00 82:00 83:00 84:32 85:64 86:00 87:FF 88:00 89:FF 8A:26 8B:14 8C:52 8D:63 8E:20 8F:00 90:14 91:C8 92:0A 93:05 94:05 95:00 96:C8 97:0A 98:0A 99:04 9A:04
2019-07-20 10:27:01 RegL_03.wz_virtBtnLight_RDC_100_10 00:00 01:00 02:00 03:00 04:32 05:64 06:00 07:FF 08:00 09:FF 0A:01 0B:22 0C:22 0D:22 0E:20 0F:00 10:00 11:C8 12:00 13:2A 14:2A 15:00 16:C8 17:0A 18:0A 19:04 1A:04 81:00 82:00 83:00 84:32 85:64 86:00 87:FF 88:00 89:FF 8A:26 8B:14 8C:52 8D:63 8E:20 8F:00 90:14 91:C8 92:0A 93:05 94:05 95:00 96:C8 97:0A 98:0A 99:04 9A:04
2019-07-20 10:26:58 RegL_03.wz_virtBtnLight_RDC_100_3 00:00 01:00 02:00 03:00 04:32 05:64 06:00 07:FF 08:00 09:FF 0A:01 0B:22 0C:22 0D:22 0E:20 0F:00 10:00 11:C8 12:00 13:1E 14:1E 15:00 16:C8 17:0A 18:0A 19:04 1A:04 81:00 82:00 83:00 84:32 85:64 86:00 87:FF 88:00 89:FF 8A:26 8B:14 8C:52 8D:63 8E:20 8F:00 90:14 91:C8 92:0A 93:05 94:05 95:00 96:C8 97:0A 98:0A 99:04 9A:04
2021-09-07 21:47:39 _autoCmd_smartlight 100
2020-10-20 23:25:15 cfgState ok
2021-09-07 21:52:29 commState CMDs_done
2021-09-07 21:52:29 deviceMsg on (to VCCU)
2021-09-07 21:52:29 dim stop:on
2021-09-07 21:52:29 level 100
2020-04-26 01:00:14 levelMissed desired:70.5
2021-09-07 21:52:29 overheat off
2021-09-07 21:52:29 overload off
2021-09-07 21:52:29 pct 100
2021-09-07 21:52:16 peerList wz_virtBtnLight_0_1,wz_virtBtnLight_0_2,wz_virtBtnLight_100_1,wz_virtBtnLight_100_2,wz_virtBtnLight_RDC_100_10,wz_virtBtnLight_RDC_100_3
2021-09-07 21:52:29 recentStateType info
2021-09-07 21:52:29 reduced off
2021-09-07 21:52:29 state on
2021-09-07 21:52:29 timedOn off
2021-09-07 21:46:41 trigLast fhem:02
helper:
HM_CMDNR 234
cSnd ,01F155442072A5010E
lastMsgTm 1631044349.97052
mId 00A4
peerFriend peerSens,peerVirt
peerIDsState complete
peerOpt 3:dimmer
regLst 0,1,3p
rxType 1
supp_Pair_Rep 0
cmds:
TmplKey wz_virtBtnLight_0_1,wz_virtBtnLight_0_2,wz_virtBtnLight_100_1,wz_virtBtnLight_100_2,wz_virtBtnLight_RDC_100_10,wz_virtBtnLight_RDC_100_3:no:1631044336.20373
TmplTs 1631044336.20373
cmdKey 1:1:0::wz_lightRed:00A4:01:wz_virtBtnLight_0_1,wz_virtBtnLight_0_2,wz_virtBtnLight_100_1,wz_virtBtnLight_100_2,wz_virtBtnLight_RDC_100_10,wz_virtBtnLight_RDC_100_3
cmdLst:
assignHmKey noArg
clear [(readings|trigger|register|oldRegs|rssi|msgEvents|{msgErrors}|attack|all)]
deviceRename -newName-
down 'change:'[(0..100;1|{10})] [(-ontime-|{0})] [(-ramptime-|{2.4})] 'ontime: 0 = forever'
eventL -peer- -cond-
eventS -peer- -cond-
fwUpdate -filename- [-bootTime-]
getConfig noArg
getDevInfo noArg
getRegRaw (List0|List1|List2|List3|List4|List5|List6|List7) [-peerChn-]
getVersion noArg
inhibit [(on|{off})]
off noArg
old noArg
on noArg
on-for-timer -ontime- [(-ramptime-|{})]
on-till -time- [(-ramptime-|{})]
pair noArg
pct (-value-|old) [(-ontime-|{0})] [(-ramptime-|{2.4})] 'ontime: 0 = forever'
peerBulk -peer1,peer2,...- [({set}|unset)]
peerIODev [IO] -btn- [({set}|unset)] 'not for future use'
peerSmart -peerOpt-
press [(long|{short})] [(-peer-|{self01})] [(-repCount-|{0})] [(-repDelay-|{0.25})]
pressL [(-peer-|{self01})]
pressS [(-peer-|{self01})]
raw -data- [...]
regBulk -list-.-peerChn- -addr1:data1- [-addr2:data2-]...
regSet [(prep|{exec})] -regName- -value- [-peerChn-]
reset noArg
sign [(on|{off})]
statusRequest noArg
stop noArg
toggle noArg
tplDel -tplDel-
tplSet_0 -tplChan-
tplSet_wz_virtBtnLight_0_1 -tplPeer-
tplSet_wz_virtBtnLight_0_2 -tplPeer-
tplSet_wz_virtBtnLight_100_1 -tplPeer-
tplSet_wz_virtBtnLight_100_2 -tplPeer-
tplSet_wz_virtBtnLight_RDC_100_10 -tplPeer-
tplSet_wz_virtBtnLight_RDC_100_3 -tplPeer-
unpair noArg
up 'change:'[(0..100;1|{10})] [(-ontime-|{0})] [(-ramptime-|{2.4})] 'ontime: 0 = forever'
lst:
condition slider,0,1,255
peer wz_virtBtnLight_0_1,wz_virtBtnLight_0_2,wz_virtBtnLight_100_1,wz_virtBtnLight_100_2,wz_virtBtnLight_RDC_100_10,wz_virtBtnLight_RDC_100_3
peerOpt bd_doorContact,bd_virtTempWeather,bd_wandTaster_Btn1,bd_wandTaster_Btn2,fl_benPowerMeter_SenF,fl_benPowerMeter_SenI,fl_benPowerMeter_SenPwr,fl_benPowerMeter_SenU,fl_eingangTaster_Btn1,fl_eingangTaster_Btn2,fl_lightChainVirt,fl_lightChrystalVirt,fl_virtActor_entrance_Btn1,fl_virtActor_entrance_Btn2,fl_virtActor_wall_Btn1,fl_virtActor_wall_Btn2,fl_virtBtnLight_0_1,fl_virtBtnLight_0_2,fl_virtBtnLight_100_03,fl_virtBtnLight_100_1,fl_virtBtnLight_100_2,fl_virtBtnLight_30_2,fl_virtBtnLight_30_3,fl_virtBtnLight_55_0_2,ku_therme_SenF,ku_therme_SenI,ku_therme_SenPwr,ku_therme_SenU,ku_virtActor_Btn1,ku_virtActor_Btn2,ku_wandTaster_Btn1,ku_wandTaster_Btn2,sz_bettTaster_Btn1,sz_bettTaster_Btn2,sz_lightAmbientVirt,sz_lightSpotVirt,sz_presenceTaster_Btn1,sz_presenceTaster_Btn2,sz_virtActor_bed_Btn1,sz_virtActor_bed_Btn2,sz_virtActor_entrance_Btn1,sz_virtActor_entrance_Btn2,sz_virtBtnLight_0_1,sz_virtBtnLight_0_2,sz_virtBtnLight_100_1,sz_virtBtnLight_70_2,sz_wndContact,wz_lightCrystalVirt,wz_lightDeskVirt,wz_lightSpotVirt,wz_virtActor_Btn1,wz_virtActor_Btn2,wz_virtBtnLight_0_1,wz_virtBtnLight_0_2,wz_virtBtnLight_100_1,wz_virtBtnLight_100_2,wz_virtBtnLight_RDC_100_10,wz_virtBtnLight_RDC_100_3,wz_wandTaster_Btn1,wz_wandTaster_Btn2,wz_wndContact
tplChan
tplDel
tplPeer DimOff_long,DimOff_short,DimOn_long,DimOn_short,SwCondAbove_long,SwCondAbove_short,SwCondBelow_long,SwCondBelow_short,SwOnCond_long,SwOnCond_short,motionOnDim_long,motionOnDim_short
rtrvLst:
cmdList [({short}|long)]
deviceInfo [({short}|long)]
list [({normal}|full)]
param -param-
reg -addr- -list- [-peerChn-]
regList noArg
regTable noArg
regVal -addr- -list- [-peerChn-]
saveConfig [-filename-]
tplInfo noArg
dir:
cur stop
expert:
def 1
det 0
raw 1
tpl 0
io:
flgs 0
newChn +2072A5,00,00,00
nextSend 1631044350.26182
rxt 0
vccu VCCU
p:
2072A5
00
00
00
prefIO:
sys_culHm
mRssi:
mNo EA
io:
sys_culHm:
-52
-52
peerIDsH:
00000000 broadcast
F1554416 wz_virtBtnLight_0_1
F155441A wz_virtBtnLight_100_1
F155441B wz_virtBtnLight_0_2
F155441C wz_virtBtnLight_RDC_100_3
F155441D wz_virtBtnLight_100_2
F155441F wz_virtBtnLight_RDC_100_10
prt:
bErr 0
sProc 0
rspWait:
tryMsg:
q:
qReqConf
qReqStat
role:
chn 1
dev 1
prs 1
rpt:
IO sys_culHm
flg A
ts 1631044349.97052
ack:
HASH(0x55ff9d7e9350)
EA8002F155442072A500
rssi:
at_sys_culHm:
avg -58
cnt 1
lst -58
max -58
min -58
sys_culHm:
avg -58
cnt 1
lst -58
max -58
min -58
tmpl:
Attributes:
IOgrp VCCU:sys_culHm
alias WZ Rot
assistantName Rot
autoReadReg 4_reqStatus
devStateIcon { VBSUtils_GetDimmerDevStateIcon($name) }
dimSteps 17,23,40,100
event-on-change-reading pct,state,dim
event-on-update-reading 1
expert defReg,rawReg
firmware 2.2
group Licht
icon light_floor_lamp
model HM-LC-DIM1T-PL-2
peerIDs 00000000,F1554416,F155441A,F155441B,F155441C,F155441D,F155441F
room GoogleAssistant,Wohnzimmer
serialNr KEQ0041260
subType dimmer
userattr dimSteps
webCmd pct
Wenn ich das cmdalias disable und dann FHEM neu starte, dann legt sich das Problem wieder und die Slider tauchen in FHEMWEB wieder auf. Screenshots im Anhang.
Hat dazu jemand eine Idee? Danke!
Zitat1. Einerseits merkt FHEM, dass das Ganze ja einen rekursiven Aufruf darstellt [...] Ist das irgendwie ein Problem?
Nicht wirklich, man kann es mit "attr cmdalias verbose 2" abstellen.
Zitat2. Viel schlimmer: [...] Jetzt nach anlegen des cmdalias sind die Slider in FHEMWEB verschwunden [...] Also offenbar stört das cmdalias das FHEMWEB?
So einfach ist das nicht, mit dem folgenden Test-Konfig gibt es keine Probleme:
define w FHEMWEB 8083
defmod d1 dummy
attr d1 setList pct:slider,1,1,100 on off
attr d1 webCmd pct
define c1 cmdalias set d1 pct .* AS set d1 pct 7
Und ich bin grad zu faul dein list in "list -r" umzuwandeln, damit ich es nachstellen kann :)
Hi Rudi,
ich sitze auch gerade wieder dran und ich bin mir mittlerweile einigermaßen sicher, dass das mit dem cmdalias eine falsche Fährte war, sorry! Ich kann das Phänomen jetzt zumindest sicher reproduzieren und es tritt auch auf, nachdem ich das cmdalias komplett gelöscht habe.
Ich hab momentan noch gar keine Idee, was dahinter steckt. aber es fehlen dann nicht nur bei den Leuchten die Helligkeitsslider, sondern es fehlen offenbar alle Slider in FHEMWEB (wie in den Screenshots). Zum Beispiel auch bei dem Lautstärkeregler meines Verstärkers.
Ich muss erstmal noch selbst suchen, denke ich. Wenn ich einen Anhaltspunkt habe, melde ich mich nochmal. Nochmal sorry für die (vemutl.) falsche Fährte mit dem cmdalias :/
Ich weiß bzgl. dieser Slider in FHEMWEB gar nicht, wo ich anfangen könnte zu suchen. Kannst du mir einen groben Fingerzeig geben, in welcher Richtung ich ermitteln könnte? Wie könnte FHEMWEB auf die Idee kommen, statt des Slider-Widgets nur den String "pct" anzuzeigen?
EDIT:
Achso und nochmals sorry: "list -r" kannte ich noch nicht.
Argh, ok, ich weiß, woran es liegt. Ich hatte mir diese besagte Funktion geschrieben:
sub getLedBulbCurveValue {
my ($x) = @_;
%data = (100, 100,
90, 46,
50, 26,
25, 17,
20, 15,
10, 14,
0, 0,
);
return undef if (!exists($data{0}));
return undef if (!exists($data{100}));
my @sortk = sort { $data{$a} <=> $data{$b} } keys %data;
for my $i (1 .. $#sortk) {
my $in_lower = $sortk[$i - 1];
my $in_upper = $sortk[$i];
my $lower = $data{$in_lower};
my $upper = $data{$in_upper};
if ($in_lower <= $x && $in_upper >= $x) {
my $k = $x - $in_lower;
my $diff = $in_upper - $in_lower;
my $fac = $k / $diff;
my $sol = $lower + (($upper - $lower) * $fac);
return $sol;
}
}
}
Leider fehlt bei der Deklaration der Variable "data" das "my", so daß ich damit die in FHEM global existierende Variable "data" plätte und dann eben ziemlich komische Sachen passieren... :o