FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: Damian am 05 Mai 2020, 23:10:26

Titel: SVG-uiTable-Funktionen (DOIF-Web-Interface)
Beitrag von: Damian am 05 Mai 2020, 23:10:26
Die Dokumentation der neuen  skalierbaren SVG-uiTable-Funktionen ist fertiggestellt: https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#SVG-uiTable-Funktionen

letzter Dokueintrag: https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#3d-Balkendarstellung_mehrerer_Zahlenwerten_mit_Hilfe_der_universellen_SVG-Funktion_cylinder

Hier beginnt die Dokumentation zum DOIF-Web-Interface: https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg

Anregungen, Fragen, Probleme zu den SVG-Funktionen können hier gepostet werden.

Hier geht es zum alten Thread: https://forum.fhem.de/index.php/topic,106059.msg1050870.html#msg1050870

Im Anhang aktueller Statusbildschirm:
Titel: Antw:SVG-uiTable-Funktionen
Beitrag von: Benjamin50 am 08 Mai 2020, 14:04:38
Hallo,
Dank  für die die neuen SVG-uiTable-Funktionen.
Ich habe jetzt ein Beispiel für mich Nachvollzogen, doch bei mir schauen die Symbole von der Größe alle gleich aus.
Ich komme einfach nicht drauf warum das so ist.
Kann mir da jemand bitte weiterhelfen ?

Vielen Dank

mfg wolfgang



Internals:
   CFGFN     
   DEF        ##
   FUUID      5eb3df0a-f33f-1bf6-c30d-aceef1db741da346
   MODEL      FHEM
   NAME       di_temp_hum_ring
   NOTIFYDEV  global,HM_Garten
   NR         1001
   NTFY_ORDER 50-di_temp_hum_ring
   STATE      initialized
   TYPE       DOIF
   VERSION    21842 2020-05-02 16:00:20
   .attraggr:
   .attrminint:
   READINGS:
     2020-05-07 12:12:26   cmd             0
     2020-05-07 12:12:26   mode            enabled
     2020-05-07 12:12:26   state           initialized
   Regex:
     accu:
     uiTable:
       HM_Garten:
         di_temp_hum_ring_uiTable_c_0_1_0_0:
           humidity   ^HM_Garten$:^humidity:
           temperature ^HM_Garten$:^temperature:
         di_temp_hum_ring_uiTable_c_1_1_0_0:
           humidity   ^HM_Garten$:^humidity:
           temperature ^HM_Garten$:^temperature:
         di_temp_hum_ring_uiTable_c_2_1_0_0:
           humidity   ^HM_Garten$:^humidity:
           temperature ^HM_Garten$:^temperature:
   condition:
   do:
     0:
   helper:
     DEVFILTER  ^global$|^HM_Garten$
     NOTIFYDEV  global|HM_Garten
     globalinit 1
     last_timer 0
     sleeptimer -1
   uiTable:
     dev        HM_Garten
     package    package ui_Table;
     reading    humidity
     table:
       0:
         0:
           0:
             0          package ui_Table;"klein"
         1:
           0:
             0          package ui_Table;::DOIF_Widget($hash,$reg,'di_temp_hum_ring_uiTable_c_0_1_0_0',temp_hum_ring(::ReadingValDoIf($hash,'HM_Garten','temperature'),::ReadingValDoIf($hash,'HM_Garten','humidity'),undef,undef,60),"")
       1:
         0:
           0:
             0          package ui_Table;"normal"
         1:
           0:
             0          package ui_Table;::DOIF_Widget($hash,$reg,'di_temp_hum_ring_uiTable_c_1_1_0_0',temp_hum_ring(::ReadingValDoIf($hash,'HM_Garten','temperature'),::ReadingValDoIf($hash,'HM_Garten','humidity')),"")
       2:
         0:
           0:
             0          package ui_Table;"groß"
         1:
           0:
             0          package ui_Table;::DOIF_Widget($hash,$reg,'di_temp_hum_ring_uiTable_c_2_1_0_0',temp_hum_ring(::ReadingValDoIf($hash,'HM_Garten','temperature'),::ReadingValDoIf($hash,'HM_Garten','humidity'),undef,undef,100),"")
     tc:
     td:
       0:
       1:
       2:
     tr:
Attributes:
   group      Aussentemperatur
   room       Entwicklung
   uiTable    {package ui_Table}

"klein"|temp_hum_ring([HM_Garten:temperature],[HM_Garten:humidity],undef,undef,60)
"normal"|temp_hum_ring([HM_Garten:temperature],[HM_Garten:humidity])
"groß"|temp_hum_ring([HM_Garten:temperature],[HM_Garten:humidity],undef,undef,100)


Titel: Antw:SVG-uiTable-Funktionen
Beitrag von: Damian am 08 Mai 2020, 15:02:22
Evtl. liegt es am Browser oder FHEM-Style.

Ich benutze den f18-Style und den Chrome-Browser
Titel: Antw:SVG-uiTable-Funktionen
Beitrag von: KernSani am 08 Mai 2020, 17:53:41
Dark+Safari funktioniert z.B. auch, aber flex (wenn ich das richtig sehe) skaliert die SVGs offensichtlich nochmal selbst.


Kurz, weil mobil....
Titel: Antw:SVG-uiTable-Funktionen
Beitrag von: Damian am 09 Mai 2020, 08:49:59
Hier noch ein Beispiel für die Nutzung der SVG-Funktionen in fremden Devices.

Im Device zaehler wird der Status mit devStateIcon umdefiniert:

defmod zaehler SMLUSB /dev/serial/by-id/usb-Prolific_Technology_Inc._USB-Serial_Controller_C-if00-port0@9600 1234
attr zaehler T_Device CUL_WZ
attr zaehler devStateIcon {ui_Table::bar(ReadingsVal($name,"l-Produktion",0),0,4,"Prod.",0,120,"kW",70,undef,100)." ".ui_Table::bar(ReadingsVal($name,"l-Lieferung",0),0,4,"Einsp.",0,120,"kW",70,undef,100)." ".ui_Table::bar(ReadingsVal($name,"l-Bezug",0),0,4,"Bezug",120,0,"kW",70,undef,100)." ".ui_Table::bar(ReadingsVal($name,"l-Verbrauch",0),0,4,"Verbrauch",120,0,"kW",70,undef,100)}
attr zaehler event-on-change-reading .*
attr zaehler room Info

setstate zaehler P: 1.4 L: 0.8 V: 2.3 B: 1.7
setstate zaehler 2020-05-09 08:47:05 Aktuell P: 1.164 L: 0.971 V: 0.189 B: 0.000 E: 0.189
setstate zaehler 2020-05-09 08:47:05 Bezug 1.7
setstate zaehler 2020-05-09 08:47:05 Lieferung 0.8
setstate zaehler 2020-05-01 14:31:49 Monat B: 12419.900 -156.075 L: 20936.530 542.107 P: 1452.624 698.772 V: -7064.006 312.740
setstate zaehler 2020-05-09 08:47:05 Produktion 1.4
setstate zaehler 2020-05-09 00:01:22 Tag B: 12450.233 -3.230 L: 21069.720 23.335 P: 1619.288 28.092 V: -7000.199 7.987 E: 5450.033 4.757
setstate zaehler 2020-05-09 08:47:05 Verbrauch 2.3
setstate zaehler 2020-05-09 08:47:05 l-Bezug -0.000
setstate zaehler 2020-05-09 08:47:05 l-Lieferung 0.971
setstate zaehler 2020-05-09 08:47:05 l-Produktion 1.164
setstate zaehler 2020-05-09 08:47:05 l-Verbrauch 0.189
setstate zaehler 2020-05-09 08:47:05 l-momentan -0.8349
setstate zaehler 2020-05-09 08:47:05 state P: 1.4 L: 0.8 V: 2.3 B: 1.7
setstate zaehler 2020-05-09 08:47:05 time 1589006825
setstate zaehler 2020-05-09 08:47:05 z-Bezug 12451.9562
setstate zaehler 2020-05-09 08:47:05 z-Lieferung 21070.5616
setstate zaehler 2020-05-09 08:47:05 z-Produktion 1620.6900
setstate zaehler 2020-05-09 08:47:05 z-Verbrauch -6997.9154
Titel: Antw:SVG-uiTable-Funktionen
Beitrag von: Benjamin50 am 09 Mai 2020, 16:14:48
Hallo,
Danke für den Hinweis.

Es liegt am Flex-Style, Firefox, Chrome und Edge ist das gleich Bild

Beim f18-style ist mit  Firefox, Chrome und Edge alles in Ordnung.
Titel: Antw:SVG-uiTable-Funktionen
Beitrag von: Damian am 12 Mai 2020, 22:16:18
Spritpreisdarstellung im HTTPMOD-Modul:

defmod Tankstelle HTTPMOD http://www.clever-tanken.de/tankstelle_details/24198 300
attr Tankstelle userattr reading01Name reading01Regex reading02Name reading02Regex
attr Tankstelle devStateIcon {ui_Table::ring(ReadingsVal("$name","Diesel",0),0.90,1.40,120,0,"Diesel",100,undef,2)." ".ui_Table::ring(ReadingsVal("$name","SuperE5",0),0.90,1.40,120,0,"E5",100,undef,2)}
attr Tankstelle enableControlSet 1
attr Tankstelle event-on-change-reading .*
attr Tankstelle group Spritpreise
attr Tankstelle reading01Name Diesel
attr Tankstelle reading01Regex "current-price-1">(\d.\d{2})
attr Tankstelle reading02Name SuperE5
attr Tankstelle reading02Regex "current-price-2">(\d.\d{2})
attr Tankstelle room Spritpreise
attr Tankstelle stateFormat Liter_Diesel: Diesel
attr Tankstelle timeout 10
Titel: Antw:SVG-uiTable-Funktionen
Beitrag von: mumpitzstuff am 13 Mai 2020, 10:13:31
Ist es möglich z.B. bei der Abfalldarstellung 2 Kreise mit den Tagen darzustellen? Im ersten Kreis die Tage bis zur nächsten Abholung und danach die der Übernächsten? Macht z.B. dann Sinn, wenn die Tonne bei der nächsten Abholung nur halb voll ist, kann man entscheiden, ob man bis zur folgenden Abholung wartet oder die Tonne halbvoll raus stellen will.

https://forum.fhem.de/index.php?action=dlattach;topic=77502.0;attach=130623 (https://forum.fhem.de/index.php?action=dlattach;topic=77502.0;attach=130623)
Titel: Antw:SVG-uiTable-Funktionen
Beitrag von: Damian am 13 Mai 2020, 11:10:40
Zitat von: mumpitzstuff am 13 Mai 2020, 10:13:31
Ist es möglich z.B. bei der Abfalldarstellung 2 Kreise mit den Tagen darzustellen? Im ersten Kreis die Tage bis zur nächsten Abholung und danach die der Übernächsten? Macht z.B. dann Sinn, wenn die Tonne bei der nächsten Abholung nur halb voll ist, kann man entscheiden, ob man bis zur folgenden Abholung wartet oder die Tonne halbvoll raus stellen will.

https://forum.fhem.de/index.php?action=dlattach;topic=77502.0;attach=130623 (https://forum.fhem.de/index.php?action=dlattach;topic=77502.0;attach=130623)

Möglich ist alles, wenn man es programmiert ;)
Über welche Funktion möchtest du es darstellen?

icon_label-Funktion: https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Icon-Darstellung_mit_Text_mit_Hilfe_der_Funktion_icon_label

kann immer nur ein Label darstellen.

Der Anwendungsfall: https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Anzahl_der_Tage_bis_zur_Abfall-Entsorgung

könnte mit einem Label zwei Zahlen so darstellen:

ic ("Abfalltonne-Recycling-Logo\@yellow",[$SELF:gelbe_tonne]." ".[$SELF:gelbe_tonne_next])|\
Titel: Antw:SVG-uiTable-Funktionen
Beitrag von: mumpitzstuff am 13 Mai 2020, 12:22:21
Ah okay stimmt. Man kann in das Label ja beliebigen Text rein packen, also auch mehrere Zahlen. Danke.
Titel: Antw:SVG-uiTable-Funktionen
Beitrag von: Damian am 13 Mai 2020, 13:03:23
Zitat von: mumpitzstuff am 13 Mai 2020, 12:22:21
Ah okay stimmt. Man kann in das Label ja beliebigen Text rein packen, also auch mehrere Zahlen. Danke.

oder man passt sich hier die Funktion für seine Bedürfnisse an und speichert sie unter einem anderen Namen ab:

sub icon_label
{
   my ($icon,$text,$color,$color_bg,$pos_left,$pos_top) = @_;
   $color = "" if (!defined ($color));
   $color_bg = "" if (!defined ($color_bg));
   $pos_left = -3 if (!defined ($pos_left));
   $pos_top = -8 if (!defined ($pos_top));
   my $pad = (length($text) > 1) ? 2 : 5;
   return '<div style="display:inline-table;">'.::FW_makeImage($icon).'<div style="display:inline;border-radius:20px;color:'.$color.';background-color:'.
          $color_bg.
          ';font-size:14px;font-weight:bold;text-align:center;position:relative;padding-top: 1px;padding-left: '.$pad.'px; padding-right: '.$pad.'px;padding-bottom: 1px;'.
          'left:'.$pos_left.'px;top:'.$pos_top.'px;">'.$text.'</div></div>'
}


Es wird hier lediglich HTML-Code produziert.
Titel: Antw:SVG-uiTable-Funktionen
Beitrag von: Damian am 13 Mai 2020, 19:19:35
mit:

attr Abfall uiTable {\
  package ui_Table;;\
  $TC{0..4}="align='center'";;\
  $SHOWNOSTATE=1;;\
\
  sub ic\
  {\
    my ($icon,$days,$days2)=@_;;\
    icon_label2($icon,$days,$days2,"white",$days > 1 ? "green":"red",$days2 > 1 ? "green":"red")\
  }\
  \
sub icon_label2\
{\
   my ($icon,$text,$text2,$color,$color_bg,$color_bg2,$pos_left,$pos_top) = @_;;\
   $color = "" if (!defined ($color));;\
   $color_bg = "" if (!defined ($color_bg));;\
   $pos_left = -3 if (!defined ($pos_left));;\
   $pos_top = -8 if (!defined ($pos_top));;\
   my $pad = (length($text) > 1) ? 2 : 5;;\
   my $pad2 = (length($text2) > 1) ? 2 : 5;;\
   return '<div style="display:inline-table;;">'.::FW_makeImage($icon).'<div style="display:inline;;border-radius:20px;;color:'.$color.';;background-color:'.\
          $color_bg.\
          ';;font-size:14px;;font-weight:bold;;text-align:center;;position:relative;;padding-top: 1px;;padding-left: '.$pad.'px;; padding-right: '.$pad.'px;;padding-bottom: 1px;;'.\
          'left:'.$pos_left.'px;;top:'.$pos_top.'px;;">'.$text.'</div><div style="display:inline;;border-radius:20px;;color:'.$color.';;background-color:'.\
          $color_bg2.\
          ';;font-size:14px;;font-weight:bold;;text-align:center;;position:relative;;padding-top: 1px;;padding-left: '.$pad2.'px;; padding-right: '.$pad2.'px;;padding-bottom: 1px;;'.\
          'left:'.$pos_left.'px;;top:'.$pos_top.'px;;">'.$text2.'</div></div>'\
} \
}




sieht es so aus:
Titel: Antw:SVG-uiTable-Funktionen
Beitrag von: mumpitzstuff am 14 Mai 2020, 00:28:10
Wow super danke. Das ist perfekt.

In dem Bespiel oben fehlt noch die Defaultinitialisierung für bg2.
Titel: Antw:SVG-uiTable-Funktionen
Beitrag von: mumpitzstuff am 15 Mai 2020, 09:43:55
Ich habe mal gestern etwas gespielt und es sieht jetzt schon fast genauso aus wie meine Readingsgroup, auch wenn der Code noch Kraut und Rüben ist. Auf dem Bild ist oben das DOIF und unten die Readingsgroup.

BTW gibts eigentlich die Möglichkeit die Device Gruppierung der DOIFs aufzuheben? Der doppelte Rahmen sie nicht so toll aus.

defmod doif_Abfall DOIF ##
attr doif_Abfall room KALENDER
attr doif_Abfall uiTable {\
  package ui_Table;;\
\
  $SHOWNOSTATE=1;;\
\
  sub ic\
  {\
    my ($icon, $days, $days2) = @_;;\
    \
    icon_label2($icon, $days, $days2, 'white', (1 == $days ? 'red' : 2 == $days ? 'darkorange' : 'green'));;\
  }\
  \
  sub icon_label2\
  {\
    my ($icon, $text, $text2, $color, $color_bg, $pos_left, $pos_top) = @_;;\
    my $pad = ((length($text) > 1) ? 2 : 5);;\
    my $pad2 = ((length($text2) > 1) ? 2 : 5);;\
    \
    $color = "" if (!defined ($color));;\
    $color_bg = "" if (!defined ($color_bg));;\
    $pos_left = -5 if (!defined ($pos_left));;\
    $pos_top = -10 if (!defined ($pos_top));;\
   \
    return '<div style="display:inline-table;;">'.::FW_makeImage($icon).\
           '<div style="display:inline;;width:16px;;height:14px;;border-radius:14px;;color:'.$color.';;background-color:'.$color_bg.\
           ';;font-size:10px;;font-weight:700;;text-align:center;;position:relative;;padding-top:1px;;padding-left:'.$pad.'px;;padding-right:'.$pad.'px;;padding-bottom:1px;;'.\
           'left:'.$pos_left.'px;;top:'.$pos_top.'px;;">'.$text.'</div>'.\
           '<div style="display:inline;;width:16px;;height:14px;;border-radius:14px;;color:'.$color.';;border:1px solid white;;'.\
           'font-size:10px;;font-weight:700;;text-align:center;;position:relative;;padding-top:1px;;padding-left:'.$pad2.'px;;padding-right:'.$pad2.'px;;padding-bottom:1px;;'.\
           'left:'.$pos_left.'px;;top:'.$pos_top.'px;;">'.$text2.'</div></div>';;\
  }\
\
  sub convDate\
  {\
    my ($date, $days) = @_;;\
\
    if (0 == $days)\
    {\
      return 'Heute';;\
    }\
    elsif (1 == $days)\
    {\
      return 'Morgen';;\
    }\
    elsif (2 == $days)\
    {\
      return 'Übermorgen';;\
    }\
    else\
    {\
      # the following line strips the year of the date (remove it if needed)\
      #return substr($date, 0, 5);;\
      return $date;;\
    }\
  }\
\
  sub textColor\
  {\
    my $days = shift;;\
    \
    return (1 == $days ? 'red' : 2 == $days ? 'darkorange' : 'white');;\
  }\
}\
style([ABFALL_LEERUNG:Restmuell_weekday], textColor([ABFALL_LEERUNG:Restmuell_days]))|\
style(convDate([ABFALL_LEERUNG:Restmuell_date], [ABFALL_LEERUNG:Restmuell_days]), textColor([ABFALL_LEERUNG:Restmuell_days]))|\
style([ABFALL_LEERUNG:Restmuell_text], textColor([ABFALL_LEERUNG:Restmuell_days]))|\
ic("dustbin\@red", [ABFALL_LEERUNG:Restmuell_days], [ABFALL_LEERUNG:Restmuell_daysnext])\
style([ABFALL_LEERUNG:Rund_weekday], textColor([ABFALL_LEERUNG:Rund_days]))|\
style(convDate([ABFALL_LEERUNG:Rund_date], [ABFALL_LEERUNG:Rund_days]), textColor([ABFALL_LEERUNG:Rund_days]))|\
style([ABFALL_LEERUNG:Rund_text], textColor([ABFALL_LEERUNG:Rund_days]))|\
ic("dustbin\@green", [ABFALL_LEERUNG:Rund_days], [ABFALL_LEERUNG:Rund_daysnext])\
style([ABFALL_LEERUNG:Flach_weekday], textColor([ABFALL_LEERUNG:Flach_days]))|\
style(convDate([ABFALL_LEERUNG:Flach_date], [ABFALL_LEERUNG:Flach_days]), textColor([ABFALL_LEERUNG:Flach_days]))|\
style([ABFALL_LEERUNG:Flach_text], textColor([ABFALL_LEERUNG:Flach_days]))|\
ic("dustbin\@limegreen", [ABFALL_LEERUNG:Flach_days], [ABFALL_LEERUNG:Flach_daysnext])\
style([ABFALL_LEERUNG:Biogut_weekday], textColor([ABFALL_LEERUNG:Biogut_days]))|\
style(convDate([ABFALL_LEERUNG:Biogut_date], [ABFALL_LEERUNG:Biogut_days]), textColor([ABFALL_LEERUNG:Biogut_days]))|\
style([ABFALL_LEERUNG:Biogut_text], textColor([ABFALL_LEERUNG:Biogut_days]))|\
ic("dustbin\@yellow", [ABFALL_LEERUNG:Biogut_days], [ABFALL_LEERUNG:Biogut_daysnext])\
Titel: Antw:SVG-uiTable-Funktionen
Beitrag von: Damian am 15 Mai 2020, 09:51:32
Der Rahmen kommt von deinem Style, da habe ich keinen Einfluss drauf. Ich arbeite mit f18, der Dark-Modus passt da besser.

Frage zur Motivation:

Aus welchem Grund stellst du deine Readingsgroup auf DOIF um, wenn du eigentlich das gleiche Ergebnis erzielen willst?
Titel: Antw:SVG-uiTable-Funktionen
Beitrag von: mumpitzstuff am 15 Mai 2020, 14:55:22
Weil mich das Feature mal interessiert hat und ich ein Gefühl dafür kriegen möchte wie sich damit was umsetzen lässt. Es ist dann immer ganz angenehm, wenn sich Ergebnisse vergleichen lassen... Wenn ich den Dreh mal raus habe, kann ich mir mehr solcher Dinge basteln, für die noch kein Gegenstück existiert. Außerdem konnte ich damit zumindest eine Routine aus den myUtils raus werfen, sowas mag ich nicht sonderlich.
Titel: Antw:SVG-uiTable-Funktionen
Beitrag von: Damian am 15 Mai 2020, 22:40:42
Du kannst eine Tabelle mit gleich strukturierten Zeilen viel einfacher definieren, wenn du dir zuvor ein Template definierst  z. B.:

## Template-Definition für eine Zeile
DEF TPL_Abfall (style([ABFALL_LEERUNG:$1_weekday], textColor([ABFALL_LEERUNG:$1_days]))|
style(convDate([ABFALL_LEERUNG:$1_date], [ABFALL_LEERUNG:$1_days]), textColor([ABFALL_LEERUNG:$1_days]))|
style([ABFALL_LEERUNG:$1_text], textColor([ABFALL_LEERUNG:$1_days]))|
ic("dustbin\@$2", [ABFALL_LEERUNG:$1_days], [ABFALL_LEERUNG:$1_daysnext]))

## Tabellendefinition
TPL_Abfall (Restmuell,red)
TPL_Abfall (Rund,green)
TPL_Abfall (Flach,limegreen)
TPL_Abfall (Biogut,yellow)



oder Tabellendefinition als Einzeiler:

FOR (qw(Restmuell,red Rund,green Flach,limegreen Biogut,yellow),TPL_Abfall($_))
Titel: Antw:SVG-uiTable-Funktionen
Beitrag von: mumpitzstuff am 16 Mai 2020, 01:08:32
Oh. Schönes Feature. Vielen Dank!
Titel: Antw:SVG-uiTable-Funktionen
Beitrag von: xenos1984 am 18 Mai 2020, 21:43:56
In der Funktion ui_Table::bar scheint sich ein Fehler in der SVG-Syntax eingeschlichen zu haben, und zwar in dieser Zeile:
4087   $out.= sprintf('<text text-anchor="end" x="%d" y="%d" style="fill:%s";><tspan style="font-size:18px;font-weight:bold;">%s</tspan><tspan dx="2" style="font-size:10px">%s</tspan></text>',$bwidth+6, $height/2+11,color($currColor),sprintf($format,$value),$unit);
Das Semikolon vor dem ersten > (Ende des öffnenden Tags von text) gehört da nicht hin. Das sollte wohl vor das Anführungszeichen? FireFox und RSVG beschweren sich.
Titel: Antw:SVG-uiTable-Funktionen
Beitrag von: Damian am 18 Mai 2020, 21:50:49
Zitat von: xenos1984 am 18 Mai 2020, 21:43:56
In der Funktion ui_Table::bar scheint sich ein Fehler in der SVG-Syntax eingeschlichen zu haben, und zwar in dieser Zeile:
4087   $out.= sprintf('<text text-anchor="end" x="%d" y="%d" style="fill:%s";><tspan style="font-size:18px;font-weight:bold;">%s</tspan><tspan dx="2" style="font-size:10px">%s</tspan></text>',$bwidth+6, $height/2+11,color($currColor),sprintf($format,$value),$unit);
Das Semikolon vor dem ersten > (Ende des öffnenden Tags von text) gehört da nicht hin. Das sollte wohl vor das Anführungszeichen? FireFox und RSVG beschweren sich.

Danke, ich werde es beheben.
Titel: Antw:SVG-uiTable-Funktionen (DOIF-Web-Interface)
Beitrag von: mumpitzstuff am 23 Mai 2020, 23:11:19
Ich habe jetzt versucht mein TV Programm mit DOIF darzustellen und verwende dabei in mehreren Zellen diese Funktion:

sub rgUnfold
  {
    my ($title, $desc) = @_;
    $title = 'na' if (!defined($title));
    $desc = 'na'."\n\n".'na' if (!defined($desc));

    $title =~ s/(.{1,45}|\S{46,})(?:\s[^\S\r\n]*|\Z)/$1<br>/g;
    $desc =~ s/<br>/\n/g;
    $desc =~ s/(.{1,65}|\S{66,})(?:\s[^\S\r\n]*|\Z)/$1<br>/g;
    $desc =~ s/[\r\'\"]/ /g;
    $desc =~ s/[\n]|\\n/<br>/g;
    return "<a href=\"#!\" onclick=\"FW_okDialog('".$desc."')\">".$title."</a>";
  }


Dummerweise wird die erste Zeile eines Linktextes eingerückt, nachfolgende Zeilen aber nicht. Am FHEM Style kann es irgendwie nicht liegen, da DOIF und readingsgroup Tabelle auf der selben Seite dargestellt werden und die Links ebenfalls gleich generiert werden. Bei der Readingsgroup wird bei den Links nicht die erste Zeile eingerückt. Ich vermute das hier irgendein DOIF Style da was überlagert, finde aber nicht entsprechendes.
Titel: Antw:SVG-uiTable-Funktionen (DOIF-Web-Interface)
Beitrag von: Damian am 23 Mai 2020, 23:21:22
Du müsstest im Browser den Code analysieren. Ich vermute, dass es mit der style-Funktion zusammenhängt. Die style-Funktion kann man auch direkt mit HTML-Code abbilden, dann müsste das Problem sich beheben lassen.
Titel: Antw:SVG-uiTable-Funktionen (DOIF-Web-Interface)
Beitrag von: Damian am 23 Mai 2020, 23:56:39
Zitat von: Damian am 23 Mai 2020, 23:21:22
Du müsstest im Browser den Code analysieren. Ich vermute, dass es mit der style-Funktion zusammenhängt. Die style-Funktion kann man auch direkt mit HTML-Code abbilden, dann müsste das Problem sich beheben lassen.

Teste mal die Version im Anhang. Ich habe das style-Attribut display:inline gegen display:inline-table ersetzt.
Titel: Antw:SVG-uiTable-Funktionen (DOIF-Web-Interface)
Beitrag von: mumpitzstuff am 24 Mai 2020, 00:36:15
Die style Funktion benutze ich gar nicht:

{
  package ui_Table;

  $SHOWNOSTATE=1;

  $TR{0} = "style='color:yellow;text-align:center;font-weight:bold;'";
  $TD{0..29}{0,2,4} = "style='border-right-style:solid;border-color:#CCCCCC;align:left;'";

  sub rgUnfold
  {
    my ($title, $desc) = @_;
    $title = 'na' if (!defined($title));
    $desc = 'na'."\n\n".'na' if (!defined($desc));

    $title =~ s/(.{1,45}|\S{46,})(?:\s[^\S\r\n]*|\Z)/$1<br>/g;
    $desc =~ s/<br>/\n/g;
    $desc =~ s/(.{1,65}|\S{66,})(?:\s[^\S\r\n]*|\Z)/$1<br>/g;
    $desc =~ s/[\r\'\"]/ /g;
    $desc =~ s/[\n]|\\n/<br>/g;
    return "<a href=\"#!\" onclick=\"FW_okDialog('".$desc."')\">".$title."</a>";
  }
}

DEF TPL_TV(ICON("tv/$3")|[$1:next_$2_000_btime]|rgUnfold([$1:next_$2_000_title],[$1:next_$2_000_stitle]."\n\n".[$1:next_$2_000_desc])|[$1:next_$2_001_btime]|rgUnfold([$1:next_$2_001_title],[$1:next_$2_001_stitle]."\n\n".[$1:next_$2_001_desc])|[$1:next_$2_002_btime]|rgUnfold([$1:next_$2_002_title],[$1:next_$2_002_stitle]."\n\n".[$1:next_$2_002_desc]))

"Sender"|"ab"|"Aktuelle Sendung"|"ab"|"Nächste Sendung"|"ab"|"Sendung"
"test"|"12:00"|"test1<br>test2<br>test3"|"13:00"|"test"|"14:00"|"test"
TPL_TV(dmy_TV,ARD,ard)
TPL_TV(dmy_TV,ZDF,zdf)
TPL_TV(dmy_TV,Sat1,sat1)
TPL_TV(dmy_TV,RTL,rtl)
TPL_TV(dmy_TV,RTL2,rtl2)
TPL_TV(dmy_TV,Pro7,pro7)
TPL_TV(dmy_TV,DMax,dmax)
TPL_TV(dmy_TV,Vox,vox)
TPL_TV(dmy_TV,Kabel,kabel1)
TPL_TV(dmy_TV,KabelEinsClassic,kabel1classic)
TPL_TV(dmy_TV,13thStreet,13thstreet)
TPL_TV(dmy_TV,Silverline,silverline)
TPL_TV(dmy_TV,TNTFilm,tntfilm)
TPL_TV(dmy_TV,AXN,axn)
TPL_TV(dmy_TV,SonyEntertainmentTV,sonytv)
TPL_TV(dmy_TV,Kinowelt,kinowelt)
TPL_TV(dmy_TV,ProSiebenMaxx,pro7maxx)
TPL_TV(dmy_TV,Sixx,sixx)
TPL_TV(dmy_TV,TNTSerie,tntserie)
TPL_TV(dmy_TV,SciFi,syfy)
TPL_TV(dmy_TV,ntv,ntv)
TPL_TV(dmy_TV,N24Doku,n24)
TPL_TV(dmy_TV,History,history)
TPL_TV(dmy_TV,PLANET,planet)
TPL_TV(dmy_TV,KabelEinsDoku,kabel1doku)
TPL_TV(dmy_TV,AnimalPlanet,animalplanet)
TPL_TV(dmy_TV,NatGeoHD,natgeo)
TPL_TV(dmy_TV,TLC,tlc)
TPL_TV(dmy_TV,AandE,ae)


Eins ist mir aber schon mal aufgefallen. Binde ich z.B. eine Uhrzeit mittels Reading ein mit:

[dmy_TV:next_RTL_000_btime]

dann ist im HTML Code die Formatierung so:

<td><div class="dval" doifid="doif_TVNEXT_uiTable_c_5_5_0_0" style="display:inline;">00:55:00</div></td>

Binde ich das ganze als normalen Text ein:

"00:55:00"

dann sieht das so aus:

<td>00:55:00</td>

Durch das zusätzlich eingefügte div wird der Text oder Link dann irgendwie komisch eingerückt.

Im Bild sieht man oben die Uhrzeit als Reading eingebunden ([...]) und unten als normaler Text ("...").
Titel: Antw:SVG-uiTable-Funktionen (DOIF-Web-Interface)
Beitrag von: mumpitzstuff am 24 Mai 2020, 00:37:09
Mit der Version hat sich leider nichts geändert. Im HTML Code steht aber auch immer noch:

style="display:inline;"

Vermutlich fehlt in der Funktion DOIF_Widget_Register noch etwas...

PS: Habs jetzt mal wieder besseren Wissens in den Funktionen DOIF_Widget_Update und DOIF_Widget_Register ersetzt und jetzt sieht es gut aus. Die Einrückung ist komplett verschwunden. Damit klebt dann aber auch der Text direkt am Border dran (siehe untere Uhrzeit im Bild vom Beitrag davor). Das wird man vermutlich aber mit Styles lösen können. Zur Sicherheit sollte aber normaler Text ebenfalls mit dem zusätzlichen div versehen werden, nur um Unterschiede auszuschliessen.
Titel: Antw:SVG-uiTable-Funktionen (DOIF-Web-Interface)
Beitrag von: Damian am 24 Mai 2020, 07:39:06
Zitat von: mumpitzstuff am 24 Mai 2020, 00:37:09
Mit der Version hat sich leider nichts geändert. Im HTML Code steht aber auch immer noch:

style="display:inline;"

Vermutlich fehlt in der Funktion DOIF_Widget_Register noch etwas...

PS: Habs jetzt mal wieder besseren Wissens in den Funktionen DOIF_Widget_Update und DOIF_Widget_Register ersetzt und jetzt sieht es gut aus. Die Einrückung ist komplett verschwunden. Damit klebt dann aber auch der Text direkt am Border dran (siehe untere Uhrzeit im Bild vom Beitrag davor). Das wird man vermutlich aber mit Styles lösen können. Zur Sicherheit sollte aber normaler Text ebenfalls mit dem zusätzlichen div versehen werden, nur um Unterschiede auszuschliessen.

Ich habe jetzt auch die restlichen display:inline auf display:inline-table umgestellt. Dann wollen wir hoffen, dass sich keiner beschwert :)

Einrückungen bei div sind normal und dürften vom FHEM-Style abhängen.
Titel: Antw:SVG-uiTable-Funktionen (DOIF-Web-Interface)
Beitrag von: mumpitzstuff am 25 Mai 2020, 01:20:35
Ich bin jetzt wieder zurück auf den dark Style gegangen, anstatt den f18 Style zu verwenden. Bei letzterem sieht alles einfach irgendwie extrem bescheiden aus. Das scheint aber vielfach am Style und nicht an uiTable zu liegen.

Das lag wirklich am f18 Style. Dort ist anders als im darkmode Style generell bei allen TD margin auf 0 gesetzt. Mit folgenden Additional CSS Settings kann man das Bild dann wieder dem darkmode angleichen und dann sieht das Ganze schon viel brauchbarer aus, ohne jede uiTable mühsam anpassen zu müssen:

body.touch a { font-size: 16px; }
body.touch #menu { font-size: 16px; } /* for the menuTree icon */
td {padding-left: 10px; padding-right: 10px; padding-top: 3px; padding-bottom: 3px;}
input[type="submit"] { background-color: #353535; border-style:outset; border-width:2px }
Titel: Antw:SVG-uiTable-Funktionen (DOIF-Web-Interface)
Beitrag von: Damian am 25 Mai 2020, 16:17:28
Ich habe die neue DOIF-Version mit display:inline-table eingecheckt. Damit ist das Layout einheitlich bei Zeilenumbrüchen innerhalb einer Zelle. Möchte man Abstände zwischen den Zellen definieren, dann ist die vorgeschlagene Lösung über Additonal CSS für f18-Style die einfachste Vorgehensweise. Ansonsten kann man innerhalb einer uiTable-Definition Style-Attribute für bestimme Zellen mit Hilfe der CSS-Variablen $TC oder $TD separat definieren, siehe: https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#CSS-Variablen_und_Steuerungsattribute

z. B.
attr di_myDOIF uiTable {package ui_Table;
## für alle Zellen der Spalten 1 bis 4 Abstände definieren
$TC{0..3} ="style='padding-left: 10px; padding-right: 10px; padding-top: 3px; padding-bottom: 3px;'";
}
Titel: Antw:SVG-uiTable-Funktionen (DOIF-Web-Interface)
Beitrag von: mumpitzstuff am 27 Mai 2020, 19:40:28
Bei SVG-uiTable-Funktion bar fehlt im Wiki auf der rechten Seite die Beschreibung von $header.

Könnte man darüber hinaus bei den ganzen Widgets auch einen String als default Wert zulassen, vorzugsweise "na"? Momentan wird "na" zu 0.0.
Das hätte den Vorteil, das ich sofort sehen würde, wenn ein Sensor ausgefallen ist und das nicht anhand des unplausiblen Wertes erraten müsste.
Titel: Antw:SVG-uiTable-Funktionen (DOIF-Web-Interface)
Beitrag von: Damian am 27 Mai 2020, 20:16:22
Zitat von: mumpitzstuff am 27 Mai 2020, 19:40:28
Bei SVG-uiTable-Funktion bar fehlt im Wiki auf der rechten Seite die Beschreibung von $header.

Könnte man darüber hinaus bei den ganzen Widgets auch einen String als default Wert zulassen, vorzugsweise "na"? Momentan wird "na" zu 0.0.
Das hätte den Vorteil, das ich sofort sehen würde, wenn ein Sensor ausgefallen ist und das nicht anhand des unplausiblen Wertes erraten müsste.

Doku habe ich angepasst. Da nur Zahlen zulässig sind, kann ich na als default einbauen, kommt dann ins nächste Update.
Titel: Antw:SVG-uiTable-Funktionen (DOIF-Web-Interface)
Beitrag von: mumpitzstuff am 27 Mai 2020, 21:39:52
Hmm mir ist grad eingefallen das das ja eigentlich nicht viel bringt, weil das Reading selbst ja da ist, aber nicht mehr geupdatet wird. Vielmehr müsste man stattdessen das Alter des Readings (ReadingsAge($name, $reading, $default);) übergeben und einen Schwellwert. Ich denke aber das man das besser als Perl Code hinterlegt und nicht im widget selbst. Da habe ich vorhin nicht genau drüber nachgedacht.

Ich denke mir da noch mal was aus...
Titel: Antw:SVG-uiTable-Funktionen (DOIF-Web-Interface)
Beitrag von: Damian am 27 Mai 2020, 21:51:43
Zitat von: mumpitzstuff am 27 Mai 2020, 21:39:52
Hmm mir ist grad eingefallen das das ja eigentlich nicht viel bringt, weil das Reading selbst ja da ist, aber nicht mehr geupdatet wird. Vielmehr müsste man stattdessen das Alter des Readings (ReadingsAge($name, $reading, $default);) übergeben und einen Schwellwert. Ich denke aber das man das besser als Perl Code hinterlegt und nicht im widget selbst. Da habe ich vorhin nicht genau drüber nachgedacht.

Ich denke mir da noch mal was aus...

Was ich machen wollte ist, Texte anzeigen statt 0.0, dann sieht man wenigstens, dass etwas nicht stimmt, ""  auf na umbiegen.
Titel: Antw:SVG-uiTable-Funktionen (DOIF-Web-Interface)
Beitrag von: mumpitzstuff am 27 Mai 2020, 22:37:04
{ui_Table::temp_hum_ring((ReadingsAge("$name","temperature",0) <= 21600 ? ReadingsVal("$name","temperature",0) : "na"),(ReadingsAge("$name","corrHumidity",0) <= 21600 ? ReadingsVal("$name","corrHumidity",0) : "na"))}

Wenn sowas gehen würde, wäre es super. Oder man kann undef übergeben und du setzt intern na als default.

BTW: Soll ich mal bei Rudi fragen ob man devStateIcon mal so umstellen kann, das sich ein Input Fenster öffnet und eine syntaktische Prüfung beim drücken von OK durchgeführt wird, so das der Dialog offen bleibt wenn man was falsch eingegeben hat. Die nur 3 cm lange Eingabemöglichkeit ist irgendwie nervig angesichts der recht langen Eingaben.
Titel: Antw:SVG-uiTable-Funktionen (DOIF-Web-Interface)
Beitrag von: Damian am 27 Mai 2020, 22:56:19
Zitat von: mumpitzstuff am 27 Mai 2020, 22:37:04
{ui_Table::temp_hum_ring((ReadingsAge("$name","temperature",0) <= 21600 ? ReadingsVal("$name","temperature",0) : "na"),(ReadingsAge("$name","corrHumidity",0) <= 21600 ? ReadingsVal("$name","corrHumidity",0) : "na"))}

Wenn sowas gehen würde, wäre es super. Oder man kann undef übergeben und du setzt intern na als default.

BTW: Soll ich mal bei Rudi fragen ob man devStateIcon mal so umstellen kann, das sich ein Input Fenster öffnet und eine syntaktische Prüfung beim drücken von OK durchgeführt wird, so das der Dialog offen bleibt wenn man was falsch eingegeben hat. Die nur 3 cm lange Eingabemöglichkeit ist irgendwie nervig angesichts der recht langen Eingaben.
Fragen kostet nichts. Ich habe in meiner Webinstanz das Attribut widgetOverride devStateIcon:textFieldNL-long gesetzt. Zusätzlich arbeite ich mit codemirror. Dann sieht die Sache schon viel besser aus
Titel: Antw:SVG-uiTable-Funktionen (DOIF-Web-Interface)
Beitrag von: Damian am 11 Juni 2020, 14:51:47
Zitat von: Damian am 27 Mai 2020, 21:51:43
Was ich machen wollte ist, Texte anzeigen statt 0.0, dann sieht man wenigstens, dass etwas nicht stimmt, ""  auf na umbiegen.

neue Version wurde eingecheckt
Titel: Antw:SVG-uiTable-Funktionen (DOIF-Web-Interface)
Beitrag von: mumpitzstuff am 19 Juni 2020, 00:36:31
Komme man irgendwie aus der uiTable heraus an $defs oder $FW_CSRF ran?

Ich würde gern innerhalb der Tabelle einen Link hinterlegen, um damit ein set Kommando an ein anderes Device zu schicken. Geht sowas irgendwie. Ich steh grad auf dem Schlauch und komme nicht drauf.

Mit der Funktion switch komme ich irgendwie auch nicht weiter, da diese das Icon immer in Abhängigkeit vom Reading setzen möchte. Ich bräuchte irgendwas wie:

set(device,icon,cmd)

Das schickt dann einfach nur ein set los, ohne sich darum zu kümmern was danach passiert. Ansonsten habe ich ein Problem, wenn sowas passiert:

set <device> abc
set <device> xyz
set <device> 0815

Spätestens beim 3ten set würde das Icon bei switch schlicht verschwinden, weil der Wert weder dem on noch dem off entspricht.
Titel: Antw:SVG-uiTable-Funktionen (DOIF-Web-Interface)
Beitrag von: Damian am 19 Juni 2020, 08:28:33
An globale Variablennamen wie z. B. $defs kommst du über die Angabe des main-package

$main::defs

einfacher

$::defs

Hinter der Perlfunktion switch im package ui_Table verbirgt sich das FHEM-Widget iconSwitch siehe: https://wiki.fhem.de/wiki/FHEMWEB/Widgets

Das Widget iconSwitch stammt nicht von mir.

Titel: Antw:SVG-uiTable-Funktionen (DOIF-Web-Interface)
Beitrag von: Ellert am 19 Juni 2020, 13:22:17
Zitat von: mumpitzstuff am 19 Juni 2020, 00:36:31
Komme man irgendwie aus der uiTable heraus an $defs oder $FW_CSRF ran?

Ich würde gern innerhalb der Tabelle einen Link hinterlegen, um damit ein set Kommando an ein anderes Device zu schicken. Geht sowas irgendwie. Ich steh grad auf dem Schlauch und komme nicht drauf.

Mit der Funktion switch komme ich irgendwie auch nicht weiter, da diese das Icon immer in Abhängigkeit vom Reading setzen möchte. Ich bräuchte irgendwas wie:

set(device,icon,cmd)

Das schickt dann einfach nur ein set los, ohne sich darum zu kümmern was danach passiert. Ansonsten habe ich ein Problem, wenn sowas passiert:

set <device> abc
set <device> xyz
set <device> 0815

Spätestens beim 3ten set würde das Icon bei switch schlicht verschwinden, weil der Wert weder dem on noch dem off entspricht.

Hier gibt es ein Beispiel für den Befehl list https://wiki.fhem.de/wiki/DOIF/uiTable#FHEM-Befehl_mit_Icon_und_Text-Overlay

Titel: Antw:SVG-uiTable-Funktionen (DOIF-Web-Interface)
Beitrag von: mumpitzstuff am 21 Juni 2020, 02:21:43
Super. Danke für die Hinweise. Damit hat Teil eins geklappt.

Könnte man den Hinweis wie man Variablen anspricht vielleicht auch noch in der Doku aufnehmen? Da ist bisher nur von Funktionen die Rede und ich hatte dummerweise zuerst ::$defs anstatt $::defs probiert, was nicht geklappt hatte.

Was ich allerdings bisher nicht lösen konnte, ist die Abfrage, ob das DOIF aktuell durch FHEMWEB angezeigt wird oder nicht. Normalerweise geht sowas in einem Modul mit $hash->{CL}->{TYPE} eq 'FHEMWEB'. Ich hab verschiedene Varianten durchgespielt und bekomme diese Information leider nicht. Der Hintergrund ist, das man das DOIF anscheinend auch in FTUI einbinden kann und dann keine FHEMWEB Funktionen mehr aufgerufen werden können, wie z.B. FW_okDialog(). An dieser Stelle müsste ich stattdessen FTUI eigene Funktionen aufrufen. Fällt jemandem noch eine Möglichkeit ein raus zu bekommen, ob die Anzeige über FHEMWEB oder FTUI erfolgt?
Titel: Antw:SVG-uiTable-Funktionen (DOIF-Web-Interface)
Beitrag von: Ellert am 21 Juni 2020, 08:33:53
DOIF verwendet die Mechanismen von FHEMWEB. Die Bedienelemente sind daher FHEM-Widgets, diese fuktionieren in FTUI nicht. FHEMWEB(PGM2) und FTUI sind 2 verschiedene eigenständige Userinterfaces.

Es gibt nur die Möglichkeit per get <DOIFname> html unter Verwendung des FTUI-Widgets https://wiki.fhem.de/wiki/FTUI_Widget_Readingsgroup mit den genannten Einschränkungen,

Der Getter ist aus diesem Grunfd auch nicht dokumentiert.
Titel: Antw:SVG-uiTable-Funktionen (DOIF-Web-Interface)
Beitrag von: mumpitzstuff am 21 Juni 2020, 11:10:48
Ich glaube das ist nicht mein Problem. Ich habe ein popup Dialog in einer uiTable definiert. Das funktioniert auch unter FHEMWEB. Ein anderer Anwender bindet das selbe DOIF in FTUI ein und dort geht das nicht. Warum das so ist, ist mir klar. Ich brauche eine Möglichkeit innerhalb der uiTable (im code) zu unterscheiden, ob das DOIF über FHEMWEB oder FTUI angezeigt wird. In Abhängigkeit davon könnte ich das Popup unterschiedlich machen, so das in beiden Oberflächen ein Popup angezeigt wird.

PS: Ich glaube der Anwender nimmt genau das von dir erwähnte Widget zu Anzeige des DOIF in FTUI.
Titel: Antw:SVG-uiTable-Funktionen (DOIF-Web-Interface)
Beitrag von: Ellert am 21 Juni 2020, 18:59:44
Wer beschreibt $hash->{CL}->{TYPE} und warum in diesem Fall nicht?

Vielleicht liefert die Beantwortung dieser Fragen eine Lösung.

ZitatFällt jemandem noch eine Möglichkeit ein raus zu bekommen, ob die Anzeige über FHEMWEB oder FTUI erfolgt?
Ich könnte mir auch vorstellen, dass im Head-Tag spezifische Attribute existieren, die einen Hinweis auf den aktuellen Client liefern.
Titel: Antw:SVG-uiTable-Funktionen (DOIF-Web-Interface)
Beitrag von: mumpitzstuff am 24 Juni 2020, 23:23:26
$SHOWNOSTATE = 1;

Funktioniert nur nach einem Reload der Seite. Wenn die uiTable Werte aktualisiert, dann erscheint der state wieder. Erst wenn man ein Reload der Page macht, dann ist der state wieder weg.
Titel: Antw:SVG-uiTable-Funktionen (DOIF-Web-Interface)
Beitrag von: Ellert am 25 Juni 2020, 04:52:01
Zitat von: mumpitzstuff am 24 Juni 2020, 23:23:26
$SHOWNOSTATE = 1;

Funktioniert nur nach einem Reload der Seite. Wenn die uiTable Werte aktualisiert, dann erscheint der state wieder. Erst wenn man ein Reload der Page macht, dann ist der state wieder weg.
Nimm $SHOWNODEVICELINE oder verhindere Events auf state, oder packe die uiTable in ein funktionsloses  DOIF oder setze state nicht in einem Perl-DOIF.
Titel: Antw:SVG-uiTable-Funktionen (DOIF-Web-Interface)
Beitrag von: mumpitzstuff am 25 Juni 2020, 08:57:34
Okay die ersten 3 Dinge kann ich tatsächlich ausprobieren, das 4te kann ich nicht machen, das setzt das DOIF selbst. Es sind diese cmd_x Dinge, die dort auftauchen, das wird intern vom DOIF gemacht.
Titel: Antw:SVG-uiTable-Funktionen (DOIF-Web-Interface)
Beitrag von: cwagner am 20 Juli 2020, 11:36:18
Die verschiebenen SVG-uiTable-Funktionen haben schon einige Farbe in meine Dashboards gebracht, lieber Damian. Eine weitere Ergänzung wäre eine generalisiertes meiner Überzeugung nach ein generalisiertes temp-temp-ring, mit dem ich für jegliche Unit einen Soll-Istwert-Vergleich schön grafisch darstellen könnte. Wäre so etwas noch drin?

Herzliche Grüße

Christian
Titel: Antw:SVG-uiTable-Funktionen (DOIF-Web-Interface)
Beitrag von: Damian am 20 Juli 2020, 11:52:39
Zitat von: cwagner am 20 Juli 2020, 11:36:18
Die verschiebenen SVG-uiTable-Funktionen haben schon einige Farbe in meine Dashboards gebracht, lieber Damian. Eine weitere Ergänzung wäre eine generalisiertes meiner Überzeugung nach ein generalisiertes temp-temp-ring, mit dem ich für jegliche Unit einen Soll-Istwert-Vergleich schön grafisch darstellen könnte. Wäre so etwas noch drin?

Herzliche Grüße

Christian
Dann hast du vermutlich diese Funktion übersehen: https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Farbskalierte_Anzeige_von_zwei_Zahlenwerten_mit_Hilfe_der_universellen_SVG-Funktion_ring2
Titel: Antw:SVG-uiTable-Funktionen (DOIF-Web-Interface)
Beitrag von: cwagner am 20 Juli 2020, 13:43:17
Jo, weil ich zu fixiert in ein Bild in meinem Kopf war. Mit Ring2 werde ich mal starten, das ist ein guter Ansatz - klasse und danke für den schnellen Anstoß!

Christian
Titel: Antw:SVG-uiTable-Funktionen (DOIF-Web-Interface)
Beitrag von: Damian am 20 Juli 2020, 13:59:45
Zitat von: cwagner am 20 Juli 2020, 13:43:17
Jo, weil ich zu fixiert in ein Bild in meinem Kopf war. Mit Ring2 werde ich mal starten, das ist ein guter Ansatz - klasse und danke für den schnellen Anstoß!

Christian

temp_temp_ring ist z. B. nichts anderes als ein Aufruf von ring2:

sub temp_temp_ring {
  my ($value,$value2,$min,$max,$size) = @_;
  $min=-20 if (!defined $min);
  $max=60  if (!defined $max);
  $size=90 if (!defined $size);
  return(ring2($value,$min,$max,undef,undef,"°C",$size,\&temp_hue,1,$value2,$min,$max,undef,undef,"°C",\&temp_hue,1));
}

Titel: Antw:SVG-uiTable-Funktionen (DOIF-Web-Interface)
Beitrag von: schwatter am 14 Oktober 2020, 22:25:20
Hallo Damian,

danke für diese einfache Art Visualisierung in Fhem zu bringen.

Wenn ich so durchschaue, fehlt mir die Farbe anzupassen. Beispiel "Farbskalierte Temperatur- und Feuchtigkeitsanzeige mit Hilfe der SVG-Funktion temp_hum_ring".
Rechts in der Info Box ist dazu kein Hinweis. Meiner Meinung nach, müsste bei Temp der grüne Bereich bei, ich sag mal irgendwo zwischen 20 und 24 °C liegen.
Feuchtigkeit hingegen sollte genau bei 50% sein. Kann ich das beeinflussen oder würdest du über eine Änderung nachdenken?
Titel: Antw:SVG-uiTable-Funktionen (DOIF-Web-Interface)
Beitrag von: mumpitzstuff am 14 Oktober 2020, 23:07:35
Geht das nicht mit der Funktion: ring2?
Titel: Antw:SVG-uiTable-Funktionen (DOIF-Web-Interface)
Beitrag von: Damian am 14 Oktober 2020, 23:15:38
Zitat von: schwatter am 14 Oktober 2020, 22:25:20
Hallo Damian,

danke für diese einfache Art Visualisierung in Fhem zu bringen.

Wenn ich so durchschaue, fehlt mir die Farbe anzupassen. Beispiel "Farbskalierte Temperatur- und Feuchtigkeitsanzeige mit Hilfe der SVG-Funktion temp_hum_ring".
Rechts in der Info Box ist dazu kein Hinweis. Meiner Meinung nach, müsste bei Temp der grüne Bereich bei, ich sag mal irgendwo zwischen 20 und 24 °C liegen.
Feuchtigkeit hingegen sollte genau bei 50% sein. Kann ich das beeinflussen oder würdest du über eine Änderung nachdenken?

Die Farbdarstellung orientiert sich an der Darstellung der meisten Wetterdienste:

10 Grad ist grün, 20 Grad ist gelb, 30 40 Grad ist rot bei Temperatur, 50% ist grün bei Feuchte.

Wenn dir die Zuordnung der Farben bei bei temp_hum_ring nicht zusagt, dann kannst du dir selbst welche per Funktion definieren und als Funktion $colorFunc1 und $colorFunc2 bei ring2  https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Farbskalierte_Anzeige_von_zwei_Zahlenwerten_mit_Hilfe_der_universellen_SVG-Funktion_ring2 nutzen. ring2 wird von temp_hue_ring ebenfalls benutzt.

Und das ist die Color-Funktion für Temperatur:

sub temp_hue {
   #temp->hue   
   #-20->270
   #-10->240
   #0  ->180
   #10 ->120
   #20 ->60
   #40 ->0
   #70 ->340
   my($temp)=@_;
   my $hue;
   if ($temp < -10) {
    $hue=-3*$temp+210;
   } elsif ($temp < 20) {
    $hue=-6*$temp+180;
   } elsif ($temp < 40) {
    $hue=-3*$temp+120;
   } else {
    $hue = -2/3*$temp+386;
   }
   return (int($hue)); 
}


Das ist die Color-Funktion für Feuchte

  sub hum_hue {
   my($hum)=@_;
   my $hue;
   my $m;
   my $n;
   if ($hum > 60) {
     ($m,$n)=m_n(60,180,100,260);
   } elsif ($hum > 40) {
     ($m,$n)=m_n(40,60,60,180);
   } else {
     ($m,$n)=m_n(0,40,40,60);
   }
   $hue = $m*$hum+$n;
   return (int($hue)); 
}


mit

sub m_n
{
   my ($x1,$y1,$x2,$y2) =@_;
   my $m=($y2-$y1)/($x2-$x1);
   my $y=$y1-$m*$x1;
   return($m,$y);
}


Der der Hue-Wert (Farbwert) lässt sich mit color picker (https://www.google.com/search?q=color+picker) bestimmen, er liegt zwischen 0 und 360
Titel: Antw:SVG-uiTable-Funktionen (DOIF-Web-Interface)
Beitrag von: schwatter am 14 Oktober 2020, 23:27:48
Die Wetterdienste haben aber eine komischen Bezug zur Farbe... Die Standardfarben wirken daher zu bunt, wenn auch nett.
Bei Feuchte möchte ich wiedersprechen :D Und zwar war ich über "Farbskalierte Feuchtigkeitsanzeige mit Hilfe der Funktion hum" gestolpert.
Da ist 50% nur hellgrün anstatt dunkel. Aber ja, weiter oben bei "Farbskalierte Feuchtigkeitsanzeige mit Hilfe der SVG-Funktion hum_ring"
ist grün dann richtig grün.

Danke für die ausführliche Erklärung. Dann schau ich mir das anpassen der Farbe an.
Titel: Antw:SVG-uiTable-Funktionen (DOIF-Web-Interface)
Beitrag von: Damian am 15 Oktober 2020, 09:14:36
Zitat von: schwatter am 14 Oktober 2020, 23:27:48
Die Wetterdienste haben aber eine komischen Bezug zur Farbe... Die Standardfarben wirken daher zu bunt, wenn auch nett.
Bei Feuchte möchte ich wiedersprechen :D Und zwar war ich über "Farbskalierte Feuchtigkeitsanzeige mit Hilfe der Funktion hum" gestolpert.
Da ist 50% nur hellgrün anstatt dunkel. Aber ja, weiter oben bei "Farbskalierte Feuchtigkeitsanzeige mit Hilfe der SVG-Funktion hum_ring"
ist grün dann richtig grün.

Danke für die ausführliche Erklärung. Dann schau ich mir das anpassen der Farbe an.

naja, Farbenwahrnehmung ist subjektiv, die svg-Farben habe ich nicht aufgehellt - zu bunt, die anderen habe ich etwas aufgehellt - zu hell ;)

Titel: Antw:SVG-uiTable-Funktionen (DOIF-Web-Interface)
Beitrag von: schwatter am 15 Oktober 2020, 21:42:52
Zitat von: mumpitzstuff am 14 Oktober 2020, 23:07:35
Geht das nicht mit der Funktion: ring2?

Ring2 klingt gut. Mal sehen ob ich den Farbverlauf passend hinbekomme. Was schwierig ist, ich möchte bei Temp einen grünen Bereich
von 20-22 °C und bei Luftfeuchtigkeit 40-60%. Was drüber oder drunter ist dann rot. Könnte vielleicht aber auch mit hue klappen,
wenn der passende Bereich grün ist und drüber sowie drunter durch angrenzende Farben dargestellt wird.

So könnte das aussehen, wenn DOIF es bereitstellen würde  :D

defmod di_ring2 DOIF ##
attr di_ring2 room 03.Wohnzimmer_EG
attr di_ring2 uiTable {package ui_Table}\
"Temperatur","Luftfeuchtigkeit"| ring2([HMIP_WTH_WZ:1.ACTUAL_TEMPERATURE],5,[(20..22)],30,0,120,0,"°C",120,undef,1,[HMIP_WTH_WZ:1.HUMIDITY],0,[(40..60)],100,0,120,0,"%",undef,1)


edit:
werde mich erstmal an Damians beschriebenen Weg versuchen.
Titel: Antw:SVG-uiTable-Funktionen (DOIF-Web-Interface)
Beitrag von: Damian am 15 Oktober 2020, 23:29:08
Zitat von: schwatter am 15 Oktober 2020, 21:42:52
Ring2 klingt gut. Mal sehen ob ich den Farbverlauf passend hinbekomme. Was schwierig ist, ich möchte bei Temp einen grünen Bereich
von 20-22 °C und bei Luftfeuchtigkeit 40-60%. Was drüber oder drunter ist dann rot. Könnte vielleicht aber auch mit hue klappen,
wenn der passende Bereich grün ist und drüber sowie drunter durch angrenzende Farben dargestellt wird.

So könnte das aussehen, wenn DOIF es bereitstellen würde  :D

defmod di_ring2 DOIF ##
attr di_ring2 room 03.Wohnzimmer_EG
attr di_ring2 uiTable {package ui_Table}\
"Temperatur","Luftfeuchtigkeit"| ring2([HMIP_WTH_WZ:1.ACTUAL_TEMPERATURE],5,[(20..22)],30,0,120,0,"°C",120,undef,1,[HMIP_WTH_WZ:1.HUMIDITY],0,[(40..60)],100,0,120,0,"%",undef,1)


edit:
werde mich erstmal an Damians beschriebenen Weg versuchen.

Bis auf die Triggerangaben in eckigen Klammern, handelt es sich hier um reine Perlsyntax und die muss syntaktisch schon stimmen, daher gibt es definierte Schnittstelle für eigene Farbzuordnung in Form von Perlfunktionen, wie beschrieben.

So sieht z. B. die temp_hum-Funktion aus:

sub temp_hum_ring {
  my ($value,$value2,$min,$max,$size) = @_;
  $min=-20 if (!defined $min);
  $max=60  if (!defined $max);
  $size=90 if (!defined $size);
  return(ring2($value,$min,$max,undef,undef,"°C",$size,\&temp_hue,1,$value2,0,100,0,0,"%",\&hum_hue,0));
}


Titel: Antw:SVG-uiTable-Funktionen (DOIF-Web-Interface)
Beitrag von: schwatter am 16 Oktober 2020, 23:24:32
So, ich konnte es für mich doch ganz einfach per hue-range lösen.

{package ui_Table}
"Temperatur","Luftfeuchtigkeit"| ring2([HMIP_WTH_WZ:1.ACTUAL_TEMPERATURE],18,26,240,60,"°C",120,undef,1,[HMIP_WTH_WZ:1.HUMIDITY],20,70,60,240,"%",undef,1)


Damit habe ich bei Temp meinen Wohlfühbereich von 20 bis 22 °C sowie passend grün bei 40-60 % Luftfeuchte.
Titel: Antw:SVG-uiTable-Funktionen (DOIF-Web-Interface)
Beitrag von: pc1246 am 21 Dezember 2020, 11:13:02
Moin
Ich hoffe ich bin hier halbwegs richtig?
Ich habe aus dem Wiki die Fenster offen Aktion implementiert. Leider werden bei mir die offenen/geschlossenen Fenster im DOIF nicht aktualisiert.
Gibt es da eine Einstellung? Longpoll ist aktiviert, auch fuer SVG.
Danke und Gruss
Christoph
Titel: Antw:SVG-uiTable-Funktionen (DOIF-Web-Interface)
Beitrag von: pc1246 am 21 Dezember 2020, 11:15:49
Hi
Kommando zurueck. Entweder habe ich es nach dem Aktivieren von longpoll-SVG nicht probiert gehabt, oder der restart von fhem war entscheidend.
Gruss Christoph