Hallo zusammen,
ich habe heute meinen ersten HM-Dimmer eingebaut (HM-LC-Dim1TPBU-FM).
Hat auch alles prima geklappt, jetzt stehe ich aber beim structure ein bisschen ratlos da.
Bisher hatte ich ein structure für 4 Lichtschalter (HM-LC-Sw1PBU-FM).
Durch
clientstate_behavior: relative
clientstate_priority: on off
hat der structure mir auch brav angezeigt, wenn mindestens eine Lampe an war.
Mit dem Dimmer klappt das nur, wenn der Dimmer auf 100% steht, weil er nur dann "on" im State stehen hat.
Ziel wäre es, wenn structure "on" anzeigt, wenn entweder eine der Lampen an ist oder der Dimmer auf > 0 steht.
Ich habe jetzt länger gesucht und dieser Thread (http://forum.fhem.de/index.php?topic=10077.0) passt am ehesten, aber da wird keine Lösung beschrieben (und da er ziemlich alt ist, starte ich hier mal einen neuen Thread).
Gibt es eine Möglichkeit mein Ziel zu erreichen, ohne dass ich clientstate_priority auf "on|1|2|...|98|99 off" setze?
Das denke ich mal würde auch zum Ziel führen, aber das geht doch bestimmt eleganter, oder? ;)
Vielen Dank schon mal!
attr dimmerdevice structure_map pct:^[1-9][0-9]{0,2}:on pct:^0$:off
Vielen Dank!
Klingt logisch. Man sagt nicht der structure, wann der Dimmer on ist, sondern man sagt dem Dimmer, wann es on sagen soll.
Leidet meldet mir fhem:
wz_licht_dimmer_Sw: unknown attribute structure_map. Type 'attr wz_licht_dimmer_Sw ?' for a detailed list.
Ich habe es mit dem dimmerdevice selbst und auch mit seinem channel_01 (wo on/off/pct angegeben werden kann) probiert.
Was mache ich falsch?
Ich zitier mal die Commandref, denke dann siehst du warum du natürlich die Meldung erhälst.
ZitatDefine
define <name> structure <struct_type> <dev1> <dev2> ...
...
Zitat
Attributes
<struct_type>_map
With this attribute, which has to specified for the structure- member, you can redefine the value reported by a specific structure-member for the structure value. The attribute has three variants:
readingName
take the value from readingName instead of state.
oldVal:newVal
if the state reading matches oldVal, then replace it with newVal
readingName:oldVal:newVal
if readingName matches oldVal, then replace it with newVal
Zitat von: rapster am 30 Januar 2016, 23:32:51
Ich zitier mal die Commandref, denke dann siehst du warum du natürlich die Meldung erhälst....
Leider nicht.
Ich habe zwar verstanden, dass es nicht "structure_map" heißen muss, sondern (in meinem Fall) "Lichter_map", aber trotzdem klappt es nicht.
Ich habe folgendes:
define lichter_vorne structure Lichter ez_licht wz_licht wz_licht_klein ku_licht wz_licht_dimmer_Sw
Wobei "wz_licht_dimmer_Sw" der Channel_01 des Dimmers ist, weil dort der State on/off drin steht und dort auch das Attribut pct existiert.
Wenn ich das hier probiere:
attr wz_licht_dimmer_Sw Lichter_map pct:^[1-9][0-9]{0,2}:on pct:^0$:off
Sagt er mir, dass es das Attribut nicht gibt.
Wenn ich das ganze für den Dimmer selbst mache, dann wird das Attribut hinterlegt:
attr wz_licht_dimmer Lichter_map pct:^[1-9][0-9]{0,2}:on pct:^0$:off
Das Attribut ist zwar beim Device vorhanden, aber funktionieren tut es nicht. Structure geht auf on, nur wenn der Dimmer auch auf on steht.
Der Dimmer ist aber auch gar nicht "structure-member" ist. Laut Commandref muss ja die _map beim structure-member hinterlegt werden, was in diesem Fall der channel_01 des Dimmers ist, der aber das Attribut nicht kennt.
Sorry, ich versuche es ja zu verstehen, aber irgendwie klappt das mit dem Verstehen nicht.
Ich habe das Gerät nicht hier. Aber klappt es so?
attr wz_licht_dimmer_Sw Lichter_map pct:[1-9]:on [1-9][0-9]:on 0:off
MfG
Bei der <structure>_map in der Variante 2 und 3 (d.h. mit ein oder zwei Doppelpunkten) wird vor dem Regexp noch ein ^ eingefuegt, das ist leider nicht dokumentiert. Aus diesem Grund funktioniert vermutlich der erste Vorschlag nicht.
Um den zweiten Vorschlag zu bewerten muesste man wissen, welche Werte state bzw. pct aufnehmen kann.
Etwas irritierend ist, dass fuer Werte von 1-9 das Reading pct abgelesen wird, sonst aber auf state zugegriffen wird.
1. Vorschlag funktioniert bei dem HM Dimmer HM-LC-Dim1T-FM, kann also nicht an einer falschen regexp, oder dem doppelten ^ liegen.
Der HM-LC-Dim1T-FM hat allerdings keine Channels, das reading "pct" muss natürlich in dem Structure member device existieren, evtl. heisst es bei deinem
dimmer anders?
Poste mal ein list deines Dimmers bitte.
Danke Ralf und Rudolf.
Es liegt aber wahrscheinlich an der Konstellation mit dem Channel.
@rapster:
Das ist das List des Dimmers:
//"edit" während ich den Post schreibe:
Ich wollte zu den Lists noch die "attr device ?" hier mitliefern und da ist mir aufgefallen, dass das Attribut Lichter_Map jetzt auch beim Channel dabei ist.
Ich bin mir zu 99% sicher, dass ich gestern genau den gleichen Befehl ("attr wz_licht_dimmer_Sw Lichter_map pct:^[1-9][0-9]{0,2}:on pct:^0$:off") probiert hatte, weil ich in gerade aus der gleichen Text-Datei raus kopiert habe. Jetzt klappt es aber.
Zwischen gestern und heute lagen ein paar Neustarts des Servers, aber ich habe keine Ahnung, warum es jetzt geht.
Sorry, wenn ich irgendwas falsch gemacht habe und Ihr deswegen unnötigen Aufwand hattet.
Vielen Dank nochmal an alle!
Hier trotzdem mal die Lists (weiß zwar nicht wofür, aber ich lass die mal drin ;) ).
Internals:
DEF 3B7C3E
HMLAN1_MSGCNT 93
HMLAN1_RAWMSG R99824202,0001,C8937B8B,FF,FFC3,5480023B7C3E2865070101C6203DC8
HMLAN1_RSSI -61
HMLAN1_TIME 2016-01-31 22:06:41
IODev HMLAN1
LASTInputDev HMLAN1
MSGCNT 93
NAME wz_licht_dimmer
NR 773
NTFY_ORDER 50-wz_licht_dimmer
STATE CMDs_done
TYPE CUL_HM
channel_01 wz_licht_dimmer_Sw
channel_02 wz_licht_dimmer_Sw1_V_01
channel_03 wz_licht_dimmer_Sw1_V_02
lastMsg No:54 - t:02 s:3B7C3E d:286507 0101C6203DC8
protCmdDel 2
protIOerr 1 last_at:2016-01-31 15:53:01
protLastRcv 2016-01-31 22:06:41
protResnd 1 last_at:2016-01-31 15:54:12
protSnd 92 last_at:2016-01-31 22:06:36
protState CMDs_done
rssi_HMLAN1 max:-60 avg:-60.66 cnt:3 lst:-61 min:-61
rssi_at_HMLAN1 cnt:93 avg:-59.97 max:-59 min:-62 lst:-61
CHANGETIME:
Helper:
Dblog:
Poweron:
Mydblog:
TIME 1454251977.26308
VALUE 2016-01-31 15:52:57
State:
Mydblog:
TIME 1454274401.29562
VALUE CMDs_done
Readings:
2016-01-30 22:57:14 CommandAccepted yes
2016-01-30 10:37:24 D-firmware 2.7
2016-01-30 10:37:24 D-serialNr MEQ0396315
2016-01-31 15:54:03 PairedTo 0x286507
2016-01-30 10:37:31 R-pairCentral 0x286507
2016-01-31 15:54:03 RegL_00. 02:81 0A:28 0B:65 0C:07 15:FF 18:00 00:00
2016-01-30 23:27:32 level set_50
2016-01-31 15:52:57 powerOn 2016-01-31 15:52:57
2016-01-31 22:06:41 state CMDs_done
Helper:
HM_CMDNR 84
PONtest 0
cSnd 112865073B7C3E0201000320FFFF,112865073B7C3E02017E0320FFFF
mId 0068
rxType 1
Expert:
def 1
det 0
raw 1
tpl 0
Io:
newChn +3B7C3E,00,00,00
nextSend 1454272698.3091
prefIO
rxt 0
vccu
p:
3B7C3E
00
00
00
Mrssi:
mNo 54
Io:
HMLAN1 -59
Prt:
bErr 0
sProc 0
Rspwait:
Q:
qReqConf
qReqStat 01
Role:
dev 1
prs 1
Rssi:
Hmlan1:
avg -60.6666666666667
cnt 3
lst -61
max -60
min -61
At_hmlan1:
avg -59.9784946236559
cnt 93
lst -61
max -59
min -62
Shadowreg:
Vdim:
idPhy 3B7C3E
idV2 3B7C3E
idV3 3B7C3E01
Attributes:
IODev HMLAN1
autoReadReg 4_reqStatus
expert 2_raw
firmware 2.7
model HM-LC-Dim1TPBU-FM
room Wohnzimmer
serialNr MEQ0396315
subType dimmer
userattr Lichter Lichter_map structexclude
webCmd getConfig:clear msgEvents
Und das hier das List des Channels, dass pct enthält:
Internals:
DEF 3B7C3E01
NAME wz_licht_dimmer_Sw
NR 775
NTFY_ORDER 50-wz_licht_dimmer_Sw
STATE 63
TYPE CUL_HM
chanNo 01
device wz_licht_dimmer
peerList HM_302FC9_Sw_01,self01,self02,
CHANGETIME:
Helper:
Dblog:
Devicemsg:
Mydblog:
TIME 1454274407.96752
VALUE 63 (to HMLAN1)
Dim:
Mydblog:
TIME 1454274407.96752
VALUE stop:63
Level:
Mydblog:
TIME 1454274407.96752
VALUE 63
Overheat:
Mydblog:
TIME 1454274407.96752
VALUE off
Overload:
Mydblog:
TIME 1454274407.96752
VALUE off
Pct:
Mydblog:
TIME 1454274407.96752
VALUE 63
Phylevel:
Mydblog:
TIME 1454274407.96752
VALUE 63
Reduced:
Mydblog:
TIME 1454274407.96752
VALUE off
State:
Mydblog:
TIME 1454274407.96752
VALUE 63
Timedon:
Mydblog:
TIME 1454274407.96752
VALUE off
Readings:
2016-01-31 22:06:41 CommandAccepted yes
2016-01-30 10:50:25 R-HM_302FC9_Sw_01-lgActionTypeDim toggelDim
2016-01-30 10:50:25 R-HM_302FC9_Sw_01-lgOnLevel 100 %
2016-01-30 10:50:25 R-HM_302FC9_Sw_01-shActionTypeDim jmpToTarget
2016-01-30 22:57:21 R-HM_302FC9_Sw_01-shOnLevel oldLevel
2016-01-30 10:37:32 R-logicCombination or
2016-01-30 10:37:32 R-powerUpAction off
2016-01-30 11:13:27 R-self01-lgActionTypeDim downDim
2016-01-30 11:13:27 R-self01-lgOnLevel 100 %
2016-01-30 11:13:27 R-self01-shActionTypeDim jmpToTarget
2016-01-30 11:15:42 R-self01-shOnLevel oldLevel
2016-01-30 11:13:29 R-self02-lgActionTypeDim upDim
2016-01-30 11:13:29 R-self02-lgOnLevel 100 %
2016-01-30 11:13:29 R-self02-shActionTypeDim jmpToTarget
2016-01-30 11:15:44 R-self02-shOnLevel oldLevel
2016-01-31 15:54:03 RegL_01. 00:00
2016-01-31 15:54:18 RegL_03.HM_302FC9_Sw_01 01:00 02:00 03:00 04:32 05:64 06:00 07:FF 08:00 09:FF 0A:01 0B:14 0C:52 0D:63 0E:20 0F:00 10:14 11:C9 12:0A 13:05 14:05 15:00 16:C8 17:0A 18:0A 19:04 1A:04 26:00 27:14 28:52 29:63 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 A6:20 A7:14 A8:52 A9:63 00:00
2016-01-31 15:54:20 RegL_03.self01 01:00 02:00 03:00 04:32 05:64 06:00 07:FF 08:00 09:FF 0A:01 0B:44 0C:54 0D:64 0E:20 0F:00 10:14 11:C9 12:0A 13:05 14:05 15:00 16:C8 17:0A 18:0A 19:04 1A:04 26:00 27:14 28:52 29:63 81:00 82:00 83:00 84:32 85:64 86:00 87:0A 88:00 89:FF 8A:A5 8B:44 8C:54 8D:64 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 A6:20 A7:14 A8:52 A9:63 00:00
2016-01-31 15:54:22 RegL_03.self02 01:00 02:00 03:00 04:32 05:64 06:00 07:FF 08:00 09:FF 0A:01 0B:12 0C:22 0D:23 0E:20 0F:00 10:14 11:C9 12:0A 13:05 14:05 15:00 16:C8 17:0A 18:0A 19:04 1A:04 26:00 27:14 28:52 29:63 81:00 82:00 83:00 84:32 85:64 86:00 87:FF 88:00 89:FF 8A:24 8B:12 8C:22 8D:23 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 A6:20 A7:14 A8:52 A9:63 00:00
2016-01-31 22:06:47 deviceMsg 63 (to HMLAN1)
2016-01-31 22:06:47 dim stop:63
2016-01-31 22:06:47 level 63
2016-01-31 22:06:47 overheat off
2016-01-31 22:06:47 overload off
2016-01-31 22:06:47 pct 63
2016-01-31 15:54:09 peerList HM_302FC9_Sw_01,self01,self02,
2016-01-31 22:06:47 phyLevel 63
2016-01-31 22:06:47 recentStateType info
2016-01-31 22:06:47 reduced off
2016-01-31 22:06:47 state 63
2016-01-31 22:06:47 timedOn off
Helper:
dlvlCmd ++A0112865073B7C3E02017E0320FFFF
peerIDsRaw ,3B7C3E01,3B7C3E02,302FC901,00000000
Dir:
cur stop
rct down
Expert:
def 1
det 0
raw 1
tpl 0
Role:
chn 1
Shadowreg:
Vdim:
idPhy 3B7C3E01
idV2 3B7C3E02
idV3 3B7C3E03
Attributes:
model HM-LC-Dim1TPBU-FM
peerIDs 00000000,302FC901,3B7C3E01,3B7C3E02,
userattr Lichter Lichter_map structexclude
webCmd statusRequest:toggle:on:off:up:down
Die Lampe habe ich hierbei auf 63pct gesetzt, so dass man das auch in dem List wiederfinden kann.
attr vom Channel liefert:
wz_licht_dimmer_Sw: unknown attribute ?, choose one of verbose room group comment alias eventMap userReadings do_not_notify showtime rawToReadable unit expert param actAutoTry aesCommReq ignore dummy IODev IOList IOgrp hmProtocolEvents rssiLog actCycle hmKey hmKey2 hmKey3 serialNr firmware .stc .devInfo actStatus autoReadReg burstAccess msgRepeat hmProtocolEvents aesKey repPeers peerIDs tempListTmpl levelRange levelMap event-on-change-reading event-on-update-reading event-aggregator event-min-interval stateFormat model subType DbLogExclude DbLogInclude cmdIcon devStateIcon devStateStyle fp_Villa fp_castle fp_home icon sortby webCmd widgetOverride Lichter Lichter_map structexclude userattr
ZitatIch bin mir zu 99% sicher, dass ich gestern genau den gleichen Befehl ("attr wz_licht_dimmer_Sw Lichter_map pct:^[1-9][0-9]{0,2}:on pct:^0$:off") probiert hatte, weil ich in gerade aus der gleichen Text-Datei raus kopiert habe. Jetzt klappt es aber.
Zwischen gestern und heute lagen ein paar Neustarts des Servers, aber ich habe keine Ahnung, warum es jetzt geht.
Und wenn du das Attr jetzt am Channel setzt funktioniert es?
Zitat von: rapster am 01 Februar 2016, 06:12:55
Und wenn du das Attr jetzt am Channel setzt funktioniert es?
Yepp. Deine erste Lösung funktioniert also, aber keine Ahnung, warum es nicht auf Anhieb geklappt hat.