FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: -user- am 27 Februar 2020, 07:22:15

Titel: devStateIcon
Beitrag von: -user- am 27 Februar 2020, 07:22:15
edit...
Titel: Antw:Shelly - SonOff / devStateIcon
Beitrag von: Beta-User am 27 Februar 2020, 09:44:39
Vielleicht wäre es eine Idee, du zeigt lists oder RAW-Code...?
Titel: Antw:Shelly - SonOff / devStateIcon
Beitrag von: marvin78 am 27 Februar 2020, 09:49:42
Und dann schaust du dir am besten mal den Code für das devStateIcon der Shellys an und versuchst das ganze zu transferieren.
Titel: Antw:Shelly - SonOff / devStateIcon
Beitrag von: Beta-User am 27 Februar 2020, 10:09:13
Nimm mal das aktuelle tasmota- attrTemplate; sollte etwas anders sein.
Titel: Antw:Shelly - SonOff / devStateIcon
Beitrag von: TomLee am 27 Februar 2020, 11:15:39
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
Titel: Antw:Shelly - SonOff / devStateIcon
Beitrag von: Pfriemler am 27 Februar 2020, 17:26:00
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.
Titel: Antw:Shelly - SonOff / devStateIcon
Beitrag von: eisman am 27 Februar 2020, 20:41:04
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
Titel: Antw:Shelly - SonOff / devStateIcon
Beitrag von: eisman am 28 Februar 2020, 11:32:27
schade,

tasmota benutze ich nicht, da kann ich nicht helfen.

mfg
Titel: Antw:Unterschiedliche devStateIcon
Beitrag von: Beta-User am 28 Februar 2020, 13:03:04
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...).
Titel: Antw:Unterschiedliche devStateIcon
Beitrag von: Beta-User am 28 Februar 2020, 18:44:52
Das müßte state "set_on" sein...

(Und ist eigentlich ein Zeichen, dass mit der MQTT-Kommunikation was nicht stimmt...!).
Titel: Antw:Unterschiedliche devStateIcon
Beitrag von: Beta-User am 28 Februar 2020, 19:03:28
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.