mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-01-31 06:39:11 +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.
|
||||
# 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
|
||||
- feature: 98_DOIFtools: add RGB color values to color table
|
||||
- bugfix: 88_HMCCURPC: fixed bug in event timeout handling
|
||||
|
@ -22,6 +22,7 @@ package main;
|
||||
use strict;
|
||||
use warnings;
|
||||
use Time::Local;
|
||||
use Color;
|
||||
|
||||
sub DOIFtools_Initialize($);
|
||||
sub DOIFtools_Set($@);
|
||||
@ -1519,9 +1520,9 @@ sub DOIFtools_Get($@)
|
||||
<Endfarbnummer>, ist eine HTML-Farbnummer, Beispiel: #FF0000 für Rot.
|
||||
<Minimalwert>, der Minimalwert auf den die Startfarbnummer skaliert wird, Beispiel: 7.
|
||||
<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:
|
||||
<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.
|
||||
<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.
|
||||
<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
|
||||
}
|
||||
} 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 {
|
||||
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;
|
||||
@ -1726,16 +1804,28 @@ 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>
|
||||
<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>
|
||||
<Startfarbnummer>, ist eine HTML-Farbnummer, Beispiel: #0000FF für Blau.<br>
|
||||
<Endfarbnummer>, , ist eine HTML-Farbnummer, Beispiel: #FF0000 für Rot.<br>
|
||||
<Minimalwert>, der Minimalwert auf den die Startfarbnummer skaliert wird, Beispiel: 7.<br>
|
||||
<Maximalwert>, der Maximalwert auf den die Endfarbnummer skaliert wird, Beispiel: 30.<br>
|
||||
<Schrittweite>, für jeden Schritt wird ein Farbwert erzeugt, Beispiel: 0.5.<br>
|
||||
<b>linearColorGradient</b> erzeugt eine Tabelle mit linear abgestuften Farbnummern und RGB-Werten.<br>
|
||||
<start color number>, ist eine HTML-Farbnummer, Beispiel: #0000FF für Blau.<br>
|
||||
<end color number>, , ist eine HTML-Farbnummer, Beispiel: #FF0000 für Rot.<br>
|
||||
<minimal value>, der Minimalwert auf den die Startfarbnummer skaliert wird, Beispiel: 7.<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: 0.5.
|
||||
<br>
|
||||
Beispiel: <code>get DOIFtools linearColorGradient #0000FF,#FF0000,7,30,0.5</code><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>
|
||||
|
||||
<a name="DOIFtoolsAttribute"></a>
|
||||
|
Loading…
Reference in New Issue
Block a user