FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Smart_Homer am 28 Januar 2025, 16:10:47

Titel: 2 Bedingungen für ValueIcon in Readingsgroup
Beitrag von: Smart_Homer am 28 Januar 2025, 16:10:47
Hallo,

kann man für ein ValueIcon in einer Readingsgroup 2 Bedingungen definieren?

Beispiel:
[pre]{
'state.closed' &&  'typ.tuer'  => 'fts_door@green',
'state.closed' &&  'typ.fenster'  => 'fts_window@green',

}[/pre]

Hintergrund, ich hätte gern für Türen und Fenster individuelle Icons.

Vielen Dank.

Gruß.



Titel: Aw: 2 Bedingungen für ValueIcon in Readingsgroup
Beitrag von: eisman am 28 Januar 2025, 17:04:16
hi,

sub Abfall_Icon($$) {
  my ($Sum,$Cat)  = @_;
 
  if($Cat eq "Feiertag") {
    if($Sum eq "Silvester" or $Sum eq "Neujahr") {
      return ".*:scene_party\@green";
    } else {
      return ".*:scene_party\@brown";
    }
  }
  elsif($Cat eq     "Geburtstag") { return ".*:scene_party\@red";  }
  elsif($Cat eq       "Restmüll") { return ".*:muelltonne\@dimgray";  }
  elsif($Cat eq "Wertstofftonne") { return ".*:muelltonne\@yellow";   }
  elsif($Cat eq     "Günabfälle") { return ".*:muelltonne\@green";    }
  elsif($Cat eq "Weihnachtsbaum") { return ".*:muelltonne\@seagreen"; }
  elsif($Cat eq       "Biotonne") { return ".*:muelltonne\@brown";    }
  elsif($Sum eq         "Papier") { return ".*:muelltonne\@blue";     }
  elsif($Cat eq        "Wohnung") {
    if($Sum eq "Treppe") { return ".*:scene_cleaning\@red";  }
  }
}

devStateIcon { Abfall_Icon(ReadingsVal($name,"summary",""),ReadingsVal($name,"categories","")) }

oder
Readingsgroup:
valueIcon
{"controlMode.manual" => 'sani_heating_manual@#FF0000', "controlMode.auto" => 'sani_heating_automatic@#00FF00',
 "controlMode.central" => 'sani_heating_timer@#FFFF00', "R-btnLock.on" => 'secur_locked@#00FF00',
 "R-btnLock.off" => 'secur_open@#FF0000', "R-btnLock.set_on" => 'hourglass', "R-btnLock.set_off" => 'hourglass',
 "btnLock.on" => 'secur_locked@#00FF00',"btnLock.off" => 'secur_open@#FF0000', "btnLock.set_on" => 'hourglass',                    "btnLock.set_off" => 'hourglass',
 "lueftenMoeglich.ja" => 'Ventilator_wind@#00FF00', "lueftenMoeglich.nein" => 'Ventilator_fett@#8C8C8C', 
 "state" => "%devStateIcon"}
soviel icon wie man will.....

meine Tür:
defmod TU_0701 DOIF (         [TU_0701:alarm] eq "off" and [TU_0701:door] eq "closed") (set TU_0701 status closed)\
DOELSEIF ([TU_0701:alarm] eq "off" and [TU_0701:door] eq   "open") (set TU_0701 status   open)\
DOELSEIF ([TU_0701:alarm] eq  "on" and [TU_0701:door] eq "closed") (set TU_0701 status locked)\
DOELSEIF ([TU_0701:alarm] eq  "on" and [TU_0701:door] eq   "open") (set TU_0701 status  alarm)
attr TU_0701 userattr LED LED_map structexclude
attr TU_0701 DbLogExclude .*
attr TU_0701 DbLogInclude status,name,mode,login,keller,door,alarm,activ
attr TU_0701 alias Keller 31
attr TU_0701 devStateIcon cmd_1:fts_door_right@#FFFF00\
cmd_2:fts_door_right_open@#00FFFF\
cmd_3:fts_door_right@#00FF00\
cmd_4:fts_door_right_open@#FF0000
attr TU_0701 group Tür
attr TU_0701 icon fts_door_right_open
attr TU_0701 readingList alarm status door activ name login email keller
attr TU_0701 room Keller,rollladen
attr TU_0701 setList alarm:on,off activ:enable,disable door:open,closed name login email keller
attr TU_0701 sortby TU_0701
gruss
Titel: Aw: 2 Bedingungen für ValueIcon in Readingsgroup
Beitrag von: Smart_Homer am 28 Januar 2025, 22:26:17
Zitat von: eisman am 28 Januar 2025, 17:04:16oder
Readingsgroup:
valueIcon
{"controlMode.manual" => 'sani_heating_manual@#FF0000', "controlMode.auto" => 'sani_heating_automatic@#00FF00',
 "controlMode.central" => 'sani_heating_timer@#FFFF00', "R-btnLock.on" => 'secur_locked@#00FF00',
 "R-btnLock.off" => 'secur_open@#FF0000', "R-btnLock.set_on" => 'hourglass', "R-btnLock.set_off" => 'hourglass',
 "btnLock.on" => 'secur_locked@#00FF00',"btnLock.off" => 'secur_open@#FF0000', "btnLock.set_on" => 'hourglass',                    "btnLock.set_off" => 'hourglass',
 "lueftenMoeglich.ja" => 'Ventilator_wind@#00FF00', "lueftenMoeglich.nein" => 'Ventilator_fett@#8C8C8C', 
 "state" => "%devStateIcon"}
soviel icon wie man will.....

Aber hier ist auch immer 1 Bedingung auf ein Icon gemappt.

Ich hätte ja gern 2 Bedingungen.

Gruß.
Titel: Aw: 2 Bedingungen für ValueIcon in Readingsgroup
Beitrag von: eisman am 29 Januar 2025, 08:50:00
Hi,

deswegen habe ich das so gemacht.

Kalender:

4x Kalender.Icon(1-4)

defmod Kalender.Icon1 dummy
attr Kalender.Icon1 DbLogExclude .*
attr Kalender.Icon1 devStateIcon { Abfall_Icon(ReadingsVal($name,"summary",""),ReadingsVal($name,"categories","")) }
attr Kalender.Icon1 group calendar
attr Kalender.Icon1 readingList state date categories days dayslong location summary weekday
attr Kalender.Icon1 room kalender
attr Kalender.Icon1 setList state date categories days dayslong location summary weekday
attr Kalender.Icon1 stateFormat summary

auswertung des Kalenders
sub Abfall_Icon($$) {
  my ($Sum,$Cat)  = @_;
 
  if($Cat eq "Feiertag") {
    if($Sum eq "Silvester" or $Sum eq "Neujahr") {
      return ".*:scene_party\@green";
    } else {
      return ".*:scene_party\@brown";
    }
  }
  elsif($Cat eq "Geburtstag") { return ".*:scene_party\@red";  }
  elsif($Cat eq "Restmüll") { return ".*:muelltonne\@dimgray";  }
  elsif($Cat eq "Wertstofftonne") { return ".*:muelltonne\@yellow";   }
  elsif($Cat eq "Günabfälle") { return ".*:muelltonne\@green";    }
  elsif($Cat eq "Weihnachtsbaum") { return ".*:muelltonne\@seagreen"; }
  elsif($Cat eq "Biotonne") { return ".*:muelltonne\@brown";    }
  elsif($Cat eq "Papiertonne") { return ".*:muelltonne\@blue";     }
  elsif($Cat eq "Wohnung") {
    if($Sum eq "Treppe") { return ".*:scene_cleaning\@red";  }
  }
}

und dann in der RG dargestellt

defmod rg.Kalender.Abfall readingsGroup cal.Privat:categories@Kalender.Icon1,categories@Kalender.Icon2,categories@Kalender.Icon3,categories@Kalender.Icon4\
cal.Privat:summary@Kalender.Icon1,summary@Kalender.Icon2,summary@Kalender.Icon3,summary@Kalender.Icon4\
cal.Privat:date@Kalender.Icon1,date@Kalender.Icon2,date@Kalender.Icon3,date@Kalender.Icon4
attr rg.Kalender.Abfall DbLogExclude .*
attr rg.Kalender.Abfall alias Abfall
attr rg.Kalender.Abfall cellStyle {"r:1" => 'style="text-align:center;;;;color:#FFA500;;;;font-weight:bold;;;;font-size:8px;;;;"',\
 "r:3" => 'style="text-align:left;;;;  color:#FFA500;;;;font-weight:bold;;;;font-size:8px;;;;"'}
attr rg.Kalender.Abfall noheading 1
attr rg.Kalender.Abfall nonames 1
attr rg.Kalender.Abfall notime 1
attr rg.Kalender.Abfall room kalender
attr rg.Kalender.Abfall style style="border:0px;;;; background:none;;;; box-shadow:none;;;;"
attr rg.Kalender.Abfall valueColumns { "Zeit" => 'colspan="2"', "state" => 'colspan="1"' }
attr rg.Kalender.Abfall valueIcon { "text" => "%devStateIcon","summary" => "%devStateIcon"}
attr rg.Kalender.Abfall valueStyle {\
if   ($VALUE eq     "Montag" ) { 'style="text-align:left;;;;color:#00FF00;;;;font-weight:bold;;;;"'}\
elsif($VALUE eq   "Dienstag" ) { 'style="text-align:left;;;;color:#00FF00;;;;font-weight:bold;;;;"'}\
elsif($VALUE eq   "Mittwoch" ) { 'style="text-align:left;;;;color:#00FF00;;;;font-weight:bold;;;;"'}\
elsif($VALUE eq "Donnerstag" ) { 'style="text-align:left;;;;color:#00FF00;;;;font-weight:bold;;;;"'}\
elsif($VALUE eq    "Freitag" ) { 'style="text-align:left;;;;color:#00FF00;;;;font-weight:bold;;;;"'}\
elsif($VALUE eq    "Samstag" ) { 'style="text-align:left;;;;color:#FF0000;;;;font-weight:bold;;;;"'}\
elsif($VALUE eq    "Sonntag" ) { 'style="text-align:left;;;;color:#FF0000;;;;font-weight:bold;;;;"'}\
\
elsif($VALUE eq  "Vormittag" ) { 'style="text-align:right;;;;color:#FFFF00;;;;font-weight:bold;;;;"'}\
elsif($VALUE eq     "Mittag" ) { 'style="text-align:right;;;;color:#FFFF00;;;;font-weight:bold;;;;"'}\
elsif($VALUE eq "Nachmittag" ) { 'style="text-align:right;;;;color:#FFFF00;;;;font-weight:bold;;;;"'}\
elsif($VALUE eq      "Nacht" ) { 'style="text-align:right;;;;color:#0000FF;;;;font-weight:bold;;;;"'}\
\
}

ist halt die einfachste Lösung.

gruss