readingsGroup: unterschiedliche icons für "state" von unterschiedlichen Devices

Begonnen von hauwech, 09 März 2015, 17:09:28

Vorheriges Thema - Nächstes Thema

hauwech

Hallo zusammen,
ich habe mir anhand der sehr ausführlichen Wiki Beispiele 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=>"&nbsp;;&nbsp;;Regler",HG_BZ_HZ_Clima=>"HG Bad",HG_KU_HZ_Clima=>"HG Küche",NG_BZ_Luefter=>"&nbsp;;&nbsp;;Lüfter",PWR_SW_Sw=>"&nbsp;;&nbsp;;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
Fhem auf Intel NUC11TNKi5+M2 NVMe+32GB RAM mit Ubuntu 22.04 LTS

justme1968

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
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

hauwech

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
Fhem auf Intel NUC11TNKi5+M2 NVMe+32GB RAM mit Ubuntu 22.04 LTS

juemuc

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
3x Sonos Play 1, 1x Sonos Arc + Sub, 1 Sonos-One, 1x Sonos Playbar
FB6690 + FB7490 mit 4x Dect 200 und 3 Dect-ULE-Thermostate,  raspberry3B+, HM Funkmodul HM-MOD-RPI-PCB, HM Klingelsensor HM-Sen-DB-PCB, HM (IP) Fensterkontakte und  Amazon Echo Dot,  piVCCU, pi OS (bookworm).

justme1968

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.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

juemuc

Danke.
Das war der notwendige Tipp
Zitatals key <name>.<reading>.<value> verwenden
Viele Grüße
juemuc
3x Sonos Play 1, 1x Sonos Arc + Sub, 1 Sonos-One, 1x Sonos Playbar
FB6690 + FB7490 mit 4x Dect 200 und 3 Dect-ULE-Thermostate,  raspberry3B+, HM Funkmodul HM-MOD-RPI-PCB, HM Klingelsensor HM-Sen-DB-PCB, HM (IP) Fensterkontakte und  Amazon Echo Dot,  piVCCU, pi OS (bookworm).