(GELÖST) Mehrere devStateIcons aus Perl Sub

Begonnen von flummy1978, 31 Januar 2025, 18:54:08

Vorheriges Thema - Nächstes Thema

flummy1978

Hallo zusammen,

Ich hatte einen schönen Text, den ich scheinbar nur in der Vorschaut gesehen hab und nicht abgeschickt hatte  :-\  Daher nochmal, in kürzer:

Nach der Überlegung über den (Un)Sinn meines Vorschlages aus dem MQTT Forum: Implementierungswunsch MQTT / FHEMWEB habe ich ein wenig mit beiden Möglichkeiten gespielt und bin nun an der Stelle von devStateIcon. Wenn ich den vorgegebenen Teil aus dem MQTT Template nehme und einsetze, funktioniert dieser einwandfrei (devStateIcon für den Onlinestatus wird genauso angezeigt wie das devStateIcon für das Device ansich)

   
{ my $onl = ReadingsVal($name,'online','false') eq 'false' ? 'rot' : ReadingsVal($name,'new_fw','false') eq 'true' ? 'gelb' : 'gruen'; my $light = ReadingsVal($name,'state','off') eq 'on'?'scene_storeroom@red:off':'scene_storeroom@green:on'; my $show = '<a href="';$show .= $onl eq 'gelb' ? "/fhem?cmd.dummy=set $name x_update&XHR=1\">" : 'http://'.ReadingsVal($name,'ip','none').' "target="_blank">'; $show .= FW_makeImage("10px-kreis-$onl").'</a>'; "<div> $show <a href=\"/fhem?cmd.dummy=set $name toggle&XHR=1\">".FW_makeImage($light).'</a></div>'}
Wenn ich nun exakt den gleichen Code in eine myUtils Sub übernehme und aus dem devStateIcon attribut direkt aufrufe, funktioniert es nicht mit zwei Icons (Es wird das standard Icon für das entsprechende Gerät angezeigt - also meine Ausgabe ignoriert). Der Log spuckt dann leider auch nicht aus.  Sobald ich die Ausgabe auf ein Icon beschränke funktioniert alles ohne Fehler / Warnungen und Meldungen - also ist der Aufruf der Variablen soweit korrekt. Allerdings scheint es irgendwie beschränkt zu sein, dass zwei Icons mit Hilfe von FW_makeImage ausgegeben werden.

Bei meiner Suche habe ich noch eine Ausgabe im Template von ...\contrib\AttrTemplate\mqtt2.ebus.template
attr DEVICE devStateIcon {my $vC = ReadingsVal($name, "Hc1HeatCurve_curve_value", "10")*10; my $colCur = substr(Color::pahColor(5,10,15,$vC,0),0,6); my $iconCur = 'time_graph@'.$colCur; my $vH = ReadingsVal($name, "HwcTempDesired_temp1_value", "30"); my $colHot = substr(Color::pahColor(20,40,60,$vH,0),0,6); my $iconHot = 'sani_water_hot@'.$colHot; ; "<div style=\"text-align:right\" >  " . FW_makeImage("$iconCur",'file_unknown@grey') . "<br> " . FW_makeImage("$iconHot",'sani_water_hot@red') . "</div>"}

Aber auch das ist leider ein Attribut , das eingefügt wird ....

Vielleicht kann mir da jemand einen Schubs in richtige Richtung geben, wie ich das vorgehen kann

VG
Andras

flummy1978

Hat wirklich niemand eine Idee, woran das liegt ?
Hab ich da was spezielles probiert oder ... ?

Hoffnungsvolle Grüße  ;)
Andreas

eisman

#2
hi,

idee schon, weis nur nicht ob es so geht.....

Kalender

.....($Cat eq "Geburtstag") { return "1.on:scene_party\@red  2.on:scene_party\@red";  } oder so

Mehrere ICON  devStateIcon 1.on:on:on1+off 1.off:off:on1+on 2.on:on:on2+off 2.off:off:on2+on 3.on:on:on3+off 3.off:off:on3+on ok:batterie@gree

ich nehme dazu halt RG
gruss
1x FHEM Debian, Homematic,ZigBee,FS20 / 1X Raspberry, ConBee / 5x ESP
1x FHEM Debian, Homematic,ZigBee         / 1X Raspberry, ConBee / 5x ESP
1x FHEM Debian,MQTT                               / 1X Raspberry, i2c,onewire,gpio
1x auf Windows 2012 Hyper-V-S

Beta-User

Es geht ohne größere Probleme, aber es wäre ggf. hilfreich zu wissen, was da eigentlich passieren soll (list?!? und eine Beschreibung, welche Icons du mit welcher Funktionalität haben willst...)

Hier noch ein Beispiel - dieses mal mit myUtils-Aufruf (=> irgendein Bezugspunkt muss halt mit übergeben werden):
attr Heizung_neu devStateIcon {FHEM::Heizung_Utils::devStateIcon($name)}Der myUtils-Code ist im package-Format, daher etwas ausführlicher das "drumrum" - erzeugt wird unter anderem ein Hintergrund-Farbverlauf für den Thermie-Speicher und farbige Temperaturanzeiger, das ganze ist aber leider noch nicht ganz fertig:
##############################################
# $Id: 99_Heizung_Utils.pm 2023-09-15 Beta-User $
#

package FHEM::Heizung_Utils;    ## no critic 'Package declaration'

use strict;
use warnings;

use Color;
use GPUtils qw(GP_Import);

## Import der FHEM Funktionen
#-- Run before package compilation
BEGIN {

    # Import from main context
    GP_Import(
        qw(
          FW_makeImage
          AttrVal
          InternalVal
          ReadingsVal
          ReadingsNum
          ReadingsAge
  isday
          defs
  FW_iconPath
  FW_icondir
  FW_ME
  Log
        )
    );
}

sub main::Heizung_Utils_Initialize { goto &Initialize }

# initialize ##################################################################
sub Initialize {
  my $hash = shift;
  return;
}

# Enter you functions below _this_ line.

# . FW_makeImage("$alivecolor","lan_rs485") . " <a href=\"/fhem?cmd.dummy=set $name status1 $pumpcom&XHR=1\">". FW_makeImage("$relaystate","off") . "</a> " . FW_makeImage("sani_boiler_temp","sani_boiler_temp") . " " . ReadingsVal($name,"temperature20","0") . "°C<br>" . FW_makeImage("sani_supply_temp","sani_supply_temp") . " " . ReadingsVal($name, "temperature21", "discon") ."°C " . FW_makeImage("sani_water_hot","sani_water_hot") . " " . ReadingsVal($name, "temperature22", "discon") . "°C</div>"}

sub devStateIcon {
  my $devname = shift // return;
 
  return if !defined $defs{$devname};
 
  my $col = ReadingsVal($devname,'LWT','Offline') eq 'Online' ? 'green' : 'red';
  my $ret = FW_makeImage("lan_rs485\@$col",'file_unknown@grey');
  my $rval = ReadingsNum($devname,'DS01_Temperature',0);
  $col = substr(Color::pahColor(-15,0,40,$rval,0),0,6);
  $ret .= ' ';
  $ret .= FW_makeImage("temp_temperature\@$col",'file_unknown@grey');
  $ret .= ' ';
  $ret .= ReadingsNum($devname,'DS01_Temperature',0,1);
  $ret .= ' °C<br>';
 
  $ret .= ' ';
  $ret .= ReadingsNum($devname,'Solar_sens1',0,1);
  $ret .= ' °C ';
  $col = substr(Color::pahColor(-10,40,95,ReadingsNum($devname,'Solar_sens1',0),0),0,6);
  $ret .= FW_makeImage("sani_solar_temp\@$col",'file_unknown@grey');
  $ret .= ' ';
 
  $rval = ReadingsNum($devname,'Solar_pump1',0);
  if ($rval) {
  $col = substr(Color::pahColor(0,40,100,ReadingsNum($devname,'Solar_pump1',0),0),0,6);
  $ret .= FW_makeImage("sani_pump\@$col",'file_unknown@grey');
  } else {
  $ret .= FW_makeImage('sani_pump','file_unknown@grey');
  }
  $ret .= ' ';
  $ret .= ReadingsNum($devname,'Solar_pump1',0);
  $ret .= ' %<br>';

  $rval = ReadingsNum($devname,'DS03_Temperature',1);
  $col = substr(Color::pahColor(0,40,90,$rval,0),0,6);
  $ret .= $rval;
  $ret .= ' °C ';
  $ret .= FW_makeImage("sani_return_temp\@$col",'file_unknown@grey');
  $ret .= ' ';
  $rval = ReadingsNum($devname,'DS02_Temperature',1);
  $col = substr(Color::pahColor(0,40,90,$rval,0),0,6);
  $ret .= FW_makeImage("sani_supply_temp\@$col",'file_unknown@grey');
  $ret .= ' ';
  $ret .= $rval;
  $ret .= ' °C<br>';
  $rval = ReadingsNum($devname,'Solar_sens2',0,1);
  my $col1 = substr(Color::pahColor(0,40,90,$rval,0),0,6);
  $ret .= "$rval °C / ";
  $rval = ReadingsNum($devname,'Solar_sens3',0,1);
  my $col2 = substr(Color::pahColor(0,40,90,$rval,0),0,6);
  $ret .= "$rval °C / ";
  $rval = ReadingsNum($devname,'Solar_sens4',0,1);
  my $col3 = substr(Color::pahColor(0,40,90,$rval,0),0,6);
  $ret .= "$rval °C / ";
  $rval = ReadingsNum($devname,'Solar_sens5',0,1);
  $col = substr(Color::pahColor(0,40,90,$rval,0),0,6);
  $ret .= "$rval °C ";

  my $deftags = qq(<defs>
<linearGradient id="lgrad1" x1="0" y1="1" x2="0" y2="0">
    <stop offset="0%" stop-color="#$col1" />
<stop offset="25%" stop-color="#$col2" />
<stop offset="50%" stop-color="#$col3" />
<stop offset="75%" stop-color="#$col" />
</linearGradient>
</defs>);
  $ret .= special_makeImage("sani_buffer_temp_all\@url(#lgrad1)",$deftags);
   
  return qq(<div><p style="text-align:right">$ret</p></div>);
}

##############################
sub
special_makeImage {
  my $name    = shift // return;
  my $deftags = shift // '';
  my $txt     = shift // $name;
  my $class  = shift // '';

  $class = "$class $name";
  $class =~ s{\.}{_}g;
  $class =~ s{@}{ }g;

  my $p = FW_iconPath($name);
  return $name if(!$p);
  if($p =~ m/\.svg$/i) {
    if(open(FH, "$FW_icondir/$p")) {
      my $data;
      do {
        $data = <FH>;
        if(!defined($data)) {
          Log( 1, "$FW_icondir/$p is not useable");
          return '';
        }
      } until( $data =~ m/^<svg/ );
      $data .= join '', <FH>;
      close(FH);
      $data =~ s/[\r\n]/ /g;
      $data =~ s/ *$//g;
      $data =~ s/<svg/<svg class="$class" data-txt="$txt"/; #52967
      if ($deftags) {
     $data =~ s{(<svg [^>]+>)}{$1 $deftags};
  }
      if($name =~ m/@([^:@]*)([:@](.*))?$/) {
        my ($fill, $stroke) = ($1, $3);
        if($fill ne '') {
          $fill = "#$fill" if $fill =~ m/^([A-F0-9]{6})$/;
          $data =~ s/fill="#000000"/fill="$fill"/g;
          $data =~ s/fill:#000000/fill:$fill/g;
        }
        if(defined $stroke) {
          $stroke = "#$stroke" if $stroke =~ m/^([A-F0-9]{6})$/;
          $data =~ s/stroke="#000000"/stroke="$stroke"/g;
          $data =~ s/stroke:#000000/stroke:$stroke/g;
        }
      } else {
        $data =~ s/fill="#000000"//g;
        $data =~ s/fill:#000000//g;
      }
      return $data;
    } else {
      return $name;
    }
  } else {
    $class = "class='$class'" if($class);
    $p = urlEncodePath($p);
    return "<img $class src=\"$FW_ME/images/$p\" alt=\"$txt\" title=\"$txt\">";
  }
}

1;

__END__
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

flummy1978

Zitat von: Beta-User am 03 Februar 2025, 16:32:05Es geht ohne größere Probleme, aber es wäre ggf. hilfreich zu wissen, was da eigentlich passieren soll (list?!? und eine Beschreibung, welche Icons du mit welcher Funktionalität haben willst...)

Im Kurzformat (weil grad noch unterwegs):
Ich möchte mir gern etwas bauen, das zu dem ähnelt was in devStateIcon der MQTT Devices standardmäßig verbaut ist (angepasst an meine Wünsche), aus einer myUtils heraus aufrufen. Das hat für mich den Vorteil, dass ich quasi die Optik aller devStateIcon, die so eingebunden sind, mit einem Schlag anpassen kann.

Das entspr. list: (ich habs oben nur als Teilcode geschrieben, weil ich gehofft habe, dass es dann übersichtlicher bleibt)

define Licht_EG_FL_abstell MQTT2_DEVICE shelly1_770D79
attr Licht_EG_FL_abstell userattr HausGesamt HausGesamt_map structexclude
attr Licht_EG_FL_abstell DbLogExclude .*
attr Licht_EG_FL_abstell TIMER_announce 270
attr Licht_EG_FL_abstell TIMER_announcemsg Abstellkammerlicht wird in 30 Sekunden ausgeschaltet
attr Licht_EG_FL_abstell TIMER_set 300
attr Licht_EG_FL_abstell alias Licht Abstellkammer
attr Licht_EG_FL_abstell alias_chatbot Abstellkammer
attr Licht_EG_FL_abstell autocreate 1
attr Licht_EG_FL_abstell devStateIcon { my $onl = ReadingsVal($name,'online','false') eq 'false' ? 'rot' : ReadingsVal($name,'new_fw','false') eq 'true' ? 'gelb' : 'gruen';; my $light = ReadingsVal($name,'state','off') eq 'on'?'scene_storeroom@red:off':'scene_storeroom@green:on';; my $show = '<a href="';;$show .= $onl eq 'gelb' ? "/fhem?cmd.dummy=set $name x_update&XHR=1\">" : 'http://'.ReadingsVal($name,'ip','none').' "target="_blank">';; $show .= FW_makeImage("10px-kreis-$onl").'</a>';; "<div> $show <a href=\"/fhem?cmd.dummy=set $name toggle&XHR=1\">".FW_makeImage($light).'</a></div>'}
attr Licht_EG_FL_abstell event-on-change-reading input0,relay0,state
attr Licht_EG_FL_abstell group Licht
attr Licht_EG_FL_abstell model shelly1
attr Licht_EG_FL_abstell readingList shellies/EG_FL_Abstell/relay/0:.* {{ state => $EVENT, relay0 => $EVENT}}\
  shellies/EG_FL_Abstell/input/0:.* input0\
  shellies/EG_FL_Abstell/online:.* online\
  shellies/EG_FL_Abstell/announce:.* { json2nameValue($EVENT) }\
  shellies/announce:.* { $EVENT =~ m,..id...EG_FL_Abstell...mac.*, ? json2nameValue($EVENT) : return }\
shelly1_770D79:shellies/EG_FL_Abstell/info:.* { json2nameValue($EVENT) }\
shelly1_770D79:shellies/EG_FL_Abstell/input_event/0:.* { json2nameValue($EVENT) }
attr Licht_EG_FL_abstell room Flur,Verbindungen->Tasmota/Shelly,Verbindungen->Tasmota/Shelly
attr Licht_EG_FL_abstell setList off:noArg shellies/EG_FL_Abstell/relay/0/command off\
  on:noArg shellies/EG_FL_Abstell/relay/0/command on\
  x_update:noArg shellies/EG_FL_Abstell/command update_fw\
  x_mqttcom shellies/EG_FL_Abstell/command $EVTPART1
attr Licht_EG_FL_abstell userReadings light_0 { ReadingsVal($name,"state","off") }
attr Licht_EG_FL_abstell verbose 2
attr Licht_EG_FL_abstell webCmd :
#   CID        shelly1_770D79
#   DEF        shelly1_770D79
#   FUUID      659bf303-f33f-6adc-a2c2-1fe152534a80816d
#   FVERSION   10_MQTT2_DEVICE.pm:0.295280/2025-01-16
#   IODev      brok_MQTT2
#   LASTInputDev brok_MQTT2
#   MSGCNT     134
#   NAME       Licht_EG_FL_abstell
#   NR         289
#   STATE      off
#   TYPE       MQTT2_DEVICE
#   brok_MQTT2_CONN brok_MQTT2_192.168.50.159_5620
#   brok_MQTT2_MSGCNT 134
#   brok_MQTT2_TIME 2025-02-03 16:37:50
#   READINGS:
#     2025-02-03 16:10:39   IODev           brok_MQTT2
#     2025-02-03 16:10:50   actions_stats_skipped 0
#     2024-01-08 14:05:53   attrTemplateVersion 20220404
#     2024-01-16 12:29:39   battery         plug
#     2025-02-03 16:10:50   cfg_changed_cnt 2
#     2025-02-03 16:10:50   cloud_connected false
#     2025-02-03 16:10:50   cloud_enabled   false
#     2025-02-03 16:10:50   event          
#     2025-02-03 16:10:50   event_cnt       0
#     2025-02-03 16:10:50   fs_free         149596
#     2025-02-03 16:10:50   fs_size         233681
#     2025-02-03 16:10:50   fw_ver          20230913-112003/v1.14.0-gcb84623
#     2025-02-03 16:10:50   has_update      false
#     2025-02-03 16:10:50   id              EG_FL_Abstell
#     2025-02-03 16:37:50   input0          1
#     2025-02-03 16:10:50   inputs_1_event 
#     2025-02-03 16:10:50   inputs_1_event_cnt 0
#     2025-02-03 16:10:50   inputs_1_input  1
#     2025-02-03 16:37:50   light_0         off
#     2025-02-03 16:10:50   meters_1_is_valid true
#     2025-02-03 16:10:50   meters_1_power  0.00
#     2025-02-03 16:10:50   model           SHSW-1
#     2025-02-03 16:10:50   mqtt_connected  true
#     2025-02-03 16:10:50   new_fw          false
#     2025-02-03 16:10:50   online          true
#     2025-02-03 16:10:50   ram_free        39504
#     2025-02-03 16:10:50   ram_total       51688
#     2025-02-03 16:37:50   relay0          off
#     2025-02-03 16:10:50   relays_1_has_timer false
#     2025-02-03 16:10:50   relays_1_ison   false
#     2025-02-03 16:10:50   relays_1_source mqtt
#     2025-02-03 16:10:50   relays_1_timer_duration 0
#     2025-02-03 16:10:50   relays_1_timer_remaining 0
#     2025-02-03 16:10:50   relays_1_timer_started 0
#     2025-02-03 16:10:50   serial          1697
#     2025-02-03 16:37:50   state           off
#     2025-02-03 16:10:50   time            16:10
#     2025-02-03 16:10:50   unixtime        1738595450
#     2025-02-03 16:10:50   update_beta_version 20231107-162940/v1.14.1-rc1-g0617c15
#     2025-02-03 16:10:50   update_has_update false
#     2025-02-03 16:10:50   update_new_version 20230913-112003/v1.14.0-gcb84623
#     2025-02-03 16:10:50   update_old_version 20230913-112003/v1.14.0-gcb84623
#     2025-02-03 16:10:50   update_status   idle
#     2025-02-03 16:10:50   uptime          11321491
#     2025-02-03 16:10:50   wifi_sta_connected true
#     2025-02-03 16:10:50   wifi_sta_ip     192.168.50.159
#     2025-02-03 16:10:50   wifi_sta_rssi   -72
#     2025-02-03 16:10:50   wifi_sta_ssid   FlummyDev50
#
setstate Licht_EG_FL_abstell off
setstate Licht_EG_FL_abstell 2025-02-03 16:10:39 IODev brok_MQTT2
setstate Licht_EG_FL_abstell 2025-02-03 16:10:50 actions_stats_skipped 0
setstate Licht_EG_FL_abstell 2024-01-08 14:05:53 attrTemplateVersion 20220404
setstate Licht_EG_FL_abstell 2024-01-16 12:29:39 battery plug
setstate Licht_EG_FL_abstell 2025-02-03 16:10:50 cfg_changed_cnt 2
setstate Licht_EG_FL_abstell 2025-02-03 16:10:50 cloud_connected false
setstate Licht_EG_FL_abstell 2025-02-03 16:10:50 cloud_enabled false
setstate Licht_EG_FL_abstell 2025-02-03 16:10:50 event
setstate Licht_EG_FL_abstell 2025-02-03 16:10:50 event_cnt 0
setstate Licht_EG_FL_abstell 2025-02-03 16:10:50 fs_free 149596
setstate Licht_EG_FL_abstell 2025-02-03 16:10:50 fs_size 233681
setstate Licht_EG_FL_abstell 2025-02-03 16:10:50 fw_ver 20230913-112003/v1.14.0-gcb84623
setstate Licht_EG_FL_abstell 2025-02-03 16:10:50 has_update false
setstate Licht_EG_FL_abstell 2025-02-03 16:10:50 id EG_FL_Abstell
setstate Licht_EG_FL_abstell 2025-02-03 16:37:50 input0 1
setstate Licht_EG_FL_abstell 2025-02-03 16:10:50 inputs_1_event
setstate Licht_EG_FL_abstell 2025-02-03 16:10:50 inputs_1_event_cnt 0
setstate Licht_EG_FL_abstell 2025-02-03 16:10:50 inputs_1_input 1
setstate Licht_EG_FL_abstell 2025-02-03 16:10:50 ip 192.168.50.159
setstate Licht_EG_FL_abstell 2025-02-03 16:37:50 light_0 off
setstate Licht_EG_FL_abstell 2025-02-03 16:10:50 mac DC4F22770D79
setstate Licht_EG_FL_abstell 2025-02-03 16:10:50 meters_1_is_valid true
setstate Licht_EG_FL_abstell 2025-02-03 16:10:50 meters_1_power 0.00
setstate Licht_EG_FL_abstell 2025-02-03 16:10:50 model SHSW-1
setstate Licht_EG_FL_abstell 2025-02-03 16:10:50 mqtt_connected true
setstate Licht_EG_FL_abstell 2025-02-03 16:10:50 new_fw false
setstate Licht_EG_FL_abstell 2025-02-03 16:10:50 online true
setstate Licht_EG_FL_abstell 2025-02-03 16:10:50 ram_free 39504
setstate Licht_EG_FL_abstell 2025-02-03 16:10:50 ram_total 51688
setstate Licht_EG_FL_abstell 2025-02-03 16:37:50 relay0 off
setstate Licht_EG_FL_abstell 2025-02-03 16:10:50 relays_1_has_timer false
setstate Licht_EG_FL_abstell 2025-02-03 16:10:50 relays_1_ison false
setstate Licht_EG_FL_abstell 2025-02-03 16:10:50 relays_1_source mqtt
setstate Licht_EG_FL_abstell 2025-02-03 16:10:50 relays_1_timer_duration 0
setstate Licht_EG_FL_abstell 2025-02-03 16:10:50 relays_1_timer_remaining 0
setstate Licht_EG_FL_abstell 2025-02-03 16:10:50 relays_1_timer_started 0
setstate Licht_EG_FL_abstell 2025-02-03 16:10:50 serial 1697
setstate Licht_EG_FL_abstell 2025-02-03 16:37:50 state off
setstate Licht_EG_FL_abstell 2025-02-03 16:10:50 time 16:10
setstate Licht_EG_FL_abstell 2025-02-03 16:10:50 unixtime 1738595450
setstate Licht_EG_FL_abstell 2025-02-03 16:10:50 update_beta_version 20231107-162940/v1.14.1-rc1-g0617c15
setstate Licht_EG_FL_abstell 2025-02-03 16:10:50 update_has_update false
setstate Licht_EG_FL_abstell 2025-02-03 16:10:50 update_new_version 20230913-112003/v1.14.0-gcb84623
setstate Licht_EG_FL_abstell 2025-02-03 16:10:50 update_old_version 20230913-112003/v1.14.0-gcb84623
setstate Licht_EG_FL_abstell 2025-02-03 16:10:50 update_status idle
setstate Licht_EG_FL_abstell 2025-02-03 16:10:50 uptime 11321491
setstate Licht_EG_FL_abstell 2025-02-03 16:10:50 wifi_sta_connected true
setstate Licht_EG_FL_abstell 2025-02-03 16:10:50 wifi_sta_ip 192.168.50.159
setstate Licht_EG_FL_abstell 2025-02-03 16:10:50 wifi_sta_rssi -72
setstate Licht_EG_FL_abstell 2025-02-03 16:10:50 wifi_sta_ssid FlummyDev50


Beta-User

#5
OK.

Ich warte mal mit irgendwelchen Vorschlägen, bis du das etwas intensiver angeschaut hast?

Nachtrag:
Hier noch eine etwas einfachere (normale myUtils-) Variante, weil ich grade sowieso an dem Thema war (soll am Ende für eine Ecowitt-Wetterstation sein und ggf. dann in den Modul-Code eingepflegt werden - https://forum.fhem.de/index.php?msg=1315799):
attr WittBoy devStateIcon { GW1000_TCP_devStateIcon($name) }
sub GW1000_TCP_devStateIcon {
  my $devname = shift // return;
 
  return if !defined $defs{$devname};
  my $alivecolor = 'lan_rs485@red';
  $alivecolor='lan_rs485@green' if ReadingsVal($devname, 'state', 'disconnected') eq 'opened';
  my $ret = '<div style="text-align:right">';
  $ret .= FW_makeImage($alivecolor,'lan_rs485');
  $ret .= ' ';
  $ret .= FW_makeImage('weather_barometric_pressure','weather_barometric_pressure');
  $ret .= ' ';
  $ret .= ReadingsVal($devname,'Barometric_Relative',0);
  $ret .= ' ';
  $ret .= FW_makeImage('humidity','humidity');
  $ret .= ReadingsVal($devname,'Humidity_Outdoor',0);
  $ret .= '%rH ';
  $ret .= FW_makeImage('temp_temperature','temp_temperature');
  $ret .= ReadingsVal($devname,'Temperature_Outdoor',0);
  $ret .='°C</div>';
  return $ret;
}
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

flummy1978

Hallo,

jetzt hatte ich etwas Zeit mich damit ein wenig zu befassen:
Zitat von: Beta-User am 03 Februar 2025, 16:49:56Ich warte mal mit irgendwelchen Vorschlägen, bis du das etwas intensiver angeschaut hast?

Ich hätte meine Versuche posten sollen, dann hätte man wahrscheinlich gesehen woran es gescheitert ist. Ich DENKE im Nachgang lag es daran, dass ich versucht habe direkt aus der Unterfunktion 2 Icons ohne Zusätze auszugeben
(weiss nicht ob es der letzte Versuch war)
Bitte NICHT benutzen (funktioniert nicht)
sub MydevStateIcon {
....
my $show = '<a href="';$show .= $onl eq 'gelb' ? "/fhem?cmd.dummy=set $devname x_update&XHR=1\">" : 'http://'.ReadingsVal($devname,'ip','none').'" target="_blank">'; $show .= FW_makeImage("10px-kreis-$onl").'</a>'; "<div> $show <a href=\"/fhem?cmd.dummy=set $devname toggle&XHR=1\">".FW_makeImage($light).'</a></div>';
my $show = FW_makeImage("$onl",'file_unknown@grey');
$show .= FW_makeImage("$light",'file_unknown@grey');
return $show;
}

Zitat von: Beta-User am 03 Februar 2025, 16:49:56Nachtrag:
Hier noch eine etwas einfachere (normale myUtils-)
GENAU das war der richtige Ansatz für mich. Sehr schön und für mich auch machbar, das anzupassen:

So funktioniert es im Ansatz
sub MydevStateIcon {
my $devname = shift // return;
my $icon = shift // 'none';
my $state_read = shift // 'state'; # oder "POWER1" or "....."

return if !defined $defs{$devname};
my $alivecolor = ReadingsVal($devname, 'online', 'false') eq 'true' ? '10px-kreis-gruen' : ReadingsVal($devname, 'LWT', 'false') eq 'Online' ? '10px-kreis-gruen' : '10px-kreis-rot';
my $devicon = ReadingsVal($devname,$state_read,'false') eq 'on' ? $icon.'@red' : $icon.'@green';

my $ret = '<div>';
$ret .= '<a href="http://';
$ret .= ReadingsVal($devname,'IPAddress','none') ne 'none' ? ReadingsVal($devname,'IPAddress','none') : ReadingsVal($devname,'ip','none') ne 'none' ? ReadingsVal($devname,'ip','none') : 'none';
$ret .= '" target="_blank">';
$ret .= FW_makeImage($alivecolor,$alivecolor);
$ret .= '</a> ';
$ret .= '<a href="/fhem?cmd.dummy=set '.$devname;
$ret .= ReadingsVal($devname,$state_read,'false') eq 'on' ? " off" : " on";
$ret .= '"&XHR=1>';
$ret .= FW_makeImage($devicon,$devicon);
$ret .= '</a></div>';
return $ret;
}
Aufruf zB:{ MydevStateIcon($name,"light_led_stripe"); }

Erklärung zu dem was ich dort ergänzt angepasst habe:

Es wird nach einem Reading online (Shelly) oder LWT (Tasmota) gesucht und dann ein entsprechender zustand generiert
Dann wird nach einem Reading IPAddress (Tasmota) oder ip (shelly) gesucht und dann ein entsprechender Link generiert
Am Ende wir aus dem Onlinezustand, Link und dem angegebenem Icon ein Icon generiert - Sieht dann so in etwa aus:

Du darfst diesen Dateianhang nicht ansehen.

(Hab alle 3 Zustände einmal simuliert)

VIELEN DANK!

Jetzt kann ich das so bauen wie ich es gern hätte und alle Icons (Icongruppen) sehen gleich aus, bzw es ist ein schnelles das anzupassen.

VG
Andreas