Float Variable Farbe

Hallo,

aus Variablen möchte ich mir die Werte in einem Textfeld in einer ausgewählten Farbe anzeigen lassen. Bei den Boolean Variablen geht das, indem ich im Variablenprofil die beiden Farben zuweise. Wie bekomme ich das bei einer Float-Variablen für alle Variablenwerte hin?

Danke für Eure Hilfe…!

Im Float Profil schreibst Du bei Text Deine gewünschte Formatierung rein (z.B. %0.2f") und weißt eine Farbe zu, das sollte es gewesen sein. So kannst Du auch für gewisse Werte(bereiche) unterschiedliche Farben zuweisen!

Einfach mal mit rumspielen!

Ciao Pitti

PS: bei Wert natürlich die kleinste Zahl oder eben Bereiche (0, 20, 40, 100 für 0-19. 20-39, 40-100) …

Danke, Pitti - wenn ich im Profil unter Assoziationen auf „Neu“ gehe und dort beim Wert z.B. „10-35“ reinschreibe, sagt er mir " ‚10-35‘ ist kein gültiger Gleitkommawert.". Muss der Wertbereich woanders definiert werden, wenn ja wo?

Habe gerade noch mal in der Doku geschaut - dort heißt es:

„Die zweite Möglichkeit besteht darin, Werte auszulassen, um z.B. nur wichtige Positionen, die eine Änderung benötigen, anzuzeigen. So könnten für eine Jalousie z.B. nur die Werte 0, 50, 100 interessant sein, da nur für diese Icons verwendet werden. Die Assoziationen können definiert werden, indem für die Werte 0, 50, 100 einen Eintrag hinzufügt werden. Dabei würden die Einträge für folgende Werte gültig sein: 0 (0-49), 50 (50-99) und 100 (100).“

Ich versuche es mal weiter…

Mist, dachte schon das ich es schlecht erklärt habe :wink: Anbei ein Float Profil mit den Bereichen:

0 - 24 = Rot
25 - 39 = Orange
40 - 49 = Gelb
50 -59 = Grün
60 - = Hellgrün

Du definierst nicht von bis sondern einfach den Wert also 10 und 35, das von bis macht IP-Symcon siehe auch Variablenprofile.

Vielen Dank an Euch.

Und das noch an alle, die wie ich etwas langsam sind beim Verstehen:

  1. Damit die Werte angezeigt werden, darf das Textfeld nicht leer sein.

  2. Im Textfeld „%f“ eingeben. So werden auch die angezeigten Nachkommastellen definiert (z.B. „%0.1f“ für eine Nachkommastelle) - der unter „Stellen“ angegebene Wert wird bei einem entsprechenden Eintrag im Textfeld ignoriert.

Leider habe ich doch noch ein Problem - ich möchte folgendes Skript nutzen:

https://www.symcon.de/forum/threads/36203-Statusvariablen-Log-f%C3%BCrs-WebFront/page2

Leider werden mir die Werte aus Float-Variablen nicht farbig angezeigt (anders Boolean und Integer) - wisst Ihr, wie ich die ebenfalls farbig hinbekomme (ich habe es dort auch schon gefragt, aber vielleicht habt Ihr eine Idee…)?

P.S.: Wie Fonzo weiß, habe ich es mit seiner Hilfe auch schon so versucht:

https://www.symcon.de/forum/threads/36968-Hilfe-zur-Texbox-bef%C3%BCllung/page2

Hier bekomme ich nur leider auch keine unterschiedlichen Farben hin…

Bin mir jetzt nicht sicher, aber das sind doch alles HTMLBox’en … und keine Variablen mit Profilen, oder?

Und jeweils Scripte welche die HTMLBox befüllen.
Somit ist die Frage in den jeweiligen Themen zu platzieren, wo es auch um diese Scripte geht.

Wenn das von den Scripten dort nicht berücksichtigt ist, funktioniert es natürlich nicht.
Michael

Der 2. Link sind HTML-Boxen. Es scheint irgendwie möglich zu sein, die Einträge in verschiedenen Farben zu gestalten, bei meinen Versuchen bin ich allerdings kläglich gescheitert…

Beim Skript im 1. Link werden die Werte der wiederzugebenden Variablen bei Bool und Integer in der Farbe wiedergegeben, wie im Profil definiert, nur leider bei Float nicht…

Ist auch eine HTML-Box :wink:
Michael

Wie Michael sagt, bitte die Frage im anderen Thread stellen!

Ich habe jetzt mal schnell über die Scripte geschaut. Wenn ich es richtig verstehe werden die Profile ausgelesen und in HTML übersetzt! Das müsste man dann halt auch für deine Float’s machen!

Ciao Pitti

In dem Skript heißt ein Teil:

// if the type of the variable supports profiles with associations, try to
    // retrieve the association list so that log entries can be created with
    // text and color, rather than just bare values.
    $profile = false;
    $prof_name = $var['VariableCustomProfile'];
    if($prof_name == '') $prof_name = $var['VariableProfile'];
    
    if($prof_name != '') {
        if(!array_key_exists($prof_name, $profiles)) {
            $profile = @IPS_GetVariableProfile($prof_name);
            
            if($profile === false) {
                if($debug) echo "Profile \"" . $prof_name . "\" not found!\r";
            } else {
                $profiles[$prof_name] = $profile;
            }
        } else {
            $profile = $profiles[$prof_name];
        }
    }

Ich verstehe halt nicht, warum die Farbwiedergabe bei Bool und Integer klappt, nicht aber bei Float. Leider reichen meine PHP-Kenntnisse auch nicht, das herauszufinden.

Die Frage habe ich beim Skript-Thread auch schon gestellt - Euch aber schon mal vielen Dank!

Und der Teil scheint die Übersetzung in HTML zu sein:

// generate log as an html table string
function generate_log($history, $prof_name = "") {
    $result = '<table cellspacing=5 cellpadding=1>';
    foreach($history as $hist_entry) {
        $ts = $hist_entry['TimeStamp'];
        $val = $hist_entry['Value'];
        $time_str = date('j.n.y H:i:s', $ts);
        
        if(array_key_exists("ProfileName", $hist_entry)) {
            $prof_name = $hist_entry["ProfileName"];
        }
        
        $log_entry_str = '<tr><td>' . $time_str . "	</td>";
        if(array_key_exists("Name", $hist_entry)) {
            $log_entry_str .= "<td><font color=\"#aaaaaa\">" . $hist_entry["Name"] . "	</font></td>";
        }
        if(array_key_exists("OldValue", $hist_entry)) {
            $old_val = $hist_entry["OldValue"];
            print_r($old_val);
            $log_entry_str .= format_value($old_val, $prof_name) . "<td>→</td>";
            $colspan = 1;
        } else {
            $colspan = 3;
        }
        $log_entry_str .= format_value($val, $prof_name, $colspan);
        //if($colspan == 1) $log_entry_str .= "<td align=\"left\"> </td>";
        $log_entry_str .= "</tr>\r";
        $result .= $log_entry_str;
    }
    $result .= '</table>';
    return $result;
}

function format_value($val, $prof_name, $colspan = 1) {
    global $profiles;
    
    $color_str = "ffffff";
    $align = is_string($val) ? "left" : "right";
    $val_str = htmlentities($val);
    
    if(array_key_exists($prof_name, $profiles)) {
        $profile = $profiles[$prof_name];
        $val_str = $profile['Prefix'] . $val_str . trim($profile['Suffix']);
        $assocs = $profile['Associations'];
        foreach($assocs as $assoc) { // if associations array supplied, use it to display colorful text rather than bare values!
            if($assoc['Value'] == $val) {
                $val_str = $assoc['Name'];
                $color_str = str_pad(dechex($assoc['Color']), 6, '0', STR_PAD_LEFT);
                $align = "left";
                break;
            }
        }
    }
    
    return "<td colspan=\"" . $colspan . "\"><div align=\"". $align . "\"><font color=\"#" . $color_str . "\">" . $val_str . "</font></div></td>";
}

Ich bin mir nicht sicher, ob es wirklich am Skript liegt:

Ich habe bei der entsprechenden Float-Variablen im Profil die Werte 10 (grün zugewiesen) und 35 (rot zugewiesen) und bei Text jeweils „%0.1f“ eingegeben:

Alle Werte außer 10 und 35 werden ohne Farbe mit dem definierten Suffix ausgegeben. Wenn der Wert der Variablen 10 bzw. 35 ist, wird nicht der Wert, sondern der Inhalt von „Text“, also „%0.1f“ in grün bzw. in rot ausgegeben.

Es scheint also am Profil und der Art der Wertdefinition zu liegen, oder? Habt Ihr eine Idee, wie ich das richtig hinbekomme?

VG…!

Wo ? Im Webfront ?
Oder in den Scripten ?
Bei den Scripten wird dass so sein; diese berücksichtigen ein Float mit von - bis nicht !
Nur wenn es eine Punktlandung bei dem Wert ist; wird der Text eingefärbt (zumindest bei dem einen Script).

Wende dich doch sonst per PN an den Autor, wenn er im Thread nicht antwortet.
Michael

Vielen Dank, Michael.

Ich meinte die Ausgabe, die durch das Skript erzeugt wird. Mir war nicht klar, dass dort (leider) kein Float-Wertebereich berücksichtigt wird.

Mal schauen, ob der Skript-Autor eine Idee hat - werde es mal per PN versuchen… VG, Götz