From 5f8280c6efaa6e96b904073eb8b1dfa49393a1c1 Mon Sep 17 00:00:00 2001
From: Ellert <>
Date: Sat, 14 Oct 2017 16:37:12 +0000
Subject: [PATCH] 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
---
fhem/CHANGED | 2 +
fhem/FHEM/98_DOIFtools.pm | 114 ++++++++++++++++++++++++++++++++++----
2 files changed, 104 insertions(+), 12 deletions(-)
diff --git a/fhem/CHANGED b/fhem/CHANGED
index 46b2c9a20..c4599bfd3 100644
--- a/fhem/CHANGED
+++ b/fhem/CHANGED
@@ -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
diff --git a/fhem/FHEM/98_DOIFtools.pm b/fhem/FHEM/98_DOIFtools.pm
index 2cb0c1c27..5b7d05168 100644
--- a/fhem/FHEM/98_DOIFtools.pm
+++ b/fhem/FHEM/98_DOIFtools.pm
@@ -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: #0000FF,#FF0000,7,30,1
":
"Wrong input:$value\nSyntax:
<start color number>,<end color number>,<minimal value>,<maximal value>,<step width>
@@ -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: #0000FF,#FF0000,7,30,1
";
return $ret
}
+ } elsif ($arg eq "modelColorGradient") {
+ my $err_ret = $DE ? "Falsche Eingabe:$value\nSyntax:
+<Minimalwert>,<Zwischenwert>,<Maximalwert>,<Schrittweite><Farbmodel>
+
+<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: 0,50,100,5,[255,255,0,127,255,0,0,255,0,0,255,255,0,127,255]
+ oder: 7,20,30,1,0
+":
+"Wrong input:$value\nSyntax:
+<minimal value>,<middle value>,<maximal value>,<step width>,<color model>
+
+<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,[r1,g1,b1,r2,g2,b2,r3,g3,b3,r4,g4,b4,r5,g5,b5]
+
+Example specification: 0,50,100,5,[255,255,0,127,255,0,0,255,0,0,255,255,0,127,255]
+ or: 7,20,30,1,0
+";
+ 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 .= "
Color Table | |||
";
+ 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 .= " ";
+ }
+ $ret .= " | |||
Value | Color Number | RGB values | Color |
".sprintf("%.1f",$i)." | $col | ".hex($1).",".hex($2).",".hex($3)." |
get <name> linearColorGradient <start color number>,<end color number>,<minimal value>,<maximal value>,<step width>
get DOIFtools linearColorGradient #0000FF,#FF0000,7,30,0.5
get <name> modelColorGradient <minimal value>,<middle value>,<maximal value>,<step width>,<color model>
get DOIFtools modelColorGradient 7,20,30,1,0
get DOIFtools modelColorGradient 0,50,100,5,[255,255,0,127,255,0,0,255,0,0,255,255,0,127,255]