Ich hab mir viel Mühe bei dem Titel gegeben, daher fällt der Text hier eher dürftig aus :-D. Ich möchte dynamisch die Hintergrundfarbe einer Variable, der eine Vorlage zugewiesen ist ändern. Also ich möchte die Vorlage dynamisch ändern. Hintergrund ist die Anzeige des aktuellen stündlichen Strompreises. Ist der Preis für die nächste Stunde höher, dann wird rot hinterlegt, niedriger ist grün und wenn er gleich bleibt, blau. Derzeit habe ich drei Profile definiert, die dann zugewiesen werden.
Ich kann mir die Antwort selbst geben
Es geht, aber nicht verwendbar.
Wie geht es?
So.
IPS_SetTemplateValues("{98CD0B56-BB76-40F6-4DDF-01E792C59421}",
[
"ICON" => "circle-euro",
"DECIMAL_SEPARATOR"=> "Client",
"COLOR" => 255,
"DIGITS"=>2,
"INTERVALS_ACTIVE"=>false,
"GROUP"=> "{883E24FA-9174-4E4A-C12E-0A739F0A2FF4}",
"MAX"=>100,
"INTERVALS"=>"[]",
"MIN"=> 0,
"PERCENTAGE"=>false,
"PREFIX"=> "",
"SUFFIX"=> " €",
"THOUSANDS_SEPARATOR"=>"",
"USAGE_TYPE"=>0
]
);
Die ID’s bekommt man mit ips_gettemplatelist() und die Daten der Vorlage mit ips_gettemplate(). Diese „Vorarbeiten“ sind notwendig.
Dann kann man mit ips_settemplatevalues() die Werte setzen. Es reicht aber nicht, einfach nur den COLOR Wert zu ändern. Es muss immer alles rübergeschoben werden. Wenn man das nicht macht, verschwinden die anderen Werte und die Vorlage ist im Vorlagenmanger nicht mehr sichtbar und auch nicht wählbar.
Soweit so gut. Ändert man z.b. die Farbei in einem Skript, wird die Änderung im Vorlagenmanager sofort angezeigt. In der Visualisierung allerdings nicht. Da hilft nur ein neu Laden was es sinnlos macht. Außerdem sind bei mir beim Ändern der Farbe auch mal nicht abgefangene Fehler in der Console erschienen. Beim Löschen der Vorlage kam dann auch ein Fehler, die Vorlage wurde aber gelöscht.
Somit derzeit keine Option zu den alten Profilen.
Ich würde dir nicht empfehlen hier auf die Vorlage zu gehen, denn prinzipiell ist richtet sich die Farbe ja nach dem Variablenwert. Ich sehe damit zwei mögliche Ansätze:
- Nutze einfach drei Vorlagen und tausche diese aus
- Setze die Farbe direkt bei der Variablen. Tatsächlich sollte eine Variable mit gesetzter Vorlage und Farbe die gesetzte Farbe nutzen und alle nicht gesetzten Werte aus der Vorlage holen. Das ist eher ein Nebeneffekt der Implementation, ich bin also nicht ganz sicher ob das so klappt.
Dann könnte ich die die Legacy Profile lassen.
Mit welcher Funktion? Und wie kann man die Farben auf Integer umrechnen?
Naja, ich sehe hier zwei Fälle:
- Du nutzt deine Vorlage nur bei einer Variablen
Dann ist die Verwendung einer Vorlage hier natürlich schon unpassend und du solltest die Darstellung direkt an der Variable setzen. Das kannst du dann mit IPS_SetVariableCustomPresentation machen - Du nutzt deine Vorlage bei mehreren Variablen
Dann ist es natürlich unpassend die Farbe basierend auf den Werten einer Variable zu ändern. Die Farbe sollte dann ja jede Variable für sich entscheiden. Darauf basierten auch meine vorherigen Vorschläge.
Ich nutze es für zwei Variablen. Einmal den Bezugspreis und den Einspeispreis. Bei der Einspeisung ist das mit Rot/Grün anders. Ich finde das mit der Farbe direkt bei der Variable ändern gar nicht so schlecht. Welche Funktion verwende ich dafür und, wie schon gefragt, wie rechne ich die Farben in Integer Werte um?

Dann ist die Verwendung einer Vorlage hier natürlich schon unpassend und du solltest die Darstellung direkt an der Variable setzen. Das kannst du dann mit
Ich sehe das nicht so, weil ich die Art der Darstellung eigentlich von der Variable weg haben mag. Ich hab einige Variablen, wo ein Profil/Vorlage hinterlegt ist, das nur bei dieser Variable verwendet wird. Aber das ist ja mein persönlicher Geschmack.

Dann ist es natürlich unpassend die Farbe basierend auf den Werten einer Variable zu ändern. Die Farbe sollte dann ja jede Variable für sich entscheiden.
Eben nicht. Die Farbe wird nicht vom aktuellen Wert der Variable definiert, sondern vom Wert der nächsten Stunde.
Das sind die aktuellen Werte für Bezug und Einspeisung. Die Farbe sagt mir, dass der Bezugspreis in der nächsten Stunde höher ist (Rot) und auch die Einspeisvergütung höher ist (Grün).
Wie oben geschrieben per IPS_SetVariableCustomPresentation. Funktioniert analog zu IPS_SetTemplateValues, aber halt für die Variable, nicht die Vorlage.