mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-01-31 12:49:34 +00:00
98_DOIFtools: add getter modelColorGradient, returns a table of value, colornumber, RGB values and color bar using Color::pahColor
git-svn-id: https://svn.fhem.de/fhem/trunk@15254 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
8afeee4236
commit
5f8280c6ef
@ -1,5 +1,7 @@
|
|||||||
# Add changes at the top of the list. Keep it in ASCII, and 80-char wide.
|
# Add changes at the top of the list. Keep it in ASCII, and 80-char wide.
|
||||||
# Do not insert empty lines here, update check depends on it.
|
# Do not insert empty lines here, update check depends on it.
|
||||||
|
- feature: 98_DOIFtools: add getter modelColorGradient, returns a table of
|
||||||
|
value, colornumber, RGB values and color bar using Color::pahColor
|
||||||
- new: 98_Siro.pm: New module for Siro shutters
|
- new: 98_Siro.pm: New module for Siro shutters
|
||||||
- feature: 98_DOIFtools: add RGB color values to color table
|
- feature: 98_DOIFtools: add RGB color values to color table
|
||||||
- bugfix: 88_HMCCURPC: fixed bug in event timeout handling
|
- bugfix: 88_HMCCURPC: fixed bug in event timeout handling
|
||||||
|
@ -22,6 +22,7 @@ package main;
|
|||||||
use strict;
|
use strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
use Time::Local;
|
use Time::Local;
|
||||||
|
use Color;
|
||||||
|
|
||||||
sub DOIFtools_Initialize($);
|
sub DOIFtools_Initialize($);
|
||||||
sub DOIFtools_Set($@);
|
sub DOIFtools_Set($@);
|
||||||
@ -1519,9 +1520,9 @@ sub DOIFtools_Get($@)
|
|||||||
<Endfarbnummer>, ist eine HTML-Farbnummer, Beispiel: #FF0000 für Rot.
|
<Endfarbnummer>, ist eine HTML-Farbnummer, Beispiel: #FF0000 für Rot.
|
||||||
<Minimalwert>, der Minimalwert auf den die Startfarbnummer skaliert wird, Beispiel: 7.
|
<Minimalwert>, der Minimalwert auf den die Startfarbnummer skaliert wird, Beispiel: 7.
|
||||||
<Maximalwert>, der Maximalwert auf den die Endfarbnummer skaliert wird, Beispiel: 30.
|
<Maximalwert>, der Maximalwert auf den die Endfarbnummer skaliert wird, Beispiel: 30.
|
||||||
<Schrittweite>, für jeden Schritt wird ein Farbwert erzeugt, Beispiel: 0.5.
|
<Schrittweite>, für jeden Schritt wird ein Farbwert erzeugt, Beispiel: 1.
|
||||||
|
|
||||||
Beispielangabe: #0000FF,#FF0000,7,30,0.5
|
Beispielangabe: <code>#0000FF,#FF0000,7,30,1</code>
|
||||||
":
|
":
|
||||||
"Wrong input:$value\nSyntax:
|
"Wrong input:$value\nSyntax:
|
||||||
<code><start color number>,<end color number>,<minimal value>,<maximal value>,<step width></code>
|
<code><start color number>,<end color number>,<minimal value>,<maximal value>,<step width></code>
|
||||||
@ -1530,15 +1531,92 @@ Beispielangabe: #0000FF,#FF0000,7,30,0.5
|
|||||||
<end color number>, a HTML color number, example: #FF0000 for red.
|
<end color number>, a HTML color number, example: #FF0000 for red.
|
||||||
<minimal value>, the start color number will be scaled to it, example: 7.
|
<minimal value>, the start color number will be scaled to it, example: 7.
|
||||||
<maximal value>, the end color number will be scaled to it, example: 30.
|
<maximal value>, the end color number will be scaled to it, example: 30.
|
||||||
<step width>, for each step a color number will be generated, example: 0.5.
|
<step width>, for each step a color number will be generated, example: 1.
|
||||||
|
|
||||||
Example specification: #0000FF,#FF0000,7,30,0.5
|
Example specification: <code>#0000FF,#FF0000,7,30,1</code>
|
||||||
";
|
";
|
||||||
return $ret
|
return $ret
|
||||||
}
|
}
|
||||||
|
} elsif ($arg eq "modelColorGradient") {
|
||||||
|
my $err_ret = $DE ? "Falsche Eingabe:$value\nSyntax:
|
||||||
|
<code><Minimalwert>,<Zwischenwert>,<Maximalwert>,<Schrittweite><Farbmodel></code>
|
||||||
|
|
||||||
|
<Minimalwert>, der Minimalwert auf den die Startfarbnummer skaliert wird, Beispiel: 7.
|
||||||
|
<Zwischenwert>, der Fixpunkt zwischen Start- u. Endwert, Beispiel: 20.
|
||||||
|
<Maximalwert>, der Maximalwert auf den die Endfarbnummer skaliert wird, Beispiel: 30.
|
||||||
|
<Schrittweite>, für jeden Schritt wird ein Farbwert erzeugt, Beispiel: 1.
|
||||||
|
<Farbmodel>, die Angabe eines vordefinierten Modells <0|1|2> oder
|
||||||
|
fünf RGB-Werte als Array [r1,g1,b1,r2,g2,b2,r3,g3,b3,r4,g4,b4,r5,g5,b5] für ein eigenes Model.
|
||||||
|
|
||||||
|
Beispielangabe: <code>0,50,100,5,[255,255,0,127,255,0,0,255,0,0,255,255,0,127,255]</code>
|
||||||
|
oder: <code>7,20,30,1,0</code>
|
||||||
|
":
|
||||||
|
"Wrong input:$value\nSyntax:
|
||||||
|
<code><minimal value>,<middle value>,<maximal value>,<step width>,<color model></code>
|
||||||
|
|
||||||
|
<minimal value>, the start color number will be scaled to it, example: 7.
|
||||||
|
<middle value>, a fix point between min and max, example: 20.
|
||||||
|
<maximal value>, the end color number will be scaled to it, example: 30.
|
||||||
|
<step width>, for each step a color number will be generated, example: 1.
|
||||||
|
<color model>, a predefined number <0|1|2> or an array of five RGB values,<code>[r1,g1,b1,r2,g2,b2,r3,g3,b3,r4,g4,b4,r5,g5,b5]</code>
|
||||||
|
|
||||||
|
Example specification: <code>0,50,100,5,[255,255,0,127,255,0,0,255,0,0,255,255,0,127,255]</code>
|
||||||
|
or: <code>7,20,30,1,0</code>
|
||||||
|
";
|
||||||
|
return $err_ret if (!$value);
|
||||||
|
my ($min,$mid,$max,$step,$colors);
|
||||||
|
my $err = "";
|
||||||
|
$value =~ s/,(\[.*\])//;
|
||||||
|
if ($1) {
|
||||||
|
$colors = eval($1);
|
||||||
|
if ($@) {
|
||||||
|
$err="Error eval 1567: $@\n".$err_ret;
|
||||||
|
Log3 $hash->{NAME},3,"modelColorGradient \n".$err;
|
||||||
|
return $err;
|
||||||
|
}
|
||||||
|
($min,$mid,$max,$step) = split(",",$value);
|
||||||
|
} else {
|
||||||
|
($min,$mid,$max,$step,$colors) = split(",",$value);
|
||||||
|
}
|
||||||
|
return $err_ret if ($min>=$mid or $mid >= $max or $step <= 0 or (ref($colors) ne "ARRAY" && $colors !~ "0|1|2"));
|
||||||
|
my $erg=eval("\"".Color::pahColor($min,$mid,$max,$min+$step,$colors)."\"");
|
||||||
|
if ($@) {
|
||||||
|
$err="Error eval 1577: $@\n".$err_ret;
|
||||||
|
Log3 $hash->{NAME},3,"modelColorGradient \n".$err;
|
||||||
|
return $err;
|
||||||
|
}
|
||||||
|
$ret .= "<table>";
|
||||||
|
$ret .= "<tr><td colspan=4 style='font-weight:bold;'>Color Table</td></tr>";
|
||||||
|
$ret .= "<tr><td colspan=4><div>";
|
||||||
|
for (my $i=0;$i<=255;$i++) {
|
||||||
|
my $col = eval("\"".Color::pahColor($min,$mid,$max,$min+$i*($max-$min)/255,$colors)."\"");
|
||||||
|
if ($@) {
|
||||||
|
$err="Error eval 1567: $@\n".$err_ret;
|
||||||
|
Log3 $hash->{NAME},3,"modelColorGradient \n".$err;
|
||||||
|
return $err;
|
||||||
|
}
|
||||||
|
$col = "#".substr($col,0,6);
|
||||||
|
$ret .= "<span style='background-color:$col;'>  </span>";
|
||||||
|
}
|
||||||
|
$ret .= "</div></td></tr>";
|
||||||
|
$ret .= "<tr style='text-align:center;'><td> Value </td><td> Color Number </td><td> RGB values </td><td> Color</td> </tr>";
|
||||||
|
for (my $i=$min;$i<=$max;$i+=$step) {
|
||||||
|
my $col = eval("\"".Color::pahColor($min,$mid,$max,$i,$colors)."\"");
|
||||||
|
if ($@) {
|
||||||
|
$err="Error eval 1567: $@\n".$err_ret;
|
||||||
|
Log3 $hash->{NAME},3,"modelColorGradient \n".$err;
|
||||||
|
return $err;
|
||||||
|
}
|
||||||
|
$col = "#".substr($col,0,6);
|
||||||
|
$col =~ /^#?([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})$/;
|
||||||
|
$ret .= "<tr><td style='text-align:center;'>".sprintf("%.1f",$i)."</td><td style='text-align:center;'>$col</td><td style='text-align:center;'> ".hex($1).",".hex($2).",".hex($3)." </td><td style='background-color:$col;'>      </td></tr>";
|
||||||
|
}
|
||||||
|
$ret .= "</table>\n";
|
||||||
|
|
||||||
|
return $ret;
|
||||||
} else {
|
} else {
|
||||||
my $hardcoded = "checkDOIF:noArg statisticsReport:noArg runningTimerInDOIF:noArg";
|
my $hardcoded = "checkDOIF:noArg statisticsReport:noArg runningTimerInDOIF:noArg";
|
||||||
return "unknown argument $arg for $pn, choose one of readingsGroup_for:multiple-strict,$dL DOIF_to_Log:multiple-strict,$dL SetAttrIconForDOIF:multiple-strict,$dL userReading_nextTimer_for:multiple-strict,$ntL ".(AttrVal($pn,"DOIFtoolsHideGetSet",0) ? $hardcoded :"")." linearColorGradient:textField";
|
return "unknown argument $arg for $pn, choose one of readingsGroup_for:multiple-strict,$dL DOIF_to_Log:multiple-strict,$dL SetAttrIconForDOIF:multiple-strict,$dL userReading_nextTimer_for:multiple-strict,$ntL ".(AttrVal($pn,"DOIFtoolsHideGetSet",0) ? $hardcoded :"")." linearColorGradient:textField modelColorGradient:textField";
|
||||||
}
|
}
|
||||||
|
|
||||||
return $ret;
|
return $ret;
|
||||||
@ -1726,15 +1804,27 @@ DOIFtools stellt Funktionen zur Unterstützung von DOIF-Geräten bereit.<br>
|
|||||||
<b>SetAttrIconForDOIF</b> setzt für die ausgewählten DOIF das Attribut <i>icon</i> auf <i>helper_doif</i>.<br>
|
<b>SetAttrIconForDOIF</b> setzt für die ausgewählten DOIF das Attribut <i>icon</i> auf <i>helper_doif</i>.<br>
|
||||||
<br>
|
<br>
|
||||||
<code>get <name> linearColorGradient <start color number>,<end color number>,<minimal value>,<maximal value>,<step width></code><br>
|
<code>get <name> linearColorGradient <start color number>,<end color number>,<minimal value>,<maximal value>,<step width></code><br>
|
||||||
<b>linearColorGradient</b> erzeugt eine Tabelle mit linear abgestuften Farbnummern.<br>
|
<b>linearColorGradient</b> erzeugt eine Tabelle mit linear abgestuften Farbnummern und RGB-Werten.<br>
|
||||||
<Startfarbnummer>, ist eine HTML-Farbnummer, Beispiel: #0000FF für Blau.<br>
|
<start color number>, ist eine HTML-Farbnummer, Beispiel: #0000FF für Blau.<br>
|
||||||
<Endfarbnummer>, , ist eine HTML-Farbnummer, Beispiel: #FF0000 für Rot.<br>
|
<end color number>, , ist eine HTML-Farbnummer, Beispiel: #FF0000 für Rot.<br>
|
||||||
<Minimalwert>, der Minimalwert auf den die Startfarbnummer skaliert wird, Beispiel: 7.<br>
|
<minimal value>, der Minimalwert auf den die Startfarbnummer skaliert wird, Beispiel: 7.<br>
|
||||||
<Maximalwert>, der Maximalwert auf den die Endfarbnummer skaliert wird, Beispiel: 30.<br>
|
<maximal value>, der Maximalwert auf den die Endfarbnummer skaliert wird, Beispiel: 30.<br>
|
||||||
<Schrittweite>, für jeden Schritt wird ein Farbwert erzeugt, Beispiel: 0.5.<br>
|
<step width>, für jeden Schritt wird ein Farbwert erzeugt, Beispiel: 0.5.
|
||||||
<br>
|
<br>
|
||||||
Beispiel: <code>get DOIFtools linearColorGradient #0000FF,#FF0000,7,30,0.5</code><br>
|
Beispiel: <code>get DOIFtools linearColorGradient #0000FF,#FF0000,7,30,0.5</code><br>
|
||||||
<br>
|
<br>
|
||||||
|
<code>get <name> modelColorGradient <minimal value>,<middle value>,<maximal value>,<step width>,<color model></code><br>
|
||||||
|
<b>modelColorGradient</b> erzeugt eine Tabelle mit modellbedingt abgestuften Farbnummern und RGB-Werten, siehe FHEM-Wiki<a href="https://wiki.fhem.de/wiki/Color#Farbskala_mit_Color::pahColor"> Farbskala mit Color::pahColor </a><br>
|
||||||
|
<minimal value>, der Minimalwert auf den die Startfarbnummer skaliert wird, Beispiel: 7.<br>
|
||||||
|
<middle value>, der Mittenwert ist ein Fixpunkt zwischen Minimal- u. Maximalwert, Beispiel: 20.<br>
|
||||||
|
<maximal value>, der Maximalwert auf den die Endfarbnummer skaliert wird, Beispiel: 30.<br>
|
||||||
|
<step width>, für jeden Schritt wird ein Farbwert erzeugt, Beispiel: 1.<br>
|
||||||
|
<color model>, die Angabe eines vordefinierten Modells <0|1|2> oder fünf RGB-Werte als Array [r1,g1,b1,r2,g2,b2,r3,g3,b3,r4,g4,b4,r5,g5,b5] für ein eigenes Model.<br>
|
||||||
|
<br>
|
||||||
|
Beispiele:<br>
|
||||||
|
<code>get DOIFtools modelColorGradient 7,20,30,1,0</code><br>
|
||||||
|
<code>get DOIFtools modelColorGradient 0,50,100,5,[255,255,0,127,255,0,0,255,0,0,255,255,0,127,255]</code><br>
|
||||||
|
<br>
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user