Hauptmenü

devStateIcon

Begonnen von -user-, 27 Februar 2020, 07:22:15

Vorheriges Thema - Nächstes Thema

-user-

edit...

Beta-User

Vielleicht wäre es eine Idee, du zeigt lists oder RAW-Code...?
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

marvin78

Und dann schaust du dir am besten mal den Code für das devStateIcon der Shellys an und versuchst das ganze zu transferieren.

Beta-User

Nimm mal das aktuelle tasmota- attrTemplate; sollte etwas anders sein.
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

TomLee

Zitat von: fhempi am 27 Februar 2020, 09:54:02
Genau DAS habe ich versucht und komme nicht dahinter  :-[

Ist auch mMn nicht so einfach wenn eine Funktion (FW_makeImage) Html zurück gibt und man sich bisher eher nicht damit beschäftigt hat.

- roter Punkt OFFLINE
- grüner Punkt ONLINE
- ICON entweder aus oder an , aber nicht die Lampe mit "!"

bei einem Sonoff:

{my $onl = ReadingsVal($name,"LWT","0") eq "Online"?"10px-kreis-gruen":"10px-kreis-rot";;my $lamp = ReadingsVal($name,"state","off");;"<a href=\"http://".ReadingsVal($name,"IPAddress","none")." \"target=\"_blank\">".FW_makeImage($onl)."</a> <a href=\"/fhem?cmd.dummy=set $name toggle&XHR=1\">".FW_makeImage($lamp)."</a>"}

Gruß

Thomas

Pfriemler

#5
Ich nutze nicht MQTT2, kenne die Unterschiede daher nicht. LWT wird bei mir eigentlich recht zügig aktualisiert, nach dem Einstromen des Gerätes unmittelbar, beim Ausstecken nach spät. 10 Minuten. Das macht mein externer Broker offenbar ganz von allein.
Ich verbräme den Status aber zusammen mit dem Schaltstatus:
attr OBIplug1M stateFormat {(ReadingsVal($name,"LWT", "") eq "Online") ? ReadingsVal($name,"state", "error") : 'offline'}

Dazu nutze diesen Statusstring (für eine Steckdose):
attr OBIplug1M devStateIcon off:ios-off:on on:ios-on-blue:off
Das blendet den kleinen klickbaren Schieber mit entsprechender Hintergrundfarbe ein oder zeigt den Text "offline", wenn die Steckdose nicht erreichbar ist. Ich finde das besser als eine separate Online-Anzeige.
NB: ich habe den MQTT-Status in Tasmota auf Kleinschreibung umgemappt (on/off statt On/Off) - ggf. anpassen.

P.S.: ich verwende einen erweiterten Status für Homematic, wo auch die set_-Zustände mit gezeigt werden als Pfeil (bis die Rückmeldung vom Aktor kommt), NACK ebenfalls, und wie im Bild zu sehen auch wenn eine zeitbegrenzte Einschaltung zugange ist.

edit: andere Variante: wem "offline" nicht so gefällt, kann man stattdessen auch um " offline:ios-nack" erweitern und das angehängte Icon in FHEM verwenden.
"Änd're nie in fhem.cfg, denn das tut hier allen weh!" *** Wheezy@Raspi(3), HMWLAN+HMUART, CUL868(SlowRF) für FHT+KS+FS20, miniCUL433, Rademacher DuoFern *** "... kaum macht man es richtig, funktioniert es ..."

eisman

#6
hi

ja, das ganze in einer sub auslagern....

▼19.6°C   ▼ 76.1 °C

so kann man es gestalten wie man es möchte,
ist aber aufwendiger

stateFormat { sub_Anzeige_TempStatus(1) }

sub sub_Anzeige_TempStatus($) {
  my ($Nr) = @_; my @TEMP = ( 'STRG', 'Vorzeichen', 'Neu', 'Alt');
 
  $TEMP[0] = ''; $TEMP[1] = "●";
  $TEMP[2] = ReadingsVal( "TC_0" . $Nr . "01", 'temperature', 0.0);
  $TEMP[3] = ReadingsVal( "TC_0" . $Nr . "01", 'temp-o', 0.0);
 
  if   ($TEMP[3] >  $TEMP[2]) { $TEMP[1] = "▼" }
  elsif($TEMP[3] <  $TEMP[2]) { $TEMP[1] = "▲" }
  elsif($TEMP[3] == $TEMP[2]) { $TEMP[1] = "●" }

  $TEMP[0] = $TEMP[0] . "<span style='font-size:10px; font-weight:bold; color:#A6ACB3'>" . $TEMP[1] . "</span>";
  $TEMP[0] = $TEMP[0] . "<span style='font-size:18px; font-weight:bold; color:#";
  $TEMP[0] = $TEMP[0] . substr(Color::pahColor(7,20,30,$TEMP[2],0),0,6);
  $TEMP[0] = $TEMP[0] . "'>" . $TEMP[2] . "</span>";
  $TEMP[0] = $TEMP[0] . "<span style='font-size:10px; font-weight:bold; color:#A6ACB3'>°C</span>";
 
  return $TEMP[0];
}


devStateIcon { sub_Icon_Ventil(ReadingsNum("VD_0101","ValvePosition",0))}
sub sub_Icon_Ventil($) {
  my ($Nr) = @_; my $Icon = ''; my $Farbe = "";
  if($Nr >= 0 and $Nr < 101) {
    $Nr = $Nr;
  } else {
    $Nr = 101;
  }
  if   ($Nr ==   0)               { $Icon = "sani_heating_level_10";  }
  elsif($Nr >=   1 and $Nr <   5) { $Icon = "sani_heating_level_10";  }
  elsif($Nr >=   5 and $Nr <  10) { $Icon = "sani_heating_level_10";  }
  elsif($Nr >=  10 and $Nr <  20) { $Icon = "sani_heating_level_20";  }
  elsif($Nr >=  20 and $Nr <  30) { $Icon = "sani_heating_level_30";  }
  elsif($Nr >=  30 and $Nr <  40) { $Icon = "sani_heating_level_40";  }
  elsif($Nr >=  40 and $Nr <  50) { $Icon = "sani_heating_level_50";  }
  elsif($Nr >=  50 and $Nr <  60) { $Icon = "sani_heating_level_60";  }
  elsif($Nr >=  60 and $Nr <  70) { $Icon = "sani_heating_level_70";  }
  elsif($Nr >=  70 and $Nr <  80) { $Icon = "sani_heating_level_80";  }
  elsif($Nr >=  80 and $Nr <  90) { $Icon = "sani_heating_level_90";  }
  elsif($Nr >=  90 and $Nr < 101) { $Icon = "sani_heating_level_100"; }
  elsif($Nr >= 101 and $Nr < 102) { $Icon = "refresh"; }
  $Farbe = substr(Color::pahColor(0,50,100,$Nr,[7,120,165, 116,185,23, 35,97,78, 196,0,70, 137,13,72]),0,6);

  return $Nr . ":" . $Icon . "\@" . $Farbe;
}



mfg
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

eisman

schade,

tasmota benutze ich nicht, da kann ich nicht helfen.

mfg
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

Letztlich geht es darum, Readings zu visualisieren. Dafür braucht man die richtigen Readings, Material zum spielen gibt's hier mehr als genug...

ABER vor allem: Du hast die Antwort auf das eigentliche Problem schon erhalten, wenn auch - aus Gründen die ich NICHT nachvollziehen kann, ein Teil der Lösung auf einen anderen Thread ausgelagert wurde...!
Ich bin mir einigermaßen sicher, dass das attrTemplate funktioniert, aber irgendwas bei dir "speziell" war, was dann zu einem seltsamen Ergebnis geführt hat (und du hier - warum auch immer - nicht gezeigt hattest, wie das "Problem" aussieht, noch erwähnt, dass du Rückfragen per Dialogfeld erhalten hattest, von denen du nicht wußtest, wie du sie beantworten sollst...).
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

Beta-User

Das müßte state "set_on" sein...

(Und ist eigentlich ein Zeichen, dass mit der MQTT-Kommunikation was nicht stimmt...!).
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

Beta-User

Hm, der shelly sollte eigentlich auch auf dieselbe optische Weise "meckern", wenn die Kommunikation nicht paßt....

(und danke für den "zeitnahen" Hinweis, dass du die Dinger ausgesteckt hattest. Mir war das zwar fast klar, aber vermutlich nicht allen hier, die helfen wollten...).

Einfach per regex-subsitute das "set_" innerhalb des Perl-Codes löschen wäre eine Möglichkeit ;) . Oder eben auf komplexe devStateIcon-Codes verzichten, die Multi-line-stateFormat-Variante nutzen und dann einfache regexe für die Icon angeben.

Ein noch recht einfaches Beispiel aus den attrTemplate für sowas wäre unter "tasmota_2ch_unified" zu finden.
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