SVG-uiTable-Funktionen (DOIF-Web-Interface)

Begonnen von Damian, 05 Mai 2020, 23:10:26

Vorheriges Thema - Nächstes Thema

cwagner

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
PI 2B+/5 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 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
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

cwagner

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
PI 2B+/5 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 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));
}

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

schwatter

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?

mumpitzstuff


Damian

#51
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
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

schwatter

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.

Damian

#53
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 ;)

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

schwatter

#54
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.

Damian

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));
}


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

schwatter

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.

pc1246

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
HP T610
Onkyo_AVR;Enigma2; SB_Server; SB_Player; HM-USB; PhilipsTV; harmony hub; Jeelink mit PCA301; Somfy; S7-300; LGW; HUE; HM-IP auf Charly; div

pc1246

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
HP T610
Onkyo_AVR;Enigma2; SB_Server; SB_Player; HM-USB; PhilipsTV; harmony hub; Jeelink mit PCA301; Somfy; S7-300; LGW; HUE; HM-IP auf Charly; div