neue svg-Funktionen: icon_ring, icon_bar, cylinder_bars, icon_ring2

Begonnen von Damian, 30 Januar 2021, 20:03:18

Vorheriges Thema - Nächstes Thema

Damian

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

LexPoud

Hallo, wie genau sieht die Funktion denn aus?
FHEM on Synology, Homematic Devices

Damian

Zitat von: LexPoud am 30 Januar 2021, 23:07:29
Hallo, wie genau sieht die Funktion denn aus?

Der Aufbau wird dem der bisherigen ring-Funktionen entsprechen https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#SVG-uiTable-Funktionen.
Es gibt einen zusätzlichen Parameter, das ist der Name des Icons.

Ich bin noch am testen. Ich werde dann hier eine Version zum Testen mit Kurzdoku hochladen.



Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

#3
So, die erste Version ist fertig, siehe Anhang:

Es gibt neue Funktionen:

icon_ring
icon_temp_ring
icon_hum_ring

und ohne Farbverlauf (monochrom)

icon_mring
icon_temp_mring
icon_hum_mring


Die Syntax entspricht der bisherigen der ring-Funktion ohne icon (siehe: https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#SVG-uiTable-Funktionen)

Sie wurde um einen neuen Parameter icon erweitert.

hier z. B. für  icon_temp_ring und icon_temp_mring

Zitaticon_temp_ring/icon_temp_mring ($icon,$temp_value,$temp_min,$temp_max,$size,$lightring,$lightnumber)

$icon            # Icon
$temp_value  # Temperatur
$temp_min,   # minimale Temperatur, optional, default=-20
$temp_max,   # maximale Temperatur, optional, default=60
$size,       # Größe der Grafik, optional, default=100
$lightring,  # Helligkeit des Ringes (0-100), optional, default=50
$lightnumber # Helligkeit der Zahl (0-100), optional, default=50

Leider lassen sich nicht alle FHEM-Icons einheitlich skalieren.

Dafür lässt sich der Parameter icon mit weiteren optionalen kommagetrennten Angaben definieren:

"Iconname,Skalierungsfaktor,x-Position,y-Position"

Skalierungsfaktor und die Positionen sind optional.

Beispieldefinition (Output siehe Anhang):

defmod di_icon_ring DOIF ##
attr di_icon_ring uiTable {package ui_Table;;}\
icon_ring ("fuel",[Tankstelle:Diesel],1.10,1.30,120,0,"€",undef,undef,2)|\
icon_hum_mring ("weather_humidity,0.7,2",[Aussensensor:humidity])|\
icon_temp_mring ("temp_outside",[Aussensensor:temperature])|\
icon_temp_mring ("temp_temperature,0.7,5",[TH_Bad_HM:measured-temp])


Vielleicht kennt sich jemand besser aus mit html und weiß wie man diesen Teil so definiert, dass ein Icon immer sauber hineinpasst ohne es skalieren zu müssen:

  if (defined $icon) {
    $out.=sprintf('<symbol id="Image'."_$ic".'" x="%d" y="%d" viewBox="0 0 %d %d">',$ix, $iy,640/$iscale,640/$iscale);
    $out.= ::FW_makeImage($ic);
    $out.='</symbol>';
    $out.='<g stroke="rgb(128,128,128)" >';
    $out.='<use href="#Image'."_$ic".'" height="18" width="18" />';
    $out.='</g>';
  }

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

#4
Ich habe noch etwas am Layout gebastelt. Durch einen schmaleren Ring habe ich etwas mehr Platz für ein größeres Icon geschaffen.

Im Anhang der Vergleich alt und neu.

Edit: Aktuelle Version im ersten Post.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

Man kann jetzt auch Zustände anzeigen, indem man selbst die Farbe des Icons vorgibt.

Wo ich bisher zwei Icons brauchte, komme ich jetzt mit einem aus.

Beispiel für Zirkulationspumpe mit Temperaturanzeige. Das Iconsymbol verfärbt sich abhängig, ob die Pumpe läuft oder nicht:

icon_temp_mring(([Zirk] eq "off"?"sani_pump\@white":"sani_pump\@Darkorange"),[ESPEasy_ESP_Temp_Zirkulation:Temperature],15,70)

Im Anhang alte Darstellung mit zwei Symbolen und neue mit der obigen Definition.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

Als nächstes werde ich mir die bar-Funktion vornehmen. Jetzt kann man drei mal raten, wie die neue icon_bar aussehen wird. Im Anhang meine bisherige Darstellung.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

#7
Ich glaube weniger ist mehr, ich habe mal die Kontur-Linien rausgenommen (Version 0.4).
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

cwagner

Klasse, das ermöglicht eine erhebliche Informationsverdichtung und Verbesserung der Verständlichkeit, wie ich finde. Habe sofort ein Mini-Dashboard für meine Heizungssteuerung zusammengestellt:
Von links nach rechts zeigen die Symbole, ob der Kessel feuert, die Umwälzpumpe läuft, die Heizkörper sollten warm sein, die Rücklaufanhebung aus der Solarthermie steuert was bei, die Pumpe für Warmwasser ist eingeschaltet und die Pumpe für die Fußbodenheizkreisläufe ist an.
Die Temperaturen sind die Kesseltemperatur, der Vorlauf, der Rücklauf, der Speicher für die Rücklaufanhebung (hier sieht man meinen Fake, denn hier habe ich das Symbol bei OFF eingeblendet, um es zeigen zu können; tatsächlich ist der Rücklauf zu hoch und die Rücklaufanhebung müsste in diesem Moment ausgeschaltet sein), dann die Temperatur des solargespeisten Warmwasserspeichers und schließlich die Vorlauftemperatur der Fußbodenheizung (heute Morgen kurz nach Start, ein bisschen niedrig noch).

Danke, Damian, für diese weitere Bereicherung des DOIF-Ökosystems.

Herzliche Grüße

Christian
PI 2B+/3B+ Raspbian 12, Perl 5.36.0, FHEM 6.3: 295 Module in ConfigDB: Steuerung Heizkessel, FBH, Solarthermie, kontr. Lüftung mit WRG. Smarthome u.a. HMCUL, 1-Wire (FT232RL ; DS2480B), EnOcean (TCM EPS3), MQTT2. DOIF, PID20, Threshold, OWX; Micropelt IRTV, Volkszähler, SolarForecast; MariaDB

Damian

Zitat von: cwagner am 02 Februar 2021, 12:52:04
Klasse, das ermöglicht eine erhebliche Informationsverdichtung und Verbesserung der Verständlichkeit, wie ich finde. Habe sofort ein Mini-Dashboard für meine Heizungssteuerung zusammengestellt:
Von links nach rechts zeigen die Symbole, ob der Kessel feuert, die Umwälzpumpe läuft, die Heizkörper sollten warm sein, die Rücklaufanhebung aus der Solarthermie steuert was bei, die Pumpe für Warmwasser ist eingeschaltet und die Pumpe für die Fußbodenheizkreisläufe ist an.
Die Temperaturen sind die Kesseltemperatur, der Vorlauf, der Rücklauf, der Speicher für die Rücklaufanhebung (hier sieht man meinen Fake, denn hier habe ich das Symbol bei OFF eingeblendet, um es zeigen zu können; tatsächlich ist der Rücklauf zu hoch und die Rücklaufanhebung müsste in diesem Moment ausgeschaltet sein), dann die Temperatur des solargespeisten Warmwasserspeichers und schließlich die Vorlauftemperatur der Fußbodenheizung (heute Morgen kurz nach Start, ein bisschen niedrig noch).

Danke, Damian, für diese weitere Bereicherung des DOIF-Ökosystems.

Herzliche Grüße

Christian

sieht gut aus :)

Du kannst natürlich den minimalen Temperaturwert runtersetzen, damit auch kleinere Werte sinnvoll angezeigt werden. Das letzte Symbol könntest du per Y-Position etwas tiefer setzen, wenn du willst. Die einfarbigen mring Funktionen kennst du bestimmt auch - wenn es einem zu bunt wird. Sie habe ja die gleiche Syntax.

In der aktuellen Version 0.5 im ersten Post, habe ich bei allen ring-Funktionen die Ringdicke etwas vereinheitlicht. Die Konturlinien sind jetzt bei allen ring-Funktionen nicht mehr dabei.

Bei der zukünftigen icon_bar-Funktion wird man auch die Überschrift im Widget einblenden können.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

#10
So sieht eine icon_bar-Funktion aus. Wenn es einem zu bunt ist, so werden sich die Farbverläufe und die Farben wie bei der ring-Funktion individuell anpassen lassen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

#11
Auch hier: weniger ist mehr - bar ohne Konturlinie und schmaler.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

cwagner

Ist eine auch eine indirekte Zuweisung von Icons möglich? Ich habe einen Fall mit vier Zuständen, den ich plakativ und sehr platzsparend mit einem Iconring darstellen könnte:

Ich stelle mir das in etwa so vor:
icon_temp_ring(([$SELF] eq "an"?[$SELF:Icon]:""),[T_Kollektor:temperature:d1],-10,120)|

Das Reading "Icon" beinhaltet dann je nachdem ob das Dreiwegeventil auf Speicher 1 oder Speicher 2 steht ein anderes Icon in der Formsani_heating\@green oder eben sani_water_tap\@green

Wenn das DOIF auf "aus" steht, würde kein Icon angezeigt.

Christian


PI 2B+/3B+ Raspbian 12, Perl 5.36.0, FHEM 6.3: 295 Module in ConfigDB: Steuerung Heizkessel, FBH, Solarthermie, kontr. Lüftung mit WRG. Smarthome u.a. HMCUL, 1-Wire (FT232RL ; DS2480B), EnOcean (TCM EPS3), MQTT2. DOIF, PID20, Threshold, OWX; Micropelt IRTV, Volkszähler, SolarForecast; MariaDB

Damian

Zitat von: cwagner am 04 Februar 2021, 08:53:40
Ist eine auch eine indirekte Zuweisung von Icons möglich? Ich habe einen Fall mit vier Zuständen, den ich plakativ und sehr platzsparend mit einem Iconring darstellen könnte:

Ich stelle mir das in etwa so vor:
icon_temp_ring(([$SELF] eq "an"?[$SELF:Icon]:""),[T_Kollektor:temperature:d1],-10,120)|

Das Reading "Icon" beinhaltet dann je nachdem ob das Dreiwegeventil auf Speicher 1 oder Speicher 2 steht ein anderes Icon in der Formsani_heating\@green oder eben sani_water_tap\@green

Wenn das DOIF auf "aus" steht, würde kein Icon angezeigt.

Christian

Es handelt sich hier um eine Perlfunktionen, der erste Parameter ist das Icon, hier kannst du beliebig das Icon definieren, also beliebig mit dem Ternär-Operator schachteln:

icon_temp_ring((<erste Bedingung>?<icon1>:(<zweite Bedingung>?<icon2>:(<dritte Bedingung>?<icon3>:<icon4>):<icon5>):<icon6),weitere Parameter)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

cwagner

Wie geil ist das denn? Jetzt habe ich es kapiert, Damian. Fehlt nur noch Sonnenschein, um die Varianten live zu sehen!
Vielen Dank für diese weitere Fortbildung in Sachen Möglichkeiten. Wenn ich fertig bin, poste ich die Variante hier.

Ausblenden des Icons bei Nichterfüllung der Bedingung mache ich aktuell immer durch einfärben in der Hintergrundfarbe oder durch Aufruf eines leeren Icon-Namen (" ") Falls es da eine elegantere Variante gibt, bin ich wissbegierig.


Christian
PI 2B+/3B+ Raspbian 12, Perl 5.36.0, FHEM 6.3: 295 Module in ConfigDB: Steuerung Heizkessel, FBH, Solarthermie, kontr. Lüftung mit WRG. Smarthome u.a. HMCUL, 1-Wire (FT232RL ; DS2480B), EnOcean (TCM EPS3), MQTT2. DOIF, PID20, Threshold, OWX; Micropelt IRTV, Volkszähler, SolarForecast; MariaDB