Q&A Highcharts - Multigraph V1.0

leider gibts dafür keinen Parameter im Config-Script. Ich habs bei mir so gelöst (im Hauptscript):


// Variablenwert auslesen
				$val = $value[$valStr];
				$val = round($val, 2); // rundet auf n Nachkommastelle(n)

Ich wollte eine Verbrauchskostenübersicht (Strom, Gas, Wasser) und brauchte für die Werte daher ein Skalierungsfaktor zur Umrechnung in Euronen.

So geht’s: Im Highcharts 1.005 Skript ab Zeile 575 (nach ReplaceValues) folgendes einfügen:

// Skalierungsfaktor: Variablen umberechnen (bspw. Verbrauch in € oder Gas m³ zu kWh)
  if (isset($Serie["ScaleFactor"]))
  {$val = $val * $Serie["ScaleFactor"];}

Vorsicht: Wenn man Script statt File benutzt muß das auch in C:\IP-Symcon\webfront\user\Highcharts geändert werden!

Jetzt steht pro Series die Option „ScaleFactor“ zur Verfügung. Der geloggte Wert wird stur mit dem übergebenen Wert multipliziert. Hier ein Beispiel für eine Series, welche den Stromverbrauch von kWh in Euro umrechnet:

$CfgDaten["Series"][] = array("Id"=>38752, "Name" =>"Strom",	"Unit"=>"EUR", "AggType"=>$AggType, "ReplaceValues"=>false, "ScaleFactor"=>.2015, "Param" =>"type:'column', step:false, yAxis: 0, shadow: true,lineWidth: 1 , states: {hover:{lineWidth: 2}}, marker: { enabled: false, states: { hover: { enabled: true, radius: 4}}}");

Hallo,

Ich glaube, was gefunden zu haben ( im Config-Script ):

„// ReplaceValues: false = Werte werden wie geloggt übernommen“

hab den mal testweise auf „true“ gesetzt und nun werden die Daten von Luftfeuchte & Stellwert ohne Nachkommastellen und die von IST-/SOLL-Temperatur mit 1 Nachkommastelle anzeigt.
das ist genau das was ich wollte.

Allerdings funktioniert das ganze noch nicht mit den Werten vom Server, Speicher- und Festplattenauslastung. Da werde ich mal deinen Vorschlag probieren

Tuxtom, die vielen Nachkommastellen in den Tooltipps enstehen wohl durch Aggregieren der Werte. Ich habe analog zur Skalierung http://www.ip-symcon.de/forum/f52/q-highcharts-multigraph-v1-0-a-14240/index43.html#post156024 Highcharts um eine Rundungsfunktion erweitert. Und so geht’s:

Im Highcharts 1.005 Skript ab Zeile 575 (nach ReplaceValues) folgendes einfügen:

// Roundvalues
if (isset($Serie["RoundValues"]))
	$val = round($val, $Serie["RoundValues"]);
// Ende Roundvalues

Achtung: Wenn man Script statt File benutzt muß das auch in C:\IP-Symcon\webfront\user\Highcharts geändert werden!

Jetzt steht pro Series die Option „RoundValues“ zur Verfügung. Der geloggte Wert wird mit dem übergebenen Wert gerundet. Übergibt man 2, bekommt man also genau 2 Nachkommastellen. Hier noch ein Beispiel für eine Series:

$CfgDaten["Series"][] = array("Id"=>38752, "Name" =>"Strom", "Unit"=>"EUR", "AggType"=>$AggType, "ReplaceValues"=>false, 
"RoundedValues"=>2,"ScaleFactor"=>$StromPreis,"Param" =>"type:'column', step:false, yAxis: 0, shadow: true,lineWidth: 1 , states: {hover:{lineWidth: 2}}, marker: { enabled: false, states: { hover: { enabled: true, radius: 4}}}");

Danke & Gruß,
Axel

hi axel,
prima Lösung. Die Nachkomastellen als Parameter zu übergeben ist optimal. Ich habs noch nicht eingebaut, werds aber bei mir übernehmen.
was ist, wenn keine Nachkommastellen übergeben werden (z.B. noch nicht angepasste Config-Scripte)? Wäre nicht schlecht, wenn die If-Bedingung darauf reagiert

Hallo,

@axelp
Jetzt verstehe ich deinen Beitrage erst, sorry.
Ich schaus mir mal an, da ich nächste Woche eh mal anfangen wollen, mein komplette Webfrontend umzubauen und neu einzurichten, da wird es auch eine Änderung der Highcharts geben.
Werde auch jeden fall schon mal in meiner Wiki verewigen - danke dafür.

Aktuell funtkioniert es so, wie ich oben beschrieben habe, die Werte von Temperatur, Stellantriebwert und Luftfeuchte bei den Heizungsgraphen sind o.k. mit max. 1 Nachkommastelle bei der Temperatur, die anderen ganz ohne.

Bei den Server-Werte funktioniert die Lösung von Raketenschnecke auch gut, siehe Screenshot.

Ich nutze für Plattenplatz und Speicherauslastung die „Sys_Get“ Funktionen, da müsste man dann direkt in GByte umrechnen und runden, damit direkt die gerundetet Werte geloggt werden.

Aktuelle fehlt mir noch so das PHP-Knowhow mich, da mal intensiv mit zu beschäftigen.

Danke und Grüsse

Thomas

Screen1.jpg

Vorschlag:


$datei 					= "c:\IP-Symcon\db\logging.db";
$ips_db_groesse_id 	= 37214 /*[IPS Maintenance\Systemstatus\IPS-Statistik\IPS-DB Größe]*/ ;

// DB-Grösse herausfinden
$groesse = filesize("$datei");
$groesse = $groesse/1024/1024;
$groesse = round($groesse, 2);

// DB-Werte in Var schreiben
setValueFloat($ips_db_groesse_id, $groesse);


Hallo Raketenschnecke,

Wenn die Option für eine Series nicht definiert wurde, dann bekommt man eben die Standardwerte. RoundValues ist optional und quasi Abwärtskompatibel (isset lautet das „Zauberwort“ im Code).

Danke & Gruß
Axel

ich hab inzwischen meine Scripte „migriert“ (übrigens gibts oben imPosting noch einen Typo-Fehler: im unteren Code-Fenter steht „RoundedValues“=>2, müsste heißen „RoundValues“=>2). Was ich meinte, wäre einen Standard-Wert anwenden, wenn der Parameter nicht übergeben wird. Sinnvoll scheint mir hier 0 der 2 Nachkommastellen

Macht eine Standard-Rundung wirklich Sinn? Wäre eine simple Else Anweisung gegenüber isset.

Wirklich Typo? Ich hatte Copy&Paste aus einem meiner Skripte gemacht, die Series bestehen ja aus 2 Zeilen…

weil die Frage hier des Öfteren auftauchte: HighCharts unterstützt seit V 2.2.0 auch (eingeschränkt) Android < 3.0
Ich hab gerade V 2.2.1 auf meinen Server gepackt und bisher keine Probleme feststellen können.

Werner,

könnte sein, dass das die Lösung ist (habs aber noch nicht ausprobiert)

kaum sucht man was, findet man auch was. Nur nicht das, was ich suche.
Nochmal Werner:
eine weitere Möglichkeit, eigenen Text/Werte einzublenden, sind die „credits“.
Allerdings lässt sich das Feld scheinbar nicht formatieren (Zeilenumbruch)

HC mit Customized-Credits.PNG

… oder man macht es so:

:D:D:D

Hallo Erklärbär,

könntest Du mir bitte die Erweiterung der Legende zukommen lassen wo die aktuellen Werte mit angezeigt werden.

Werner,

Bist du sicher, dass ich es hier einstellen soll - oder besser per PM?

mit gebücktem Gruss
Raketenschnecke
(via Tapatalk & on the Road )

Mir persönlich reicht es auch per PM abe vielleicht will auch jemand anderes deinen Workaround.

Grüße via Tapatalk ob the Terrasse :slight_smile:

ok, ich pack’s mal hier rein. Dann haben wir alle was zum Lachen :smiley:
eigentlich wollte ich die Erweiterung nur gegen Vergütung weitergeben - schließlich steckt da eine sehr aufwändige, intellektuell anspruchsvolle Entwicklertätigkeit dahinter.

gut, nun zum Code (alles im Config-Script):

  1. aktuelle Werte aus den IPS-Variablen holen und im Script einer var zuweisen:

// Legende - aktuelle Werte zuweisen
$Sonnenstand_Ist        = round(getValueFloat(38123 /*[Astro-Script\Sonnenstand\Sonnenstand\Elevation]*/ ), 2);
$Helligkeit_Ist         = getValueInteger(37806 /*[Wetterdaten RS.loc\Thies Clima D\Helligkeit\Meßdaten\Helligkeit]*/ );
$UVIntensitaet_Ist      = round(getValueFloat(57940 /*[Wetterdaten RS.loc\Thies UV-Sensor (6017 CH01)\Meßdaten\UV-Intensität]*/ ), 2);

  1. Legenden-Text zusammen bauen und einer Var zuweisen (Beispiel: Helligkeit):

$chart_var2_id = 37806 /*[Wetterdaten RS.loc\Thies Clima D\Helligkeit\Meßdaten\Helligkeit]*/;
$chart_var2_name = "Helligkeit (".$Helligkeit_Ist." lux)";
$chart_var2_unit = "lx";
$chart_var2_yAxis = 1;

3.Legendentext in die Serie einbauen


$CfgDaten["Series"][] = array("Id"=>$chart_var2_id, "Name" =>$chart_var2_name, "Unit"=>$chart_var2_unit,
	"AggType"=>1, "RoundValues"=> 0 , 	"ValueType"=>'Avg', "ReplaceValues"=>false,
	"Param" =>"type:'spline', step:true, yAxis: $chart_var2_yAxis, visible: true, color: '#FFAA00',shadow: true, lineWidth: 1,
		states: {hover:{lineWidth: 2}}, marker: { enabled: false, states: { hover: { enabled: true, radius: 4}}}");

… und Button „Ausführen“ nicht vergessen

@Werner: jetzt bitte Kinnlade wieder hochkurbeln (Stichwort: fehlendes Semikolon)
:D:D:D

Nach dem ich meine Kinnlade wieder hochgekurbelt hatte und die Komplexität dieses intellegtuellen Skriptes verstanden hatte darfst Du dich nun auch Intellibär nennen.:wink:

Danke, die einfachsten Sachen sind die Besten.

Wohin soll ich überweisen :smiley:

geht mir auch so. Überweise dich selbst am 19. an Rainer, das reicht!
:smiley: