Q&A Highcharts V2.0

Hallo Community,
heute habe ich die neue Version V2.0 des Highchart-Scripts online gestellt - siehe Link. Damit kann das gesamte original Highcharts-Konfigurationsspektrum genutzt werden.

Da nun sicherlich ganz neue Fragen, Probleme und natürlich auch neue Fehler auftauchen werden habe ich hierzu einen neuen Thread aufgemacht.

Grüße KHC

Hi KHC,

nochmal von meiner Seite besten Dank für dieses geniale Script, die Entwicklung und das zur Verfügung stellen. Die Testphase der verg. Tage war spannend (ich hoffe, für Dich nicht zu anstrengend), vielen Dank auch für die Lösung meiner „speziellen“ Fragen während der Testphase :smiley:
Ich hoffe, ich kann Dich wenigstens beim Support hier im Forum entlasten (wenngleich ich nicht glaube, das hier noch Fehler zu Tage treten werden)

Ich möchte mal auch für die Entwicklung danken. Gestern Abend habe ich dann doch noch vorm zu Bett gehen (Augen zu und durch) alles auf 2.0 umgestellt und es funktioniert. Nun schau ich mir in Ruhe die Möglichkeiten an und setze diese sukzessive um.
Klasse Arbeit, die Ihr macht. Das spart mir viel Zeit.

Prima Arbeit, danke. ID Variablen getauscht, und läuft, Klasse.
Mit dem neuen Beispiel bin ich auch wieder ein Stück weiter hinter das Geheimnis der boolschen Graphen gerückt, zumindest funktioniert jetzt ReplaceValues. Allerdings muß ich jetzt noch die Stelle finden, wo man die Höhe und Position verschiedener Graphen dieser Sorte einstellen kann, damit mehrere später schön übereinander liegen.
Gruß Jens

wenn Du jeweils unterschiedliche Replace-Values setzt (und die betreffenden series alle an der selben Achse ausrichtest) ist das kein Problem

Ja ja, alle an der gleichen Achse ausrichten ist leicht gesagt, wenn man Ahnung hat. Ich hab’ keine und suche krampfhaft genau diese Stelle.
Gruß Jens

Die Min Max Werte der Achsen werden im Moment aus den Daten bestimmt, glaube ich. Irgendwie muß ich diese Y-Achse auf feste Min Max Werte setzen, oder?

immer locker bleiben, jaja hilft auch nicht weiter :wink:

die Achse muss nicht zwingend statisch sein, ist aber von Vorteil.

das macht man über die Parameter ‚min‘ und ‚max‘:


	$CfgDaten["yAxis"][1]['min']								= 0;
	$CfgDaten["yAxis"][1]['max']								= 100;

vergessen, da war ja noch was:

jeder Series gibst Du die Achse mit, an der sich der datensatz ausrichten soll:


$serie['yAxis'] 												= 0;

was heißt das genau? -> Du hast gar keine …Achse?!?

Danke, das war die Lösung.
Das Problem ist halt die Ungeduld und die Schwierigkeit, ein vernünftiges Gleichgewicht zwischen Forumsfrage und eigener Forschungsarbeit zu finden.
Gruß Jens

Ich meinte natürlich, ich habe keine Ahnung.

keine Ahnung haben wir alle, der Eine mehr, der Andere weniger. das ist nicht schlimm, dafür gibts ja das Forum.
Vielleicht solltest Du aber genauer beschreiben, wo Du grad stehst und was Du erreichen willst. Mitgeposteter Code und Screenschots können für Aussenstehende auch hilfreich sein, sich besser auf Dich und Dein aktuelles Problem einzustellen.

Hallo khc,

danke für die neue Version. Arbeite schon seit gestern Mittag in der Migration.

Ist viel übersichtlicher geworden.

Hallo wgreipl,

ich hoffe ich habe nicht zu viel Arbeit gemacht.
Es sollte im Großen und Ganzen die Config-Scripts aus V1.x funktionieren. Mit ein paar Einschränkungen bzw. den speziellen direkten Anpassungen im HighchartString".

Wenn es sonst noch große Migrationsprobleme / Arbeiten gibt - lass es mich wissen, dann kann ich vielleicht am Highcharts-Script was machen, um Euch den Wechsel zu erleichtern.

Grüße KHC

Hallo,

ich habe mich heute auch mal an die Highcharts getraut und auch schon die ersten Erfolge :smiley:

Was ich aber nicht hinbekomme ist das mir in der Wochen.- oder in der Monatsansicht Tagessummen anzeigen zu lassen.

Ich weiss nicht ob es daran liegt, dass ich zur Auswahl des Zeitraums diesen Code eingebaut habe.

http://www.ip-symcon.de/forum/f53/highcharts-multigraph-17625/index2.html#post126538

Bei mir sieht die Wochenansicht wie in anhängendem Screenshot aus.
(Nicht wundern das die Daten unvollständig sind)

Ich füge den Code vom Script mal ein, tschuldigung das es so viel ist, aber wie gesagt bin noch ganz am Anfang bei den Highcharts.

<?
	// bei der Konfiguration unbedingt auf die Groß/Kleinschreibung achten
	// es wurde versucht folgende Namensgebeung in der Konfiguration zu verwenden
	// Parameter mit kleinen Anfangsbuchstaben = Parameter welche von Highcharts übnernommen wurden. Siehe dazu: http://www.highcharts.com/ref/
	// Parameter mit großen Anfangsbuchstaben = für das IPS-Highcharts-Script eingeführte Parameter

	Global $CfgDaten; // damit kann der Script auch von anderen Scripten aufgerufen werden und bereits mit CfgDaten vorkonfiguriert werden

	// IPS Variablen ID´s
	$CfgDaten['ContentVarableId']= 59729 /*[Allgemein\Grafiken\Wetter\Wetterdaten]*/;  // ID der String Variable in welche die Daten geschrieben werden (-1 oder überhaupt nicht angeben wenn die Content Variable das übergordnete Element ist)
	$CfgDaten['HighChartScriptId']= 43337 /*[Allgemein\Grafiken\Highcharts_V2.00.ips]*/;  				// ID des Highcharts Scripts

	// Zeitraum welcher dargestellt werden soll (kann durch die Zeitvorgaben in den Serien verändert werden)
//	$CfgDaten['StartTime'] = mktime(0,0,0, date("m", time()), date("d",time())-10, date("Y",time())); // ab heute 00:00 Uhr
//	$CfgDaten['EndTime'] = mktime(23,59,59, date("m", time()), date("d",time()), date("Y",time())); // ab heute 23:59 Uhr, oder //$CfgDaten['EndTime'] = time();   // = bis jetzt

    $ZeitRaum = GetValue(52661 /*[Allgemein\Grafiken\Zeitraum]*/);
    // AggType: [0=Hour, 1=Day, 2=Week, 3=Month, 4=Year] .. wie der Werte gelesen werden soll
    Switch ($ZeitRaum) {
       Case 0:
       Case 1:
          $AggType = 0;
          Break;
       Case 7:
       Case 30:
          $AggType = 1;
          Break;
       Case 365:
        Case 90:
       Case 180:
          $AggType = 3;
          Break;
        Default:
        $AggType = 0;
    };
    If ($ZeitRaum == 0) {$ZeitRaum = (8/24);};
    $EndPunkt = GetValue(20709 /*[Allgemein\Grafiken\Zeitraum\HC_EndPunk]*/);
    $CfgDaten["EndTime"] = time() + 60 * 60 * 24 * $ZeitRaum * $EndPunkt;
   $CfgDaten["StartTime"] = $CfgDaten["EndTime"] - 60 * 60 * 24 * $ZeitRaum;



	// damit wird die Art des Aufrufes festgelegt
	$CfgDaten['RunMode'] = "script"; 	// file, script oder popup

	if ($CfgDaten['RunMode'] == "popup")
	{
		$CfgDaten['WebFrontConfigId'] = 41003 /*[WebInterface WebFront]*/;
		$CfgDaten['WFCPopupTitle'] = "Ich bin der Text, welcher als Überschrift im Popup gezeigt wird";
	}

	// Serienübergreifende Einstellung für das Laden von Werten
	$CfgDaten['AggregatedValues']['HourValues'] = 1;      // ist der Zeitraum größer als X Tage werden Stundenwerte geladen
	$CfgDaten['AggregatedValues']['DayValues'] = 7;       // ist der Zeitraum größer als X Tage werden Tageswerte geladen
	$CfgDaten['AggregatedValues']['WeekValues'] = 31;      // ist der Zeitraum größer als X Tage werden Wochenwerte geladen
	$CfgDaten['AggregatedValues']['MonthValues'] = 90;      // ist der Zeitraum größer als X Tage werden Monatswerte geladen
	$CfgDaten['AggregatedValues']['YearValues'] = 365;      	// ist der Zeitraum größer als X Tage werden Jahreswerte geladen
	$CfgDaten['AggregatedValues']['NoLoggedValues'] = 1000; 	// ist der Zeitraum größer als X Tage werden keine Boolean Werte mehr geladen, diese werden zuvor immer als Einzelwerte geladen	$CfgDaten['AggregatedValues']['MixedMode'] = false;     // alle Zeitraumbedingungen werden kombiniert
	$CfgDaten['AggregatedValues']['MixedMode'] = false;
	// Systematik funktioniert jetzt additiv. D.h. die angegebenen Werte gehen ab dem letzten Wert
	//
	//            -5 Tage           -3 Tage    					EndTime
	// |           |              	|            				 |
	// |           |DayValue = 2     |HourValues = 3          |
	// |Tageswerte |Stundenwerte     |jeder geloggte Wert     |

	// **************************************************************************************
	// *** Highcharts Options ***
	// **************************************************************************************
	// Ab hier werden die Bereiche des Highchart-Objektes parametriert.
	// Dieser Bereich wurde (soweit möglich) identisch der Originalstruktur gehalten.
	// Informationen über die Parametrierung findet man unter http://www.highcharts.com/ref/

	// **************************************************************************************
	// *** chart *** http://www.highcharts.com/ref/#chart
	// **************************************************************************************
	// $CfgDaten['chart']['zoomType'] = "'x'";			//default: $CfgDaten['chart']['zoomType'] = "'xy'";

	// **************************************************************************************
	// *** credits *** siehe http://www.highcharts.com/ref/#credits
	// **************************************************************************************
	// $CfgDaten['credits']['text'] = "used by IPS";
	// $CfgDaten['credits']['href'] = "http://www.ip-symcon.de/forum/f53/highcharts-multigraph-v1-0-a-17625/#post120721";

	// **************************************************************************************
	// *** title *** siehe http://www.highcharts.com/ref/#title
	// **************************************************************************************
	// $CfgDaten['title']['text'] = "Chart-Überschrift";  // Überchrift des gesamten Charts
	//		-> veraltet: 'Title' -> verwende ['title']['text']

	$CfgDaten['title']['text'] = "Wetterdaten";

	// **************************************************************************************
	// *** subtitle *** siehe http://www.highcharts.com/ref/#subtitle
	// **************************************************************************************
	// $CfgDaten['subtitle']['text'] = "Zeitraum: %STARTTIME% - %ENDTIME%" // Sub-Überschrift. Wenn nichts angegeben wird wird dieser String als Default verwendet
	//		-> veraltet: 'SubTitle' -> verwende ['subtitle']['text']
	// $CfgDaten['subtitle']['Ips']['DateTimeFormat'] = "(D) d.m.Y H:i"	// z.B.: "(D) d.m.Y H:i" (wird auch als Default herangezogen wenn nichts konfiguriert wurde)
	//		-> veraltet: 'SubTitleDateTimeFormat' -> verwende ['subtitle']['Ips']['DateTimeFormat']
	//    -> entfallen: 'SubTitleFormat' ->unnötiger Paramter, wird jetzt in ['subtitle']['text'] angegeben

	$CfgDaten['subtitle']['text'] = "Zeitraum: %STARTTIME% - %ENDTIME%";
	$CfgDaten['subtitle']['Ips']['DateTimeFormat'] = "(D) d.m.Y H:i";

	// **************************************************************************************
	// *** tooltip *** http://www.highcharts.com/ref/#tooltip
	// **************************************************************************************
	//$CfgDaten['tooltip']['enabled'] = false;

	// **************************************************************************************
	// *** exporting *** http://www.highcharts.com/ref/#exporting
	// **************************************************************************************
	//$CfgDaten['exporting']['enabled'] = true;

	// **************************************************************************************
	// *** lang *** http://www.highcharts.com/ref/#lang
	// **************************************************************************************
	//$CfgDaten['lang']['resetZoom'] = "Zoom zurücksetzten";

	// **************************************************************************************
	// *** legend *** http://www.highcharts.com/ref/#legend
	// **************************************************************************************
	//$CfgDaten['legend']['backgroundColor'] = '#FCFFC5';

	// **************************************************************************************
	// *** xAxis *** http://www.highcharts.com/ref/#xAxis
	// **************************************************************************************
	//$CfgDaten['xAxis']['lineColor'] = '#FF0000';
	//$CfgDaten['xAxis']['plotBands'][] = array("color"=>'#FCFFC5',"from"=> "@Date.UTC(2012, 3, 29)@","to"=> "@Date.UTC(2012, 3, 30)@");

	// **************************************************************************************
	// *** yAxis *** http://www.highcharts.com/ref/#yAxis
	// **************************************************************************************
	// $CfgDaten['yAxis'][0]['title']['text'] = "Temperaturen"; // Bezeichnung der Achse
	//		-> veraltet: 'Name' und 'TitleText' -> verwende ['title']['text']
	// $CfgDaten['yAxis'][0]['Unit'] = "°C";	// Einheit für die Beschriftung die Skalenwerte
	//	$CfgDaten['yAxis'][0]['min'] = 0; // Achse beginnt bei Min (wenn nichts angegeben wird wird der Min der Achse automatisch eingestellt)
	//	$CfgDaten['yAxis'][0]['max'] = 40; // Achse geht bis Max (wenn nichts angegeben wird wird der Max der Achse automatisch eingestellt)
	//		-> veraltet: 'Min' und 'Max'
	//	$CfgDaten['yAxis'][0]['opposite'] = false; // Achse wird auf der rechten (true) oder linken Seite (false) des Charts angezeigt (default = false)
	//		-> veraltet: 'Opposite'
	//	$CfgDaten['yAxis'][0]['tickInterval'] = 5; // Skalenwerte alle x (TickInterval)
	//		-> veraltet: 'TickInterval'
	//    -> entfallen: 'PlotBands' -> verwende ['yAxis'][0]['plotBands'],  (siehe Beispiel 'cfg - drehgriff und tf-kontakt')
	//    -> entfallen: 'YAxisColor' -> verwende ['yAxis'][0]['title']['style']
	//    -> entfallen: 'TitleStyle'-> verwende ['yAxis'][0]['title']['style']

  // Überschriften
    $CfgDaten['title']['text']= "Stromverbrauch";
    $CfgDaten['subtitle']['text']= "Zeitraum: %STARTTIME% - %ENDTIME%";     // "" = Automatisch über Zeitraum
    $CfgDaten['subtitle']['Ips']['DateTimeFormat']= "(D) d.m.Y H:i";             // z.B.: "(D) d.m.Y H:i" (wird auch als Default herangezogen wenn nichts konfiguriert wurde)

    // Zeitraum welcher dargestellt werden soll
//    $CfgDaten['StartTime'] = mktime(0,0,0, date("m", time()), date("d",time())-3, date("Y",time())); // ab heute 00:00 Uhr
//    $CfgDaten['EndTime'] = mktime(23,59,59, date("m", time()), date("d",time()), date("Y",time())); // ab heute 23:59 Uhr, oder //$CfgDaten['EndTime'] = time();   // = bis jetzt


    // damit wird die Art des Aufrufes festgelegt
    $CfgDaten['RunMode'] = "script";     // file, script oder popup

//    $CfgDaten['tooltip']['formatter'] = "@function() {return false;}@";
    $CfgDaten['tooltip']['formatter'] ="";
    $CfgDaten['tooltip']['valuePrefix'] = "";
    $CfgDaten['tooltip']['useHTML'] = true;
    $CfgDaten['tooltip']['xDateFormat'] = "%Y-%m-%d %H:%M";

    // Definition Y-Achsen
    $CfgDaten["yAxis"][0]['title']['text'] = "kw/h";
    $CfgDaten["yAxis"][0]['Unit'] = "kw/h";
    $CfgDaten["yAxis"][0]['opposite'] = false;
    $CfgDaten["yAxis"][0]['tickInterval'] = 0.2;
    $CfgDaten["yAxis"][0]['min'] = 0;
    $CfgDaten["yAxis"][0]['max'] = 4;


    // series
    $serie = array();
    $serie['Id'] = 16455 /*[Allgemein\Energy\Elektrozähler\Stromverbrauch]*/;
    $serie['name'] = "kw/h";
    $serie['Unit'] = NULL;
    $serie['ReplaceValues'] = false;
    $serie['RoundValue'] = 1;
    $serie['type'] = 'column';
    $serie['step'] = false;
    $serie['yAxis'] = 0;
    $serie['shadow'] = true;
    $serie['lineWidth'] = 1;
    $serie['states']['hover']['lineWidth'] = 2;
    $serie['marker']['enabled'] = false;
    $serie['marker']['symbol'] = 'circle';
    $serie['marker']['states']['hover']['enabled'] = true;
    $serie['marker']['states']['hover']['symbol'] = 'circle';
    $serie['marker']['states']['hover']['radius'] = 4;
    $serie['marker']['states']['hover']['lineWidth'] = 1;
    $serie['tooltip']['valueSuffix'] = " kw/h";
    $CfgDaten['series'][] = $serie;


	// Highcharts-Theme
	//	$CfgDaten['HighChart']['Theme']="grid.js";   // von Highcharts mitgeliefert: dark-green.js, dark-blue.js, gray.js, grid.js
	$CfgDaten['HighChart']['Theme']="ips.js";   // IPS-Theme muss per Hand in in Themes kopiert werden....

	// Abmessungen des erzeugten Charts
	$CfgDaten['HighChart']['Width'] = 0; 			// in px,  0 = 100%
	$CfgDaten['HighChart']['Height'] = 600; 		// in px

	// -------------------------------------------------------------------------------------------------------------------------------------
	// und jetzt los ......
	$s = IPS_GetScript($CfgDaten['HighChartScriptId']); 	// Id des Highcharts-Scripts
	include($s['ScriptFile']);

  	// hier werden die CfgDaten geprüft und bei Bedarf vervollständigt
	$CfgDaten = CheckCfgDaten($CfgDaten);

	// abhängig von der Art des Aufrufs -> json String für Highcharts erzeugen
	if (isset($CfgDaten['RunMode'])
		&& ($CfgDaten['RunMode'] == "script" || $CfgDaten['RunMode'] == "popup"))
	{
		// Variante1: Übergabe der ScriptId. Daten werden beim Aufruf der PHP Seite erzeugt und direkt übergeben. Dadurch kann eine autom. Aktualisierung der Anzeige erfolgen
		if ($IPS_SENDER != "WebInterface")
		{
			WriteContentWithScriptId ($CfgDaten, $IPS_SELF);     		// und jetzt noch die ContentTextbox
			return;                                               	// Ende, weil durch die Zuweisung des Script sowieso nochmals aufgerufen wird
		}

		$sConfig = CreateConfigString($CfgDaten);             		// erzeugen und zurückgeben des Config Strings
	}
	else
	{
		//Variante2: Übergabe des Textfiles. Daten werden in tmp-File gespeichert. Eine automatische Aktualisierung beim Anzeigen der Content-Textbox erfolgt nicht
		$sConfig = CreateConfigString($CfgDaten);             		// erzeugen und zurückgeben des Config Strings

		$tmpFilename = CreateConfigFile($sConfig, $IPS_SELF);     	// und ab damit ins tmp-Files
		if ($IPS_SENDER != "WebInterface")
		{
			WriteContentWithFilename ($CfgDaten, $tmpFilename);   	// und jetzt noch die ContentTextbox
		}
	}



?>

Hi Horst,

hier kollidieren Deine Einstellungen „Serienübergreifende Einstellung für das Laden von Werten“ und „AggType“ miteinander. Ich komme hier auch immer wieder ins Schleudern, kann die also nicht auf Anhieb sagen, welche Einstellung korrekt ist. Vielleicht versuchst Du zunächst, die AggTypes auszukommentieren und bleibst bei den „Serienübergreifende Einstellung für das Laden von Werten“.
Alternative wäre, alle „Serienübergreifende Einstellung für das Laden von Werten“ auf Werte > der Betrachtungsperiode zu setzen und nur über AggType zu arbeiten.

Danke Raketenschneke,

bekomme es im Augenblick nicht hin :o

Ich mach für heute schluss, muss ich mich erstmal auf 2 Tage Meeting vorbereiten.

Horst zu Deinen Einstellungen:



    $CfgDaten['AggregatedValues']['HourValues'] = 1;      // ist der Zeitraum größer als X Tage werden Stundenwerte geladen
    $CfgDaten['AggregatedValues']['DayValues'] = 7;       // ist der Zeitraum größer als X Tage werden Tageswerte geladen
    $CfgDaten['AggregatedValues']['WeekValues'] = 31;      // ist der Zeitraum größer als X Tage werden Wochenwerte geladen
    $CfgDaten['AggregatedValues']['MonthValues'] = 90;      // ist der Zeitraum größer als X Tage werden Monatswerte geladen
    $CfgDaten['AggregatedValues']['YearValues'] = 365;          // ist der Zeitraum größer als X Tage werden Jahreswerte geladen
    $CfgDaten['AggregatedValues']['NoLoggedValues'] = 1000;     // ist der Zeitraum größer als X Tage werden keine Boolean Werte mehr geladen, diese werden zuvor immer als Einzelwerte geladen    $CfgDaten['AggregatedValues']['MixedMode'] = false;     // alle Zeitraumbedingungen werden kombiniert
    $CfgDaten['AggregatedValues']['MixedMode'] = false;

Zum einen hast Du definiert dass der MixedMode = false ist.
Daher gilt folgende Systematik: Es wird die Zeitdifferenz zwischen Deinem Start und Endzeitpunkt des Charts errechnet. Ist dieser Zeitraum größer als der Wert in HourValues eingestellt - also bei dir mehr als 1 Tag werden Stundenwerte verwendete. Ist der Zeitraum größer als DayValues (bei Dir 7 Tage) werden Tageswerte eingelesen. usw…

Dein vorgewählter Zeitraum (30.4 -7.5) ist also 7 Tage. Daher greifen noch die Einstellung >1 Tag (für Stundenwerte) aber nicht > 7 Tage (für Tageswerte). Dadurch werden bei dir die Stundenwerte angezeigt…

Grüße KHC

Hi, ich versuche gerade meine v1.05 Scripte auf v2.0 zu migrieren und verzweifle an der X-Achse. Als Chartart ist column ausgewählt und er soll mir Monatswerte anzeigen. Das macht er mit dem neuen und mit dem alten Skript. Allerdings ist die X-Achse beim neuen Skript nicht in Monaten, sondern in Tagen. Ich krieg es einfach nicht weg und weiß nicht was ich einstellen muß :frowning:

@DeejayT

poste deinen ConfigScript . Am besten den alten und den neuen.
Und am besten einen Screenshot was falsch ist, ich versteh dein Problem nicht so wirklich.

KHC

@khc,

also ist bis auf das „false“ im MixMode alles richtig?

$CfgDaten['AggregatedValues']['HourValues'] = 1;      // ist der Zeitraum größer als X Tage werden Stundenwerte geladen 
$CfgDaten['AggregatedValues']['DayValues'] = 7;       // ist der Zeitraum größer als X Tage werden Tageswerte geladen 
$CfgDaten['AggregatedValues']['WeekValues'] = 31;      // ist der Zeitraum größer als X Tage werden Wochenwerte geladen 
$CfgDaten['AggregatedValues']['MonthValues'] = 90;      // ist der Zeitraum größer als X Tage werden Monatswerte geladen 
$CfgDaten['AggregatedValues']['YearValues'] = 365;          // ist der Zeitraum größer als X Tage werden Jahreswerte geladen 
$CfgDaten['AggregatedValues']['NoLoggedValues'] = 1000;     // ist der Zeitraum größer als X Tage werden keine Boolean Werte mehr geladen, diese werden zuvor immer als Einzelwerte geladen    
$CfgDaten['AggregatedValues']['MixedMode'] = true;

@hbraun
mit oben aufgeführten Einstellungen - MixedMode = True würdest Du folgendes erreiche:

  • Bei den aktuellsten Werte wird jeder einzelne Werte angezeigt
  • ab einem Tag Stundenwerte,
  • ab dem 8.ten Tag (1+7) Tageswerte,
  • ab dem 38.ten Tag (8+31) Wochenwerte, usw.

Grüße KHC

Danke khc,

das mit dem MixMode (naja MixMode sagt ja eigentlich auch schon was aus) habe ich vorhin bemerkt, muss jetzt wohl nur die, für mich, optimale Einstellung finden.

Danach werde ich mich an die Farben trauen :rolleyes: