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

xenos1984


Damian

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

Damian

#122
Dann wollen wir gleich mal die neuen Features auf die Probe stellen :)

defmod di_wind DOIF ##
attr di_wind uiTable {package ui_Table;;\
\
sub himmelsrichtung {\
my ($richtung)=@_;;\
my $element=int($richtung/22.5);;\
my @h=(qw"N NNO NO ONO O OSO SO SSO S SSW SW WSW W WNW NW NNW");;\
return($h[$element]);;\
}\
}\
icon_ring2(([Wind:Geschwindigkeit]>0 ? "wind":"no_wind").",1,0,0,".[Wind:Richtung],[Wind:Geschwindigkeit],0,50,120,0,"km/h",undef,undef,1,[Wind:Richtung],361,361,192,192,([Wind:Geschwindigkeit]>0?himmelsrichtung([Wind:Richtung]):"--"),undef,0)


Angezeigt wird: Windrichtung, Windstärke, Himmelsrichtung, bei keinem Wind, wird keine Windrichtung angezeigt.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF


Damian

#124
Hier ein Beispiel für eine komprimierte Informationsdichte.

Neben Temperatur und Feuchtigkeit, kann man erkennen, ob Fenster im Zimmer offen ist und ob gerade geheizt wird. Was rot bedeutet, kann man ohne Worte erkennen.

defmod Heizung DOIF ##
attr Heizung uiTable {\
  package ui_Table;;\
  $SHOWNOSTATE=1;;\
  $ATTRIBUTESFIRST =  1;;\
  $TC{1..4}="align='center'";;\
}\
\
DEF TPL_raum (icon_temp_hum_ring([$1_Fenster:state] eq "closed" ? ([H_$1:state] eq "off" ? "fts_window_1w\@white":"fts_window_1w\@Darkorange"):([H_$1:state] eq "off" ? "fts_window_1w_open\@lime":"fts_window_1w_open\@red"),[TH_$1_HM:measured-temp],[TH_$1_HM:humidity],undef,undef,130))\
\
style("DG","Darkorange")|"DG_Zi."|""|""|""\
""|TPL_raum (DG)\
style("1. GE","Darkorange")|"Bad"|"Kind Ost"|"Kind West"|""\
""|TPL_raum (Bad)|TPL_raum (Kz_o)|TPL_raum (Kz_w)\
style("Erdge.","Darkorange")|"Wohnzi."|"Küche"|""|""\
""|TPL_raum (WZ)|TPL_raum (Kueche)\
style("Keller","Darkorange")|"Schlafzi."|"Werkzi."|""|""\
""|TPL_raum (Keller)|TPL_raum (AKeller)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

cwagner

#125
Zitat von: Damian am 20 Februar 2021, 13:33:09
Dann wollen wir gleich mal die neuen Features auf die Probe stellen :)

Da muss nun mein 20zeiliges DOIF in Rente, mit dem ich bisher die Windrichtung ausschließlich als Kürzel dargestellt habe. Wirklich super gelöst und mit dem Pfeil so viel intuitiver.

Jetzt fehlt mir eigentlich nur noch ein "Mitnehmer" auf dem Kreis, der Min/Max zum Beispiel der Windstärke markiert. :-) Klar, das muss dann beim Datumswechsel zurückgesetzt werden.

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

xenos1984


Damian

Zitat von: xenos1984 am 21 Februar 2021, 18:58:17
Sehr schön! Meine Wetteranzeige ist auch ausgebaut :)

Schön zu sehen, dass die neuen Funktionen gute Anwendungsmöglichkeiten finden.

Mit über Null Grad scheint dort im Norden auch schon Frühling anzukommen ;)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

xenos1984

#128
Zitat von: Damian am 21 Februar 2021, 19:09:47
Mit über Null Grad scheint dort im Norden auch schon Frühling anzukommen ;)

Das muss noch nichts heißen - heute Abend sind es schon wieder -6,8°C :D Manchmal liegt der Schnee bis April.

Mir ist gerade noch ein kleiner, aber entscheidender Fehler an zwei Stellen aufgefallen:


4757   $out.= '<linearGradient id="grad_stroke3" x1="1" y1="0" x2="0" y2="0"><stop offset="0" style="stop-color:rgb(80,80,80); stop-opacity:0.6"/>\
4758   <stop offset="1" style="stop-color:rgb(48,48,48); stop-opacity:0.8"/><linearGradient>';



4911   $out.= '<linearGradient id="grad_stroke3" x1="1" y1="0" x2="0" y2="0"><stop offset="0" style="stop-color:rgb(80,80,80); stop-opacity:0.6"/>\
4912   <stop offset="1" style="stop-color:rgb(48,48,48); stop-opacity:0.8"/><linearGradient>';


Beim schließenden Tag </linearGradient> fehlt der Schrägstrich. Firefox scheint sich innerhalb einer HTML-Seite (= im HTML-Modus) nicht zu beschweren, wohl aber, wenn man die SVG für sich alleine (= XML-Modus) anzeigen möchte, und auch librsvg verschluckt sich daran. Leztere mag auch die Größenangabe nicht, und nimmt stur die Werte aus der viewBox stattdessen:


4751   $out.= sprintf('<svg xmlns="http://www.w3.org/2000/svg" viewBox="10 0 63 58 " style="width:%dpx; height:%dpx;">',$size/100*63,$size/100*58);



4902   $out.= sprintf('<svg xmlns="http://www.w3.org/2000/svg" viewBox="10 0 63 57 " style="width:%dpx; height:%dpx;">',$size/100*63,$size/100*57);


Damit hat die mit librsvg konvertierte Grafik immer die Maße 63 * 57 Pixel. Damit dagegen geht es:


4751   $out.= sprintf('<svg xmlns="http://www.w3.org/2000/svg" viewBox="10 0 63 58 " width="%dpx" height="%dpx">',$size/100*63,$size/100*58);



4902   $out.= sprintf('<svg xmlns="http://www.w3.org/2000/svg" viewBox="10 0 63 57 " width="%dpx" height="%dpx">',$size/100*63,$size/100*57);


Das sollte auch die SVG-konforme Skalierungsmethode sein. librsvg wird vom RSS-Modul benutzt, um SVG nach PNG zu konvertieren.

Nachtrag: Das style-Attribut zur Größenangabe braucht man doch noch (zusätzlich), um die Größe auch im FHEMWEB Frontend richtig zu bekommen...

Damian

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

jkriegl

Benutze ein sub und bekomme bei attr der uiTable log-Eintragungen, obwohl alles richtig funktioniert und verbose=2 ist.
In [vhk:Wer] steht z.B. "eco 17.0 Therme" (od. Solar, keiner)
Muss ich noch etwas einstellen?
2021.02.23 17:11:21 3: system return value: Unknown command sub, try help.
Unknown command my, try help.
Unknown command return($words[2]), try help.
Unknown command }
}

icon_ring((wer_hzt([vhk:wer])eq"solar"?"sani_solar_temp\@yellow":(wer_hzt([vhk:wer])eq"therme"?"sani_boiler_temp\@darkorange":"")),(wer_hzt([vhk:wer])eq"keiner"?"keiner":([var:wert])),20,60,120,0,"vl",1,120)

style(wer_hzt([vhk:wer])), try help.
defmod di_ui_hz DOIF ###
attr di_ui_hz room 1.5 uiTest
attr di_ui_hz uiTable {package ui_Table;;\
\
sub wer_hzt {my ($str)=@_;;\
my @words=split / /,$str;;\
return($words[2]);;}\
}\
\
icon_ring((wer_hzt([vhk:Wer])eq"Solar"?"sani_solar_temp\@yellow":(wer_hzt([vhk:Wer])eq"Therme"?"sani_boiler_temp\@Darkorange":"")),(wer_hzt([vhk:Wer])eq"keiner"?"keiner":([Var:Wert])),20,60,120,0,"VL",1,120)\
\
style(wer_hzt([vhk:Wer]))
attr di_ui_hz verbose 2
Rpi 3, Fhem, Cul 868, HM-CC-RT-DN, HM-Sec-Sco, HM-ES-PMSw1-Pl, ebus (Vaillant), ECMD, Telegram, HTTPMOD, Xiaomi, Shelly

Damian

Ich sehe keinen Fehler.

Bei mir wird korrekterweise eine Tabelle mit "c" angezeigt:

Internals:
   CFGFN     
   DEF        ###
   FUUID      603541cd-f33f-c0d4-848f-ceb782fc33184505
   MODEL      FHEM
   NAME       di_ui_hz
   NOTIFYDEV  global
   NR         6186
   NTFY_ORDER 50-di_ui_hz
   STATE      initialized
   TYPE       DOIF
   READINGS:
     2021-02-23 18:56:29   cmd             0
     2021-02-23 18:56:29   mode            enabled
     2021-02-23 18:56:29   state           initialized
   Regex:
     accu:
   condition:
   do:
     0:
   helper:
     DEVFILTER  ^global$
     NOTIFYDEV  global
     globalinit 1
     last_timer 0
     sleeptimer -1
   uiTable:
     package    package ui_Table;
     table:
       0:
         0:
           0:
             0          package ui_Table;style(wer_hzt("a b c"))
     tc:
     td:
       0:
     tr:
Attributes:
   room       1.5 uiTest
   uiTable    {package ui_Table;
sub wer_hzt {my ($str)=@_;
my @words=split / /,$str;
return($words[2]);}
}

style(wer_hzt("a b c"))
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

jkriegl

Es geht um den Eintrag im Log, der unschön ist.
Der Rückgabewert wird bei mir auch korrekt angezeigt.
Rpi 3, Fhem, Cul 868, HM-CC-RT-DN, HM-Sec-Sco, HM-ES-PMSw1-Pl, ebus (Vaillant), ECMD, Telegram, HTTPMOD, Xiaomi, Shelly

Damian

Zitat von: jkriegl am 23 Februar 2021, 19:44:09
Es geht um den Eintrag im Log, der unschön ist.
Der Rückgabewert wird bei mir auch korrekt angezeigt.

Bei mir kommt kein Eintrag im Log bei der geposteten Definition von mir.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

#134
Zitat von: Damian am 23 Februar 2021, 13:09:33
Danke für den Tipp.

Ich werde es heute Abend beheben.

Korrigierte Version eingecheckt:

https://svn.fhem.de/trac/browser/trunk/fhem/FHEM?order=date&desc=1

Mit der Korrektur des LinearGradienten funktioniert jetzt wieder mein altes Wandtablet :)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF