Hallo zusammen,
ich habe mir anhand der sehr ausführlichen Wiki Beispiele http://www.fhemwiki.de/wiki/ReadingsGroup (http://www.fhemwiki.de/wiki/ReadingsGroup) eine readingsGroup gebaut.
Was ich noch nicht rausgefunden habe: Kann man für das devStateIcon der unterschiedlichen Devices auch unterschiedliche Icons verwenden?(//)
Ich habe z.B. einen Schalter für einen Lüfter, einen Dummy ("Duschen Anbau") und einen Schalter für die Zirkulationspumpe in der group. Das devStateIcon habe ich für den Lüfter zugewiesen. Damit bekommen aber alle Devices mit "state" das gleiche Icon. Ich möchte aber für den Dummy und die Pumpe ein anderes Icon zuweisen.
Wie kann man das bewerkstelligen?
Hier die Definition der readingsGroup:
define heatingInfo readingsGroup <%sani_heating>,<Soll>,<Soll neu>,<Ist>,<Ventil / RH>,<Modus>,<set Modus>,<Lock>,<Bat>,<Fenster>\
NG_BZ_HZ_WT_Climate:desired-temp,<sollsetz>,measured-temp,humidity,controlMode,<modeSet>,R-globalBtnLock@NG_BZ_HZ_WT,batteryLevel@NG_BZ_HZ_WT,state@NG_BZ_Fenster\
NG_BZ_HZ_Clima:desired-temp,<>,measured-temp,ValvePosition,controlMode,<>,R-globalBtnLock@NG_BZ_HZ,batteryLevel@NG_BZ_HZ,<>\
PWR_SW_Sw:<>,<>,<>,<>,state@PWR_SW_Sw,<%5Min>,<%AUS>,<>,energy@PWR_SW_Pwr\
d_Duschen:<>,<>,<>,<>,state@d_Duschen,<>,<>,<>,<>\
HG_BZ_HZ_Clima:desired-temp,<sollsetz>,measured-temp,ValvePosition,controlMode,<modeSet>,R-globalBtnLock@HG_BZ_HZ,batteryLevel@HG_BZ_HZ,state@HG_BZ_Fenster\
HG_KU_HZ_Clima:desired-temp,<sollsetz>,measured-temp,ValvePosition,controlMode,<modeSet>,R-globalBtnLock@HG_KU_HZ,batteryLevel@HG_KU_HZ,state@HG_KU_Fenster\
HG_KE_UP_SW_2_1:<>,<>,<Timer>,timedOn@HG_KE_UP_SW_2_1,state@HG_KE_UP_SW_2_1,<%5Min>\
attr heatingInfo cellStyle { "r:1"=>'style="font-weight:bold;;;;font-size:16px"', "r:2,c:0"=>'style="font-weight:bold"',"r:6,c:0" =>'style="font-weight:bold"', "r:9,c:0"=>'style="font-weight:bold"',"r:12,c:0"=>'style="font-weight:bold"'}
attr heatingInfo commands {'heatingInfo.sollsetz'=>'desired-temp:5.0,12.0,16.0,17.0,18.0,19.0,20.0,20.5,21.0,21.5,22.0,22.5,23.0,23.5,24.0', "controlMode.boost"=>"set %DEVICE controlMode auto","controlMode.auto"=>"set %DEVICE controlMode boost",'heatingInfo.modeSet'=>'controlMode:auto,manual,boost,day,night',"R-globalBtnLock.on"=>"set %DEVICE regSet globalBtnLock off", "R-globalBtnLock.off"=>"set %DEVICE regSet globalBtnLock on",'state.on'=>'set %DEVICE off','state.off'=>'set %DEVICE on','heatingInfo.5Min'=>'set %DEVICE on-for-timer 300','heatingInfo.AUS'=>'set %DEVICE off'}
attr heatingInfo group Heizung
attr heatingInfo mapping {'desired-temp' =>'',NG_BZ_HZ_WT_Climate=>"NG Bad",NG_BZ_HZ_Clima=>" ; ;Regler",HG_BZ_HZ_Clima=>"HG Bad",HG_KU_HZ_Clima=>"HG Küche",NG_BZ_Luefter=>" ; ;Lüfter",PWR_SW_Sw=>" ; ;Lüfter (Mess)"}
attr heatingInfo room Hauptgebäude,Übersicht
attr heatingInfo valueFormat {if($READING eq "ValvePosition" && $VALUE ne "0"){$VALUE = int($VALUE/10)*10} elsif($READING eq "batteryLevel"){if($VALUE>=3){$VALUE=100} elsif($VALUE>=2.7){$VALUE=75}elsif($VALUE>=2.5){$VALUE=50}elsif($VALUE>=2.2){$VALUE=25} else{$VALUE=0}}}
attr heatingInfo valueIcon {'state.open' => 'fts_window_1w_open@red', 'state.closed' => 'fts_window_1w@green','controlMode.manual' => 'sani_heating_manual@795CFF', 'controlMode.auto' => 'sani_heating_automatic@5FE009', 'controlMode.boost' => 'sani_heating_boost@FB0C02', 'humidity'=>'humidity@6FD9FB', 'R-globalBtnLock.on'=>'secur_locked@F7301D', 'R-globalBtnLock.off'=>'secur_open@0CFB0C','ValvePosition.0' => 'sani_heating_level_0@002AE0', 'ValvePosition.10' => 'sani_heating_level_10@F8D53D','ValvePosition.20' => 'sani_heating_level_20@FF9341', 'ValvePosition.30' => 'sani_heating_level_30@F17F3F','ValvePosition.40' => 'sani_heating_level_40@E46C3C', 'ValvePosition.50' => 'sani_heating_level_50@DE3B3A','ValvePosition.60' => 'sani_heating_level_60@A30D2D', 'ValvePosition.70' => 'sani_heating_level_70@B40A23','ValvePosition.80' => 'sani_heating_level_80@C40619', 'ValvePosition.90' => 'sani_heating_level_90@D4030F','ValvePosition.100' => 'sani_heating_level_100@E50005', 'batteryLevel.100'=>'measure_battery_100@0CFB0C','batteryLevel.75'=>'measure_battery_75@42BC0A', 'batteryLevel.50'=>'measure_battery_50@F5FF10','batteryLevel.25'=>'measure_battery_25@FB5909', 'batteryLevel.0'=>'measure_battery_0@E50005','controlMode.set_boost' => 'hourglass', 'controlMode.set_auto' => 'hourglass','controlMode.set_manual' => 'hourglass', 'R-globalBtnLock.set_on' => 'hourglass','R-globalBtnLock.set_off' => 'hourglass','state.on'=>'vent_ventilation_level_automatic@red','state.off'=>'vent_ventilation_level_automatic@blue', 'timedOn.running' => 'general_an_fuer_zeit@red', 'timedOn.off' => 'general_aus_fuer_zeit'}
attr heatingInfo valueStyle {if($READING eq "measured-temp") {my $t=$VALUE;;;;my $d=ReadingsVal($DEVICE,'desired-temp',0);;;; if($t-$d>=1){'style="color:rgb(251,63,11);;;;"'}elsif($t-$d<=-1){'style="color:rgb(79,58,251);;;;"'} else{'style="color:rgb(12,251,12);;;;"'}}}
attr heatingInfo valueSuffix {"desired-temp"=>" °C", "measured-temp"=>" °C", "ValvePosition"=>" (".ReadingsVal($DEVICE,$READING,0)." %)", "humidity"=>" ".ReadingsVal($DEVICE,$READING,0)." % RH", "batteryLevel"=>" (".ReadingsVal($DEVICE,$READING,0)." V)", "energy"=>" W"}
Gruß Roland
bei state ist es das einfachste im jeweiligen device devStateIcon so zu setzen das das icon passt und dann in valueIcon ...,state => '%devStateIcon',...
zu verwenden.
die zweite möglichkeit ist über perl code zu gehen:...,state => '{...}',...
und $DEVICE, $READING und $VALUE mit if/elsif/else zu verarbeiten
die dritte möglichkeit ist mit valueFormat bei einem der devices zuerst value durch $READING.$VALUE zu ersetzen und dann in valueIcon den zusammen gesetzten wert als value im key zu verwenden. etwa so: attr heatingInfo valueFormat ...,'d_Duschen.state' => "$READING.$VALUE",...
attr heatingInfo valueIcon ...,'d_Duschen.state.open' => 'icon1', 'd_Duschen.state.closed' => 'icon2',...
gruss
andre
Zitat von: justme1968 am 09 März 2015, 21:19:18
bei state ist es das einfachste im jeweiligen device devStateIcon so zu setzen das das icon passt und dann in valueIcon ...,state => '%devStateIcon',...
zu verwenden.
DANKE! Genau das habe ich gesucht. Ich hatte nur gestern abend keine Zeit mehr - soeben umgesetzt -> funktioniert wie gewünscht - und macht die Definition einen Touch eleganter und kürzer. Anstatt
'state.open' => 'fts_window_1w_open@red', 'state.closed' => 'fts_window_1w@green'
nur noch
'state' => '%devStateIcon'
Die anderen beiden Varianten hebe ich mir auf, man weiß nie, wann man das mal braucht :)
Gruß Roland
Hallo,
ich versuche auf Basis der hier gegebenen Informationen auch unterschiedliche Icons den devices für "state" zuzuordnen. Leider funktioniert dies bei mir nicht. So funktioniert zumindest ein Icon für beide devices.
Internals:
CFGFN
DEF <Kontakt>,<Status>,<Letzte Öffnung>
HM_56B.*:state,LastOpen
NAME HM_Kontakte
NR 522
NTFY_ORDER 50-HM_Kontakte
STATE Initialized
TYPE readingsGroup
mayBeVisible 1
Content:
HM_56B2D0 1
HM_56BA54 1
Content2:
DEVICES:
ARRAY(0x3328948)
ARRAY(0x32496b8)
ARRAY(0x3353078)
Fhem:
lastDefChange 157
last_update 1490815599.4845
Helper:
DEF
Positions:
HM_56B2D0.LastOpen 2:2
HM_56B2D0.state 2:1
HM_56BA54.state 3:1
Valueicon:
state.closed fts_window_roof@black
state.open fts_window_roof_open_2@red
Values:
formated:
undef
ARRAY(0xf30cb8)
ARRAY(0x2ae8d90)
orig:
undef
ARRAY(0x2493aa0)
ARRAY(0x3346b80)
prefixsuffix:
undef
ARRAY(0x324bfc0)
ARRAY(0x325b948)
Attributes:
room Statuszentrale
sortColumn 1
valueIcon {'state.open' => 'fts_window_roof_open_2@red', 'state.closed' => 'fts_window_roof@black'}
Internals:
DEF 56B2D0
HM_MOD_RPI_PCB_MSGCNT 174
HM_MOD_RPI_PCB_RAWMSG 05010046E3A61056B2D04F6BA606010000
HM_MOD_RPI_PCB_RSSI -70
HM_MOD_RPI_PCB_TIME 2017-03-29 20:58:15
IODev HM_MOD_RPI_PCB
LASTInputDev HM_MOD_RPI_PCB
MSGCNT 174
NAME HM_56B2D0
NOTIFYDEV global
NR 124
NTFY_ORDER 50-HM_56B2D0
STATE Status: closed / LastOpen: 2017-03-29 19:33:32
TYPE CUL_HM
lastMsg No:E3 - t:10 s:56B2D0 d:4F6BA6 06010000
protLastRcv 2017-03-29 20:58:15
protResnd 1 last_at:2017-03-26 17:18:55
protSnd 178 last_at:2017-03-29 20:58:15
protState CMDs_done
rssi_at_HM_MOD_RPI_PCB lst:-70 avg:-58.84 cnt:174 min:-78 max:-33
Readings:
2017-03-26 16:35:52 Activity alive
2017-03-26 12:31:22 CommandAccepted no
2017-03-25 23:56:42 D-firmware 1.0
2017-03-25 23:56:42 D-serialNr OEQ0223456
2017-03-29 20:58:15 LastOpen 2017-03-29 19:33:32
2017-03-26 18:13:44 PairedTo 0x4F6BA6
2017-03-25 23:56:20 R-cyclicInfoMsg on
2017-03-26 18:13:44 R-eventDlyTime 0 s
2017-03-25 23:56:20 R-pairCentral 0x4F6BA6
2017-03-25 23:56:20 R-sabotageMsg on
2017-03-26 18:13:44 R-sign on
2017-03-26 18:13:44 RegL_00. 02:01 09:01 0A:4F 0B:6B 0C:A6 10:01 14:06 00:00
2017-03-26 18:13:44 RegL_01. 08:01 20:9C 21:00 30:06 00:00
2017-03-26 19:48:35 STATE 0
2017-03-29 20:58:15 alive yes
2017-03-29 20:58:15 battery ok
2017-03-29 20:58:15 contact closed (to HM_MOD_RPI_PCB)
2017-03-25 23:56:16 powerOn 2017-03-25 23:56:16
2017-03-29 20:58:15 recentStateType info
2017-03-29 20:58:15 sabotageError off
2017-03-29 20:58:15 state closed
2017-03-29 19:33:38 trigDst_4F6BA6 noConfig
2017-03-29 19:33:38 trigger_cnt 118
Helper:
HM_CMDNR 227
cSnd 014F6BA656B2D001040000000001,014F6BA656B2D00103
mId 00C7
peerIDsRaw ,00000000
rxType 28
supp_Pair_Rep 0
Expert:
def 1
det 0
raw 1
tpl 0
Io:
newCh 1
newChn +56B2D0,00,00,00
nextSend 1490813895.39809
prefIO
rxt 2
vccu
p:
56B2D0
00
00
00
Mrssi:
mNo E3
Io:
HM_MOD_RPI_PCB -68
Prt:
bErr 0
sProc 0
sleeping 0
Rspwait:
Q:
qReqConf
qReqStat
Role:
chn 1
dev 1
Rpt:
IO HM_MOD_RPI_PCB
flg A
ts 1490813895.107
ack:
HASH(0x2345b28)
E380024F6BA656B2D000
Rssi:
At_hm_mod_rpi_pcb:
avg -58.8448275862069
cnt 174
lst -70
max -33
min -78
Shadowreg:
Attributes:
IODev HM_MOD_RPI_PCB
actCycle 001:10
actStatus alive
alias HM Türkontakt Flur
autoReadReg 4_reqStatus
devStateIcon open:fts_door_open@red closed:fts_door@black
expert 2_raw
firmware 1.0
group Fenster-/Türkontakte
model HM-SEC-SCo
peerIDs 00000000,
room Flur,Homematic
serialNr OEQ0223456
sortby 2
stateFormat {"Status: ".ReadingsVal($name,"state" ,"")." / LastOpen: ".ReadingsVal($name,"LastOpen","")}
subType threeStateSensor
userReadings LastOpen:contact.* {if (ReadingsVal($name,"state","") eq "open") {ReadingsTimestamp($name,"state","")} else {ReadingsVal($name,"LastOpen","")}}
Beim zweiten device habe ich ein eigenes reading definiert, welches zusätzlich angezeigt wird.
Was muss ich ändern? Wenn ich für dieses device das attribut devstateIcon definiere, dann wird es auch beim Device nicht angezeigt.
Viele Grüße
jumuc
für ein device kannst du in der raum ansicht entweder ein icon mit devStateIcon vergeben oder dir einen text basierten state mit stateFormat anzeigen. beides gleichzeitig nur von hand in dem du stateFormat ein html div zurück geben lässt das text und icon enthält.
wenn du das icon nur in der readingsGroup haben willst musst du als key <name>.<reading>.<value> verwenden.
oder du nimmst die perl code variante ( state => '{...}' ) und gibst das passende icon dann unter berücksichtigung von device name oder device TYPE zurück.
Danke.
Das war der notwendige Tipp
Zitatals key <name>.<reading>.<value> verwenden
Viele Grüße
juemuc